Selected work

Case study · Tessa

Own product · Live

From 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
The live tessa.so landing: “Turn Your Brand Into a Campaign Engine”, a green Try Tessa for Free button and a row of generated ads for Plum, Hey Bud and Comet.
tessa.so · the live landing

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.

Tessa's Photo Studio: a four-step stepper (Brand, Product, Styles, Brief) and a Select Brand grid with SuperYou, Hey Bud, Blah Bli Blu (selected) and Blume.
Photo studio · choosing a brand DNA
Generated stories for the Comet campaign: IG story, FB story, Hindi and Spanish versions.

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.

Create Campaign as a five-step stepper (Brand, Images, Formats, Layout, Brief) with layout and typography options.

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

  1. Website URLThe only input
  2. BrowserBaseScrape
  3. Gemini VisionExtract
  4. Brand DNAReusable profile

Make the ads

  1. BriefOne per campaign
  2. FastAPIJobs
  3. Celery4 worker queues
  4. GeminiImage generation
  5. Asset libraryNext.js app
4 queues · 6 formats · 29 ad themes

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