# Joachim Hummel – Portfolio

Personal portfolio website for Joachim Hummel — Senior IT-Consultant, DevOps Engineer, KI-Automation Experte.

Built with React + Vite (frontend) and Express 5 (API), running as a pnpm monorepo.

---

## Prerequisites

- **Node.js** 24+
- **pnpm** 10+ — install via `npm install -g pnpm`

---

## Installation

```bash
# 1. Clone the repository
git clone <repo-url>
cd <repo-folder>

# 2. Install all workspace dependencies
pnpm install
```

---

## Environment Variables

Create a `.env` file in the project root (or export the variables in your shell):

```env
# Session secret — any long random string (required)
SESSION_SECRET=your-very-long-random-secret-here

# Brevo (Sendinblue) API key — required for the contact form to send emails
BREVO_API_KEY=your-brevo-api-key
```

> **Brevo API key:** Sign up for free at [brevo.com](https://www.brevo.com), then generate an API key under *SMTP & API → API Keys*.

---

## Running Locally

Start both services in separate terminal windows:

```bash
# Terminal 1 — API server (http://localhost:8080)
pnpm --filter @workspace/api-server run dev

# Terminal 2 — Frontend (http://localhost:23924)
pnpm --filter @workspace/joachim-portfolio run dev
```

Open **http://localhost:23924** in your browser.

---

## Project Structure

```
artifacts/
  api-server/          # Express 5 API — contact form, email via Brevo
  joachim-portfolio/   # React + Vite frontend (portfolio site)
lib/
  api-spec/            # OpenAPI spec + generated client hooks
  api-client-react/    # Generated React Query hooks (from Orval)
scripts/               # Utility scripts
```

---

## Useful Commands

| Command | Description |
|---------|-------------|
| `pnpm install` | Install all dependencies |
| `pnpm run typecheck` | Full TypeScript check across all packages |
| `pnpm run build` | Typecheck + build all packages |
| `pnpm --filter @workspace/api-spec run codegen` | Regenerate API hooks from OpenAPI spec |

---

## Production Build

```bash
# Build frontend static files
pnpm --filter @workspace/joachim-portfolio run build
# Output: artifacts/joachim-portfolio/dist/public

# Build API server
pnpm --filter @workspace/api-server run build
# Output: artifacts/api-server/dist/index.mjs

# Start API server in production
NODE_ENV=production PORT=8080 node --enable-source-maps artifacts/api-server/dist/index.mjs
```

Serve the frontend's `dist/public` folder via any static file server (Nginx, Caddy, etc.) and proxy `/api/*` requests to the API server.
