Personal site của Tai Phan — engineer, indie maker. Blog tiếng Việt + portfolio + mini tools (side project tracker).
- Framework: Next.js 16 (App Router) + TypeScript strict
- UI: Tailwind v4 + shadcn/ui (base-nova preset, Base UI primitives) + next-themes
- Database: Postgres (Supabase prod, Docker local) + Prisma 7 với driver adapter
@prisma/adapter-pg - Content: MDX file-based (Plan 02)
- Deploy: Vercel + custom domain
taiphanvan.dev - Tooling: pnpm, Node 22+, Husky + lint-staged
pnpm install
cp .env.example .env.local # fill values — xem docs/SETUP.md
pnpm db:up # local Postgres trong Docker (optional, có thể dùng Supabase)
pnpm prisma migrate deploy # apply schema
pnpm db:seed # 4 starter projects
pnpm dev # http://localhost:3000Setup chi tiết: docs/SETUP.md.
| Doc | Nội dung |
|---|---|
| docs/SETUP.md | First-time setup: clone → install → env → DB → run |
| docs/DATABASE.md | 2-URL Supabase pattern, switch local Docker ↔ Supabase, command cheatsheet |
| docs/TRACKER.md | Side Project Tracker: auth model, env vars, cách dùng |
| docs/DEPLOY.md | Vercel deploy walkthrough, env vars, custom domain, troubleshooting |
| docs/STACK.md | Quyết định stack + version log + breaking changes vs spec gốc |
| plans/ | Phase roadmap — Plan 00 → 04 |
| Script | Mục đích |
|---|---|
pnpm dev |
Dev server (Turbopack) |
pnpm build |
Production build |
pnpm start |
Run production build |
pnpm typecheck |
tsc --noEmit |
pnpm lint / lint:fix |
ESLint |
pnpm format |
Prettier write all |
pnpm db:up |
Start local Postgres (Docker) |
pnpm db:down |
Stop local Postgres |
pnpm db:logs |
Tail local Postgres logs |
pnpm db:reset |
Wipe local DB + migrate + seed |
pnpm db:migrate |
prisma migrate dev (tạo migration mới) |
pnpm db:seed |
Seed 4 starter projects |
pnpm db:studio |
Prisma Studio (GUI) |
pnpm db:generate |
Generate Prisma client |
pnpm new-post "Title" |
Tạo file blog MDX mới với frontmatter prefilled |
Source-available, không phải open source. Code public để bro dev khác tham khảo cách wire Next.js + Prisma + MDX, học theo plans/ folder. Nhưng:
- Content (blog posts, work case studies, /about, /now) thuộc bản quyền Tai Phan, không reuse.
- Clone copy-paste để chạy thành "personal site của bro" là không OK.
- Lifting component patterns, schema, scripts vào project bro thì tự nhiên.
Có gì confused thì DM Tai một câu.