Selected work
Live, and earning
Websites you can open right now, and apps you can install. Everything here is in production — click through and check.
WebIndustrial manufacturing · 2026
Marking Tag Wala
A terminal-block marker manufacturer's site with a browser-based marking editor.
- Astro
- Cloudflare Workers
- PDF engine
- +1 more
Visit site
WebMotion & interaction design · 2026
MERIDIAN
A scroll-driven motion study built around a single SVG mask.
- Vite
- TypeScript
- GSAP
- +2 more
Visit site
WebLuxury real estate · 2026
MAISON VERRO
An estate tour built as one pinned reel, scrubbed frame by frame from the scroll position.
- Vite
- TypeScript
- GSAP
- +3 more
Visit site

AppHealth & fitness · 2026
YogaBuddy
A two-sided marketplace for yoga classes, meditation sessions and retreats, live on the Play Store.
- Flutter
- Node.js
- Stripe
- +3 more
Get it on Google Play
AppAndroid utilities · 2026
AppLock
A native Android app lock that puts a PIN or a fingerprint in front of whichever installed apps the owner picks.
- Kotlin
- Jetpack Compose
- BiometricPrompt
- +3 more
Not published
Web

Marking Tag Wala
Visit site ↗WebIndustrial manufacturing · 2026
Customers lay out the text on every tag of a marker strip, and the order becomes a print-ready specification sheet. The PDF is generated without a PDF library — in the browser for the customer, and in a Cloudflare Worker for the manufacturer, from the same font metrics, so the two copies cannot disagree about an order. Enquiries arrive by email with the sheet attached.
- Astro
- Cloudflare Workers
- PDF engine
- 41 pages

MERIDIAN
Visit site ↗WebMotion & interaction design · 2026
The wordmark is an SVG mask with a dusk landscape behind it, so the scene is visible only through the letterforms. Scrolling runs a pinned ScrollTrigger timeline that scales the mask to 34x, which reads as flying through the word into the scene. Scaling the aperture rather than the scene is the whole trick — scaling the scene would be an ordinary zoom. The landscape is drawn entirely in SVG, gradients and polygons and blurred ellipses, so there are no image files to fetch and the hero costs about 4KB.
- Vite
- TypeScript
- GSAP
- ScrollTrigger
- Cloudflare Workers

MAISON VERRO
Visit site ↗WebLuxury real estate · 2026
Scroll position drives a canvas image sequence, with twelve glass panels fading through over the footage. It is an image sequence rather than a video element because seeking a video to an exact frame is unreliable across browsers — the same reason Apple builds its product pages this way. Three art-directed crops ship: a 9:19.5 portrait cut for phones, 3:4 for tablets, 16:9 for desktop, picked by aspect ratio so every tier draws at roughly 1:1 instead of being upscaled. Sub-frame interpolation blends the two frames either side of the exact position, so the scrub is continuous rather than stepped, and the easing curves are bespoke CustomEase rather than GSAP's stock set.
- Vite
- TypeScript
- GSAP
- Canvas
- CustomEase
- Cloudflare Workers
Apps

YogaBuddy
AppHealth & fitness · 2026
Students browse a map of nearby studios, retreats and online classes, book a place in one tap, and keep every session in one calendar. Teachers work the same app from the other side: they create classes, set capacity and currency, and watch enrolments arrive. Both sides share live chat, push notifications for bookings and payments, and a profile they control. Payments run through Stripe, PayPal, card or cash and settle to the teacher directly rather than sitting in an escrow the platform holds.
- Flutter
- Node.js
- Stripe
- PayPal
- Google Maps
- Push notifications

AppLock
AppAndroid utilities · 2026
A foreground service watches which app comes to the front and draws a lock screen over it before its contents are on display; the owner chooses what to cover from a dashboard of everything installed. Unlocking is a PIN or a fingerprint, the sensor handled by BiometricPrompt, and there are flows for setting the PIN, changing it and recovering it when it is forgotten. The PIN and its recovery answer are held in EncryptedSharedPreferences under an androidx.security MasterKey rather than in plain preferences, so pulling the file off a rooted phone does not read them. It needs usage-access to know which app is in front and overlay permission to draw on top of it — the pair this kind of app cannot avoid asking for — and it checks for both on launch, sending the owner to the system settings screen for whichever is missing. Every screen is a Compose composable; there is not an XML layout in the project. It was never published to the Play Store: the source is the deliverable.
- Kotlin
- Jetpack Compose
- BiometricPrompt
- EncryptedSharedPreferences
- Foreground service
- minSdk 24 · targetSdk 36
Not published




