Everything you see before you log in, rebuilt.
The public-face release
The marketing site was rebuilt end to end and joined by a docs site, a public changelog and a status page, while the product gained Facebook post automation, a spreadsheet Data Manager and workspace-level limits.
Highlights
- Marketing site redesigned end to end on a new neutral design system
- A public documentation site, changelog and status page
- A real demo-booking funnel — the form, the agent, and an admin desk
- Scheduled Facebook page posting and a spreadsheet-style Data Manager
- Agent limits, test accounts and per-workspace document storage quotas
Full release notes50
Overview
Additions center on the public surface: a redesigned marketing site with an animated product walkthrough, a documentation site at /docs, this changelog, a status page on its own hostname, and a demo-booking funnel wired to both the try-it form and the agent. Inside the product, Facebook post automation, a spreadsheet-style Data Manager, agent limits, test accounts and document storage quotas landed; the admin client page collapsed into one screen; and fixes target knowledge-base recall, accessibility contrast and mobile spacing. Underneath, every linter, formatter and type checker became a blocking CI gate, Python dependencies moved to uv, and the frontend moved to Next.js 16.
Added
19
- Marketing site rebuilt — a full redesign on a neutral white/black/blue system with Sora and Manrope display type and a compact eyebrow-badge type scale, plus a phone-framed live AI chat demo, an animated CRM pipeline walkthrough, an interactive weekly analytics chart, a 12-column platform bento, animated how-it-works journey cards, scroll-driven card entrances, and a right-side mobile nav drawer
- Public documentation site at
/docs— an editorial, itinerary-led guide to the agency dashboard, with a command-palette search - Public changelog at
/changelog— the release timeline, mirrored from the repositoryCHANGELOG.md - Public status page served at the
status.abroadmate.coroot and linked from the footer - Demo bookings — the try-it form and the agent's
book_demotool both write todemo_bookings; requests land on an admin desk and on a tenant-scoped client dashboard page, and the agent offers only real half-hour slots between 08:00 and 19:30 and refuses anything outside them - Facebook post automation — scheduled Page posting with a Go scheduler and a Python post studio, a workspace default image model, a stepped setup brief mirrored as a live post preview, and an admin Feature Access gate
- Data Manager spreadsheet editor — per-country worksheets with fixed rows, drag-to-resize columns and a coloured sheet frame, duplicate review before cleaning, a warning before saving over existing data, and a bulk-update endpoint that writes many rows in one request
- Per-tenant agent limit and a dashboard agent switcher —
tenants.max_agentscaps how many agents a workspace can have, and a header switcher reaches agent #2 onward - Admin per-client Playground — run any client's agent from the admin console, with playground sessions scoped by surface
- Guided client onboarding wizard — a six-step setup flow for a newly created client
- 200 MB per-workspace document storage — a trigger-maintained meter with a dashboard gauge, enforced on upload and raisable per client from the admin page
- Knowledge base duplicate guard — a country push sends only the pairs an agent is missing, duplicates can be reviewed before they are cleaned, several countries push in one run, entries bulk-delete by country, and the training modal re-indexes with live progress
- Test accounts —
is_test_accountexempts a tenant from billing and suspension entirely; test accounts are tagged in the navbar picker and client rows, show unlimited credits and no invoices, and leftover invoices can be cleared - Invoice receipt — the invoice modal is now a paper receipt that prints out of a slot, and admins can view any invoice as a receipt from the billing page
- Agent purpose and per-addon switches — every prompt addon has an on/off flag,
agent_purposepicks the base prompt (support vs. study-abroad), and a per-agent Human Writing Style flag gates the style addon - Themed `ConfirmDialog` and branded error boundaries — every
window.confirmis replaced across both consoles, and readable branded fallbacks stand in for the faint default - Custom date-range picker — a styled calendar replacing the native date inputs
- Full-site audit tool — a Lighthouse + axe walker that screens all three hosts, once per theme
- Admin client login email change — an admin can change the email a client signs in with
Changed
12
- New agents default to DeepSeek V4 Flash; existing and OpenAI-backed agents keep their model
- Admin client detail is one page — the Billing, Agents & KB and Playground tabs are gone, Credit Usage and Document Storage sit side by side under the stat cards, and the plan / credit / billing-day controls moved to the Billing page
- The knowledge base always searches in English, and a Q&A entry is faceted by its question rather than its answer
- Agent replies read like a human consultant — per-channel formatting decided by the agent rather than a cleaner, emoji mirroring the student's own register, and the student's name and channel injected as per-turn context
- Every dashboard time is the viewer's local timezone in 12-hour AM/PM
- Admin support desk rebuilt on the client inbox layout — a full-bleed helpdesk with an actions menu, a details panel, client profile images and ticket deletion
- Per-agent WhatsApp/Facebook channel cap raised 1 → 5
- Pricing says Free CRM on the plan cards, and the CRM & student pipeline is listed as a Growth plan feature
- Dashboard sidebar regrouped — Inbox/Overview, CRM, Growth, AI Agents, Settings, with Overview ahead of Inbox
- Header credits pill redesigned with a gradient tint and a progress ring
- The Go API root reports its version and answers
/healthz, and unknown routes get a branded 404 page - Backdating a billing start date is allowed up to 25 days; anything earlier is rejected
Fixed
10
- Four knowledge-base retrieval bugs that cost recall and caused false misses; the admin KB list ignored
offsetandagent_id, so every page showed the same rows and country counts doubled - A blank
pinecone_namespacesilently skipped the embedder — it is restored on indexing, and the admin agent form rebuilds after create so a later save cannot blank it again - A failed knowledge-base entry is recoverable and says why it failed, and the KB reports when the AI service is down instead of writing entries that are guaranteed to fail
- Transient Supabase read timeouts are retried once, and the billing actions drawer no longer flashes its modals shut as they open
- Playground history no longer doubles on reload, and a slow AI turn recovers instead of being lost
- Low-contrast marketing text and badges raised to WCAG AA, hover-only row actions kept reachable on touch devices, the inbox reply-send button grown to a 44px tap target, and student detail header actions stacked on mobile
- Anti-framing headers now cover the dashboard and admin console, and the admin console uses the AbroadMate favicon
- Render-phase mutations, refs read during render,
Date.now()in render and impure state seeds all cleared out of the frontend - A mobile spacing pass across the hero, challenges, solution, features, results, pricing, FAQ, CTA, footer, about, blog, docs, try-it, referral, status, changelog and legal pages, including a hero heading and CTA row that finally fit small screens
- The date-range popup clamps to the viewport instead of a guessed height, and the notifications modal caps its height and scrolls
Performance
3
- The spinner Lottie was replaced with a CSS loader, and the 404 and loading animations are served from
public/instead oflottie.host - The oversized logo PNG was downscaled and every logo
imggiven explicit dimensions; the hero GIF loads eagerly to clear the LCP warning - Data Manager loads sheets more leanly, with accented scrollbars and wheel-scrolled tabs
Infrastructure
6
- Next.js 16 — middleware is now
proxy.tson the Node runtime, and the agent rules files Next generates are committed - Every linter, formatter and type checker is a blocking CI gate —
ruff check,ruff formatandtyfor Python; ESLint, Prettier andtsc --noEmitfor the frontend; golangci-lint and gofmt for Go - Python dependencies move to uv —
pyproject.toml+uv.lockreplacerequirements.txt, and Dependabot tracks theuvecosystem - Git hooks run CI locally, split by what each check needs to see —
pre-committakes the per-file ones (gitleaks, gofmt, ruff, ESLint, Prettier) over the staged files,pre-pushthe whole-project ones (tsc,ty, go vet/build/test, golangci-lint) over each touched service, concurrently and with nothing checked twice - Go toolchain pins moved to Go 1.26 across CI and Docker, and
.gitattributesforces LF so Prettier agrees across platforms - Dependency bumps: Pinecone 10.0.0, OpenAI 3.6.0,
golang.org/x/crypto0.56.0, and grouped frontend updates
