What we shipped and when. Subscribe via RSS for updates.
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.
Phase 5 ships the public-facing surfaces that turn the boilerplate into a usable SaaS template.
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.
/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.bun run seed:demo populates a fresh clone with 5 users, 2 orgs, todos, audit log, AI usage rows, and a converted affiliate referral./activity — user-facing audit log scoped to your orgs./cookies and public changelog at /changelog (this page).apiVersion field on every outbound webhook envelope for forward-compat./api-reference powered by Scalar, consuming the live OpenAPI spec./pricing page with monthly/yearly toggle, free/basic/pro
comparison, and a single shared plan config in @nextmonorepo/shared/plans.<details>), and Newsletter sections./settings/team (members,
invites, role changes), and /invite/[token] accept flow./cookies policy page, GET /user/export for portability,
consent versioning with auto-reprompt on bumps./onboarding that walks new users through profile +
workspace./contact backed by a rate-limited POST /api/contact.<CookieConsent /> now stores { version, choice, acceptedAt } instead of a
bare string, so consent migrations are explicit.next build --webpack
doesn't trip on dynamic({ ssr: false }) in a Server Component.audit_log table (RLS-scoped, FORCE ROW LEVEL SECURITY) with an Elysia
plugin that auto-records 2xx mutations and exposes auditLog.record() for
nuanced cases.ai_usage table and ai-rate-limit plugin enforcing a rolling 30-day
token cap per organization (PLAN_LIMITS.aiTokens). Records usage from
streamText's onFinish callback.{orgId}/{uuid}.{ext}), plan-bounded
size via assertUploadSize, streaming straight to Bunny via uploadStream,
one audit row per successful upload.scheduleDigest() registers a daily
9am UTC job with a stable jobId so restarts stay idempotent.attempts: 3, exponential backoff from 1s. Redis client
enforces maxRetriesPerRequest: null (BullMQ requirement).