๐ฎ Immersive WebGL Resume for Damien Battistella
An interactive, infinite-scroll resume website featuring 9 unique WebGL 3D scenes, gaming-inspired UI elements, and bilingual support (FR/EN).
- 9 WebGL 3D Sections - Each section has a unique Three.js scene with custom animations
- Gaming-Inspired UI - XP progress bar, 20 unlockable achievements, easter eggs
- Bilingual - French and English with automatic browser detection
- Responsive - Works on desktop and mobile devices
- Performance Optimized - Quality toggle, lazy loading, code splitting
- Mobile Optimized - Frame rate limiting, visibility-based pausing, battery-aware quality degradation
| Technology | Version | Description |
|---|---|---|
| Vue 3 | 3.5 | Progressive JavaScript framework |
| Vite | 7 | Next generation frontend tooling |
| TailwindCSS | 4 | Utility-first CSS framework |
| TresJS | 5.2 | Vue + Three.js integration |
| Three.js | r182 | WebGL 3D library |
| Vue I18n | 11.2 | Internationalization |
| TypeScript | 5.9 | Type safety |
- Node.js 24+
- npm or yarn
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Type check
npm run type-check
# Version bump (patch/minor/major)
npm run version:patchThe Docker image is published to Docker Hub as wifsimster/resume.
docker run -p 80:80 wifsimster/resume:latest# Full release pipeline: build app, build image, tag, push
npm run release
# Or step by step:
npm run docker:build # Build image with version tags
npm run docker:tag # Create semver tags (major, minor)
npm run docker:push # Push all tags to Docker Hubdocker build -t wifsimster/resume .
docker run -p 80:80 wifsimster/resumeThe container is ready to be deployed behind Traefik reverse proxy with health check enabled.
GitHub Actions automatically runs on every push to main (.github/workflows/release.yml):
- Detects version bump type from conventional commits (
feat:= minor,feat!:= major, otherwise patch) - Bumps
package.jsonversion - Builds and pushes a multi-platform Docker image (linux/amd64 + linux/arm64) to Docker Hub
- Tags:
latest,vX.Y.Z,X.Y,X - Creates a GitHub Release with auto-generated changelog
You can also trigger manually via workflow_dispatch to choose the version bump type.
| Secret | Description |
|---|---|
DOCKERHUB_USERNAME |
Docker Hub username |
DOCKERHUB_TOKEN |
Docker Hub access token |
| # | Section | Theme | Description |
|---|---|---|---|
| 1 | Hero | The Knowledge Architect | Passion spheres floating in space |
| 2 | About | Share, Build, Play | Three interconnected worlds |
| 3 | Experience | The Evolution | Server rack timeline |
| 4 | Leadership | Knowledge Multiplier | Team amphitheater |
| 5 | Skills | The Skill Tree | Carpenter's workbench |
| 6 | Maker | Electronics Lab | IoT workspace |
| 7 | Projects | Open Source Gallery | Floating project cards |
| 8 | Books | The Library | Cozy reading nook |
| 9 | Contact | Join My Party | Collaboration desk |
Unlock 20 achievements by exploring the site:
| Achievement | Icon | Description |
|---|---|---|
| Welcome | ๐ | First time visiting |
| Return Visitor | ๐ | Came back for more |
| Explorer | ๐บ๏ธ | Visited all sections |
| Bookworm | ๐ | Viewed all books |
| Code Hunter | ๐ฎ | Found the Konami code |
| Networker | ๐ | Clicked all social links |
| Speed Runner | โก | Scrolled through site in < 30s |
| Bilingual | ๐ | Switched language |
| Night Owl | ๐ฆ | Visited in dark mode |
| Early Bird | ๐ | Visited between 5AM and 8AM |
| Weekend Warrior | ๐ | Visited on a weekend |
| Deep Diver | ๐คฟ | Spent 5+ minutes exploring |
| Scroll Master | ๐ | Scrolled over 10,000 pixels |
| Click Happy | ๐ฑ๏ธ | Clicked 50 times |
| Graphics Guru | ๐จ | Toggled quality settings |
| Maker Fan | ๐ง | Explored the maker section |
| Patient One | โณ | Waited for all 3D to load |
| Reach Out | โ๏ธ | Opened contact section |
| Open Sourcer | ๐ | Clicked on a GitHub link |
| Completionist | ๐ | Unlocked all achievements |
๐ฎ Hidden Features
- Konami Code - โโโโโโโโBA for secret mode
- Quality Toggle - Switch between Minimal/Low/High quality for performance
- Progress Bar - XP bar shows scroll progress through sections
The application includes comprehensive mobile optimizations to ensure smooth performance and battery efficiency:
- Frame Rate Limiting: Automatically targets 30fps on mobile devices (60fps on desktop)
- Visibility-Based Pausing: Animations pause when sections are off-screen (<10% visible), reducing CPU/GPU usage
- Battery Awareness: Quality automatically degrades when battery is low and not charging
- Thermal Throttling Detection: Auto-degrades quality when FPS drops suddenly (thermal throttling)
- GPU Acceleration: CSS animations use GPU-accelerated properties (
transform,opacity) withwill-changehints - Mobile-Specific Settings: Lower DPR (max 1.5), reduced particle counts, fewer lights on mobile
The quality system automatically detects device capabilities and adjusts settings:
- Minimal: 30fps target, no particles, reduced geometry, low-power mode
- Low: 30fps mobile / 45fps desktop, reduced particles, medium geometry
- High: 30fps mobile / 60fps desktop, full particles, high geometry
Quality detection considers:
- GPU tier (low/medium/high)
- CPU cores
- Device memory
- Mobile device detection
- High DPR displays
- Battery level (if available)
prefers-reduced-motionpreference
- All animations use GPU-accelerated properties
will-changehints for better browser optimization- Faster animation durations on mobile devices
- Respects
prefers-reduced-motionfor accessibility
src/
โโโ application/ # Composables, i18n config
โ โโโ composables/ # Vue composables
โ โ โโโ useAchievements.ts # Achievement system
โ โ โโโ useAnimationController.ts # Animation controller with mobile optimizations
โ โ โโโ useEasterEggs.ts # Easter eggs (Konami code, etc.)
โ โ โโโ useQuality.ts # Quality system with auto-detection
โ โ โโโ useScrollSection.ts # Scroll tracking with visibility detection
โ โโโ i18n/ # i18n configuration
โโโ domain/ # Business logic
โ โโโ data/ # Resume data
โ โโโ types/ # TypeScript types
โโโ locales/ # Translation files
โ โโโ en/ # English translations
โ โโโ fr/ # French translations
โโโ presentation/ # UI layer
โ โโโ components/
โ โ โโโ sections/ # Page sections (Hero, About, Skills, etc.)
โ โ โโโ three/ # Three.js scenes for each section
โ โ โ โโโ scenes/ # Individual 3D scenes (HeroScene, AboutScene, etc.)
โ โ โโโ ui/ # UI components (achievements, language switcher, etc.)
โ โโโ styles/ # Global CSS styles with mobile optimizations
โ โโโ views/ # Page views
โโโ App.vue # Root component
โโโ main.ts # Application entry point
The project uses path aliases for cleaner imports:
@application/*โsrc/application/*@domain/*โsrc/domain/*@presentation/*โsrc/presentation/*
- Development:
npm run dev(HMR enabled) - Production: Built with tree-shaking and code splitting
Damien Battistella - @Wifsimster
- Team Leader R&D at Dedalus
- Passionate JavaScript developer
- Raspberry Pi & ESP32 enthusiast
- Maker (woodworking, electronics, home renovation)
MIT ยฉ 2025 Damien Battistella