No description
Find a file
Chneemann 8c98df1ea1
All checks were successful
Deploy Portfolio to VPS / deploy (push) Successful in 28s
feat: make ESC button interactive to close modal on mouse click
2026-08-07 15:55:40 +02:00
.forgejo/workflows ci: fix deployment working directory to httpdocs 2026-07-30 11:52:07 +02:00
public fix: update localized imprint/privacy routes and expand sitemap for multilinguality 2026-08-05 16:50:54 +02:00
src feat: make ESC button interactive to close modal on mouse click 2026-08-07 15:55:40 +02:00
.gitignore feat: rewrite analytics system in Next.js and remove PHP backend 2026-07-31 09:03:19 +02:00
Dockerfile fix: switch from npm ci to npm install in Dockerfile 2026-08-01 08:32:02 +02:00
eslint.config.mjs feat: initialize Next.js project 2026-07-16 18:44:38 +02:00
next.config.ts feat: add next-intl support for localization and update README.md 2026-08-01 08:16:20 +02:00
package-lock.json fix: add package overrides for zero vulnerabilities 2026-08-01 08:52:49 +02:00
package.json fix: add package overrides for zero vulnerabilities 2026-08-01 08:52:49 +02:00
postcss.config.mjs feat: initialize Next.js project 2026-07-16 18:44:38 +02:00
README.md feat: add next-intl support for localization and update README.md 2026-08-01 08:16:20 +02:00
tsconfig.json feat: add next-intl support for localization and update README.md 2026-08-01 08:16:20 +02:00

André Kempf — Developer Portfolio

A fast, privacy-focused, and accessible developer portfolio built with Next.js 16 (App Router), Tailwind CSS, and React 19, backed by multi-language support (next-intl) and a custom analytics setup.

Deployment Status Website Status Next.js React TypeScript Tailwind CSS


🚀 Key Features

  • Command Palette (Cmd + K): Interactive utility menu with keyboard shortcuts, quick social navigation, resume downloads, and contextual actions.
  • Internationalization (next-intl): Fully integrated multi-language support (English and German) with localized routing (/en, /de) and dynamic message loading.
  • Privacy-First Analytics Engine: Custom Next.js API backend providing real-time page metric tracking using session-based rate limiting and GDPR-compliant IP hashing.
  • Terminal Inspector: Integrated terminal widget and modal to view live system metrics, device usage ratios, and ping response latency.
  • Performance & Accessibility: Zero layout shifts (CLS), optimized font loading, dynamic SSR/client component boundaries, and high contrast Dark/Slate aesthetic.

🛠️ Tech Stack & Architecture

Frontend

  • Framework: Next.js 16 (App Router)
  • UI & Styling: React 19, Tailwind CSS v4
  • Localization: next-intl (Routing, Middleware Proxy & Client/Server translation context)
  • Icons & Components: Lucide Icons, Custom UI Components
  • State & Events: Native CustomEvents, React State

Backend & Analytics

  • Runtime: Node.js / Next.js API Routes (App Router)
  • Data Privacy: One-way IP Hashing (SHA-256 / daily salt), Session Rate Limiting
  • Protocol: JSON REST API / Server Actions

Infrastructure & CI/CD

  • Hosting: VPS / Docker Containers
  • CI/CD Pipeline: Self-hosted Forgejo Actions (Automated build & SSH deployment)
  • Mirroring: Automated sync to GitHub

🛠️ Getting Started

Prerequisites

  • Node.js: v18.18.0 or higher (v20+ / v26+ recommended)
  • Package Manager: npm / pnpm / yarn

Local Setup

  1. Clone the repository:

    git clone [https://git.andre-kempf.com/Chneemann/portfolio.git](https://git.andre-kempf.com/Chneemann/portfolio.git)
    cd portfolio
    
  2. Install dependencies:

    npm install
    
  3. Start development server:

    npm run dev
    

    Open http://localhost:3000 in your browser.


📁 Repository Structure

├── src/                            # Source Code
│   ├── app/                        # Next.js App Router (Pages, Routes & API)
│   │   ├── [locale]/               # Localized App Routes (en / de)
│   │   │   ├── layout.tsx          # Localized Layout (NextIntlClientProvider & Shell UI)
│   │   │   └── page.tsx            # Landing Page / Main View
│   │   ├── api/                    # Native Next.js Route Handlers
│   │   │   └── analytics/
│   │   │       └── route.ts        # Live Metrics & Traffic Handler (JSON-based)
│   │   ├── imprint/
│   │   │   └── page.tsx            # Imprint Page
│   │   ├── privacy/
│   │   │   └── page.tsx            # Privacy Policy Page
│   │   ├── globals.css             # Global Styles & Tailwind Imports
│   │
│   ├── components/                 # Reusable UI & Layout Components
│   │   ├── About.tsx               # About Me & Bio Section
│   │   ├── AnalyticsModal.tsx      # Terminal-Style Analytics Modal
│   │   ├── AnalyticsWidget.tsx     # Footer Performance & Metrics Badge
│   │   ├── Background.tsx          # Dynamic Canvas / Background Effects
│   │   ├── CommandPalette.tsx      # Cmd+K Interactive Command Menu
│   │   ├── Contact.tsx             # Contact Form Section (Formspree Integration)
│   │   ├── Footer.tsx              # Footer with Links & Credits
│   │   ├── Header.tsx              # Navigation Header & Search Trigger
│   │   ├── Hero.tsx                # Hero Section / Intro Banner
│   │   ├── Portfolio.tsx           # Project Showcase & Cards
│   │   ├── Skills.tsx              # Tech Stack & Skill Matrix
│   │   └── Social.tsx              # Social Media Links & Bar Component
│   │
│   ├── lib/                        # Pure Utility Scripts, Configs & Helpers
│   │   ├── paletteCommands.ts      # Registered Cmd+K Commands & Actions
│   │   └── playSudoEasterEgg.ts    # Easter-Egg Shell Simulation Logic
│   │
│   ├── i18n/                       # Localization Core & Configurations
│   │   ├── messages/               # Translation JSON files (en.json, de.json)
│   │   ├── navigation.ts           # Localized navigation utilities (Link, redirect, useRouter)
│   │   ├── request.ts              # Dynamic message loading per request locale
│   │   └── routing.ts              # Supported locales and default fallback rules
│   │
│   └── proxy.ts                    # Next.js Middleware Proxy for next-intl routing
│
├── public/                         # Static Assets (Client Access)
│   ├── robots.txt                  # Search Engine Directives
│   ├── sitemap.xml                 # XML Sitemap
│   └── assets/
│       ├── downloads/              # Downloadable Files (e.g. CV PDF)
│       ├── icons/                  # SVG Icons & Favicons
│       ├── images/                 # Profile Assets & Screenshots
│       └── projects/               # Project Graphics & Previews
│
├── Dockerfile                      # Container Build Instructions
├── eslint.config.mjs               # ESLint Rules
├── next.config.ts                  # Next.js Configuration
├── package.json                    # Project Dependencies & Scripts
├── postcss.config.mjs              # PostCSS Setup
├── README.md                       # Project Documentation
└── tsconfig.json                   # TypeScript Compiler Rules

📜 License & Credits

  • Author: André Kempf (dev@andre-kempf.com)
  • Design & Code: Built from scratch with Next.js, React & Tailwind CSS.