Apps
Portfolio
Multilingual portfolio website with animations, theming, and contact form
Overview
Portfolio is a multilingual personal portfolio website showcasing professional work, experience, education, and projects. Unlike other apps in the monorepo, it has no database backend — all data is static and hardcoded in a single TypeScript file.
Production URL: portfolio.hansenexus.dev
Key Features
- 8 Sections — Hero, About, Work Experience, Milestones, Education, Skills, Projects, Contact
- Bilingual — English and German via next-intl
- Contact Form — SMTP email sending via
@hn-monorepo/email - Lazy Loading — All sections except Hero are lazy-loaded via
next/dynamic() - Animations — Motion library + MagicUI components (BlurFade, Dock, FlickeringGrid)
- Dark/Light Theme — Theme switching via next-themes
Tech Stack
| Component | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Backend | None (static data) |
| i18n | next-intl (en, de) |
| Animations | Motion + MagicUI |
| Theming | next-themes |
| Contact | SMTP via @hn-monorepo/email |
Data Layer
All resume content is stored in a single file:
src/data/resume.ts # Skills, work history, education, projects
src/data/types.ts # TypeScript type definitions for resume data
To update the portfolio content (skills, work history, education, projects), edit src/data/resume.ts directly.
Architecture
src/app/[locale]/page.tsx # Main page (lazy loads sections)
src/components/section/ # 8 page sections
src/components/magicui/ # Animation components
src/messages/ # i18n translations (en.json, de.json)
src/lib/i18n/ # i18n config and routing
src/app/api/contact/ # Contact form API endpoint
Shared Packages
@hn-monorepo/ui, @hn-monorepo/email, @hn-monorepo/monitoring, @hn-monorepo/shared