# Portfolio — Senior Fullstack Engineer A modern, production-grade portfolio website built with Next.js 15, TailwindCSS, Framer Motion, and Prisma. ## Tech Stack - **Frontend**: Next.js 15 (App Router), React 19, TypeScript - **Styling**: TailwindCSS + custom design tokens - **Animations**: Framer Motion - **ORM**: Prisma (PostgreSQL) - **Validation**: Zod + React Hook Form - **Icons**: Lucide React + React Icons ## Project Structure ``` src/ ├── app/ │ ├── api/ │ │ └── contact/ # Contact form API route │ ├── globals.css │ ├── layout.tsx # Root layout with SEO metadata │ └── page.tsx # Home page (Server Component) ├── components/ │ ├── sections/ # Full-page section components │ │ ├── Navbar.tsx │ │ ├── HeroSection.tsx │ │ ├── AboutSection.tsx │ │ ├── TechStackSection.tsx │ │ ├── ProjectsSection.tsx │ │ ├── ExperienceSection.tsx │ │ ├── ArchitectureSection.tsx │ │ ├── ContactSection.tsx │ │ └── Footer.tsx │ └── ui/ # Reusable UI components │ └── ProjectCard.tsx ├── lib/ │ ├── prisma.ts # Prisma client singleton │ └── utils.ts # cn() utility └── types/ └── index.ts # TypeScript types prisma/ ├── schema.prisma # Database schema └── seed.ts # Seed data ``` ## Getting Started ### 1. Install dependencies ```bash npm install # Also install react-icons for tech stack icons npm install react-icons ``` ### 2. Setup environment ```bash cp .env.example .env # Edit .env with your DATABASE_URL ``` ### 3. Setup database ```bash npm run db:generate # Generate Prisma client npm run db:push # Push schema to database npx ts-node prisma/seed.ts # Seed with sample data ``` ### 4. Run development server ```bash npm run dev ``` Open [http://localhost:3000](http://localhost:3000) ## Customization ### Personal Information Update these files with your information: - `src/app/layout.tsx` — SEO metadata (name, description, URL) - `src/components/sections/HeroSection.tsx` — Hero text & social links - `src/components/sections/AboutSection.tsx` — Bio, stats, skills - `src/components/sections/Footer.tsx` — Social links, email - `src/components/sections/ContactSection.tsx` — Contact info ### Database Content After running seed, use Prisma Studio to manage content: ```bash npm run db:studio ``` Or update `prisma/seed.ts` with your actual projects and experience data. ## Architecture Philosophy This portfolio demonstrates the same architectural principles I apply in all projects: - **Clean folder structure** — scalable and maintainable - **Server Components** — data fetching at the server level with graceful fallbacks - **Type safety** — full TypeScript throughout - **Separation of concerns** — UI components separate from data fetching - **Graceful degradation** — fallback data when DB is not connected ## Deployment Deploy to Vercel (recommended): 1. Push to GitHub 2. Import to Vercel 3. Add `DATABASE_URL` environment variable 4. Deploy For PostgreSQL, use [Supabase](https://supabase.com) or [Neon](https://neon.tech) for free hosted PostgreSQL.