Case study · Tessa
Own product · LiveFrom a URL to an ad library.
Tessa is an AI marketing platform. It learns a brand from its own website and turns one brief into launch-ready ads for every channel. It’s my company: I built the product and the pipeline behind it, and designed the interface with Betwn Studios.
- Role
- Product + full-stack · co-designed with Betwn Studios
- Year
- 2024 – now
- Timeline
- v2 build: 8 weeks · 132 commits
- Stack
- Next.js, FastAPI, Celery, Gemini, BrowserBase, PostHog
- Link
- tessa.so ↗

Context
Producing on-brand creative for every social format took marketing teams days of back-and-forth.
Tessa had to read a brand once, from its own website, and then turn a single brief into every format without a designer in the loop. So the product had two halves to get right: an interface a marketer trusts, and the pipeline that does the work.
Decisions
Brand DNA, extracted once
Tessa reads a brand from its website: logos, colours, languages, type, tone and product images. Every campaign reuses that profile, so the hundredth ad is as on-brand as the first.


One brief, every format
One brief fans out to six formats and 29 ad themes across four worker queues. Here, a Comet campaign as stories in three languages.

Five steps, not a prompt box
Brand, images, formats, layout, brief: the choices a marketer actually makes, as a stepper with real options instead of a blank text field.
The pipeline
Read the brand
- Website URLThe only input
- BrowserBaseScrape
- Gemini VisionExtract
- Brand DNAReusable profile
Make the ads
- BriefOne per campaign
- FastAPIJobs
- Celery4 worker queues
- GeminiImage generation
- Asset libraryNext.js app
PostHog · analytics · credits metering
132 commits in eight weeks, and it’s live.
Product + full-stack by me · interface co-designed with Betwn Studios · app screens exported from the product design file