# Portfolio Website

A modern, minimalist portfolio built with Next.js, TypeScript, and shadcn/ui. Features a clean dark theme design with static site generation for optimal performance.

## Tech Stack

- **Framework:** Next.js 16.0.10
- **Language:** TypeScript 5.9.3
- **UI Library:** React 19.2.1
- **Component Library:** shadcn/ui
- **Styling:** Tailwind CSS 4.1.18
- **Content:** Markdown files with gray-matter and react-markdown

## Getting Started

### Development

Run the development server:

```bash
npm run dev
```

Open [http://localhost:3000](http://localhost:3000) to view the site.

### Build

Create an optimized production build:

```bash
npm run build
```

### Production

Start the production server:

```bash
npm start
```

## Project Structure

```
├── app/                    # Next.js app directory
│   ├── page.tsx           # Landing page
│   ├── about/             # About page
│   ├── blog/              # Blog pages
│   │   ├── page.tsx       # Blog listing
│   │   └── [slug]/        # Individual blog posts
│   └── projects/          # Projects page
├── components/            # React components
│   ├── navigation.tsx     # Site navigation
│   ├── blog-card.tsx      # Blog post card
│   └── project-card.tsx   # Project card
├── content/               # Markdown content
│   ├── blog/             # Blog post markdown files
│   └── projects/         # Project markdown files
└── lib/                   # Utility functions
    └── content.ts        # Content parsing utilities
```

## Adding Content

### Blog Posts

Create a new markdown file in `content/blog/`:

```markdown
---
title: 'Your Post Title'
date: '2025-12-12'
excerpt: 'A brief summary of your post'
---

Your post content here...
```

### Projects

Create a new markdown file in `content/projects/`:

```markdown
---
title: 'Your Project'
description: 'A brief description'
links:
  github: 'https://github.com/username/repo'
  live: 'https://example.com'
  gitea: 'https://gitea.example.com/username/repo'
---

Detailed project description...
```

## Customization

### Personal Information

Update the following files with your information:

- `app/page.tsx` - Update the welcome message and name
- `app/about/page.tsx` - Update bio, photo, and social links
- `app/layout.tsx` - Update site metadata

### Styling

The site uses a dark theme by default. To customize colors, edit `app/globals.css` and modify the CSS variables in the `.dark` class.

## Dependencies

All dependencies are pinned to exact versions for reproducible builds. To update dependencies, modify `package.json` and run `npm install`.

## Docker Deployment

This project includes Docker support for easy deployment with Traefik.

### Prerequisites

- Docker and Docker Compose installed
- Traefik running in your environment
- A `traefik` external network created

### Setup

1. Update the domain in `compose.yaml`:

   ```yaml
   - "traefik.http.routers.portfolio.rule=Host(`your-domain.com`)"
   - "traefik.http.routers.portfolio-secure.rule=Host(`your-domain.com`)"
   ```

2. Build and start the container:

   ```bash
   docker compose up -d
   ```

3. View logs:

   ```bash
   docker compose logs -f
   ```

### Traefik Configuration

The compose file includes:

- Automatic HTTP to HTTPS redirect
- Let's Encrypt SSL certificate generation
- Load balancer configuration for port 3000
- Dockge labels for better organization

### Using with Dockge

Simply import the `compose.yaml` file into Dockge, or place this project directory in your Dockge stacks folder. The service will appear with the metadata labels for easy identification.

## License

This project is open source and available under the MIT License.
