This monorepo is where I run personal experiments and host my work in production - one codebase for building, testing, and shipping ideas I care about.
It focuses on practical full-stack patterns: type-safe APIs, content pipelines, background jobs, caching, and observability, while staying fast to iterate and reliable to operate.
Inspired by
saas.recipes playbooksBuilt with Turborepo and pnpm, the workspace follows a layered architecture with explicit package boundaries:
Presentation
@mcdougald/portfolio-website with Next.js App Router + React Server Components.
Service
API routes, typed procedures, and backend jobs for async workflows.
Data
PostgreSQL on Neon with Drizzle ORM, migrations, and SQL-first schema control.
73 tables across auth, portfolio, saas, monitoring, and system domains.
Platform
Shared auth, i18n, caching, env validation, email templates, and API clients.
This structure allows UI, application logic, and data infrastructure to evolve independently while preserving end-to-end type contracts across the system.
@mcdougald/portfolio-website
Main product surface and user experience.
418 .ts files · 110 deps
@mcdougald/backend
Worker and scheduler runtime for data sync and archive analysis jobs.
1215 .ts files · 36 deps
@mcdougald/ui
Shared design system and component primitives (281+ components).
261 .ts files · 112 deps
@mcdougald/core
Core utilities, constants, and cross-package helpers.
32 .ts files · 11 deps
@mcdougald/db
Database schemas, migrations, and repository access patterns.
91 .ts files · 14 deps
@mcdougald/i18n
Localization primitives and locale-aware formatting.
16 .ts files · 0 deps
@mcdougald/env
Type-safe runtime configuration.
2 .ts files · 2 deps
@mcdougald/auth
Authentication and session utilities.
4 .ts files · 5 deps
@mcdougald/api
External API clients and adapters.
18 .ts files · 8 deps
@mcdougald/content-collections
Typed content ingestion and validation.
0 .ts files · 0 deps
The @mcdougald/ui package is a long-running design-system effort focused on composability, accessibility, and implementation quality. Through a disciplined component practice, it has grown into 281+ production-ready components that are reused throughout the workspace.