A pixel-perfect, open-source portfolio, blog, and shadcn component registry. Built with Next.js 16, Tailwind CSS v4, and React 19.
→ Live: wistant.me
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Styling | Tailwind CSS v4 |
| UI | shadcn/ui + Radix UI |
| Content | MDX (next-mdx-remote) |
| Runtime | React 19 |
| Package | pnpm |
| Deploy | Vercel |
- Clean, modern design with Light/Dark themes
- Component registry powered by the shadcn CLI
- Blog and documentation system via MDX
- SEO-optimized (JSON-LD schema, sitemap, robots.txt)
- AI-ready with /llms.txt support
- Analytics-ready (PostHog / OpenPanel)
- PWA-installable
src/
├── app/ # App Router pages, layouts, API routes
├── components/ # Shared UI and domain components
│ ├── portfolio/ # Portfolio-specific sections
│ ├── blog/ # Blog-specific components
│ └── doc/ # Documentation components
├── content/ # MDX content (blog posts, component docs)
├── data/ # Static typed data (portfolio facts, projects...)
├── registry/ # shadcn component registry
├── config/ # Site & registry configuration
├── hooks/ # React hooks
├── lib/ # Core utilities and libraries
├── types/ # Shared TypeScript types
└── utils/ # Pure utility functions
# Clone the repo
git clone https://github.com/wistant/portfolio.git
cd portfolio
# Install dependencies
pnpm install
# Start the dev server
pnpm devRequires Node.js 22.x and pnpm >= 9.
Copy .env.example to .env.local and fill in the required values:
cp .env.example .env.localpnpm dev # Start the dev server (Turbopack)
pnpm build # Production build
pnpm lint # ESLint
pnpm format:write # Prettier
pnpm check-types # TypeScript strict check
pnpm registry:build # Build the shadcn registry
pnpm push # Run the release orchestrator (tooling/push.sh)
pnpm sync # Sync branch with GitHub (tooling/sync.sh)This project uses a strict atomic-commit and release pipeline:
| Workflow | Trigger | Purpose |
|---|---|---|
ci.yml |
Push / PR | Lint, typecheck, build validation |
release.yml |
Push to main |
Changeset versioning + GitHub Release |
Locally, the tooling/ directory contains:
push.sh— Quality guard before pushing (format, lint, changeset intent)sync.sh— Rebase-based upstream synchronizationmake-release-description.sh— Generates structured release notes from git log
Licensed under the MIT License.
You are free to use, fork, and adapt this project. If you do, please remove my personal information before publishing your own version.