A minimal, high-performance portfolio template designed for developers and designers. Built with Next.js 16, Neon DB (PostgreSQL 17), and modern web standards. Features a fully functional Admin Dashboard for managing content without code changes.
Features • Getting Started • Deployment • Customization
- Modern & Minimalist: Clean aesthetics with focus on content and typography.
- Dynamic Content: Works, Writing (Blog), and About pages powered by Neon DB.
- SEO Optimized: Automatic sitemap generation, OpenGraph tags, and JSON-LD structured data.
- Performance First: Built on Next.js App Router with server components and image optimization.
- Responsive: Mobile-first design that adapts seamlessly to all devices.
- Secure Authentication: Email + password login with JWT sessions.
- MFA Support: Optional TOTP (Time-based One-Time Password) for extra security.
- Content Management System:
- Works: CRUD operations for projects with draft/published states.
- Writing: Full markdown editor for blog posts.
- Profile: Update bio, experience, skills, and social links instantly.
- Framework: Next.js 16 (App Router)
- Database: Neon DB (PostgreSQL 17) with Drizzle ORM
- Auth: JWT sessions (jose) + bcrypt passwords + TOTP MFA
- Styling: CSS Modules with Design Tokens
- Analytics: Vercel Analytics
- Deployment: Vercel
git clone https://github.com/yourusername/portfolio-template.git my-portfolio
cd my-portfolio
npm installCreate a .env.local file in the root directory:
cp .env.example .env.localFill in your configuration:
# Neon DB — get your connection string from https://console.neon.tech
DATABASE_URL=postgresql://user:password@ep-xxx.region.aws.neon.tech/dbname?sslmode=require
# JWT secret — generate with: openssl rand -base64 32
JWT_SECRET=your-random-secret-here
NEXT_PUBLIC_SITE_URL=http://localhost:3000
# Branding
NEXT_PUBLIC_HERO_NAME=Your Name
NEXT_PUBLIC_HERO_PHONETIC=your-pho-net-ic
NEXT_PUBLIC_HERO_TAGLINE=Your professional tagline.
NEXT_PUBLIC_LOGO_TEXT=LP
# Owner Info (SEO)
NEXT_PUBLIC_OWNER_NAME=Your Name
NEXT_PUBLIC_OWNER_TITLE=Software Engineer
NEXT_PUBLIC_OWNER_EMAIL=hello@example.com
NEXT_PUBLIC_OWNER_GITHUB=https://github.com/yourusername
NEXT_PUBLIC_OWNER_LINKEDIN=https://linkedin.com/in/yourusername
NEXT_PUBLIC_OWNER_TWITTER=@yourhandle- Create a project on Neon (PostgreSQL 17).
- Copy your connection string into
DATABASE_URLin.env.local. - Push the schema:
npm run db:push - Create your admin user (see
.env.examplefor instructions).
npm run devVisit http://localhost:3000 to see your new portfolio.
The easiest way to deploy is with Vercel.
- Push your code to a GitHub repository.
- Import the project into Vercel.
- Add the Environment Variables (copy from your
.env.local). - Hit Deploy.
Note: Don't forget to update
NEXT_PUBLIC_SITE_URLto your production domain in the Vercel dashboard.
This template is designed to be "config-first". Most branding can be changed via environment variables.
Replace public/banner.png with your own 1200x600 branding image.
Core styles are defined in src/app/globals.css using CSS variables. You can easily update the color palette there.
:root {
--background: #ffffff;
--foreground: #171717;
--accent: #333333;
/* ... */
}This project is open source and available under the MIT License.