A human-readable log of every version from v74 onwards. Each entry lines up with a merge to main; deployed automatically to Railway on push.
v181 — Multi-provider LLM router (Anthropic → Haiku → Gemini)
2026-04-29
- Anthropic remains the primary path. On a credit-balance / rate-limit / network failure the router transparently falls back: Sonnet → Haiku → Gemini Pro. The user never sees a hard outage from a single provider blip.
- Pre-flight credit check on every paid task — if Anthropic is empty before the task starts, the user keeps their token and we file an admin notification instead of charging then refunding.
- Admin health-pings updated to hit Anthropic + Cloudflare + Supabase + Resend + Gemini (replaces the old Vercel ping that was retired in v170).
v170 — Cloudflare Pages — host swap
2026-04-28
- Customer sites now deploy to Cloudflare Pages instead of Vercel. Static landing template is unaffected by the move; deploys land at <project>.pages.dev with auto SSL.
- Reason: Vercel Hobby's TOS forbids commercial use, and Pro is bandwidth-metered with no hard cap. Cloudflare Pages free tier permits commercial use and has unmetered static egress.
- Web-app templates (course / community / marketplace / SaaS) are temporarily offline while we port the git-linked deploy path to Cloudflare's Workers runtime. ETA on the Roadmap.
- Custom domains: when your DNS is on Cloudflare (which dellingr.dev is), domain attach is instant and cert is automatic.
- Force-redeploy admin button + drift detector both repointed at Cloudflare. Same v166/v167/v168 reliability work — SSE resume, auth grace, asyncio timeout ceilings — kept intact.
v168 — Refresh-proof reliability
2026-04-27
- SSE resume tokens — refresh during a build no longer blanks the terminal. Server replays the last 200 events for any reconnect.
- Auth grace window — tokens expired up to 7 days can silent-refresh, so a tab left open overnight isn't a forced re-login.
- Cold-start splash — first /auth/me from a sleeping Railway shows 'waking the backend' for up to 30s instead of bouncing the user to /auth.
- GET /api/companies/:id/active_state returns chat history + running task + recent logs in one round-trip so the page hydrates instantly on mount.
v167 — Stop the deploy hang at the root
2026-04-27
- Explicit httpx Timeout(connect, read, write, pool) on every deploy client (Vercel at the time — retired in v170 in favour of Cloudflare Pages). Was: read=NONE, hung indefinitely on a dropped response. Found via paddock forensics where a deploy got stuck at INITIALIZING for 23 minutes.
- asyncio.wait_for(deploy, 240) ceiling on the runqueue auto-redeploy so a hung deploy can never strand a task in 'running'.
- Retired the silence-based stuck-task sweeper that was racing the dispatch coroutine to declare the same task dead. 30-min hard ceiling kept as last-resort safety net.
v166 — DB-clean / live-stale doom loop fix
2026-04-27
- Force redeploy admin button — push current DB content to live without an edit, no Sonnet, no token. The exact thing paddock needed three failed-edit-tasks ago.
- Drift detector on every chat call — if last_deployed_html_sha differs from current build_content, fire a background redeploy automatically.
- Server-restart recovery for in-flight edits — re-queues idempotent edit tasks instead of marking them failed.
- edit_whole_page removal-target sanity check — if instruction asks to remove X and X isn't in the current DB, refuse before queuing instead of failing on the post-edit identity check.
v165 — Stripe sales — connect, wire Buy buttons, real payments
2026-04-26
- Per-company Stripe via OAuth Connect Standard or BYOK restricted key. Customer is merchant of record — Dellingr never holds funds.
- New chat tool — set_buy_button — creates a Product + Price + Payment Link on the user's Stripe account, then substitutes the matching template placeholder (internal: STRIPE_BUY[id]) in the section HTML at deploy time.
- Pre-deploy guard refuses to ship a site with unwired Buy buttons.
- Sales card on the Site tab — connection state, list of wired products, OAuth + BYOK paths.
v164 — add_custom_section — chat builds any section the user describes
2026-04-26
- Catalogue-only section adds were the wrong design. Site builders build what the user asks for.
- New tool: add_custom_section(name, description, before/after/position) — Sonnet generates the HTML, full lifecycle reuses the same anchor validator + accent enforcer + self-heal as catalogue sections.
- 2 tokens (vs 1 for catalogue) — fairly priced for the larger Sonnet output.
v91 — Admin bulk ops + CSV exports
2026-04-24
- Bulk grant tokens / change tier / email across up to 500 users in one call
- Users + notifications CSV export (streaming) with signup IP + address fields for offline auditing
- Impersonation log surfaced in the admin dashboard
v90 — Custom branding per site
2026-04-24
- Primary colour, font, logo URL, favicon URL per company
- Rebuild shell endpoint reassembles the site with 0 Sonnet tokens
- Settings → Branding card with colour picker + Google Fonts datalist
v89 — Team collaboration
2026-04-24
- Owner / editor / viewer roles enforced across every endpoint
- Magic-link email invites with 14-day TTL, SHA-256 hashed tokens
- Team card in Settings for invite / revoke / change role / remove
v88 — SEO basics
2026-04-23
- sitemap.xml + robots.txt auto-generated on every static build
- Per-page meta description, OG + Twitter Card, rel=canonical
- seo_check chat tool + Site tab score card (deterministic, 0 tokens)
v87 — System health + error aggregation
2026-04-23
- Admin pings Anthropic / Cloudflare / Supabase / Resend + Gemini + DB, green/amber/red per component. (Originally pinged Vercel — replaced by Cloudflare in v170; Gemini fallback added in v181.)
- Rolling 30-min fail rate with thresholds (amber >10%, red >20%)
- Today's errors aggregated by agent + pattern so one root cause surfaces once
v86 — Duplicate + tier-gated watermark
2026-04-23
- Duplicate company button copies brief + content + availability to a fresh company
- Footer 'Built with Dellingr' shown for free-tier, hidden for paid
- Admin per-company override to force on or off
v85 — Signup screening + appeal flow
2026-04-22
- Expanded signup: first/last name, phone, full postal address
- Duplicate detection against existing users (email hard block, IP/phone/name fuzzy)
- Appeal flow for soft-blocked applicants, admin inbox colour-coded by outcome
v84 — Version history + revert
2026-04-22
- Auto-snapshot before every deploy, manual snapshots via Settings
- Cap 20 per company with nightly prune
- One-click restore reapplies the snapshot and queues a fresh deploy
v83 — Custom domains
2026-04-22
- Settings → Custom domains, add + remove from the panel
- DNS instruction strings (CNAME for subdomain, A for apex) with copy-buttons
- 30-second verification poll — UI flips to live when DNS resolves
v82 — Onboarding tour + template picker
2026-04-21
- 5-step welcome overlay on first dashboard visit, replayable from Billing
- Template picker on New Company — pre-selecting skips Pass 0 (Sonnet pick)
- Dismiss stamps User.onboarded_at so it stays gone
v81 — Remember me + session refresh
2026-04-21
- 'Keep me signed in' checkbox → 30d JWT, off → 4h rolling session
- POST /auth/refresh mints a short token off a valid one
- Frontend silently refreshes on 401 and retries — no more login-page bounces mid-task
v80 — Booking inbox
2026-04-21
- Customer clicks open slot → books via form → lands in in-app inbox
- Accept books the slot + emails confirmation, decline emails polite note
- Rate-limited 5/hr/IP, 20/hr/company so the endpoint can't be flooded
v79 — DB-backed file uploads + brief/plan self-heal
2026-04-20
- Uploads moved from ephemeral state/ to Postgres — survives Railway redeploys
- brief.md + plan.md auto-rebuild from DB when missing after a redeploy
v78 — Milestone guards out
2026-04-20
- Explicit re-runs regenerate; prereq auto-chain still skips already-done
- 'Milestone already complete' wall removed from the UI since the ladder is hidden
v77 — Unified terminal chrome
2026-04-20
- Build terminal, message centre, availability panel all wrap in the shared chrome
- Amber dot shows when tasks are queued, green when idle, red on error
- Matching clean monospace across the board
v76 — Soft delete + 7-day restore
2026-04-19
- Delete now soft-stamps; external deploy + GitHub + Supabase resources preserved for 7 days (we deployed to Vercel at the time; Vercel was retired in v170 in favour of Cloudflare Pages — same 7-day soft-delete behaviour applies to the new host)
- Restore endpoint clears the stamp within the grace window
- Permanent-delete opt-in for when you really mean it
v75 — Rate limits + abuse detection
2026-04-19
- Per-IP limits on login / signup / chat / notifications / forgot_password
- Per-user chat caps, lockout after 5 bad logins in 15 min
- Admin abuse-watch card in the dashboard
v74 — Legal pages + signup consent
2026-04-19
- /terms, /privacy, /refunds live at public URLs
- Mandatory Terms-acceptance checkbox on signup, stamp + version per user
Older versions (v50–v73) rolled earlier infrastructure — the build pipeline, site-map-aware chat, admin dashboard, OAuth. Starting from v74 the log is per-phase as part of the launch-readiness sprint.