Selected work

sheet 05 · 2025–Now · Founding Frontend, adsVase

adsVase Mobile

The native companion: reel editor, realtime chat and AI on the go.

Building

Search
Kora Studio@korastudio·2h

Terracotta No. 4

Hand-thrown, wide-mouthed, back in the shop this morning.

128249

Vases

@korastudio

Studio seconds

Small chips, smaller prices.

1242
@atelier.nb

Spring glazes

Ash, celadon, oxblood.

3175
Meridian Supply@meridian·5h

Field notebooks, restocked

Sewn spine, 90gsm, flat-opening.

4663
Home: the ad feed
Search creators, vases, ads...
AllCreatorsVases

Terracotta run

Nine pieces, one kiln.

2453

Table lamps

Warm brass, linen shades.

1821
Kora StudioHand-thrown stoneware, made in Lagos.48 posts2.1k followers
Follow
Meridian SupplyField notebooks and small tools.26 posts940 followers
Follow

Studio seconds

Small chips, smaller prices.

1242

Spring glazes

Ash, celadon, oxblood.

3175
Explore: creators and vases

Adora AI

Your product assistant

Hi, I'm Adora

Your AI assistant for product discovery and recommendations. Ask me anything, or tap a suggestion below.

How to write better ad copyWhat's the best time to post adsHow did my last ad performHow do I create a vase?How many ads are in Vase 1?Organize my vases?
Ask Adora anything...
Adora: the in-app assistant

new drop

untitled sketch · demo
Aa
Add a caption...Post
Reels: the capture editor

Overview

A 67-screen Expo app, not a webview in a trench coat: its own reel editor, realtime chat and the AI assistant on board. Mobile is where the platform gets judged, on video-heavy feeds over patchy networks, mid-range phones, and every React Native bridge quirk nobody warns you about.

Architecture, and why

  • React Compiler and typed routes, early

    Automatic memoization replaces useMemo ceremony and typed routes turn broken links into compile errors. Both meant refactoring real code.

  • Zod at every network boundary

    Strict schemas throw on auth payloads, loose ones log and continue for domain data. Backend drift cannot crash the app.

  • Zustand for the client, Query for the server

    Connectivity is bridged into Query's online manager, so a dropped line shows a debounced banner instead of a broken screen.

  • Feature-colocated routing

    Every route folder owns its components, hooks and utils, so a feature can be understood or deleted in one move.

  • Two backends, one app

    The REST and WebSocket API and the AI microservice each get their own client, so one can evolve without the other.

Engineering highlights

  • A reel editor built from scratch

    Draggable text and stickers over video: racing gestures, spring physics and a delete drop-zone, with no commercial SDK.

  • Windowed hydration for ranked feeds

    The recommender returns IDs only, so a sliding window hydrates a few at a time and preserves rank order.

  • Sockets that don't stampede

    Reconnects use exponential backoff with jitter, so a thousand phones returning online don't arrive as one wave.

  • Native quirks, solved for real

    FormData corrupts file-URI uploads, so media goes through the filesystem API, compressed and EXIF-stripped before it leaves.

  • Video that behaves

    Reels play off list viewability and respect iOS silent mode, so off-screen video never fights for the speaker.

  • Adora AI in your pocket

    Thirteen tones, twelve modes, comment sentiment and auto-reply with a human-handoff threshold. A configurable surface, not a chat box.

Impact

67
screens across the app
63k
lines of TypeScript
0
commercial SDKs in the reel editor

next sheet

Stocked

Inventory, purchasing and point of sale on one ledger, built in Lagos for African retail.