Server-side analytics aggregation via PostgreSQL RPC
Replaced client-side row fetching with a PostgreSQL RPC function (get_site_analytics) that aggregates all analytics data server-side. Fixes the 1,000-row PostgREST limit that was silently capping page view counts. All metrics — top pages, traffic sources, geography, scroll depth, click tracking — now computed in a single database round-trip with no row limit.
Migrate page inventory sync from HubSpot CMS to Vercel sitemap
Replaced the HubSpot CMS page sync (Step 5 of the scan route) with sitemap-based discovery now that inecta.com runs on Vercel. New pages are auto-detected from /sitemap.xml, removed pages are deactivated, and last_updated_at is populated from GitHub commit history (requires GITHUB_TOKEN). Content freshness scoring is now accurate for the new Next.js site.
Site Analytics dashboard tab + bot sweep
New "Site Analytics" tab visualizing inecta.com traffic: page views, unique visitors, sessions, top pages, traffic sources, geography, scroll depth funnel, and click tracking with period filtering and page-level drilldown. Includes daily bot-sweep cron job (04:00 UTC) with behavioral heuristic detection for volume bots, stale browser UAs, and ghost visitors. Migrated from Cayenne to Thyme as the website-focused agent.
Migration Cutover Health Dashboard
New "Migration" tab monitoring the inecta.com migration from HubSpot CMS to Next.js on Vercel. Runs 10 automated health check groups every 4 hours: blog availability, image health, page speed, SEO signals, sitemap indexing, form functionality, redirect health, HubSpot tracking, traffic comparison, and DNS/SSL. Includes trend chart, alert banners for critical issues, and manual scan trigger.
Add "How Thyme Works" about page
New page accessible from the dashboard header explaining what Thyme does, how it works, and where it fits in the SALT Crew. Covers the two-layer analysis architecture, data sources, automated schedule, and human approval workflow.
LinkedIn Analytics daily sync
Automated daily sync of LinkedIn company analytics via the Community Management API. Pulls share statistics (impressions, clicks, engagement) for all org posts, monthly follower growth with current total count, and page view statistics. Uses Posts API to discover correct share/ugcPost URNs and maps them to existing post records. Runs daily at 16:00 UTC via cron with 12-month backfill support.
Auto-resolution tracking for findings
Findings are now automatically resolved when their underlying condition clears. Each scan checks open findings against current page data — meta fixes, broken link repairs, content updates, and speed improvements are detected without anyone marking them done. The dashboard shows before/after health score deltas.
Fix Supabase 1000-row default limit on page queries
Page inventory queries now explicitly request up to 2000 rows instead of relying on the Supabase default limit of 1000, which was silently truncating results for larger sites.
Optimize weekly route for 120s Vercel timeout
Restructured the weekly analysis route with time-budgeted steps: 40s for link checks, 70s for keyword coverage, 95s for Claude narrative generation. Batched all DB operations to reduce round trips.
Reduce PSI tests to 2 + batch HubSpot sync
Reduced PageSpeed Insights spot checks from 5 to 2 pages per scan and batched HubSpot CMS sync operations (50 concurrent updates, 100-row inserts) to fit within the scan time budget.
Fix Vercel timeout with fire-and-forget trigger
Changed the trigger endpoint to a fire-and-forget pattern so the scan runs asynchronously without blocking the HTTP response within the 120s Vercel Hobby plan limit.
Reduce agent loop to 1 candidate per scan
Limited the Layer 2 agent loop to investigate 1 flagged page per scan instead of 3, ensuring the full scan completes within the 120-second time budget on Vercel.
Initial launch — Thyme website health agent
Full website health monitoring agent for inecta.com. Pulls data from GA4, Search Console, PageSpeed Insights, and HubSpot CMS. Computes 6-dimension health scores, runs AI-powered investigation on flagged pages, and surfaces prioritized recommendations via a decision queue.