Changelog
What we shipped, and when. Releases are announced on the blog RSS feed.
- New
- Improved
SSO, sessions, maintenance, i18n, full backoffice + DLQ redrive
Round 6 — enterprise OIDC SSO, session inventory with revoke, maintenance mode, demo seed, notification preferences, activity feed, DLQ redrive UI, and 11-page admin backoffice.
What shipped
- i18n via next-intl. Locale switcher in the topbar. Bundles for en / pt-BR / es covering nav, settings, admin sidebar, and common UI.
- Enterprise SSO through Better Auth's generic-oauth plugin. Configure any OIDC IdP via env vars (Okta / Auth0 / Azure AD / Google Workspace / Keycloak).
- Session inventory at
/settings/sessions— list active sessions, revoke individually or all-others-at-once. Includes a "new-device-login" alert email when a fresh IP signs in. - Maintenance mode — admin toggle that returns 503 + Retry-After on every mutation except admin/auth/webhooks. Banner component for the marketing site when configured.
- Demo seed —
bun run seed:demopopulates a fresh clone with 5 users, 2 orgs, todos, audit log, AI usage rows, and a converted affiliate referral. - Notification preferences at Settings → Notifications. Security + transactional locked opted-in; marketing / digest / billing user-controllable.
- Activity feed at
/activity— user-facing audit log scoped to your orgs. - Public cookie policy at
/cookiesand public changelog at/changelog(this page). - Webhook ping endpoint — customers can fire a test delivery before going to prod.
apiVersionfield on every outbound webhook envelope for forward-compat.- API reference at
/api-referencepowered by Scalar, consuming the live OpenAPI spec.
- New
- Improved
Multi-tenant UI, pricing page, GDPR, and onboarding
Phase 5 ships the public-facing surfaces that turn the boilerplate into a usable SaaS template.
New
- Public
/pricingpage with monthly/yearly toggle, free/basic/pro comparison, and a single shared plan config in@achoai/shared/plans. - Landing page: How It Works, Testimonials, Tech Stack, Pricing preview,
FAQ (native
<details>), and Newsletter sections. - Multi-tenant UI: org switcher in the topbar,
/settings/team(members, invites, role changes), and/invite/[token]accept flow. - GDPR: dedicated
/cookiespolicy page,GET /user/exportfor portability, consent versioning with auto-reprompt on bumps. - Onboarding wizard at
/onboardingthat walks new users through profile + workspace. - Contact form at
/contactbacked by a rate-limitedPOST /api/contact. - Email templates: invoice, security-alert, invitation (replacing inline HTML), digest.
Improved
<CookieConsent />now stores{ version, choice, acceptedAt }instead of a bare string, so consent migrations are explicit.- QueueDash admin route now uses a client loader so
next build --webpackdoesn't trip ondynamic({ ssr: false })in a Server Component.
- New
Audit log, AI rate limit, upload upgrade, cron digest
Phase 4 adds the production-grade primitives that show up in every SaaS — audit trails, AI cost control, tenant-safe uploads, and a recurring digest job.
New
audit_logtable (RLS-scoped,FORCE ROW LEVEL SECURITY) with an Elysia plugin that auto-records 2xx mutations and exposesauditLog.record()for nuanced cases.ai_usagetable andai-rate-limitplugin enforcing a rolling 30-day token cap per organization (PLAN_LIMITS.aiTokens). Records usage fromstreamText'sonFinishcallback.- Upload upgrade: tenant-scoped paths (
{orgId}/{uuid}.{ext}), plan-bounded size viaassertUploadSize, streaming straight to Bunny viauploadStream, one audit row per successful upload. - Cron digest via BullMQ repeatable:
scheduleDigest()registers a daily 9am UTC job with a stablejobIdso restarts stay idempotent. - Default job options:
attempts: 3, exponential backoff from 1s. Redis client enforcesmaxRetriesPerRequest: null(BullMQ requirement).