A running log of what has shipped, what is in progress, and what is coming next.
Admin health page
Status history wiring. logStatusChange() helper in logEvent.js. Wire at all 14 status change points across 4 route files. Fill audit_events gaps for offerings and amendments. Scheduled S170.
PL414 Mac C — Re-enrichment scheduler
Legal docs review
Status history wiring + job expiry cron
PL414 Mac C -- Re-enrichment scheduler
Staging DB sync
Trade job auto-expiry. Jobs auto-expire from trade dashboard after 7 days with no action. Cron-based, adds to existing cronJobs.js. Client notified with generic message only — no trade identity revealed. Fold into S170 with PL331 — both touch cron/audit area.
PostgreSQL backup script
Wire category page "Post a Job" CTA to /start?category= once PL404 built. Do in same session as PL404 (S167). Note: "View public profile" link in trade nav already confirmed built — this PL covers only the category CTA wiring.
Soft launch verification + checklist sign-off
Direct message threads between trades and clients inside the platform, with email and SMS fallback via Twilio.
A public page showing jobs posted but not yet matched to a trade, by category and town. Helps unregistered trades see real demand before signing up.
logStatusChange() wired at 13 status transition points across clientRoutes, tradeRoutes, adminRoutes. Job expiry cron expires active scopes after 7 days of trade inaction, client notified. 7-day copy added to trade dashboard job cards.
Five live checks: DB connectivity, env vars (×8), stuck scopes, trades missing category, cron last-run. HEALTHY/WARNING/DEGRADED overall banner. Health nav entry added to admin sidebar. No new files or migrations.
GET /join built — trade and client picker, trade panel default, approval gate copy, join.staines.build domain live, footer links updated, RESERVED_SLUGS updated
View pageUnified join page at /join + join.staines.build
View pageGET /start route live. Generic public intake with v2_start_intake prompt — full category list from DB, no trade pre-seeded. Footer Post a job link and category page CTAs wired to /start. publicStyles and header fixed.
Reference docs overhaul + handover backfill
Alignment + tidy session
Shopify scripts deleted. Handovers 144-164 archived. Parking lot consolidated. PL330, PL331, PL409 added pre-launch. Session order S166-S173 locked. ARCHITECTURE.md updated.
Public changelog at /updates
SEO & Discoverability planning
Landing page (staines.build)
Postmark email suppression handling
SEO & Discoverability planning
Public changelog page at staines.build/updates showing shipped features, work in progress, and coming soon. Changelog entry gate added to session-end workflow. Footer updated with What's new link.
View pageSeed category content (38 Tier 1 rows)
Launched staines.build — the public-facing landing page with hero, how it works, category grid, and CTAs for clients and trades.
View pageImproved email reliability. Suppressed addresses are now detected automatically and flagged in the admin panel, preventing failed sends from silently dropping.
Added a public footer with live category links across all public pages. Trades now have a public scope list page showing their completed and active jobs.
Visitors can request a quote directly from a trade profile page. The AI chat collects job details naturally, then creates a draft scope pre-assigned to that trade.