Public mirror
synced 2026-11-02 10:37:16 +01:00
Watch 1
Fork 0
You've already forked portfolio

Latest commit

Tobias Klingenberg
0de3ead 2026-10-31 22:49:44 +00:00 123 commits
2026-10-31 17:28:31 +00:00
2026-02-01 14:02:48 +01:00
2026-09-28 19:50:45 +02:00
2026-09-16 20:31:23 +02:00
2026-02-01 14:02:48 +01:00
2026-10-31 17:46:25 +00:00
2026-07-19 00:25:45 +02:00
2026-02-01 14:02:48 +01:00
2026-07-19 00:25:45 +02:00
2026-10-31 17:28:31 +00:00
2026-02-01 14:02:48 +01:00
2026-02-01 14:02:48 +01:00
2026-02-01 14:02:48 +01:00
2026-10-31 17:28:31 +00:00
2026-10-31 17:28:31 +00:00
2026-09-28 19:50:45 +02:00
2026-02-01 14:02:48 +01:00
2026-09-16 20:31:23 +02:00
2026-10-31 17:28:31 +00:00
2026-10-31 17:28:31 +00:00
2026-02-01 14:02:48 +01:00
2026-02-01 14:02:48 +01:00
2026-10-31 17:28:31 +00:00
2026-02-03 00:39:52 +01:00

Portfolio

Build Vite App

Clean, animated personal portfolio built with Vue 3 + Vite. Content lives in simple Markdown files and a few small data helpers, so you can update sections without touching components.

NOTE: My live version of this site can be found here: klingenberg.dev

Features

  • Modern Vue 3 + Vite setup with motion and custom cursor details
  • Content-first: projects, education, work, and publications pulled from Markdown
  • Easy theming with Tailwind-style utility classes and light/dark support
  • Popup-driven detail views for projects, CV, and publications (PDF preview included)

Quickstart

npm ci
npm run dev

Recommended: Node 20 (package.json engines covers ^20.19.0 or >=22.12.0).

Customization

  • Edit content in Markdown under src/data/content/... (projects, education, work, publications). Entries are ordered by filename, so use numeric prefixes (e.g., 05-latest.md … 01-oldest.md) to keep newest first.
  • Adjust small data helpers in src/data if you add new fields. Components read from those typed loaders.
  • Assets like PDFs for publications live in src/data/content/publications/papers; reference filenames in the Markdown frontmatter.

NOTE: More information on customization is here

Scripts

  • Development: npm run dev
  • Type-check: npm run type-check
  • Build: npm run build
  • Preview build: npm run preview

Environment

  • VITE_GIT_HASH and VITE_GIT_BRANCH are set automatically by the npm scripts for build metadata; you normally do not need to set them manually.
  • SET VITE_BASE_URL as your site URL and VITE_GITHUB_URL as the repository hosting your instance

Tech Stack

  • Vue 3, Vite, TypeScript
  • motion-v for animations
  • @tato30/vue-pdf for inline PDF previews
  • gray-matter for parsing Markdown content

Toolchain and checks

Use Node.js 26.13.0 (see .nvmrc or Volta) and npm 12.2.1. The Nix shell and Docker build also use Node.js 26.

npm ci
npm run lint
npm run build
npm audit

Run npm run lint:fix to apply automatic lint fixes. TypeScript stays on 6.0, the newest release line supported by the ESLint TypeScript parser.

The minimatch override keeps ESLint and its parsers on the patched 11.x release until their upstream dependency ranges catch up.

Deployment badge

Production builds hide the badge by default; npm run dev uses the Develop label from .env.development. Vite embeds VITE_BADGE_TEXT during the build, so changing the running Nginx container environment does not change an existing bundle.

To rebuild with no badge using Compose:

VITE_BADGE_TEXT= docker compose up -d --build

For other Docker builders, pass --build-arg VITE_BADGE_TEXT= (or set the build argument in your deployment platform). Set a nonempty build argument to display a custom badge. Rebuild and redeploy the image after changing the value.