The 2026 Portfolio Platform is a modern, monorepo-based system for Napatchol Thaipanich (patorsiang). It serves as a unified hub for professional identity, role-targeted CV generation, and experimental projects.
The platform is built as a high-performance monorepo using Bun and Next.js. It separates content from presentation and logic, enabling role-specific views and automated exports.
.
├── apps/
│ └── portfolio-web/ # Main Next.js portfolio application (2026 version)
├── packages/
│ ├── content/ # Structured profile, project, and CV data (Zod/JSON)
│ ├── cv-engine/ # Role-targeted CV logic (filtering, ranking, formatting)
│ ├── ui/ # Shared design system components
│ ├── configs/ # Shared configuration presets (ESLint, Prettier, TS)
│ └── utils/ # Shared utility helpers
├── docs/ # Architecture, requirements, and design decisions
└── infra/ # Infrastructure and deployment configurations
- Bun (latest version)
bun install| Command | Description |
|---|---|
bun run dev |
Start the main portfolio app in development mode |
bun run dev:portfolio |
Alias for bun run dev |
| Command | Description |
|---|---|
bun run build |
Alias for bun run build:portfolio |
bun run build:portfolio |
Build the main Next.js portfolio |
bun run lint |
Run ESLint across the workspace |
bun run typecheck |
Run TypeScript compiler checks |
bun run format:check |
Check file formatting with Prettier |
Contains the "source of truth" for the portfolio. Data is stored as JSON and validated via Zod schemas to ensure consistency across different applications and CV versions.
A specialized engine that generates role-targeted CVs. It handles:
- Filtering: Selecting relevant experiences and projects based on a targeted role.
- Ranking: Prioritizing skills and highlights.
- Exporting: Providing normalized data for Web, JSON, and Markdown formats.
The previous production portfolio (legacy-v1) was removed from the tree on 2026-09-26, after its GitHub Pages deployment had already been decommissioned. Its last state is preserved at the legacy-v1-final tag:
git worktree add ../legacy-v1 legacy-v1-final # browse it outside this tree, never re-staged- Do not commit real
.envfiles. - Use
.env.exampleas a template for local development. - Browser-safe variables must be prefixed with
NEXT_PUBLIC_. - Private secrets belong in Vercel Project Settings or GitHub Actions Secrets.
The platform is configured for continuous deployment to Vercel via GitHub Actions.
- Pushing to
maintriggers a production deployment ofportfolio-web.
- Production: Active —
https://patstudio.vercel.app
See Vercel Deployment Details for project settings and environment configuration.
- Always run
bun run typecheckbefore pushing changes. - Ensure
bun run lintpasses to maintain codebase standards. - Documentation for specific features can be found in the
docs/directory.