A cutting-edge portfolio website featuring dynamic WebGL visualizations built with Three.js, showcasing expertise in DevOps engineering, infrastructure automation, and cloud-native technologies.
This portfolio is designed for DevOps automation contract engagements, featuring:
- Interactive 3D Visualizations — Charged Magnetosphere particle system (inspired by Robert Hodgin's iconic visualizer)
- Performance-Optimized — 60fps rendering on desktop, 30-45fps on mobile
- Modern Tech Stack — Vue 3, TypeScript, Vite, Docker
- Responsive Design — Works seamlessly on mobile, tablet, and desktop
- AI-Enhanced — Leveraging Claude, Gemini, and modern LLMs
- Vue 3 — Progressive JavaScript framework for reactive UIs
- TypeScript — Type-safe development
- Three.js — WebGL rendering library for 3D graphics
- GSAP — Animation library for smooth transitions
- Tailwind CSS — Utility-first CSS framework
- Vite — Next-generation frontend build tool
- Elysia — Lightweight, fast Bun HTTP server
- TypeScript — End-to-end type safety
- Bun — Ultra-fast JavaScript runtime
- Docker — Containerization for consistent deployments
- Docker Compose — Multi-container orchestration
Charged Magnetosphere Theme (Default)
- Charged particle system with attractive/repulsive forces
- Complementary color pairs randomized at load
- Smooth drift and organic particle interactions
- Perfect backdrop for portfolio content
- Clean, minimal top-right navigation (ABOUT, SKILLS, RESUME, CONTACT)
- Smooth modal overlays with content sections
- Fully responsive on mobile devices
About
- Professional background and expertise summary
- Focus on DevOps automation and contract work
- AI/LLM integration capabilities
Skills
- Organized grid of technical expertise
- Cloud platforms (AWS, GCP, Azure)
- Kubernetes and orchestration tools
- Infrastructure-as-Code (Terraform, Ansible, Crossplane)
- Observability stack (Prometheus, Grafana, Loki, Tempo)
- GitOps solutions (ArgoCD, Flux)
- AI/LLM tools (Claude, Gemini, LangChain)
Resume
- Professional summary emphasizing DevOps consulting
- Core experience from staff-level roles
- Technical expertise grid
- Education and achievements
Contact
- Social links (GitHub, LinkedIn, Twitter)
- Contact form with backend integration
- Email notification support
- Node.js 18+ or Bun runtime
- Docker and Docker Compose
- Git
# Clone repository
git clone <repo-url>
cd portfolio
# Install dependencies (frontend)
cd frontend
npm install # or: bun install
# Install dependencies (backend)
cd ../backend
npm install # or: bun installWith Docker (Recommended)
docker compose up --buildThe app will be available at http://localhost:3001
Without Docker
# Terminal 1: Frontend (Vite dev server)
cd frontend
npm run dev # or: bun run dev
# Terminal 2: Backend
cd backend
npm run dev # or: bun run devportfolio/
├── frontend/ # Vue 3 application
│ ├── src/
│ │ ├── components/ # Vue components
│ │ │ └── art/
│ │ │ └── vectorCloud/ # 3D visualization system
│ │ │ └── themes/ # Visualization themes
│ │ ├── styles/ # Global styles & fonts
│ │ ├── App.vue # Root component
│ │ └── main.ts
│ ├── package.json
│ └── vite.config.ts
├── backend/ # Elysia HTTP server
│ ├── src/
│ │ ├── routes/ # API endpoints
│ │ └── index.ts # Server entry point
│ └── package.json
├── Dockerfile # Single unified container
├── docker-compose.yml # Container orchestration
└── README.md # This file
# Build container
docker compose build
# Run in production
docker compose up
# Or deploy image
docker push <registry>/portfolio:latestThe visualization system is modular and extensible:
ThemeManager
├── Themes
│ ├── chargedMagnetosphere.ts (Primary theme)
│ ├── chargedMagnetosphereV2.ts (Improved iteration)
│ ├── spectrumAnalyzer.ts
│ ├── kaleidoscopeFractals.ts
│ ├── dmtGeometry.ts
│ ├── milkdropMorphing.ts
│ └── vectorFieldFloor.ts
├── Synthesis Engine
│ └── Procedural pattern generation
└── Interaction State
└── Cursor, click, and scroll handling
- Create a new theme file in
frontend/src/components/art/vectorCloud/themes/ - Implement the
createTheme()export following the pattern in existing themes - Register in
themeManager.ts - Optional: Add theme switcher UI
- DPR Limiting — Constrained to 1.5× for performance
- Efficient Particle Physics — Frame-rate independent deltaTime
- Bloom Pass Tuning — Balanced glow without text washout
- Frustum Culling — Built-in Three.js optimization
- Lazy Loading — Themes loaded on demand
docker compose up --build -dcurl http://localhost:3001/healthShould return:
{"status":"ok","timestamp":"2026-02-16T03:22:53.804Z"}frontend/vite.config.ts— Build and dev server configurationfrontend/tailwind.config.js— Tailwind CSS customization
backend/src/index.ts— Server routes and middlewareDockerfile— Single unified container build
- Create
.envfile for environment-specific variables (not committed to git)
The site uses a professional font stack:
- Headings: Space Grotesk (geometric, modern)
- Body: Inter (clean, readable)
- Imported from Google Fonts
GET /health
Returns server status and timestamp.
POST /api/contact
Content-Type: application/json
{
"name": "string",
"email": "string",
"message": "string"
}
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Mobile browsers (iOS Safari, Chrome Android)
- Desktop: 60 FPS with Magnetosphere theme
- Mobile: 30-45 FPS with particle physics
- Page Load: < 3 seconds
- Lighthouse: 90+ score
- Particle physics is computationally intensive on low-end devices
- Mobile devices may experience 30-45 FPS instead of 60
- Very large screens (8K+) may require DPR adjustment
Each theme is fully customizable through PARAMS object at the top of theme files. Modify:
- Particle count
- Bloom settings
- Physics parameters
- Color palettes
- Motion speeds
- Global colors:
frontend/src/styles/global.css - Component styles: Tailwind classes throughout
- SVG icons: Inline in Vue templates
- ✅ No API keys exposed in frontend code
- ✅
.gitignoreexcludes.envand secrets - ✅ Backend validates all input
- ✅ Container runs non-root (build-time verified)
This is a personal portfolio. For suggestions or improvements, please contact directly.
Personal portfolio © 2026 Nick Kampe. All rights reserved.
Built with: Vue 3 • Three.js • TypeScript • Bun • Docker