Interactive 3D personal portfolio (outer layer) for https://yassin.app.
This project is built as a Three.js experience with a scene authored in Blender, deployed via containers on my homelab.
-
Outer site baseline: Henry Heffernan’s portfolio foundation
https://github.com/henryjeff/portfolio-website
(Henry: https://twitter.com/henryheffernan) -
The “inner OS” experience (yassinOS) is based on Dustin Brett’s DaedalOS
https://github.com/DustinBrett/daedalOS
- yassinOS (inner OS / web-OS): https://github.com/yassinsolim/yassinOS
- Frontend: Three.js / WebGL experience (React-based stack depending on your setup)
- Scene authoring: Blender → exported to GLB/GLTF
- Deployment: Docker + reverse proxy (Caddy) + CI/CD (GitHub Actions)
Install dependencies:
npm installRun the dev server:
npm run devOnline leaderboard setup is documented in docs/RACING_SUPABASE.md.
If Supabase config is not provided, leaderboard automatically falls back to localStorage.
On Vercel, set RACING_SUPABASE_URL and RACING_SUPABASE_ANON_KEY as environment variables before deploying.
Auto-export the scene to GLB (Windows):
npm run export:glbIf your dev server is running, you can export via URL:
http://localhost:PORT/?export=1&save=1
Exported file location:
exports/exported-scene.glb
If you find bugs or have feature ideas, feel free to open an issue or message me.
