4658309da18c601e023b268c7c20a89b8f24b36b
Fixes incorrect domain references from "joachim-hummel.de" to "joachimhummel.de" in email templates within artifacts/api-server/src/routes/contact.ts. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: a281c85d-3ef8-4922-a133-4ca233d17a55 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/vRxTy2Z Replit-Helium-Checkpoint-Created: true
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
# 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):
# 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, then generate an API key under SMTP & API → API Keys.
Running Locally
Start both services in separate terminal windows:
# 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
# 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.
Description
Languages
TypeScript
96.4%
CSS
1.6%
HTML
1.3%
JavaScript
0.7%