The project has been restructured from a single Next.js application into a Turborepo monorepo with pnpm workspaces. Before the migration, shared logic (utilities, UI components, email templates) was copy-pasted between applications. Changes had to be duplicated manually, and version drift was inevitable.
After the migration, shared code lives in dedicated packages with scoped exports. A utility function is written once and imported consistently across all applications:
// Before: copy-pasted into each app
import { cn } from '@/lib/utils'
// After: single source of truth
import { cn } from '@nextsaasai/utils'
The build system uses Turborepo's task graph to parallelize builds and cache results. Shared packages are built first, then applications consume them as workspace dependencies. Customer delivery preserves the full monorepo structure -- customers receive the same workspace layout used in development.
This is a minor version bump to 0.3.0 because the migration changes the project's fundamental structure, import paths, and build pipeline.