CASE STUDY · AI / ML
AI Content Generator
A writing studio that drafts posts, emails and articles in your own voice, trained on a handful of your past writing samples.
- ROLE
- Full-stack & prompt design
- TIMELINE
- 8 weeks
- TEAM
- Solo
- PLATFORM
- Web app
PRODUCT IDENTITY
Quill
Write like yourself, only faster.
01 · OVERVIEW
Project overview
DEVELOPMENT TIME
8 weeks
Prototype to paying beta
TEAM SIZE
Solo
Product, frontend and ML
KEY ACHIEVEMENT
62% faster
Average drafting time saved
THE PROBLEM
Generic AI writers sound like everyone else. Teams spent as long fixing the tone of a draft as they would have spent writing it themselves.
THE APPROACH
Quill learns a voice from five to ten real samples, stores it as embeddings, and steers every draft with that voice plus a brand glossary of words to always and never use.
62%
less time spent on first drafts
4.6 / 5
voice-match score from beta writers
14k
drafts generated in the first month
02 · FEATURES
What it does
Voice training
Upload past posts or emails and Quill learns tone, phrasing and rhythm.
Multi-format templates
LinkedIn posts, blog outlines, newsletters and subject lines from one brief.
Tone and length controls
Dial warmth, formality and length without rewriting the prompt.
Inline rewrite
Highlight any sentence to shorten, punch up or soften it in place.
Brand glossary
Words to always use, never use, and how to spell product names.
Team workspaces
Shared voices, templates and review comments for content teams.
03 · PROCESS
How it was built
WEEK 1
Discover
Shadowed three content teams to see where AI drafts broke down.
- Pain-point map
- Voice rubric
WEEK 2–3
Design
Designed the prompt box, output cards and rewrite flow; tested with writers.
- Figma prototype
- Prompt patterns
WEEK 4–7
Build
Built the Vue app, FastAPI service, embeddings store and job queue.
- Web app
- Voice engine
WEEK 8
Ship
Private beta with 40 writers, then usage-based billing.
- Beta launch
- Billing live
04 · TECH STACK
Built with
FRONTEND
- Vue 3
- Pinia
- Tailwind CSS
BACKEND
- Python
- FastAPI
- Celery
AI
- OpenAI API
- Embeddings
- pgvector
INFRASTRUCTURE
- PostgreSQL
- Redis
- Docker
ARCHITECTURE
Quill web app
Vue 3 + Pinia
FastAPI service
Drafts, voices, jobs
OpenAI API
Generation
Postgres + pgvector
Voices, drafts
Redis + Celery
Job queue
05 · LEARNINGS
Challenges & learnings
Keeping the voice consistent
CHALLENGE
Long drafts drifted back to a generic tone after a few paragraphs.
OUTCOME
Re-injecting the closest voice samples per section kept tone steady end to end.
Slow first drafts
CHALLENGE
Waiting 20+ seconds for a full draft felt broken.
OUTCOME
Streaming tokens to the editor made drafts start appearing in under a second.
Interested in this project?
Happy to walk through the code, the decisions behind it, or how something similar could work for your team.