Mission
Relevé
Since2026
StatusApp Store, Play in review
A road-collecting game for France
Solo: product, design, mobile, backend, ops
Every street, track and trail you actually travel goes into your notebook. You finish a commune street by street, hunt the rare roads, and watch France fill in. I built it alone, from the map-matching backend to the store listing.
- road segments in the catalog
- 34.6M
- of French roads indexed
- 2.76M km
- GPS traces kept after matching
- 0
- OpenStreetMap cut into ~100 m segments with stable keys (way id + ordinal), imported with GDAL into PostGIS and assigned to their commune.
- Traces are map-matched on a self-hosted Valhalla. Low-confidence matches and anything above 200 km/h are dropped, so trains and planes don't count.
- The phone buffers background location in SQLite and flushes in batches. The server keeps segment IDs only, never the raw trace.
- Load-tested against the live France catalog before launch. Replacing a 15 s poll cut player data use from ~265 MB/h to ~65 MB/h.
Expo / React Native / MapLibre / SQLite / Bun / PostGIS / Valhalla / Supabase Auth / Docker / nginx
Mission
Adenor
Since2026
StatusLive
A merchant's trading game in the browser
Solo: game design, full stack, hosting
Buy low, sell far, know first. No pay-to-win. Players move goods between markets across a living world, racing on information and price arbitrage, and climb a shared leaderboard.
- Market and price simulation with arbitrage opportunities across a world map.
- Accounts, inventory and progression in Supabase Postgres, guarded by row-level security. Trades go through database functions, not client writes.
- Server-rendered Next.js (App Router) with guides, a blog and a changelog written for search.
- Public leaderboard and PostHog product analytics, proxied through the game's own domain.
- Self-hosted: Docker behind nginx on a VPS, TLS from certbot, started by systemd.
Next.js / React / TypeScript / Supabase / PostgreSQL / PostHog / Tailwind / Docker
Mission
Cutforge
Since2026
StatusLive
A video editor that runs in the browser, sold as an SDK
Solo: engine, product, licensing
Decode, compositing and export all run on the user's machine through a WebGPU compositor, WebCodecs and a Rust/WASM core. No render servers, nothing uploaded. Teams embed it in their own products; the screen here runs the real package in demo mode.
- Multi-track timeline: trims, splits, transitions, keyframed effects, text overlays.
- WebGPU compositor on an OffscreenCanvas worker, with a WebGL2 fallback.
- WebCodecs decode and encode with mp4/webm muxing: exports faster than realtime, no server.
- Rust to WASM engine: timeline scheduler, audio resampler, peak summaries, color path.
- OPFS-backed media streaming and an AudioWorklet + SharedArrayBuffer mixer.
- Ships as @cutforge/editor, a license-gated embeddable SDK.
TypeScript / React / Rust / WebAssembly / WebGPU / WebCodecs / Vite / Web Audio
Mission
Buddy AI Note
Since2025
StatusLive
A memo-first daily workspace, built as Podtech's CTO
CTO at Podtech: architecture, infrastructure, delivery
You write your daily memo; AI turns it into tasks, calendar events and email replies, with optional Gmail / Outlook and Google / Outlook calendar enrichment. Web and mobile, multilingual, with a long-term memory that learns your preferences over time.
- Bidirectional Google / Outlook calendar sync. AI proposes events, you approve in one tap.
- Email triage with Gmail / Outlook: AI classifies threads, drafts replies, and surfaces them inside the memo.
- AI agent with 13 tools, plus a typed entity-graph memory that distills observations into long-term preferences.
- BullMQ + Redis worker fleet with a leader-elected scheduler. Web (Next.js 16), mobile (Expo) and a browser extension share one Supabase + Postgres + RLS backend.
- GCP in Terraform: Cloud Run services, a GPU VM for a self-hosted LLM, an embeddings service, Memorystore and HTTPS load balancing. CI deploys through keyless Workload Identity; secrets live in a self-hosted Infisical.
Next.js / Expo / TypeScript / Supabase / PostgreSQL / OpenAI / BullMQ / Redis / Terraform / GCP
Mission
Black hole simulator
Since2026
StatusLive
A general-relativistic ray tracer in one shader
Solo, grown out of my GR research
A real-time, physically accurate black hole running entirely in the browser. It integrates null geodesics through curved spacetime on the GPU to render gravitational lensing, a Doppler-beamed accretion disk, the photon ring and the shadow, for the Schwarzschild, Kerr and Taub-NUT metrics. The hero of this page is a capture of it.
- Hamiltonian geodesic ray tracing in a single WebGL2 fragment shader: one engine, three spacetimes (Schwarzschild / Kerr / Taub-NUT).
- Relativistic accretion disk with blackbody temperature, Doppler beaming and gravitational redshift; photon-ring demagnification for a clean shadow.
- HDR render pipeline: bloom, ACES tonemapping and box-filtered supersampling (SSAA).
- Quasinormal-mode explorer: Leaver's continued fraction evaluated in a shader, with click-to-snap root finding and ringdown sonification.
WebGL2 / GLSL / JavaScript / General Relativity / Numerical Analysis / Computer Graphics
Mission
CUDA path tracer
Since2023
StatusOperational
A GPU path tracer written from scratch in C++ and CUDA
Solo: renderer, BVH, materials, tooling
Started in 2023 as a raytracer during my studies, rebuilt clean-room as a CUDA path tracer: multiple importance sampling over a two-level BVH, physically based materials and a real lens model. No third-party code in the compute core; libpng and SDL2 are the only dependencies. Every image on this screen came out of it, on a laptop RTX 3060.
- path samples per second, showcase scene
- 1.44 G
- megakernel over a wavefront split, measured
- 3.1×
- for the helmet at 1024 samples per pixel
- 211 s
- Binned-SAH two-level BVH (TLAS/BLAS instancing) over a structure-of-arrays scene; megakernel path tracing with multiple importance sampling.
- Materials: diffuse, metal, glossy, dielectric and rough dielectric, thin film, anisotropic, clearcoat, Beer-Lambert coloured glass, multi-scatter compensation, spectral dispersion.
- Importance-sampled environment lighting, participating media (height fog, noise clouds by delta tracking) and a physical lens: thin-lens depth of field, polygonal bokeh, chromatic aberration.
- glTF loader with its own baseline-JPEG decoder: the helmet on screen is fully textured, emissive HUD included.
- Built test-first: each feature lands behind a failing test and a byte-identical 'feature off' check. A wavefront rewrite lost to the megakernel on measurement, so it's documented, not shipped.
C++20 / CUDA / BVH / Monte Carlo / glTF / libpng / SDL2