Graphy serves creators in both the US and India — but the website builder was failing both segments, for entirely different reasons.
Creators churned shortly after sign-up. The auto-generated website didn't reflect their brand or look professional enough to share. The first impression of their "business" on Graphy was underwhelming — and they left before ever publishing.
The old builder offered templates and drag-and-drop editing — but meaningful customisation required a designer or developer. Website changes took 3 to 4 days. Creators were dependent on external resources for every update.
"Creators think in terms of 'start selling' — not 'set up a platform.' Every day spent on the website is a day not spent on their course."
We redesigned the entire website creation experience around a single insight: the creator already has a brand — it lives in their social content. Our job was to surface it, not ask them to recreate it.
During onboarding, creators share their social handles. We fetch their top posts and extract brand signals — tone, topics, content themes.
Creators choose a visual direction (Playful, Professional, Minimal, Creative), pre-mapped to their industry. This determines which section templates are eligible for their site.
A background job assembles the homepage by stitching pre-built HTML section templates. An LLM fills static copy placeholders using scraped content; dynamic variables (course titles, pricing) are injected from the backend.
Creators land in a chat-first editor. They type natural language instructions — "make the tone more formal", "add a pricing section" — and a multi-agent system handles the rest.
The editor is powered by a coordinator-router pattern with three specialised sub-agents. Each agent has a single responsibility and operates on structured JSON patches — never raw HTML rewrites.
Reads user intent, routes to exactly one sub-agent per turn. Never claims task completion without a confirmed tool call.
Handles in-place edits — text, images, spacing, styles. Returns structured patches applied by the DOM layer.
Adds new sections — either from the pre-built template library or generated from scratch for custom requests.
Handles section ordering changes. Returns a new ordered list of section IDs; the DOM layer applies the reorder.
A key architectural decision was section-level granularity over full-page generation — this keeps LLM token costs low, enables surgical edits, and cleanly separates static (LLM-managed) and dynamic (backend-managed) content within each page.
The shift wasn't incremental. For Indian creators, it removed the dependency on design resources entirely. For US creators, it closed the gap between signing up and having a site they'd actually share.
Validate churn root cause more rigorously. We acted on CSM feedback that creators left because the website didn't look good. In hindsight, we should have triangulated against behavioural data — session recordings, publish rates, exit surveys — before committing to the solution direction.
Design for scale earlier. The template library is manually managed via an internal tool — workable at current size, but not at 10x. A template governance process and quality rubric should have been part of the v1 spec.
Think about data compliance from day one. The social scraping approach requires careful review of API terms of service and applicable data regulations. This should be a first-class product concern, not an afterthought.
Prompt engineering is product work. The coordinator's false-completion bug — claiming a task was done without calling a tool — was a product failure, not just an engineering one. Agent behaviour needs the same rigour as any other product surface.