Changelog
Release history and changelog for AACsearch.
[2026-05-03]
Added
- Search: Exposed
include_fieldsJOIN parameter in search procedures.SearchDocumentsInput.includeFieldsnow accepts AACSearch JOIN syntax like$Category(id, name)for cross-collection field inclusion. (AAC-569) - Search: Wired MMR diversification —
diversify_based_onparameter now properly passed to AACSearch in bothsearchDocuments()andmultiSearchDocuments(). (AAC-574)
2026-04-30
Changed
Marketing
- Theme-aware primary CTA styling: Updated all “Start for free / Начать бесплатно” marketing CTA buttons (hero, pricing, footer) to use theme-aware borders, surfaces, and shadows in both light and dark modes via
apps/marketing/modules/shared/lib/cta-button-styles.ts.
SaaS app structure
- Search module consolidation: Split the overloaded
apps/saas/modules/search/components/folder intopages,panels,dialogs,tables,cards, andsections. - Knowledge module extraction: Moved
KnowledgeWorkbenchintoapps/saas/modules/knowledge/components/and added the@knowledge/*tsconfig alias. - Admin module normalization: Renamed
apps/saas/modules/admin/component/toapps/saas/modules/admin/components/. - Dead UI cleanup: Removed orphaned search UI files (
DashboardOverview,IndexRowActions,ProjectOverview,ProjectsList,SchemaEditor,SearchApiKeysPage,SearchPreview,SearchPreviewPage) and deleted the duplicate sidebar context atapps/saas/modules/lib/sidebar-context.tsx.
Added
Widget (MVP)
@repo/widget: Hosted storefront search widget — embeddable with one<script>tag.- Vanilla JS (no framework dependency), Shadow DOM for CSS isolation.
- Works with AACsearch public API (Bearer auth with
ss_search_*orss_scoped_*keys). - Modes: inline (default), supports facets, sorting, pagination, price display, availability.
- Theme: light, dark, auto (follows system preference).
- Built with tsup — outputs IIFE (14KB minified) + ESM.
- Auto-initializes from
<script>data-* attributes.
API
- Widget config endpoint:
GET /search/widget-config/:indexSlugoRPC procedure — returns base URL, key prefix, and ready-to-use snippet. - Widget JS serving:
/api/widget/widget.jsendpoint serves the compiled widget bundle with permissive CORS and caching headers.
SaaS Dashboard
- Widget tab: New "Widget" tab in search dashboard next to API Keys panel.
- Widget snippet generator: Copy widget
<script>tag with editable API key field. - Installation instructions: Step-by-step guide in the dashboard.
i18n
- Widget translations: All 4 locales (en, de, es, fr) — widget tab, snippet, installation instructions.
Connector API
POST /api/connectors/handshake: CMS module token validation and project info.POST /api/connectors/:connectorId/heartbeat: Module heartbeat reporting.POST /api/projects/:projectId/sync/full: Batch product upsert via ingest buffer (up to 1000/batch).POST /api/projects/:projectId/sync/delta: Incremental product updates (up to 100/batch).DELETE /api/projects/:projectId/products/:externalId: Idempotent product removal.POST /api/projects/:projectId/diagnostics: Module health and error reporting.- Auth: Bearer tokens with
ss_connector_*prefix, hashed inSearchApiKey, scopeconnector_write. - Product normalization: CMS products normalized to canonical
ProductDocumentschema.
PrestaShop Module (modules/prestashop/aacsearch/)
- 15 PHP files: Main module class, admin controller, HTTP client, product exporter, sync queue, templates, security redirects.
- PrestaShop 8.x compatible: install/uninstall,
displayHeader(widget injection),actionProductUpdate(delta sync),actionObjectProductDeleteAfter(delete),actionUpdateQuantity(stock change). - Configuration: 9 settings via Configuration table (API URL, Project ID, Connector token, Sync/Widget enabled, Locale, Currency, Batch size, Debug mode).
- Full sync: Batch-iterates products → normalizes to ProductDocument → POST to Connector API.
- Admin panel: Dedicated controller under AdminCatalog tab with HelperForm.
Bitrix Module (modules/bitrix/aac.search/)
- 14 PHP files: Module installer, HTTP client, product exporter, sync agent, event handlers, settings/diagnostics pages, widget component.
- 1C-Bitrix 24+ compatible: CIBlockElement integration, catalog/iblock selector, price type handling.
- Events:
OnAfterIBlockElementAdd,OnAfterIBlockElementUpdate,OnAfterIBlockElementDelete. - Background sync: Bitrix agent for periodic full-sync with configurable interval.
- Widget modes: auto-inject, Bitrix component (
aac:search.widget), manual snippet. - Settings: 4-tab admin page (Connection, Catalog, Sync, Widget) + diagnostics page.
Analytics
- Events API:
POST /api/events/:projectId— accepts search_query, zero_results, result_click, widget_open, filter_used events. Bearer auth, Zod validation, no PII stored. - Analytics oRPC:
search.analyticsprocedure — total searches, sessions, CTR, top queries, zero-results, top clicked products, searches-over-time breakdown. Period: last 7/30 days. - Dashboard cards: SearchAnalyticsCards component — StatsTile cards for key metrics, tables for top queries/clicked products, search-time chart.
- i18n: All 4 locales.
Billing / Usage
- Usage summary oRPC:
search.usageSummaryprocedure — searches used, documents indexed, plan limits. - Dashboard cards: SearchUsageCards component — progress bars for searches and documents against plan limits.
- i18n: All 4 locales.
2026-03-30 v3.3.0
Added
Database
- Notification entity: New
Notificationmodel in Prisma and Drizzle (PostgreSQL, MySQL, SQLite) with user association and read/unread state.
Packages
@repo/notifications: Shared module for notification definitions (catalog), creating and listing notifications, marking as read, per-user preferences, and a welcome notification helper.
API
- Notifications oRPC: Procedures to list notifications, get unread count, mark one or all as read, and read/update notification preferences.
SaaS app
- Notification Center: Navbar UI to view notifications and mark them read.
- Notification preferences: Account settings page and form for per-channel preferences; server-only notification logic is kept out of the client bundle for the preferences form.
- Auth: Database hook after user creation creates a welcome in-app notification via
@repo/notifications.
Mail and i18n
Notificationemail template and template wiring; saas and mail translation keys for notifications in English, German, Spanish, and French.
UI
- Popover and Switch components exported from
@repo/uifor notification UI patterns.
Changed
SaaS settings
- Account and organization settings: Removed nested
settings/layout.tsxfor account and org routes; settings sub-pages (general, billing, security, members, etc.) are updated to match the flatter structure. New Notifications route under account settings.
NavBar and theming
- NavBar: Reworked layout and behavior (including notification entry points); Tailwind theme (
tooling/tailwind/theme.css) and related component tweaks for consistency.
2026-03-24 v3.2.0
Testing
- Vitest setup: Added Vitest configuration (
vitest.config.ts) toapps/saas,apps/marketing, andpackages/apiso unit tests can be run withpnpm testin each workspace package. - Unit tests: Added initial unit test suites covering
base-urlhelpers in both apps, content utilities in the marketing app, and organization membership logic, slug generation, and oRPC procedure wiring in the API package. - CI integration: Added a unit test job to the GitHub Actions workflow so all unit tests run on every pull request; the Turbo
testtask no longer depends onbuild.
2026-03-24 v3.1.1
Fixes and improvements
SaaS app
- Checkout return after payment: After Stripe checkout, users are redirected to
/checkout-return, which pollslistPurchasesuntil an active plan appears (avoiding a race with webhook processing). The pricing table passesorganizationIdin the return URL when applicable. If confirmation does not arrive within the timeout, users are sent to/choose-plan. AddedcheckoutReturncopy in English, German, Spanish, and French.
2026-03-23 v3.1.0
Tooling
- Lint and format stack: Replaced Biome with Oxlint and Oxfmt for faster linting and formatting across the monorepo.
- Workspace layout: Consolidated Oxlint/Oxfmt dependencies at the repository root (pnpm catalog) and removed redundant per-package Biome configs; lockfile and many source files were updated to match the new rules and formatter output.
2026-03-18 v3.0.3
Added
Organizations
- Persist last active organization: A new
lastActiveOrganizationIdfield is stored on the user record whenever the active organization changes. On next sign-in, the session is automatically restored to that organization via a better-authdatabaseHook, so users no longer land on a default/empty organization after logging back in.
2026-03-09 v3.0.2
Fixes and improvements
Marketing app
- Tailwind Typography: Added
@tailwindcss/typographyplugin to the marketing app soproseandprose-invertclasses render styled content correctly (blog posts, legal pages, changelogs) - Page spacing: Normalized top padding across marketing pages (blog list, blog post, changelog, contact, legal) from
pt-24 pb-16topy-16for consistent vertical rhythm - Image hostname: Added
picsum.photosto the allowed remote image hostnames innext.config.tsfor blog placeholder images
2026-03-08 v3.0.1
Fixes and improvements
i18n and translation usage
- Single
useTranslations()per component: Removed redundantuseTranslations()hooks (e.g.tSignup,tLogin,tSettings,tPricing,tActions,tAria,tAvatar,tOrgSettings) across marketing and SaaS components. Components now use a singletfor all translation keys. - Color mode labels: Marketing and SaaS
ColorModeTogglenow use the full key pathcommon.colorMode.${option.value}for option labels. - Organization and settings keys:
ChangeOrganizationNameFormnow usesorganizations.settings.changeName.notifications.success/errorandsettings.savevia the sharedt; other organization and settings forms (delete org, logo, change email/name/password, two-factor) use the singletfor their copy.
Payments and purchases
- List purchases enrichment:
listPurchases(packages/api) now returns each purchase with resolvedplanIdandplanPricefrom the payments helper, so clients receive plan data without extra lookups. - Purchase helper:
createPurchasesHelperandgetActivePlanFromPurchasesinpackages/paymentsnow accept aResolvedPurchasetype (with optionalplanIdandplanPrice) and useresolvePurchasePlan/resolvePurchasePlanIdto avoid duplicate provider price resolution when purchases are already enriched.
UI
- SaaS NavBar: Nav link list uses
flex-nowrap,overflow-x-auto, and responsivemd:overflow-visible md:flex-wrapso links scroll horizontally on small screens and wrap on larger ones; sidebar layout keepsmd:flex-nowrapfor the vertical nav.
2026-03-08 v3.0.0
Major architectural changes and breaking updates
This release restructures the monorepo around separate marketing and SaaS applications, expands localization, and reworks billing configuration. The major version bump reflects multiple breaking changes to app paths, imports, route structure, configuration, and payment data.
Summary of breaking changes
- App split: The former
apps/webapplication has been split into dedicatedapps/marketingandapps/saasNext.js apps - Route changes: Marketing routes and SaaS auth/app routes moved into new App Router layouts and path groups
- Config scoping: Marketing and SaaS now use app-local
config.ts,types.ts, and i18n request/config helpers instead of sharingapps/webconfig - Payments model: Billing now uses plan-based configuration and provider
priceIdvalues instead of client-facingproductId - Purchase schema: Purchase records were renamed from
productIdtopriceIdacross Prisma, Drizzle, and generated Zod schemas - i18n split: Translations are now split by scope (
marketing,saas,mail,shared) and loaded through a newgetMessagesForLocalehelper - Translation key updates: Marketing and SaaS UI copy now uses full-length translation keys consistently across forms, nav, pricing, settings, admin, and auth flows
- API removals: The contact and newsletter API routers were removed from
packages/api - Mail changes: Newsletter signup email/template support was removed and mail rendering now resolves scoped translations from
@repo/i18n - UI moves: Several SaaS-specific UI primitives were moved out of
@repo/uiintoapps/saas/modules/shared - Workspace tooling: The workspace now relies on a pnpm catalog for shared dependency versions
Dedicated marketing and SaaS applications
- New apps: Added standalone
apps/marketingandapps/saasapplications with their ownpackage.json,next.config.ts,tsconfig.json, global styles, robots, layouts, config, and Playwright setup - Marketing app: Public pages now live in
apps/marketing, including home, blog index and post routes, changelog, contact, legal pages, sitemap generation, locale switching, and refreshed home-page sections - SaaS app: Protected application routes now live in
apps/saas, with separate authenticated and unauthenticated layouts, account dashboards, organization settings, onboarding, auth pages, and API routes - Removed: Deleted the old combined
apps/webapp and its shared layouts, proxy, sitemap, and duplicated feature modules
Migration steps:
- Update any scripts, deploy targets, env vars, or local workflows that referenced
apps/web - Point public-site work to
apps/marketingand protected-product work toapps/saas - Update route assumptions for auth pages (
/login,/signup, etc.) and SaaS app layouts if you maintain custom links or middleware
Localization and content restructuring
- Scoped translations: Split locale files into
packages/i18n/translations/{locale}/marketing.json,saas.json,mail.json, andshared.json - New locales: Added Spanish (
es) and French (fr) alongside English and German - Typed config: Added typed i18n config/interfaces and exported
config,Locale, and scoped message types from@repo/i18n - Message loading: Added
getMessagesForLocale(locale, scope)with shared-message merging and default-locale fallback behavior - Key normalization: Updated marketing and SaaS components to use explicit full-length translation keys instead of shorter or ambiguous key paths
- App wiring: Marketing and SaaS now each own their locale request/update helpers and locale-aware providers
Migration steps:
- Move any custom translation keys into the new scoped translation files
- Replace imports of old flat message utilities with
getMessagesForLocale - Rename any custom UI translation lookups that still rely on older short-form key paths
- Update any code that assumed only
enanddelocales exist
Payments, auth, and data model updates
- Plan-based checkout:
createCheckoutLinknow acceptsplanId,type, and optionalinterval, then resolves provider price IDs server-side - Payments config: Replaced
productIdpricing config with typed plan definitions,priceIdfields,requireActiveSubscription, and reusable plan lookup helpers - Purchase queries:
listPurchasesnow accepts an optional input object by default, simplifying direct server/client calls - Database schema: Renamed purchase
productIdtopriceIdin Prisma and generated validation output - Auth updates: Better Auth now uses the SaaS base URL, raises the minimum password length to 8, reserves
chatbotas an organization slug, and updates invitation redirects to/loginand/signup
Migration steps:
- Rename any custom purchase schema usage from
productIdtopriceId - Update payment integrations to pass
planIdandintervalrather than provider product IDs - Regenerate and apply database migrations if your environment still uses the old purchase column name
- Verify
NEXT_PUBLIC_SAAS_URLand payment provider price env vars are set for the new split-app setup
Mail, API, and shared component cleanup
- Removed API endpoints: Deleted the contact and newsletter oRPC modules from
packages/api - Mail package refactor: Moved mail helpers into
packages/mail/lib, added scoped mail translation loading, and removed the newsletter signup template/export - Marketing forms: Marketing contact/newsletter flows were refactored along with the new app split rather than continuing to rely on the removed shared API modules
- SaaS UI ownership: Moved password input, settings list/item, page header, and related shared components into the SaaS app to avoid over-generalizing them in
@repo/ui - Workspace cleanup: Added pnpm catalog version management and refreshed package wiring across apps and packages
2026-03-05 v2.0.6
Refactoring
oRPC server-side client and payments
- Server-side oRPC: Introduced a server-only oRPC client that calls the API router directly (no HTTP) during SSR. Added
@orpc/server(1.13.6) toapps/web, neworpc.server.tsthat setsglobalThis.$orpcClientviacreateRouterClient(router, ...), andinstrumentation.tsplus root layout import so the server client is registered before use. - orpc-client: Client now throws on the server ("RPCLink is not allowed on the server side") and uses
window.location.originfor the RPC URL; exportsorpcClientasglobalThis.$orpcClient ?? createORPCClient(link)so server code uses the direct router client. - API:
packages/apinow exportsrouter;payments.listPurchasesprocedure returns the purchases array directly instead of{ purchases }. - Payments: Removed
getPurchasesandapps/web/modules/saas/payments/lib/server.ts. Account and organization billing pages and choose-plan page now callorpcClient.payments.listPurchases()directly; removedattemptAsync(es-toolkit) in favor of directawait.usePurchaseshook updated to usedata ?? []to match the new procedure return shape.
2026-03-05 v2.0.5
Fixes
SaaS app layout – purchase list organization scoping
- Payments / organizations: When redirecting unsubscribed users to the choose-plan page,
organizationIdis now only passed to the payments list when organizations are enabled and billing is attached to the organization (billingAttachedTo === "organization"). Previously,organizationIdwas passed whenever organizations were enabled, which could incorrectly scope or look up purchases by organization when billing was configured at the user level and cause a redirect loop.
2026-03-02 v2.0.4
Dependency updates
oRPC upgrade
- @orpc packages: Upgraded from 1.13.2 to 1.13.6 across the monorepo
- apps/web: Updated
@orpc/clientto 1.13.6 - packages/api: Updated
@orpc/client,@orpc/json-schema,@orpc/openapi,@orpc/server, and@orpc/zodto 1.13.6
2026-02-05 v2.0.3
Radix UI dependency consolidation
Unified Radix UI package migration
- Major dependency update: Migrated from individual
@radix-ui/react-*packages to unifiedradix-uipackage (v1.4.3) - Consolidated dependencies: Replaced 13 separate Radix UI packages with a single
radix-uipackage - Updated all UI components to use new unified package imports:
accordion.tsx: Updated to useAccordionfromradix-uialert-dialog.tsx: Updated to useAlertDialogfromradix-uiavatar.tsx: Updated to useAvatarfromradix-uibutton.tsx: Updated to useSlotandSlottablefromradix-uidialog.tsx: Updated to useDialogfromradix-uidropdown-menu.tsx: Updated to useDropdownMenufromradix-uiform.tsx: Updated to useLabelandSlotfromradix-uilabel.tsx: Updated to useLabelfromradix-uiprogress.tsx: Updated to useProgressfromradix-uiselect.tsx: Updated to useSelectfromradix-uiand migrated icons to Lucidesheet.tsx: Updated to useSheetfromradix-uitabs.tsx: Updated to useTabsfromradix-uitooltip.tsx: Updated to useTooltipfromradix-ui
Icon migration
- Replaced Radix icons: Migrated from
@radix-ui/react-iconsto Lucide icons - Features component: Replaced
MobileIconfrom Radix withSmartphoneIconfrom Lucide - Select component: Replaced
CheckIconfrom Radix with Lucide'sCheckIcon - Removed
@radix-ui/react-iconsdependency
Package updates
- UI package: Updated
packages/ui/package.jsonto use unifiedradix-uipackage - Web app: Updated
apps/web/package.jsonto use unifiedradix-uipackage - Dependencies: Reduced from 13 separate Radix packages to 1 unified package
Benefits:
- Simplified dependency management with single package
- Reduced bundle size and faster install times
- Consistent versioning across all Radix UI components
- Easier maintenance and updates
2026-02-05 v2.0.2
AI Chat refactoring and UI improvements
AI Chat simplification
- Major refactoring: Simplified AI chat feature to streaming-only interface, removing chat persistence
- Removed: Chat storage and CRUD operations (create, list, find, update, delete, add-message procedures)
- Removed:
AiChatdatabase model from all schemas (Prisma, Drizzle MySQL/PostgreSQL/SQLite) - Removed: Database queries for AI chats (
ai-chats.tsfiles) - Simplified: AI router now only exposes a single
streamendpoint for real-time AI responses - Refactored:
AiChatcomponent to use streaming without persistence, using@ai-sdk/react'suseChathook - Simplified: Chatbot pages removed prefetching logic for chat lists and individual chats
- New:
stream-messageprocedure that streams AI responses without storing conversations
Breaking changes:
- Any code using
orpcClient.ai.chats.*endpoints will need to be updated - Database migrations will need to drop the
ai_chattable if it exists - Chat history persistence is no longer available - conversations are session-only
UI component improvements
- NavBar: Added conditional bottom border when scrolled (
border-bwhen!isTop) - Button component: Removed icon opacity styling (
[&>svg]:opacity-60) for better icon visibility - Global styles: Added consistent Lucide icon stroke-width (
1.75) for improved icon rendering
2026-02-05 v2.0.1
UI component enhancements and design improvements
Toast component redesign
- Major enhancement: Complete redesign of the toast component with custom styling and improved UX
- Added custom
Toastcomponent with support for different types (success, error, info, warning, loading, default) - Added automatic icons for each toast type using Lucide icons
- Added helper functions:
toastSuccess,toastError,toastInfo,toastWarning,toastLoading - Added
toastPromisefunction for handling async operations with loading/success/error states - Improved visual design with type-specific border colors and icons
- Added support for action and cancel buttons in toasts
- All form components updated to use the new toast API
Color mode toggle redesign
- Redesigned: Changed from dropdown menu to a modern segmented control/toggle button style
- Added smooth sliding indicator animation for active state
- Replaced dropdown menu with inline toggle buttons for better UX
- Added tooltips for each color mode option (System, Light, Dark)
- Improved accessibility with proper ARIA labels and pressed states
- Added translations for color mode labels (
common.colorMode.system,common.colorMode.light,common.colorMode.dark) - Updated icon from
HardDriveIcontoMonitorCogIconfor system mode
User menu improvements
- Simplified: Removed inline color mode selection submenu from user menu
- Color mode toggle now uses the standalone
ColorModeTogglecomponent - Cleaner menu structure with better separation of concerns
Component styling updates
- Select component: Updated border radius from
rounded-mdtorounded-lgfor consistency with design system - SettingsItem component: Increased left column width from
280pxto320pxfor better content spacing - Theme colors: Updated muted background color from
#1d1e1eto#191b1bfor improved contrast
Form components
- Updated all SaaS form components to use the new toast API:
- Organization forms (Create, Change Name, Delete, Logo, Invite Member)
- Settings forms (Change Email, Change Name, Change Password, Set Password, Delete Account, User Avatar, User Language)
- Admin components (Organization Form, Organization List, User List)
- Organization management components (Members List, Invitations List, Organization Select)
- Security components (Passkeys Block, Two Factor Block, Active Sessions Block)
- Customer Portal Button
2026-02-02 v2.0.0
Major architectural changes and breaking updates
This release introduces significant architectural changes that require migration steps. The major version bump reflects multiple breaking changes across the codebase. All existing code has been updated to use the new structure, but custom code will need manual migration.
Summary of breaking changes
- Docs application: Moved from web app to standalone Next.js app (
apps/docs) - UI components: Moved from
apps/web/modules/ui/topackages/ui/ - Configuration: Removed centralized
config/package, now scoped to individual packages - Shared components: Moved
LogoandSpinnercomponents to@repo/ui - Mail package: Restructured directory layout (removed
src/), removed Logo component and custom provider - Payments package: Moved helper utilities from
src/lib/tolib/ - Mail preview app: New
apps/mail-previewapplication added for email previewing - Not-found pages: New dedicated not-found pages for marketing and SaaS routes
- Import paths: All imports updated throughout codebase (275+ files changed)
Dedicated docs application
Documentation has been moved from the web app to a standalone Next.js application using fumadocs.
Breaking changes:
- Removed docs routes from
apps/web/app/(marketing)/[locale]/docs/[[...path]]/ - Removed docs API route
apps/web/app/api/docs-search/route.ts - Removed
apps/web/app/docs-source.ts - Removed all docs content from
apps/web/content/docs/(includinggetting-started/andindex.mdx) - Removed
TableOfContentscomponent from marketing shared components - Removed docs image from
apps/web/public/images/docs/login.png - Updated
apps/web/content-collections.tsto exclude docs content - Updated
apps/web/app/sitemap.tsto exclude docs routes
New structure:
- Created new
apps/docsapplication using fumadocs - Docs now run as a separate Next.js app (default port 3001)
- Docs content moved to
apps/docs/content/docs/ - Uses fumadocs-ui for improved documentation experience
- Includes AI-powered page actions component
- New docs app has its own
package.json,tsconfig.json, andnext.config.ts
Migration steps:
- If you have custom docs content, migrate it to
apps/docs/content/docs/ - Update any links pointing to
/docs/*routes - docs are now served from the separate app - Remove any imports of
TableOfContentscomponent - Run
pnpm devin theapps/docsdirectory to start the docs server (or usepnpm --filter @repo/docs dev) - Update any CI/CD pipelines that build or deploy docs
UI components moved to packages
All UI components have been moved from the web app to a shared package for better reusability across the monorepo.
Breaking changes:
- Removed all UI components from
apps/web/modules/ui/components/(25+ components including accordion, alert, button, card, dialog, form, input, select, etc.) - Removed
apps/web/modules/ui/lib/index.ts - Removed
apps/web/components.json(shadcn config file) - All component imports throughout the codebase have been updated
New structure:
- Created
packages/uipackage containing all UI components - Components now imported from
@repo/ui/components/[component-name] - Shared utilities (like
cn) available from@repo/ui components.jsonmoved topackages/ui/components.json- Package includes all Radix UI dependencies and styling utilities
Migration steps:
- Update all imports from
apps/web/modules/ui/components/*to@repo/ui/components/* - Update imports of
cnutility fromapps/web/modules/uito@repo/ui - Remove any references to
components.jsonin the web app - Install
@repo/uias a dependency if using UI components in other packages - Update TypeScript path aliases if you had custom ones pointing to the old location
Configuration restructuring
The centralized config package has been removed in favor of scoped configuration files for better package isolation.
Breaking changes:
- Removed
config/package entirely:config/index.tsconfig/package.jsonconfig/tsconfig.jsonconfig/types.ts
- All imports from
@repo/configorconfigwill fail - Config is now scoped to individual packages
New structure:
- Each package now has its own
config.tsfile:apps/web/config.ts- Web app configurationpackages/api/config.ts- API configurationpackages/auth/config.ts- Auth configurationpackages/i18n/config.ts- i18n configurationpackages/mail/config.ts- Mail configurationpackages/payments/config.ts- Payments configurationpackages/storage/config.ts- Storage configuration
- Root
config.tsfile for shared configuration
Migration steps:
- Update imports from
@repo/configorconfigto package-specific configs:import { config } from "@config"for web appimport { config as i18nConfig } from "@repo/i18n/config"for package configs
- Update any code referencing the old config package structure
- Review each package's config file to understand what configuration is available
- Update environment variable usage if config structure changed
Shared components cleanup
Removed unused shared components that are now available in the UI package.
Breaking changes:
- Removed
apps/web/modules/shared/components/Logo.tsx - Removed
apps/web/modules/shared/components/Spinner.tsx - All imports of these components throughout the codebase have been updated
Migration steps:
- Replace any imports of
Logofrom@shared/components/Logo- Logo is now available from@repo/ui - Replace any imports of
Spinner- use skeleton components from@repo/uiinstead - Update any custom code that imports these components
Mail package restructuring
Mail package has been restructured with a flatter directory structure and improved organization.
Breaking changes:
- Removed
packages/mail/src/components/Logo.tsx(use@repo/uiinstead) - Removed
packages/mail/src/provider/custom.tsprovider - Restructured mail package directory layout:
src/components/→components/(PrimaryButton, Wrapper moved)src/provider/→provider/(all providers moved)src/util/→util/(send, templates, translations moved)
- Updated all mail provider implementations to use new config structure
- Updated all mail email templates to use new import paths
New structure:
- Flatter directory structure without
src/directory - Components, providers, and utilities at package root level
- New
packages/mail/config.tsfor mail configuration - New
apps/mail-previewapplication for email previewing (runs on port 3005)
Migration steps:
- If using the Logo component in mail templates, import from
@repo/uiinstead:import { Logo } from "@repo/ui"; - If using custom mail provider, migrate to one of the supported providers:
- Resend
- Nodemailer
- Mailgun
- Postmark
- Plunk
- Console (for development)
- Update mail provider configuration to use
packages/mail/config.ts - Update any imports from
packages/mail/src/*topackages/mail/* - Use
apps/mail-previewapp for previewing emails during development
Payments package restructuring
Payments package has been restructured with helper utilities moved to a new location.
Breaking changes:
- Moved
packages/payments/src/lib/customer.ts→packages/payments/lib/customer.ts - Moved
packages/payments/src/lib/helper.ts→packages/payments/lib/helper.ts(new location) - Removed old
packages/payments/src/lib/helper.ts(duplicate removed) - Updated payment provider implementations (Stripe, LemonSqueezy, DodoPayments, Polar)
- Updated payment procedures to use new config structure
New structure:
- Helper utilities now in
packages/payments/lib/(withoutsrc/prefix) - New
packages/payments/config.tsfor payment configuration
Migration steps:
- Update imports from
packages/payments/src/lib/*topackages/payments/lib/* - Update payment configuration to use
packages/payments/config.ts - Review
packages/payments/lib/directory for helper functions
Import path updates
All components and modules have been updated to use the new import paths throughout the entire codebase.
Affected areas:
- UI component imports across all modules (200+ files updated)
- Config imports throughout the codebase
- Shared component imports
- Mail template imports
- Payment provider imports
Migration steps:
- Run
pnpm installto ensure all workspace dependencies are linked correctly - Update any custom code using old import paths:
apps/web/modules/ui/*→@repo/ui/*@repo/config→ package-specific configs@shared/components/Logo→@repo/ui
- Run type checking:
pnpm type-checkto identify any remaining import issues - Update any custom scripts or build tools that reference old paths
Workspace configuration updates
The workspace structure has been updated to reflect the new package organization.
Breaking changes:
pnpm-workspace.yamlstill referencesconfigpackage (which was removed) - this should be updated manually- Workspace now includes new
apps/docsapplication - Workspace includes new
packages/uipackage
Migration steps:
- Update
pnpm-workspace.yamlto remove theconfigentry:packages: - apps/* - packages/* - tooling/* - Run
pnpm installto refresh workspace links - Verify all packages are properly linked with
pnpm list --depth=0
Biome configuration standardization
All Biome configurations have been standardized across the monorepo for consistency.
Changes:
- Updated all Biome configurations across packages to use consistent settings
- Standardized Biome config format: all package-level configs now extend root config with
"extends": "//" - Root
biome.jsoncontains shared configuration - Package-specific
biome.jsonfiles only override when needed - Database package excludes Prisma-generated zod files from linting
Migration steps:
- If you have custom Biome rules, ensure they follow the new pattern:
{ "root": false, "extends": "//" } - Run
pnpm formatto apply new formatting rules - Run
pnpm lintto check for any linting issues with new config
Package dependencies and workspace structure
Package dependencies have been updated to reflect the new architecture.
Changes:
- Added
@repo/uias a workspace dependency where needed - Updated
pnpm-lock.yamlwith new workspace structure (2760+ lines changed) - Removed dependencies on deleted
configpackage - Updated all package
package.jsonfiles to reflect new structure - Added
@repo/docsworkspace package - Updated tooling packages (scripts, tailwind, typescript) with new dependencies
- Updated i18n translations (en.json, de.json) with new messages
Migration steps:
- Run
pnpm installto ensure all workspace dependencies are linked correctly - Verify workspace structure with
pnpm list --depth=0 - Check for any remaining references to
@repo/configinpackage.jsonfiles
Monorepo organization improvements
The monorepo structure has been improved for better organization and maintainability.
Changes:
- Improved package boundaries and separation of concerns
- Better isolation between apps and packages
- Clearer dependency relationships
- New
apps/docsapplication added to workspace - New
apps/mail-previewapplication added to workspace - New
packages/uipackage for shared UI components - Removed
config/package in favor of scoped configs - Flattened directory structures in mail and payments packages (removed
src/directories)
Benefits:
- Better code organization and discoverability
- Clearer separation between application code and shared packages
- Easier to understand dependencies between packages
- Better support for independent package versioning
Other updates
Documentation:
- Updated
agents.mdto reflect new architecture and import paths - Updated coding guidelines to reference new package structure
- Updated import examples to use new
@repo/uipackage
Configuration:
- Updated
.env.local.examplewith new configuration structure - Updated environment variable documentation
Build and deployment:
- Updated sitemap generation to exclude docs routes
- Updated content collections configuration to exclude docs
- Updated image proxy route configuration
- Updated
turbo.jsonto use TUI interface ("ui": "tui")
New applications:
- Added
apps/docs- Standalone documentation application using fumadocs - Added
apps/mail-preview- Email preview application for development (port 3005)
Not-found pages:
- Added dedicated
not-found.tsxpages for marketing routes (apps/web/app/(marketing)/[locale]/not-found.tsx) - Added dedicated
not-found.tsxpages for SaaS routes (apps/web/app/(saas)/app/not-found.tsx) - Removed
NotFoundcomponent from marketing shared components (now using Next.js not-found pages)
TypeScript:
- Updated TypeScript configurations across packages
- Updated path aliases in
tsconfig.jsonfiles - Added new type definitions for UI package exports
- Added TypeScript configs for new apps (docs, mail-preview)
2026-01-30 v1.3.5
Design system updates and UI improvements
Visual design updates
- Updated color scheme: replaced
bg-cardwithbg-backgroundin navigation and app wrapper for better contrast - Changed newsletter section background from
bg-primary/5tobg-mutedfor consistency - Removed borders from card components and dropdown menus for a cleaner look
- Updated button styles: changed from
rounded-mdtorounded-fullfor a more modern appearance - Increased container max-width from
--container-6xlto--container-7xlfor better use of screen space
Typography improvements
- Increased heading sizes across marketing pages (Hero, Features sections)
- Adjusted letter spacing from
-0.02emto-0.01emfor improved readability - Added max-width constraint to hero paragraph for better text flow
Component enhancements
- Enhanced changelog component: added title field to changelog items with improved layout
- Updated changelog section styling: switched to
rounded-3xlwithbg-mutedbackground - Improved dropdown menu styling: updated border radius and shadow for better visual hierarchy
- Updated settings item component: removed explicit border and rounded corners for cleaner appearance
2026-01-26 v1.3.4
Enhanced organization dashboard with visual trend charts
The organization dashboard now includes interactive trend charts to make the UI more visual.
2026-01-12 v1.3.3
Consolidated agent rules into single agents.md file
All coding agent guidelines have been consolidated into a single, comprehensive agents.md file in the repository root.
Removed files
claude.md- Previous Claude-specific coding guide.windsurfrules- Windsurf editor rules.cursor/rules/*.mdc- All Cursor IDE rule files (7 files)
New files
agents.md- Comprehensive 679-line guide covering:- Technology stack overview
- Monorepo architecture and directory structure
- Import conventions and path aliases
- TypeScript best practices with code examples
- React & Next.js patterns (Server vs Client Components)
- API & Data Layer patterns (oRPC procedures, database queries)
- Authentication & Authorization patterns
- UI & Styling guidelines
- Forms & Validation patterns
- Internationalization
- Configuration management
- Tooling & Quality standards
- Performance optimization guidelines
- Code review checklist
claude.md- Symlink toagents.mdfor Claude Code compatibility
This consolidation provides a single source of truth for all AI coding agents working with the codebase, regardless of the IDE or tool being used.
2026-01-10 v1.3.2
Package updates
- Updated all ORPC packages (
@orpc/client,@orpc/tanstack-query,@orpc/json-schema,@orpc/openapi,@orpc/server,@orpc/zod) from^1.11.2to1.13.2
Code changes
- Removed experimental prefix from
SmartCoercionPluginimport inpackages/api/orpc/handler.ts(changed fromexperimental_SmartCoercionPlugintoSmartCoercionPlugin)
2026-01-02 v1.3.1
Drizzle schema update for better-auth
Updated all drizzle schema files to be aligned with the changes in the latest better-auth version.
Schema updates
- User table: Added
displayUsernamefield andtwoFactorEnabledfield with default value - Passkey table: Added
aaguidfield for authenticator attestation GUID - Organization table: Made
slugfield required (notNull()) and unique - Member table: Added default value
"member"forrolefield and addedcuid()default function foridfield - Invitation table: Added
createdAtfield with default timestamp and default value"pending"forstatusfield - Added performance indexes on
invitation.organizationIdandinvitation.emailfields
Relation updates
- Updated
userRelationsto includemembersrelation - Changed
invitationRelationsfrominvitertouserfor consistency with PostgreSQL schema - Reorganized relation definitions to match PostgreSQL structure
2026-01-02 v1.3.0
New design
- The UI design has been updated to a new, more modern look.
2025-12-22 v1.2.12
Fixed Prisma configuration
Script updates
- Removed explicit
--schema=./prisma/schema.prismaflags from all Prisma scripts (generate, push, migrate, studio) - Scripts now use Prisma's default schema location, simplifying configuration
Configuration cleanup
- Moved
prisma.config.tsfile to the root of the database package
2025-12-21 v1.2.11
Update dependencies
Updated next, react and react-dom to the latest versions.
2025-12-21 v1.2.10
Fixed settings item component
Fixed an issue where the settings item component didn't apply the correct layout.
2025-12-17 v1.2.9
Updated Prisma database push script
- Updated database
pushscript to remove the deprecated--skip-generateflag
2025-12-17 v1.2.8
Updated dependencies
Prisma major version upgrade
- Updated
@prisma/clientfrom6.19.0to7.1.0 - Updated
prismafrom6.19.0to7.1.0 - Updated
prisma-zod-generatorfrom1.32.1to2.1.2
Prisma configuration changes
- Moved
DATABASE_URLconfiguration fromschema.prismadatasource block toprisma.config.tsfile - The
urlfield is now managed through the Prisma config file for better configuration management
Better-auth updates
- Updated
better-authfrom1.4.4to1.4.7in both web app and auth package - Updated
@better-auth/passkeyfrom^1.4.4to^1.4.7
2025-12-16 v1.2.7
TypeScript configuration improvements
Type safety enhancements
- Added explicit type assertions in Creem payment provider for better type safety
TypeScript config updates
- Added
jsx: "preserve"to base TypeScript configuration - Added
DOM.Iterableto React library TypeScript configuration for better DOM type support
Cleanup
- Removed unused
test:webhookscript from payments package - Removed unnecessary
type-checkscript from tailwind config package
2025-12-16 v1.2.6
Updated dependencies
- Updated
nextfrom16.0.7to16.0.10 - Updated
reactfrom19.2.1to19.2.3 - Updated
react-domfrom19.2.1to19.2.3
2025-12-16 v1.2.5
Fixed prisma-zod-generator version
Pinned prisma-zod-generator to version 1.32.1 to prevent automatic upgrades to 1.32.2, which contains breaking changes and is deprecated for Prisma 6.
2025-12-05 v1.2.4
Updated DodoPayments integration
SDK upgrade
- Updated
dodopaymentspackage from^2.5.0to^2.8.0
Webhook improvements
- Refactored webhook handler to use SDK's built-in webhook verification instead of manual signature verification
- Moved webhook secret configuration to client initialization for better security
- Updated webhook event types to match new SDK version:
checkout.session.completed→payment.succeededsubscription.created→subscription.activesubscription.cancelled→subscription.expired- Added support for
subscription.plan_changedevent
- Updated product ID extraction to use
product_cartarray structure from new SDK
2025-12-04 v1.2.3
Improved admin list components
API changes
- Updated pagination parameters from
itemsPerPage/currentPagetolimit/offsetfor better consistency - Changed
searchTermparameter toqueryacross admin list endpoints - Count functions now respect search queries, providing accurate pagination totals when filtering
Search improvements
- Users list: Now searches both name and email fields (case-insensitive)
- Organizations list: Improved to use case-insensitive search
- Search queries are now properly applied to both data fetching and count queries
UI improvements
- Replaced loading spinner with skeleton loaders for better visual feedback during data fetching
- Fixed pagination reset logic to prevent unnecessary page resets on initial component mount
- Improved loading state display with skeleton rows matching the table structure
- Fixed pagination display condition to properly check for total count
2025-12-03 v1.2.2
Updated next, react and react-dom for security updates
A critical-severity vulnerability was found in react server components. We updated the related dependencies to the latest versions to fix the issue.
Read more about the issue here: https://vercel.com/changelog/cve-2025-55182
2025-12-01 v1.2.1
Several small type issues fixed
Fixed type issues in ForgotPasswordForm, SetPasswordForm, ChangePasswordForm, and OrganizationRoleSelect components.
2025-12-01 v1.2.0
Better-auth 1.4 upgrade
Upgraded better-auth from version 1.3.34 to 1.4.4. This version introduces several breaking changes and improvements.
Migration steps
-
Update dependencies:
- Update
better-authto1.4.4in bothapps/web/package.jsonandpackages/auth/package.json - Add
@better-auth/passkeypackage (version^1.4.4) topackages/auth/package.json
- Update
-
Update passkey plugin imports:
- In
packages/auth/auth.ts: Changeimport { passkey } from "better-auth/plugins/passkey"toimport { passkey } from "@better-auth/passkey" - In
packages/auth/client.ts: ChangepasskeyClientimport frombetter-auth/client/pluginstoimport { passkeyClient } from "@better-auth/passkey/client"
- In
-
Update magicLink callback signature:
- Change the
sendMagicLinkcallback fromasync ({ email, url }, request)toasync ({ email, url }, ctx) - Extract the request object from context:
const request = ctx?.request as Request
- Change the
-
Update database schema:
- Run
pnpm db:pushor create a migration to add the following indexes:Session:@@index([userId])Account:@@index([userId])Verification:@@index([identifier])Passkey:@@index([userId])and@@index([credentialID])TwoFactor:@@index([secret])and@@index([userId])Member:@@index([organizationId])and@@index([userId])Invitation:@@index([organizationId])and@@index([email])
- Add
createdAt DateTime @default(now())field to theInvitationmodel
- Run
These changes improve database query performance through additional indexes and align with better-auth 1.4's new plugin architecture where passkey functionality is now a separate package.
2025-11-25 v1.1.4
Fix OpenAPI schema
Fixed was an issue that would cause custom OpenAPI endpoints to not be reachable throught the /api path.
2025-11-23 v1.1.3
Fix active sessions block
Fixed an issue where the removing the current session from the active sessions block was causing a redirect loop on the login page.
2025-11-20 v1.1.2
Fix missing organization settings item in navbar
When in the config file the hideOrganization option is set to true, the organization settings item was missing in the navbar.
2025-11-16 v1.1.1
Remove unnecessary font-sans variable
Removed the unnecessary --font-sans variable from the theme.css file as it is already defined the the layout.tsx file where the font is imported and injected to the html element.
Updated dependencies
All production and development dependencies have been updated to the latest versions.
2025-11-12 v1.1.0
Add claude.md file
For a better coding experience with Claude Code, we have added a claude.md file to the root of the repository.
This file contains the coding guidelines for the project, and is used by Claude Code to generate code.
2025-11-12 v1.0.9
Fix passkeys reload issue
Fixed an issue where the passkeys list was not being reloaded correctly after adding or deleting a passkey.
2025-11-12 v1.0.8
Fix missing fields in auth schema
Added missing fields (aaguid for Passkey and displayUsername for User) in the schema.
This was causing the passkeys creation to fail.
2025-11-12 v1.0.7
Fixed mobile menu closing issue
Fixed an issue where the mobile menu was not closing when clicking on a menu item.
2025-11-11 v1.0.6
Fix content-collections schema
The content-collections schema will soon require the content field to be present in the schema, which previously was automatically generated.
We have added it to the schema to avoid breaking changes with the upcoming content-collections version.
Updated production dependencies
All production dependencies have been updated to the latest versions.
Fixed AI chat component
Fixed a validation issue in the AI chat component that was causing the addMessageToChat procedure to fail.
2025-11-11 v1.0.5
Fix formatting
Ran pnpm format to fix formatting issues in the codebase.
Updated all dependencies
Production and development dependencies have been updated to the latest versions.
2025-11-08 v1.0.4
Fixed AI chat component
Fixed a type issue in the AI chat component.
Fixed Tailwind CSS wrapper component in mail templates
As reported in #2173, some Tailwind CSS classes were not being applied correctly in the email wrapper.
Added typescript as dev dependency to web app
Added typescript as dev dependency to fix the pnpm type-check command.
2025-11-08 v1.0.3
Fixed schema error in addMessageToChat procedure
Fixed a schema error in the addMessageToChat procedure that was causing the OpenAPI schema to be invalid.
2025-11-03 v1.0.2
Updated dependencies
2025-11-03 v1.0.1
Updated React type definitions
Updated @types/react and @types/react-dom from version 19.0.0 to 19.2.2 to include the latest type definitions and bug fixes for React 19.
The pnpm overrides have been consolidated to the root package.json for better consistency across the monorepo.
Optimized pnpm dependency installation
Added onlyBuiltDependencies configuration to pnpm settings to optimize installation time by only building Prisma-related packages (@prisma/client, prisma, and prisma-zod-generator) when needed. This reduces unnecessary rebuilds and speeds up dependency installation in the monorepo.
Added pg dependency
Added pg (PostgreSQL client) as a dependency to support the Prisma Rust-free client migration. The pg package is required by the Prisma database adapter for PostgreSQL connections.
2025-11-03 v1.0.0
Prisma client migration to Rust-free client
In order to reduce the bundle size of the client and improve performance, we have migrated to the Rust-free Prisma client.
Migration steps
If you are upgrading your supastarter project to this version, you need to update the way your prisma client is generated:
-
Update
prismaand@prisma/clientto the latest version. -
In the
schema.prismafile, change theprovidertoprisma-client, theoutputto./generatedand set theengineTypetoclient. -
Update the
packages/database/prisma/client.tslike this:
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "./generated/client";
const prismaClientSingleton = () => {
if (!process.env.DATABASE_URL) {
throw new Error("DATABASE_URL is not set");
}
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL,
});
return new PrismaClient({ adapter });
};
declare global {
var prisma: undefined | ReturnType<typeof prismaClientSingleton>;
}
// biome-ignore lint/suspicious/noRedeclare: This is a singleton
const prisma = globalThis.prisma ?? prismaClientSingleton();
if (process.env.NODE_ENV !== "production") {
globalThis.prisma = prisma;
}
export { prisma as db };In case are using a different database than PostgreSQL, see the following documentation on which adapter to use: https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/no-rust-engine#3-install-the-driver-adapter
Next.js 16 migration
If you are updating an existing project, work through the following steps to align with the new Next.js 16 defaults and Supastarter conventions:
-
Upgrade
next,react, andreact-domto their latest stable releases in bothpackage.jsonfiles (package.jsonat the root andapps/web/package.jsonif it exists). -
Rename the middleware entry point:
- Move
apps/web/middleware.tstoapps/web/proxy.ts. - Inside the renamed file update the exported handler to
export function proxy(...)(it was previouslymiddleware).
- Move
-
Remove the inline ESLint configuration from
apps/web/next.config.ts -
Update the marketing docs layout
apps/web/app/(marketing)/[locale]/docs/[[...path]]/layout.tsx, by changing theDocsLayoutprop fromdisableThemeSwitchtothemeSwitch={{ enabled: true }}.
See https://nextjs.org/docs/app/guides/upgrading/version-16 for full migration guide (beyond the supastarter codebase).
Biome 2.3 upgrade
We have upgraded to Biome 2.3 which introduces some changes to how CSS files are handled and it currently doesn't support the format in which Tailwind CSS 4 is configured, so you need to update the biome.json file to ignore the globals.css file for now:
{
"files": {
"includes": [
"**",
"!zod/index.ts",
"!tailwind-animate.css",
"!!**/globals.css", // <- ignore this file
],
},
"css": {
"parser": {
"tailwindDirectives": true, // <- enable tailwind directives parsing
},
},
}