A Turborepo-powered monorepo consolidating 5 websites with shared UI components and a custom content engine. The infrastructure that powers this entire portfolio.
Overview
This project involved migrating multiple standalone Next.js applications into a unified monorepo architecture. The goal was to eliminate duplication, enable code sharing, and streamline development across all properties.
The result is a development environment where changes to shared components propagate instantly across all sites, deployments are coordinated, and the entire ecosystem can be managed from a single codebase.
The Problem
Managing multiple websites independently creates compounding problems:
- Duplicated code across projects
- Inconsistent styling and behavior
- Deployment complexity with multiple CI/CD pipelines
- Version drift between shared dependencies
- Context switching when working across projects
Each site was a separate repo, separate deployment, separate set of dependencies. Making a consistent change across all properties required coordinating multiple PRs.
The Solution
Turborepo Architecture
The monorepo uses Turborepo for build orchestration. Each site is a separate package, but they share common infrastructure:
/packages
/ui → Shared React components
/content-engine → Content management system
/config → Shared configuration
/sites
/timothy-solomon-dot-com
/hire-timothy-solomon-dot-com
/ftl-marketing-dot-com
/oblio-dot-app
/victory-initiative-dot-com
Shared UI Package
A component library used across all sites:
SiteHeaderandSiteFooterwith site-aware themingButton,Card, and other primitives- Typography and spacing utilities
- Dark mode support
Content Engine
A custom content management system that:
- Parses Markdown with frontmatter
- Generates type-safe content APIs
- Supports multiple content types (posts, projects, pages)
- Enables cross-site content sharing
Technical Stack
- Monorepo: Turborepo with pnpm workspaces
- Framework: Next.js 14 (App Router)
- Language: TypeScript throughout
- Styling: Tailwind CSS with shared config
- Content: Markdown + custom parsing engine
- Deployment: Vercel with per-site configuration
- CI/CD: GitHub Actions with Turborepo caching
Key Features
Parallel Builds
Turborepo runs builds in parallel with intelligent caching. A full rebuild of all 5 sites takes under 2 minutes.
Incremental Adoption
Sites can opt into shared components gradually. Legacy code doesn't need to be rewritten to benefit from the infrastructure.
Unified Theming
Each site has its own brand colors and typography, but they share the same theming system. Changes to the system affect all sites consistently.
Content Portability
Content written for one site can be referenced or displayed on another. The same project descriptions power portfolio pages across multiple properties.
Results
- 90% reduction in duplicated code
- 5x faster feature development for cross-site changes
- Single PR to update all sites simultaneously
- Unified CI/CD with shared GitHub Actions
- Consistent UX across all properties
My Role
Architect and sole developer. I designed the monorepo structure, built the shared packages, migrated all existing sites, and continue to maintain the infrastructure.
This project reflects my belief that good infrastructure compounds. The upfront investment in architecture pays dividends every time I ship a feature.