This round shipped the AI building blocks, completed the marketplace vertical, and rounded out the engagement surface.
Added
- AI building blocks — a vector-store seam with a pgvector adapter, a universal chunk→embed→store→retrieve RAG pipeline, and an
ai-chat module (conversation persistence, fail-closed org token budgets backed by billing metered usage, optional RAG context, streaming over the realtime seam).
- Marketplace vertical — a
listings module (seller catalog with a CAS-guarded lifecycle and facet-source attributes), jsonb facet filters + facet counts on the search seam, and a worked examples/marketplace composition wiring listings, orders, escrow, reviews, and moderation over one bus.
- Push notifications — FCM, Expo, and Web Push channel adapters with a device-token registry and invalid-token pruning; push joins the notification preferences matrix.
- Product tours — the
ProductTour component grew selector targets, spotlighting, and re-anchoring; a useProductTour hook persists per-browser tour state.
- Feeds + changelog — RSS 2.0 and Atom feeds for the marketing site, and this curated changelog collection with a draft generator over pending changesets.
A correctness pass on the AI round plus the guardrail and content tail.
Added
- AI moderation — an
IModerationClassifier seam with an LLM-backed classifier and an OpenAI-moderation-endpoint adapter, plus autoFlagOnEvent, a bus-subscriber factory that bridges content events into the moderation module's flag queue.
- Prompt templates — a versioned template registry with strict
{{var}} interpolation and cost-attribution metadata that feeds the LLM cost tracking, so per-template spend rollups come for free.
- Mobile recipe —
docs/patterns/mobile-bff.md: the React Native/Expo path over the existing seams (JWT auth, universal api-client, push device registration, offline queue).
- OG images — a design-token-derived Open Graph image factory in the SEO package, with per-post images for marketing blog posts on the edge runtime.
Fixed
- Tenant-scoped vector deletes — vector-store delete-by-ids now requires and filters by the organization id.
- Exact RAG context budgets —
buildContext charges headers and separators, so output never exceeds maxChars; partial indexing failures throw a typed, retry-safe error.
- Honest Expo delivery — two-phase receipts (
getReceipts) so dead-device pruning fires from receipts, not just ticket-level signals.
This round focused on the things enterprise evaluations ask about first — and the day-two developer experience of teams building on the template.
Added
- SCIM 2.0 provisioning —
/api/scim/v2 Users endpoints so an identity provider (Okta, Entra) can create, deactivate, and update members automatically.
- Runtime-editable roles — roles and their permission grants can be edited at runtime through the admin surface instead of a redeploy.
- Generator scaffolds —
pnpm gen page|settings-screen|email-template join the existing package/module/app generators.
- Preview deployments — each pull request gets an isolated preview environment wired through the deploy contract.
Changed
- Performance budgets — bundle-size budgets are now enforced per route (
bundle-budgets.json); a regression fails CI rather than shipping.
A production-hardening pass across the API surface and the operational story.
Added
- Public API v1 — a versioned
/api/v1 surface with OpenAPI generation and a typed SDK produced from the registry, so integrations build against a contract instead of internal routes.
- Ops drills — scripted restore/failover drills join the backup scripts, so recovery is a rehearsed procedure rather than a hope.
- Outbound network ACLs —
@seatly/net-acl gives modules an allowlist seam for outbound calls.
Changed
- Session lifecycle policy — absolute max-age and concurrent-session caps are now env-tunable (off by default).