A modern, interactive portfolio website styled to look and function like a code editor. Built with Next.js 14, TypeScript, and Tailwind CSS.

Clone the repository:
```bash
git clone https://github.com/yourusername/portfolio.git
cd portfolio
```
Install dependencies:
```bash
npm install
```
Set up environment variables:
```bash
DATABASE_URL="your_database_url"
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="your_clerk_publishable_key"
CLERK_SECRET_KEY="your_clerk_secret_key"
```
Run the development server:
```bash
npm run dev
```
Open http://localhost:3000 in your browser.
src/
├── app/ # Next.js 14 app directory and pages
│ ├── api/ # API routes
│ ├── (routes)/ # App routes and pages
│ └── layout.tsx # Root layout
├── components/ # React components
│ ├── Background/ # Background effects
│ ├── IDE/ # IDE-style UI components
│ └── Terminal/ # Terminal interface
├── contexts/ # React context providers
├── lib/ # Utility functions and shared logic
├── store/ # State management
└── types/ # TypeScript type definitions
The site is configured for deployment on Vercel with the following features:
MIT License - feel free to use this for your own portfolio!
flowchart TB
Client[Client Browser]
Next[Next.js 15 App Router]
Server[Server Actions]
DB[(Postgres DB)]
GH[GitHub API]
WK[WakaTime API]
Clerk[Clerk Auth]
Client --> Next
Next --> Server
Server --> DB
Server --> GH
Server --> WK
Client --> Clerk
Clerk --> Next
subgraph Frontend
Next --> Pages[Pages]
Next --> Components[Components]
Components --> IDE[IDE Components]
Components --> Charts[Data Visualization]
Components --> UI[UI Components]
Components --> Background[Dynamic Background]
Background --> Sun[Sun/Moon System]
Background --> Particles[Particle Effects]
end
subgraph State Management
Components --> Zustand[Zustand Store]
Components --> Context[React Context]
end
subgraph Data Sources
DB --> GuestBook[Guest Book Entries]
GH --> GitHistory[Commit History]
WK --> CodingStats[Coding Statistics]
end
style Frontend fill:#2d2d2d,stroke:#1e1e1e
style State Management fill:#2d2d2d,stroke:#1e1e1e
style Data Sources fill:#2d2d2d,stroke:#1e1e1e
sequenceDiagram
participant Client as Browser
participant Next as Next.js App
participant API as API Routes
participant DB as PostgreSQL
participant GH as GitHub API
participant WK as WakaTime API
Client->>Next: Visit Page
alt Coding Stats Page
Next->>API: Request Coding Stats
API->>WK: Fetch WakaTime Data
WK-->>API: Return Stats
API-->>Next: Return Processed Stats
Next-->>Client: Render Charts
end
alt Git History Page
Next->>API: Request Commit History
API->>GH: Fetch Repository Commits
GH-->>API: Return Commits
API-->>Next: Return Formatted History
Next-->>Client: Render AG Grid Table
end
alt Guest Book Page
Next->>API: Load Guest Book Entries
API->>DB: Query Entries
DB-->>API: Return Entries
API-->>Next: Return Formatted Entries
Next-->>Client: Render Guest Book
Client->>API: Submit New Entry
API->>DB: Insert Entry
DB-->>API: Confirm Insert
API-->>Client: Update UI
end
npm install.env.example)npm run devCreate a .env.local file with the following variables:
POSTGRES_URL=
POSTGRES_PRISMA_URL=
POSTGRES_URL_NO_SSL=
POSTGRES_URL_NON_POOLING=
POSTGRES_USER=
POSTGRES_HOST=
POSTGRES_PASSWORD=
POSTGRES_DATABASE=
GITHUB_PAT=
The application is deployed on Vercel and uses Vercel Postgres for the database.