Version History

v1.0.46 - User Management Permissions Refactoring & Nudger 3-Mode Selector

  • 3-Mode Nudger Access Control: Replaced the separate Nudger Admin and Nudger Viewer checkboxes in the user editor modal with a single dropdown menu labeled Nudger Access ("No Access", "View Nudger", and "Manage Nudger"). Updated the frontend logic to map these selection values to database properties, update status badges on the user listings, and dynamically hide the Nudger sidebar link for users with no access.
  • Pixel Manager Sidebar & Button Hiding: Repositioned the Pixel Manager sidebar navigation button above the Analytics button in the main layout. Updated renderPixels to hide the "+ Create Pixel" button and the "Edit" and "Delete" action buttons for users without permission to manage pixels (instead of displaying a "Read-Only" label).
  • Checkout Creator Button Visibility Fix: Added id="btnCreateCheckout" to the "+ Create Checkout" button in the Checkouts layout, enabling JavaScript to successfully find and hide the creation button for checkout viewers.
  • UI Role Restriction for Superadmins: Removed is_superadmin bypass overrides for pixel/checkout/route manager capability checks in the frontend UI. This allows superadmins who explicitly disable their own manager permissions to experience and test the read-only viewer mode.
  • Superadmin Authorization Bypass Fix: Patched the backend Hono global middleware to ensure users with is_superadmin status bypass permission checking for pixels, checkouts, and analytics endpoints, preventing 403 Forbidden errors.
  • SQL Migration: Created the migration file 0013_qabot_test_queue.sql to provision the qabot_test_queue table in production, enabling the QA Bot test scheduling queue engine to function outside the local environment.
  • QA Runner MCP Tool: Added the setup_qa_runner_skill MCP tool to the Admin MCP router inside mcpRouter.js. This tool returns a detailed step-by-step system instruction prompt to instruct external Claude agents to run the automated QA testing queue loop.
  • QA Scheduler Draining and Auto-Recycle Loop Fix: Patched submit_qa_test_result to transition finished test routes to a 'completed' status to prevent infinite single-route looping. Modified get_next_qa_test_route to automatically recycle all 'completed' routes back to 'pending' when no pending routes remain, enabling continuous loop testing for decentralized runners. Added the reset_qa_test_queue tool to manually reset the queue status back to pending at any time.
  • Searchable Dropdown Input Fix: Fixed the route search input behavior in qabot/public/app.js where it aggressively reset the user's typed search text back to the active route path during typing/deletion. Added auto-selection of text on input focus, automatic text reversion to the selected route path (or empty) when clicking outside without selecting, and full keyboard arrow-key navigation (ArrowDown, ArrowUp, Enter, Escape) to navigate and select options inside the dropdown list.
  • Tab Layout Height Collapse Fix: Resolved an issue in qabot/public/app.js where switching from "Runs History" back to "Markdown Test" collapsed the editor viewport height. Fixed by changing the element display override to display: flex instead of display: block to keep the layout expansion.

v1.0.45 - Move Copy Production Routes Logic to Aegis Admin

  • Relocated Copy Production Routes: Moved the "Copy Production Routes Locally" button and modal from the QA Bot workspace into the Aegis Admin Panel under the super admin user dropdown. Restricted visibility of the Copy button to super admins on local environments. Integrated the import fetch request with automatic datagrid refreshing using loadData().
  • Backend Sync Endpoint & Variables: Added the POST /api/proxy-export-config endpoint to the admin worker backend (restricted to superadmins). Configured the local secret PROD_SYNC_TOKEN in admin/.dev.vars, and declared PROD_ADMIN_API_URL and PROD_ROUTER_URL variables in admin/wrangler.toml and admin/wrangler.dev.toml to authorize configuration exports from production.

v1.0.44 - QA Bot Runs History Tab UI & Environment Routing Fixes

  • Runs History Tab UI Fix: Resolved the issue where the Runs History tab (#resultsTabBtn) was disabled/greyed out in the QA Bot dashboard UI. Modified qabot/public/app.js to call enableResultsTab() during initial load in initApp() if a route_id query parameter is present, when a route is selected from the searchable dropdown list, or when a route is imported from production. Added disableResultsTab() triggers when the route selection is explicitly cleared (either by clicking "-- All Tests (No Route) --" or clearing the search input text completely).
  • Runs History Environment Proxy Routing Fix: Fixed an issue where the runs history list would show "No runs recorded yet" or fail because the frontend was requesting /api/qabot/runs and /api/qabot/runs/:id without the env parameter. Added ?env=${currentEnv} to both fetches in qabot/public/app.js to ensure the proxy worker routes requests to the correct Admin environment (production vs local) holding the reports database.

v1.0.43 - Edge Router Hydration, Image Proxy, & Routing Loop Fixes

  • TanStack Router Base Path Hydration Fix: Resolved a fatal Invariant failed crash on TanStack Start/Router routes (such as /scent-discovery-quiz/). Updated router/src/index.js to catch and replace empty basepath declarations (basepath:"" or basepath:t="") with basepath:window.__BASENAME__||"" on the client JS bundle. When the proxy injects window.__BASENAME__ = "/scent-discovery-quiz", the client-side router successfully initializes its base path, allowing the browser path to match the root route correctly.
  • Outgoing Proxy Host Header Loop Fix: Resolved internal error crashes on forwarded and fallback requests (like / or /favicon.ico) in the workerd / Miniflare runtime. Programmatically stripped the incoming Host header from all outgoing proxy fetch requests, preventing Miniflare from loopback routing requests recursively back to the local worker.
  • Local Dev Image Compression Proxy Fix: Fixed broken images on proxied routes during local development. Changed the image compression rewriter to construct absolute asset URLs using the original Lovable origin (matchedRoute.origin) instead of the proxy host (url.origin). This enables the public wsrv.nl compression service to successfully fetch and compress the assets from the internet (since it cannot access local dev ports like localhost:8787).
  • React Router Basename Variable Override Fix: Resolved client-side 404 Oops! Page not found rendering errors on standard React Router SPAs (like /csk-hero-bof-new/) when running on local/staging environments. Added a JS bundle rewriter replacing hardcoded hostname checks (window.location.hostname.includes("purdyandfigg")) with true. This forces the router's basename to resolve to the correct proxy subpath (e.g. "/csk-hero-bof-new") on all local/proxied traffic, bypassing any modifications to React Router's internal destructuring syntax to avoid syntax crashes.

v1.0.42 - QA Bot Serverless Migration & Markdown-Based Testing

  • Serverless QA Bot Migration: Re-architected the qabot service from a Node.js/Express app running on Render to a serverless Cloudflare Workers + Hono architecture.
  • Markdown Test Runner Integration: Replaced Playwright .spec.js templates with .test.md Markdown test files. Introduced a secure POST /api/qabot/runs endpoint for Claude test runners to submit execution reports to D1.
  • Runs History Dashboard: Added a "Runs History" tab panel list to the QA Bot frontend dashboard, letting users query past runs, view execution cards, and render runner Markdown reports dynamically in the viewport.
  • Wizard Monitor Configuration Defaults: Updated the route wizards to default new routes to only having ROUTE ACTIVE and PIXEL CHECK audits enabled, and created SQL migrations (0011_qabot_markdown_runs.sql, 0012_update_default_monitor_config.sql) to synchronize the database states.
  • Inactive Route Audit Tooltips: Enhanced the Route Audits modal to visually block and flag the CAP Code Scan using a ⛔️ icon with a tooltip warning if the route is not live (Live Ads disabled), explaining that the compliance scan will not run.
  • CI/CD Cleanup: Removed Render deployment workflows from .github/workflows/deploy.yml and replaced them with Cloudflare Worker deployments for qabot.

v1.0.41 - Route GA expectations Modal Redesign & Ignore Logic

  • Route GA Expectations Modal Redesign: Refactored the split-pane list layout into a single-pane card design with a select dropdown for active GA modules, an "Enabled for Route" checkbox, and a 4-column dynamic expectations elements table ("Data Attribute Name", "Expected Value", "Ignore", "Status") matching the Master GA configuration modal styling.
  • Ignore Column and Playwright Test Filtering: Added an "Ignore" checkbox column to the Route GA expectations table. Checking "Ignore" sets the attribute's expected value to __IGNORE__, disables the expected value input field, styles the attribute name with a line-through, and excludes the attribute from generated Playwright test files in both qabot/public/app.js and admin/src/mcpRouter.js.
  • Change Tracking and Save Auto-Disabling: Implemented change-tracking for the Route GA expectations modal, automatically disabling and ghosting out the "Save & Generate Test" button if the configuration is unmodified, and dynamically enabling it once changes are detected on module enabling, expected value input typing, or attribute ignoring.
  • Cancel Button Integration: Added a "Cancel" button to the left of "Save & Generate Test" in the Route GA expectations modal to discard unsaved configuration adjustments.
  • Synchronized D1 Schema: Verified and updated sql/schema.sql database schema definitions to match all migrations (e.g., ga_framework, route_ga_config, qabot_test_templates, qabot_tests, qabot_test_versions) for seamless database setups.
  • Sign-off and Edit Reference Bug Fix: Resolved a ReferenceError: route is not defined crash in /api/routes/:id/edit. Correctly queried and retrieved the route's store value to compute the live domain for Slack notification logs. Also patched similar missing store fields and undefined references in route lock, archive, and audit-slack endpoints.

v1.0.40 - GA Custom Framework Refactoring & Custom Confirmation Modals

  • Custom Confirmation Modals: Standardized confirm dialogs inside the QABot frontend by replacing native browser confirm() popups with a modern, glassmorphic styled HTML modal (#customConfirmModal) for GA custom framework configuration deletion and Playwright suite version deletion.
  • Backend DELETE API Fix: Patched a critical 500 error on the Express server /api/test/ga-framework/:id endpoint by handling cases where req.body is undefined during fetch DELETE requests from the client.
  • Default GA Framework Seeding: Updated migration_add_ga_framework.sql and the main schema.sql with default database configuration seeds for all 5 GA custom tracking modules (announcement_bar, hero, multi_step_buybox, membership_block, faq).
  • Synchronized D1 Schema: Synced sql/schema.sql to include the test templates table (qabot_test_templates), missing indices (idx_route_ga_config_route, idx_qabot_test_versions_lookup), and template seed data from the individual migration files.

v1.0.39 - QABot Authentication & UserManager Integration

  • User Manager QA Bot Access: Updated UserManager in Aegis Admin to support granular access_qabot checkbox control in the Edit/Create User modal.
  • SQL Migration: Created and executed sql/migration_add_qabot_access.sql to alter users table and grant QABot access permission to all existing superadmins.
  • Granular Launch Button Control: Configured the Aegis routes table to only display the πŸ€– QA Bot launch button to users possessing is_superadmin or access_qabot permissions.
  • QABot Session & Auth Middleware: Secured the QABot backend with /api/login and /api/logout endpoints, session storage, and path-interception middleware checking the qabotToken cookie.
  • QABot Card-Style Login UI: Designed and integrated a secure card-style login overlay modal in the QABot frontend matching the Nudger design aesthetics.
  • Global Fetch Interceptor: Overrode global window.fetch to catch 401 Unauthorized responses and force-redirect users to the login screen immediately.
  • Admin Profile Dropdown Username Display: Added a dedicated user status header inside the Aegis Admin profile dropdown to clearly identify the active logged-in user.
  • User Wizard UX Improvements: Configured the user wizard modal overlay to automatically close upon successful submission, and standardized button labels to display "Create User" for new creations and "Save User" for editing existing accounts.
  • Aegis-to-QABot SSO Auto-Login: Engineered a Single Sign-On (SSO) bridge passing the active Aegis session token in URL parameters when launching QABot, enabling QABot to auto-authenticate users and bypass the login prompt seamlessly.
  • Admin Favicon Integration: Configured native favicon support for Aegis Admin by embedding the logo markup tag in the page template and establishing a backend redirect routing /favicon.ico directly to the active logo resource.
  • User Wizard Bug Fix: Fixed a client-side crash (TypeError: Cannot read properties of null) occurring when opening or closing the User Wizard by adding a safe existence check for the legacy cancel button element (cancelUserEditBtn).
  • SSO Session Revocation Sync: Configured QABot backend to dynamically cross-verify the Aegis Admin session token against Aegis Admin API during active requests. Logging out from Aegis Admin instantly terminates active QABot sessions and forces the user to the login screen.

v1.0.38 - QABot MCP Tools & Claude Integration

  • QABot MCP Tools Integration: Added three new MCP tools (get_qa_test, create_qa_test, update_qa_test) directly to the Aegis Admin MCP router. These tools enable automated test suite creation (auto-generating route-specific playwright.config.js and blank ga-tracking.spec.js placeholders alongside default.spec.js), version-controlled updates, and setting active test baselines directly in the database.
  • Claude & Cursor Integration URL: Added a second connection details block and copy button in the Integrations tab of the Aegis Admin UI, displaying the root MCP URL (https://aegis.purdyandfigg.dev/api/mcp) for connecting general AI agents with administrative and QA capabilities.
  • Superadmin Local Privileges: Upgraded developer database initialization and profile cache handling, enabling easier access to administrative tabs (like App Tokens) in local development setups.

v1.0.37 - QABot Version Synchronization & Suite UI

  • Pre-Flight Monitor Integration: Natively tied the QABot testing suite into the central Aegis Monitor engine. Added a dynamic Pre-Flight Monitor UI block that parses the route's monitor_config to explicitly run required pixel and health checks before executing the Playwright browser tests, automatically aborting the test suite if upstream monitor health checks fail.
  • Suite Versioning Consolidation: Overhauled the QABot frontend to treat playwright.config.js, ga-tracking.spec.js, and default.spec.js as a unified testing "Suite." Replaced individual file version trackers with a single master suite controller, strictly synchronizing all three files via simultaneous API calls to guarantee configuration alignment.
  • SQLite D1 Type Affinity Fix: Resolved a critical SQLite type-casting bug in the Admin D1 Database where the proxy was writing versions to an integer route_id but attempting to read them using a text 'route_id', causing silent version desynchronization. Fully patched both the GET and POST endpoints to aggressively cast parameters to integers.
  • New Version Extraction Bug: Patched a 500 Internal Server Error in the POST /api/qabot/tests endpoint by properly extracting the version property from the incoming JSON payload prior to database insertion.
  • QA Bot Branding: Reverted the large Aegis shield logo on the QABot interface to exactly match the native πŸ€– QA Bot styling found in the primary Aegis Admin navigation menu.

v1.0.36 - QABot Integration & Analytics Pausing

  • QA Automation Engine: Integrated a comprehensive qabot QA automation environment powered by Playwright and Monaco Editor, hosted seamlessly on Render.
  • Dynamic Dashboard Routing: Implemented environment-aware dynamic QA Bot linking natively across the Admin Dashboard (aegis.purdyandfigg.dev) and Nudger toolkits.
  • Analytics Sandbox Flags: Architected a centralized DRY_RUN and STORE_LOCALLY telemetry pausing mechanism inside the Cloudflare analytics worker to prevent live data pollution during QA testing.
  • Dashboard UI Overhaul: Overhauled the Admin Dashboard's Data Visualization layer to natively read analytics environment variables and instantly trigger a blurred "Analytics Disabled" modal overlay when live statistics are paused...

v1.0.35 - Dashboard UI & Analytics Overhaul

  • Sidebar Reorganization: Reordered the sidebar navigation menu to prioritize Analytics and Uptime Monitor above Pixel Manager and User Manager.
  • Full-Width Layout & Typography: Removed rigid max-width constraints so tables dynamically expand to fill the entire browser window. Stripped out redundant card subheaders ("Routes", "System Users") for a much cleaner, cohesive aesthetic.
  • Granular Session Tracking: Replaced generic KPI cards with highly specific timeframes: Total Sessions (Today, This Week, 30 Days, This Year, All Time).
  • Historical Data Integration: Added a permanent base offset of 12,662,051 sessions natively into the "This Year" and "All Time" counters to accurately reflect historical traffic prior to the analytics module rollout.
  • Live Routes Fix: Corrected a Dashboard bug where live routes were returning 0 due to an incorrect boolean evaluation (is_active vs active), successfully restoring the live tally.
  • Optimized Analytics Backend: Engineered a brand new /api/analytics/dashboard endpoint leveraging highly efficient, single-pass SQLite aggregations across the different time blocks.
  • Interactive Trend Chart: Deployed a glowing blue Chart.js "Sessions Trend (Last 30 Days)" line chart natively onto the main Dashboard overview, surfacing immediate visual insights upon login without requiring a tab switch.
  • Lovable MCP Integration: Upgraded the internal model context protocol to seamlessly interface with the Lovable MCP, enhancing automated deployment tracking and cross-service communication for Lovable builds.
  • Extensive Monitoring & Debugging: Upgraded the standalone monitor and visual-monitor modules to provide deep systemic telemetry, real-time error tracing, and extensive debugging capabilities across all deployment environments.

v1.0.34 - CI/CD Optimization & Modal UX

  • Shopify CDN Asset Injection Engine: Ripped out the legacy Base64 inline-asset compiler limit for Shopify deployments to solve bundle bloat and 500KB file-size limits. Engineered a completely custom CI/CD script (externalise-assets.mjs) that automatically hooks into the Shopify Admin GraphQL API to dynamically upload compiled Vite images to the global Shopify CDN. It then aggressively parses the raw .js and .css Vite chunks, running a sweeping string-replacement to swap out local /assets/... paths with the live cdn.shopify.com/... URLs prior to pushing the theme!
  • Shopify Image Caching (CI/CD Optimization): Implemented GitHub Actions Cache (actions/cache@v3) within the deploy.yml pipeline. Engineered a uploaded-images.json state map inside externalise-assets.mjs to dynamically memorize Vite content hashes. This strictly prevents the CI runner from blindly re-uploading identical images to the Shopify CDN across deployments, drastically slashing CI build times for media-heavy landing pages.
  • Shopify Themes Searchable Dropdown: Ripped out the overly aggressive nativegit branch HTML5 <datalist> for the Shopify Theme ID selector in the Promote modal. Engineered a fully custom, accessible floating search-dropdown component in Vanilla JS that instantly filters by both Theme Name and ID simultaneously.
  • Live Origin Domain Parsing: Fixed a UI gap where the active Shopify deployment origin was displaying the internal shopify://route proxy URI. Engineered a real-time environment parser that perfectly translates the internal string into the fully qualified public domain (e.g. staging-purdy-global.myshopify.com or purdyandfigg.com), making the live origin fully clickable natively inside the deployment modal and main dashboard table.
  • Build Sequence UX Stability: Removed frontend layout rules that abruptly hid the "Current Active Origin" metadata block when clicking "Force Provision & Build". The target deployment topography now stays visibly locked in place while the CI/CD pipeline streams its logs.

v1.0.33 - UI & UX Dashboard Overhaul

  • Origin Column: Replaced plain text host names with clean brand SVG icons (Shopify, Cloudflare). Upgraded the URL and action links into a clean, minimalist row of icon buttons (🌐 View Origin, ✏️ Edit Lovable Project, πŸš€ Set Origin) with rich tooltips.
  • Store Column: Replaced colored text badges (UK / US) with large flag emojis (πŸ‡¬πŸ‡§ / πŸ‡ΊπŸ‡Έ).
  • Pixels Column: Completely overhauled pixel tracking display. Instead of text pills, the dashboard now renders a dynamic row of SVG brand icons for every globally registered pixel (Meta, TikTok, Google, Snapchat, etc.). Icons are visually ghosted if not assigned to the route, and fully opaque if they are.
  • Status Column:
    • Replaced bulky 'Active/Inactive' text pills with sleek 🟒 / πŸ”΄ dot indicators with tooltips.
    • Replaced "Missing Sign-Offs" text with a row of 4 role icons (πŸ‘€ Author, πŸ“ˆ Growth, πŸ’» Tech, πŸ€– AI) wrapped in a dynamic, rounded border (Green if fully signed off, Red if missing) and separated from the final βœ… / ❌ status icon by a vertical divider.
    • Reordered the Live Timer to sit cleanly below the sign-off row and updated its logic to persistently show historical data ("Was live for [time]") when a route is inactive.
  • Preview Images: Upgraded the screenshot API fallback image to gracefully display the Aegis shield logo natively, removing the gray background and border, and disabled zoom interactions for fallback images.
  • Edge Router Path Normalization: Fixed a critical URL concatenation bug in the proxy router that was injecting double slashes (//) into asset paths when reverse-proxying Lovable builds. The edge router now safely normalizes origins and sub-paths, completely eradicating 404 Not Found errors for nested CSS, JS, and image assets.

v1.0.32

  • Shopify D1 Database Caching: Engineered a robust local caching layer using Cloudflare D1 (shopify_cache table) for storing Shopify product and discount payloads. This completely eliminates 403 WAF blocks when the Admin UI or MCP agents fetch the store catalogues.
  • Automated Catalog Syncing: Implemented a scheduled Cloudflare Worker event that silently synchronizes both the US and UK Shopify catalogs in the background every midnight.
  • Manual Cache Controls: Injected a new "Sync Shopify Data" administrative action directly into the Checkouts panel of the UI, allowing teams to instantly override the cache locally without dropping into the terminal.
  • Payload Token Optimization: Significantly reduced the token context burned by Claude when searching for products. Added an optional query parameter to nudger_checkout_list_products to perform server-side title/handle filtering before returning the JSON dump.
  • Strict Checkout Workflow Enforcement: Explicitly embedded the deterministic step-by-step interactive checkout building workflow (Store -> Product -> Variant -> Selling Plan -> Discount -> Quantity -> Save) directly into the MCP tool schemas, guaranteeing consistent AI interactions.

v1.0.31

  • Interactive QA Bot Setup: Upgraded the QA Bot preview proxy to support point-and-click section setup. Users can now click on any element in the iframe to instantly highlight it and append it to the QA testing checklist as a new action.
  • Smart Section & GA Extraction: Enhanced the click-to-add functionality to intelligently scan the parent section for heading tags (h1-h6, .title) to auto-generate readable section names, and dynamically recursively search for data-tracked="true" attributes to auto-populate GA requirements.
  • QA UI Streamlining: Consolidated the QA configuration row by moving the "Highlight Section (πŸ‘οΈ)" button into the primary summary action bar alongside the directional arrows and trash icons for better spatial consistency.
  • Documentation Overhaul: Created a suite of comprehensive, module-specific User Guides (admin, router, visual-monitor, analytics, compliance-ai, monitor, nudger) housed natively inside the documentation/ folder to standardize onboarding and architectural clarity.

v1.0.30

  • Nudger Checkout Link Automation: Implemented a new 'Checkout Links (from Trello)' QA action within the Nudger automation engine. The system now dynamically fetches exact checkout URLs mapped to Trello custom fields and runs visual validation against live landing pages.
  • Visual Monitor Multi-Link Parsing: Refactored the aegis-visual-monitor headless puppeteer service to securely handle flat arrays of checkout URLs. The QA engine now natively identifies target <a> anchors on live pages, triggers auto-scroll, and captures isolated, targeted screenshots of every checkout button.
  • Strict Custom Field Binding: Upgraded the trello.js data fetching logic to deterministically extract the Checkout URL custom field strictly by its exact internal Trello ID, bypassing legacy fuzzy regex guessing and ensuring 100% accurate link ingestion into the QA bot.
  • Dynamic UX Form Rendering: Enhanced the Nudger QA Dashboard to seamlessly hide configuration dropdowns (Copy Mode, GA Tagging) specifically for the Checkout Link action, and directly injected Trello's captured checkout state into the frontend text-area for instant modification.

v1.0.29

  • Nudger Module Introduction: Engineered and deployed the brand-new standalone aegis-nudger module. This dedicated Cloudflare Worker automates the complete project lifecycle by seamlessly linking Trello board active tracking with Slack notifications, compliance workflows, and time-in-list monitoring.
  • Global Nudger Automation Defaults: Implemented a comprehensive global settings interface natively inside the Admin Dashboard to standardize nudge targets and time-in-list thresholds across all project cards.
  • Dynamic Nudge Rules Engine: Enforced business rules directly into the worker logic to automatically suppress and "ghost out" nudge targets if an action is marked as "Not Required," "Already Provided," or if the card successfully reaches the "Done" list.
  • Asynchronous Slack Tag Rendering: Resolved race conditions in the Nudger configuration modal by natively awaiting Slack user fetching, definitively replacing raw Slack IDs with human-readable names inside the audit UI.
  • Cross-Service MCP Tool Proxying: Supercharged the Admin MCP Router to organically proxy Model Context Protocol tool requests directly into the standalone Nudger worker. Created nudger_card_state, nudger_todo_list_status, and nudger_overall_summary tools so Claude Desktop can natively query live Trello statuses directly through the Admin connector.
  • Secure Internal Service Bindings: Hardened cross-worker communication by binding aegis-nudger directly into the aegis-admin environment variables, routing internal fetches using explicit X-Aegis-Internal bypass headers instead of exposing sensitive PAT tokens.
  • UI UX Enhancements: Refined the Admin Dashboard settings modals by horizontally expanding layouts, adding sticky headers, and injecting interactive "πŸ‘οΈ Show Password" visibility toggles natively into all user and account credential fields.

v1.0.28

  • Checkout Link Builder State Hydration: Fixed a UI bug where the auto-generated Shopify checkout URL preview failed to render when editing an existing route due to hidden <select> elements not resolving their values synchronously. Added DOM stabilization delays and step-triggered generation.
  • Checkout URL Persistance Safety: Resolved a state-loss bug where directly clicking "Save Changes Now" bypassed the wizard's auto-save logic. Injected an asynchronous interception into the form submission to definitively save newly drafted checkouts to the database before committing the route.
  • D1 Checkout ID Return Binding: Refactored the POST /api/checkouts worker endpoint to natively execute a RETURNING id query instead of just yielding a generic success boolean. This guarantees the frontend instantly maps the dynamically created Shopify checkout back to the parent route.
  • Slack Monitor Consolidation: Re-architected the monitor worker to eliminate Slack notification spam. Overhauled the hourly visual drift loop to strictly tally results and output a single aggregated payload: Proxy Monitor Audit {X} passes / {Y} failures ({Z} sites monitored).
  • Global Audit Report Index Page: Engineered a brand new lightweight HTML endpoint at /api/reports that surfaces a unified index of all monitored routes. It dynamically partitions Active, Disabled, and Archived targets, rendering one-click hyperlinks to each URL's most recent visual inspection payload.

v1.0.27

  • Cloudflare Browser Rendering Fix: Fixed a critical wrangler.toml binding syntax error ([browser]) that was silently preventing the production Visual Monitor worker from connecting to the remote Cloudflare headless browser.
  • Route Archiving Safety: Upgraded the POST /api/routes/:id/archive endpoint to automatically set active = 0 whenever a route is archived. This guarantees that disabled routes are fully disconnected from the proxy router, and remain safely disabled if later restored.
  • Visual Audits Dashboard UI: Added a dynamically injected "πŸ“„ View Last Audit" button into the Route Audits modal that appears immediately upon opening if a baseline exists, saving users from re-running full tests just to view the current report.
  • Visual Diff Noise Floor: Overhauled the pixelmatch sensitivity logic to completely eliminate false-positive visual mutations. Increased the sensitivity threshold to 0.2 (to ignore anti-aliasing) and instituted a hard 0.1% screen-area noise floor, mechanically preventing tiny 14px ticker bars or countdown timers from triggering "Content Mutated" alarms.
  • Puppeteer Hang Prevention: Engineered a safety Promise.race timeout wrapper around document.fonts.ready evaluations. This permanently prevents headless browser sessions from hanging infinitely if a Shopify web-font fails to load, successfully eradicating the D1_ERROR: Network connection lost worker timeout crashes.

v1.0.26

  • Developed a comprehensive "No Proxy (Direct Link)" architectural flow inside the Route Configuration Wizard, allowing growth teams to instantly hook native external domains (Shopify, Webflow, Unbounce) into the proxy's pixel-tracking engine without actually proxying the end-user traffic.
  • Overhauled the Admin Dashboard data tables to support generic "N/A (External Origin)" badges for non-proxied routes, preventing hardcoded metadata overlaps when configuring sites outside of the Lovable ecosystem.
  • Upgraded the /api/routes/:id/image-scan endpoint to perform aggressive dual-domain audits. The system now parses the raw Lovable origin side-by-side with the Edge Proxied route, mechanically triggering "Success" UI badges when bloated assets are successfully minimized in real-time by the Edge Router.
  • Refined the compliance dashboard nomenclature by systematically renaming "CAP Code Scan" buttons to "Audit Report" across the entire interface.
  • Built a dynamic Proxy Type categorization filter directly into the table header (All Routes, Proxied Routes, Direct Links) to isolate specific pipeline deployments quickly.
  • Implemented responsive filtering logic that automatically hides the Lovable/Cloudflare specific "Origin Filter" dropdown when users are explicitly querying for "Direct Link" routes.
  • Added retroactive auto-healing to the POST /api/routes/:id/edit endpoint. If a user manually corrects an existing route into a direct link, the database query automatically strips residual lovable_url associations so the dashboard correctly removes the "πŸ’œ Lovable URL" visual badge.
  • Squashed a strict HTML5 validation bug (An invalid form control is not focusable) by precisely managing the required attribute DOM states when toggling between proxy and non-proxy deployment wizards.
  • Enforced standard multi-step sign-off requirements (Growth/Tech) for Native external routes instead of auto-activating them, strictly preserving compliance tracking before any pixels can dynamically fire.
  • Overhauled and fine-tuned the compliance-ai Llama 3 8B prompt engine. Transitioned from a rigid ASA-style rulebook to a minimalist "binary-exists" fact-checking prompt, stopping the model from hallucinating "prominence" and "placement" violations.
  • Injected strict exclusionary definitions into the prompt for "Stylistic Puffery", "Brand Voice", and pre-verified P&F statistics (e.g., "89,200+ reviews", "pH-neutral") to massively reduce false positives.
  • Engineered a programmatic Javascript post-processing "Hallucination Killer" inside the AI worker. This safety layer automatically intercepts the AI's JSON output and forcefully deletes flagged violations for "Advertisement Feature" or "Competitor Name" if the raw HTML text demonstrably contains the correct compliance disclosures.
  • Disabled <script> tag stripping inside the AI's stripHtml() payload generator, granting the model full visibility into dynamically injected React bundle content (like footer disclosures) that were previously invisible.
  • Fully decoupled the AI CAP Scanning logic from the automated hourly Uptime Monitor, transitioning it to a strictly on-demand audit tool. This cleanly contains any future LLM hallucinations within manual "Go-Live" admin workflows rather than disrupting background production systems.
  • Upgraded the automated Uptime Monitor to strictly inherit isNonProxyRoute logic. The monitor now dynamically hits the naked consumer-facing Shopify domain (purdyandfigg.com) for direct links instead of forcing proxy resolution via get.purdyandfigg.com, successfully preventing false-positive 403 Forbidden failures caused by native Shopify bot-mitigation.
  • Refactored the raw R2 Audit HTML generator to natively inject global ENABLE_IMAGE_COMPRESSION deployment statuses directly into the report UI header for faster diagnostic debugging.
  • Built a manual POST /api/routes/:id/audit-slack override endpoint, granting growth teams the ability to instantly broadcast freshly generated CAP Code Audit Reports (and their corresponding R2 URIs) directly into the #ai-landingpages Slack channel via the UI.
  • Redesigned the Admin Audit UI to permanently un-nest the View Detailed Report button from the scrolling violations container, docking it explicitly in the static modal footer next to the Send to Slack deployment action for instant accessibility.
  • Consolidated the legacy "Compliance AI Report" and the "Unified Visual Audit Report" into a single, cohesive dynamic view accessed natively via /api/report/:audit_id.
  • Stripped out obsolete standalone R2 HTML generator logic from the AI cap-scan endpoint to strictly centralize all compliance and visual data inside the dynamic unified UI.
  • Whitelisted the /api/report/ endpoint inside the core Admin authentication middleware, permitting cross-platform clicks (like Slack notifications) to securely view the audit report without mandating an active Aegis Admin dashboard session.
  • Upgraded the visual-monitor Slack notification engine to utilize strict D1 RETURNING id inserts, natively injecting direct clickable View Detailed Audit Report hyperlinks directly into #ai-landingpages visual drift alerts.
  • Migrated the compliance-ai worker off the deprecated Cloudflare Llama 3 and 3.1 Instruct models (@cf/meta/llama-3.1-8b-instruct), transitioning to the recommended tool-calling model Kimi K2.6 (@cf/moonshotai/kimi-k2.6) ahead of the May 30th deadline.

v1.0.25

  • Engineered a brand new standalone page_audit MCP Tool directly inside the Admin Edge Router, granting Claude Desktop the ability to dynamically fetch, scrape, and run AI compliance checks against any arbitrary URL on the internet outside the purview of the local SQLite database.
  • Bypassed global Hono authentication for all /api/mcp endpoints to allow strict mcp-remote connections to actively ping and download the fresh tool manifest without requiring a valid session cookie.
  • Whitelisted all /api/audits/ routes in the core authentication middleware, rendering dynamically generated HTML Site Reports completely public and freely accessible via direct hyperlink clicks from Slack/Claude.
  • Resolved a critical deployment bug where the standalone MCP crawler was triggering SQLite D1 Foreign Key Constraint errors by intentionally stripping dummy route_id properties out of the Llama 3.1 payload, forcing the compliance-ai worker to securely skip organic database insertion logic.

v1.0.24

  • Resolved the 524 Timeout and 9401 Origin loop issues caused by Lovable's strict WAF blocking native Cloudflare Image Resizer IPs by dynamically routing asset URLs through the wsrv.nl external image CDN proxy.
  • Engineered a specialized Javascript payload interceptor to natively rewrite new URL("img.webp", import.meta.url).href Vite bundler resolutions without corrupting the trailing .href string primitive.
  • Hardened the proxy URL generation to mechanically condense arbitrary double slashes (//) within dynamically concatenated origin paths, preventing 404 Not Found rejections from Lovable upstream servers.
  • Wrapped the entire image compression engine behind a dynamic ENABLE_IMAGE_COMPRESSION environment flag deployed via wrangler.toml, allowing growth teams to instantly kill the optimization layer if edge cases arise during testing.

v1.0.23

  • Merged the Model Context Protocol (MCP) Router (mcpRouter.js and /api/mcp) natively into the Admin Worker. This securely exposes SQLite database tools (list_routes, lock_route, unlock_route) allowing the standalone Purdy & Figg Slackbot to query and mutate proxy configurations dynamically via Claude's Custom Connector.
  • Stripped out all obsolete Personal Access Token (PAT) generation UI interfaces and /api/me/pat backend endpoints. Adapted the architecture to align with Claude Desktop's strict connector constraints, which relies on mcp-remote local stdio bridging and static Authorization headers instead of dynamic web UI tokens.

v1.0.22

  • Revamped the CAP Code scan extraction engine to execute strict string literal regex parsing, aggressively stripping out all structural JavaScript boilerplate and noise to drastically improve the AI context window.
  • Upgraded the AI prompt instructions to mandate a deterministic "suggested_fix" JSON property, empowering the Llama 3.1 model to proactively write and suggest compliant marketing copy variations.
  • Overhauled the raw HTML audit outputs into a comprehensive multi-section Site Report.
  • Developed a dynamic media extraction pipeline using custom htmlImgRe and jsImgRe regexes to capture and render every single image asset (PNG/JPG/WEBP/SVG) embedded in the HTML skeleton or buried within the React JS bundles.
  • Hardened the media extraction regex engines to perfectly parse deeply nested URL query strings (e.g., Shopify ?v=123 CDN parameters) while intelligently rejecting trailing JavaScript syntax characters that would otherwise corrupt the asset paths.
  • Embedded an asynchronous HTTP GET scanner into the Site Report generator that aggressively probes every single image URL, manually intercepting and terminating the payload streams to accurately parse the Content-Length headers for real-time asset size calculations.
  • Integrated automated performance flagging that wraps any scraped image exceeding 500KB in a heavy red border with a ⚠️ [SIZE] KB (LARGE) warning badge directly in the Site Report UI to instantly isolate bloated assets dragging down page speeds.
  • Implemented deterministic fallback validation where any AI scan flagging only "Medium Risk" violations gracefully forces a system PASS, bypassing deployment blockers while still rendering a customized βœ… CAP Compliance Passed (With Warnings) modal header containing the itemized risk list.
  • Cleaned up the automated Slack webhooks and UI summaries by removing raw HTML anchor strings and porting them into a beautifully rendered, dedicated "View Detailed Site Report & Images" button at the bottom of the modal via the auditUrl parameter.
  • Re-architected the R2 Bucket URL generation logic to dynamically parse and inject the sanitized route.path directly into the object key filename (e.g., jacket-potato_20_[TIMESTAMP].html), making the raw R2 links significantly more human-readable.
  • Reprioritized the visual hierarchy of the HTML Site Report to prominently hoist the Image Gallery directly underneath the CAP Code scan, and explicitly stripped the <details open> tags to cleanly collapse the massive 30,000+ character raw HTML/JS payloads upon page load.
  • Significantly hardened proxy security by removing the /api/audits/ authentication bypass from the core Hono middleware.
  • Upgraded the admin authentication mechanics to seamlessly deploy a secondary, secure HttpOnly browser cookie upon login. This natively authenticates direct cross-platform navigations (like clicking a Site Report hyperlink directly from Slack) without relying solely on localStorage Bearer tokens.
  • Injected an explicit italicized warning disclaimer directly into the Slack webhook payloads informing team members that they must hold an active session on the admin dashboard to view the locked Site Reports.

v1.0.21

  • Hardened AI Compliance workflows strictly decoupling compliance failures from automated active=0 route disabling mechanisms for already-live pipelines.
  • Integrated a human-in-the-loop manual AI Sign-off Override feature natively inside the Admin Dashboard, mandating explicit justification reasons permanently captured asynchronously inside route_audit_logs.
  • Extracted and safely isolated explicit internal variables natively logging manual intervention (ai_overridden = 1) apart from organic compliance outputs directly onto the internal routes SQLite tables.
  • Reclassified Image Size bounds from triggering systemic critical proxy failing statuses strictly into non-blocking Warning severities seamlessly isolated completely to daily 9AM Slack summaries without halting route traffic.

v1.0.20

  • Supercharged the Image Size Scanner to aggressively perform root-level binary .arrayBuffer().byteLength parsing explicitly when CDN networks dynamically strip standard Content-Length headers, physically eliminating arbitrary CDN logic masking >500k assets payloads.
  • Corrected the universalImgRegex pattern parser organically bypassing strict https:// proxy origins dynamically isolating root /images/ bundles accurately tracking Lovable React UI payload maps.
  • Decoupled SLACK_WEBHOOK variable routing completely out of dynamic payload configuration dependencies, directly mounting generic environments intrinsically inside .dev.vars strings.
  • Integrated a comprehensive suite of Slack Administrative Audit hooks specifically deploying granular pipeline updates natively into the master communications channels to automatically broadcast exact payloads when:
    • Routes are Lock/Unlocked
    • Routes are Archived/Restored
    • A Route is Permanently Deleted
    • A Manual Route Image Audit explicitly fails (>500KB)
    • A Structural Compliance CAP Review fails AI Analysis

v1.0.19

  • Enforced proxy-level zero-leak tracking by dynamically suppressing the internal shopify_page_slug parameter from appending across URLSearchParams fetches during metadata-attached 302 redirects.
  • Engineered an automated checkout validation interceptor (?test) natively triggering the Cloudflare Edge Worker to decode dynamic cart targets and output isolated JSON schemas (variant_id, discount, quantity, selling_plan) enabling completely headless synthetic end-to-end Cypress/Playwright workflows natively skipping heavily bundled native Shopify checkout nodes.
  • Re-architected the Proxy findBestRouteMatch interceptor to robustly decode incoming Referer headers for any 404 falling through to the primary asset pipeline. By analyzing the parent <window> frame, the proxy seamlessly catches arbitrary /landing.html sub-resource fetches natively initiated by unbundled <iframe> tags and forces them back to their origin test servers dynamically without failing over to Shopify origins natively.
  • Developed trailing-slash 302 normalization strictly executing against lovable.app proxy instances. By mechanically verifying that preview environment payloads receive trailing slashes upstream natively on the proxy, React Router v6 cleanly interprets exact directory boundaries (pathname === basename /\/$/) explicitly guaranteeing exact path="/" Index rendering without plunging into wild-card client-side bounds.
  • Added explicit 'GitHub Repository' data modeling seamlessly into the core UI Route Configuration Wizard payload to map specific deployment targets safely to specific URL scopes.
  • Outfitted the Route Origins schema generator natively adding Cloudflare + Shopify toggles to support dual simultaneous deployment architectures across the master CI/CD Github action runner.

v1.0.18

  • Fixed SQLite database proxy bugs, ensuring shopify_url native paths correctly register without redundant re-provisioning.
  • Expanded Route Configure Wizard to natively accept shopify_page_slug metadata parameters for custom-named route deployment paths natively into Shopify (e.g., purdyandfigg.com/pages/custom-promo-24).
  • Intercepted the "Cancel" dialog UI component on GitHub pipeline execution, freezing user inputs to prevent accidental CLI pipeline closures.
  • Overhauled Route Table linking topologies to dynamically route to explicit origin platforms based on active deployments (UK Shopify Native, Lovable Builder, Cloudflare Edge).
  • Built an explicit 'All Origins' table UI dropdown to rapidly search and index proxy tables by physical deployed topography.

v1.0.17

  • Executed full automation of the proxy CI/CD pipeline to support deploying React/Vite widgets flawlessly into headless Shopify Themes natively via the shopify theme push API architecture.
  • Injected dynamic build-time code patching (BrowserRouter -> MemoryRouter) into the GitHub Action orchestrator to actively prevent layout routing collisions inside the Shopify Liquid container format.
  • Engineered a native dual-compilation step generating vite.shopify.config.ts on-the-fly to compile frontend proxy logic into purely "Zero-Chunk" monolithic JS bundles by disabling split chunks using inlineDynamicImports: true.
  • Built robust image handling by configuring Vite assetsInlineLimit: 100000000 to unconditionally Base64 encode all imported widget assets directly into the localized Javascript payload, cleanly bypassing absolute pathing and CDN URL 404s inherent to the Shopify storefront.
  • Parameterized the entire theme deployment architecture with unique deterministic slugs (${safeName}) to guarantee zero file collisions or overlaps across an infinite number of parallel proxy routes inside the same Master Shopify Theme.
  • Upgraded the Admin Dashboard CI/CD "Promote" GUI to output an interactive, contextual "Next Steps" modal specifically coaching growth teams which unique Shopify template file (page.lovable-hub-5.liquid) belongs to which Proxy Dashboard instance.

v1.0.16

  • Designed a secure Route Configuration Lock mechanism (POST /api/routes/:id/lock) to mandate password authorization before editing, toggling, archiving, or deleting high-value production routes.
  • Updated the Admin Dashboard dropdown UI to tightly suppress restricted actions (edit, delete, toggle) seamlessly behind the "Unlock Configuration" wall.
  • Refactored the authFetch network interception layer to accurately preserve and inject JWT authorization tokens across secured cross-origin internal API calls, resolving 401 Unauthorized misfirings.
  • Eliminated persistent Cloudflare ESBuild SyntaxErrors by sanitizing deeply nested backticks and unescaped line breaks (\n to \\n) embedded inside the worker's frontend UI compiler templates.
  • Architectural Overhaul: Split the monolithic server-side HTML template into discrete static files (public/index.html, app.js, style.css) and bound them natively to Cloudflare Workers Assets.
  • Backend Refactor: Replaced the native fetch router with a robust, modular Hono framework backend architecture inside the admin workspace.
  • Tailwind UI Overhaul: Stripped out legacy Vanilla CSS and embedded a highly dynamic Tailwind @layer components layout, enhancing the aesthetics with vibrant gradients, glassmorphism hovers, drop shadows, and scale animations.

v1.0.15

  • Implemented a "My Account" self-service modal, allowing standard users to update their credentials securely via a new POST /api/me endpoint.
  • Bulletproofed the user management subsystem by enforcing strict database constraints (no blank passwords) and real-time frontend password-matching validation.
  • Overhauled the Admin Dashboard RBAC layer, granting Growth and Tech Reps organic read-only visibility to the routes table without risking unauthorized mutations.
  • Locked down deletion mechanics (DELETE /api/routes/:id), restricting privileges strictly to Global Superadmins or the original Route Author.
  • Deployed a specialized Sign-Off modal block exclusively for Growth and Tech reps to cleanly execute their route approval workflows while protecting the underlying proxy config parameters.
  • Conditionally suppressed advanced technical documentation (Checkout Builders & Pixel Managers) from displaying to lower-tier users in the internal Guide.
  • Standardized a comprehensive global Audit Logging engine (route_audit_logs) to track and permanently record all user-driven actions (creations, edits, deletions, health checks, and toggles) for strict compliance traceability.
  • Expanded the AI Compliance cap-scanning protocol to save hard forensic records of compliance failures by permanently logging the exact violations_json arrays into a dedicated ai_cap_audits history table.
  • Upgraded the Route Configuration Wizard UX by embedding dynamic Save Changes checkpoint buttons directly into Step 1 and Step 2 menus, eliminating the need to traverse the entire form to preserve metadata changes.
  • Bulletproofed database bindings via a global try-catch JSON traceback system, immediately surfacing precise SQLite syntax errors directly to the Admin UI screen instead of blindly cratering the worker pipeline.
  • Fixed a silent bug causing assigned Tracking Pixels to be bypassed on initial Route creation workflows.

v1.0.14

  • Added a project_url column mapping arbitrary frontend source projects (like Lovable builders) directly into the routes schema.
  • Integrated a rigorous 3-step Route Sign-off approval system (Page Author, Growth Representative, Tech Representative) directly into D1 SQLite logic.
  • Protected Ad Traffic integrity by blocking UI toggling natively through backend api/routes/*/toggle via HTTP 400 rejections until complete route activation sign-offs are submitted.
  • Extended the analytics_stats schema processing pipelines to natively parse and ingest utm_campaign metrics from Proxy and Webhook feeds.
  • Intercepted the embedded πŸ“ˆ Analytics portal to inject expandable drill-down rows, surfacing high-performing Campaign attribution neatly underneath Source/Medium groupings.

v1.0.13

  • Integrated dedicated preview domain mapping (preview.purdyandfigg.com) dynamically into the Proxy Router to flawlessly bypass Vite/React Router SPAs base URL mismatches.
  • Updated the Admin Dashboard's proxy routing logic to natively detect the active preview host and correctly generate clickable preview URLs out to the user interface.
  • Prevented ad-subdomain catch-all logic from accidentally swallowing preview. test environments.

v1.0.12

  • Built the dedicated Analytics reverse proxy workspace (/analytics) natively outfitted with webhook handlers for Shopify, Elevar, Meta, Google, and Klaviyo payloads.
  • Eliminated static map variables and pushed global ad tracking into a dynamic known_channels D1 SQL table to share classifications smoothly between the router and analytics nodes.
  • Designed a resilient, high-volume Rolling Aggregate Metrics engine (analytics_stats) to infinitely crunch proxy ad clicks and Elevar purchase webhook values directly into Cloudflare D1.
  • Injected a fully immersive πŸ“ˆ Analytics Data Visualization portal natively into the Admin Dashboard using embedded Chart.js APIs and glassmorphism styling parameters.
  • Re-architected project migrations into a tidy sql/ folder hierarchy and securely blocked backend Webhook HMAC secrets inside .dev.vars from pushing to Github.
  • Engineered synthetic GA4 debugging capabilities directly into the Admin Dashboard 'Test HTML' workflow.
  • Created POST /~internal/validate-ga4 secure diagnostics bridge routing natively to the Google Analytics /debug/mp/collect API.
  • Re-mapped underlying analytics payload to send tracking interactions under the proxy_ad_click tag name to sidestep native Google Ads reservation filters.
  • Engineered a zero-latency analytics-queue Cloudflare Queue bridge allowing the Proxy Router to drop massive raw telemetry payloads into analytics_logs without impacting user page load speeds
  • Built a background native Queue Consumer function into the analytics node to handle asynchronous D1 Batch INSERT queries and auto-purge metrics older than 90 days.
  • Exposed a secure GET /api/analytics/raw Admin endpoint to allow headless dumping of un-aggregated API logs. (to send to data proxy)
  • Performed a repo-wide Security Sweep: Ripped all clear-text production passwords/tokens from the wrangler.toml files and instituted local .dev.vars masking.
  • Completely overhauled the README.md to document the unified GitHub Action deployments, infrastructure provisioning (npx wrangler queues), and secret key management workflows.

v1.0.11

  • Expanded routing database schema to support arbitrary key-value custom routing parameters (route_metadata) and UTM overrides.
  • Overhauled the Admin Dashboard with advanced tracking inputs for Custom Metadata Keys and UTMs.
  • Significantly upgraded the Admin Dashboard UI with client-side Pagination, real-time Text Search filtering, and Active/Inactive status organization.
  • Implemented a DELETE /api/routes/:id API for hard-deleting routes along with their chained pixel binding and metadata history.
  • Upgraded the ad-source detector logic to dynamically extract channels from any subdomain prefix (e.g. snapchat.purdyandfigg.com) recursively.
  • Refined reverse-proxy redirect logic to forcibly append and expose customized proxy variables directly inside the client's URL search bar, allowing local client-side Javascript tag reading.

v1.0.10

  • Configured GitHub Actions CI/CD workflow to fully deploy all components (router, admin, monitor) to Cloudflare automatically on push.
  • Overhauled Hetzner VPS deployment pipeline (deploy_server) to natively pull code, sync JSON fallbackConfig.json route states, and gracefully restart workerd.
  • Whitelisted het.purdyandfigg.com and het.getpurdyandfigg.com as internal proxy hostnames so Ad testing redirects function natively on the backup cluster without jumping.
  • Activated the /test route in fallbackConfig.json bundles to ensure strict 200 OK health-checks from Hetzner instances instead of returning 404 Shopify fallbacks.

v1.0.0

  • Added versioning and history tracking.
  • Implemented automatic pruning of logs older than 48 hours in the proxy monitor.
  • Added automated deployment workflows for Cloudflare workers and Hetzner VPS using GitHub actions.
  • Introduced deploy_hetzner functionality to auto-deploy to the Hetzner node cluster.