Skip to content
Pasindu Lanka
All case studies

04/06—Generative AI · product

Role
Solo build, end to end
Context
Independent project
When
2025

01Problem

Single-model image generators put the burden of prompt-craft on the user. The goal was a product where a rough idea becomes a finished wallpaper without the user needing to know the prompt dialect.

02What I built

A wallpaper generation platform that orchestrates Google Gemini and Leonardo Phoenix in one flow, with a Convex real-time backend, Clerk auth and Cloudflare R2 storage, delivered through a Next.js 16 front end.

03Architecture

  1. 01Ideauser input
  2. 02Geminiprompt shaping
  3. 03Leonardo Phoeniximage generation
  4. 04Cloudflare R2asset storage
  5. 05Convexreal-time state

04Technical decisions

  1. 01

    Compose models by strength

    Two models are chained so each does what it is best at — language on the way in, image synthesis on the way out — rather than asking one model to do both.

  2. 02

    Real-time state over polling

    Generation is slow and asynchronous. Convex pushes progress and results to the client, so the UI reflects the job's actual state without bespoke polling code.

  3. 03

    Keep binaries out of the database

    Generated images live in R2 object storage; the application database holds metadata and references only.

05Impact

  • Live, publicly accessible product.

Stack

Next.js / Tailwind CSS / Convex / Clerk / Gemini / Leonardo AI / Cloudflare R2