A modern portfolio website built with Next.js 15, featuring a public-facing site and an admin dashboard for content management.
- Public Portfolio: Showcase work, blog articles, and personal information
- Admin Dashboard: Manage articles, work projects, experiences, and categories
- Rich Text Editor: TipTap-powered editor for content creation
- Authentication: NextAuth with role-based access control (Admin/Super Admin)
- Animations: GSAP-powered animations and smooth scrolling
- PWA Support: Progressive Web App capabilities
- Image Management: Cloudinary integration for media handling
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Database: PostgreSQL with Prisma ORM
- Authentication: NextAuth v5
- Styling: Tailwind CSS 4
- UI Components: Radix UI
- Animations: GSAP, Lenis
- Rich Text: TipTap
- State Management: Zustand, TanStack Query
- Clone the repository:
git clone <repository-url>
cd portfolio-v2- Install dependencies:
npm install- Set up environment variables:
cp .env.example .env.localRequired environment variables:
DATABASE_URL- PostgreSQL connection stringAUTH_SECRET- Secret for NextAuth (generate withopenssl rand -base64 32)NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME- Cloudinary cloud nameNEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET- Cloudinary upload preset
- Set up the database:
npx prisma migrate dev
npx prisma generate- Create a super admin user:
npm run createsuperuser- (Optional) Seed the database, you may as well update the seed file for different content:
npm run seed- Start the development server:
npm run devOpen http://localhost:3000 to view the site.
npm run dev- Start development server with Turbopacknpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run createsuperuser- Create a super admin usernpm run seed- Seed the database with sample data
├── app/ # Next.js app router pages
│ ├── (pages)/ # Route groups
│ │ ├── (web)/ # Public-facing pages
│ │ └── admin/ # Admin dashboard
│ └── api/ # API routes
├── components/ # React components
│ ├── admin/ # Admin-specific components
│ ├── web/ # Public site components
│ └── ui/ # Reusable UI components
├── lib/ # Utility functions
├── hooks/ # Custom React hooks
├── prisma/ # Prisma schema and migrations
└── types/ # TypeScript type definitions
Contributions are welcome! Please read the Contributing Guide for details.
See LICENSE file for details.