2026
Synthetic User Generator
A complete research workflow — define an experiment, ground it in your own documents, generate personas, run surveys and interviews, and export a report — rather than a standalone persona generator.

cat problem.md
The problem
Early product discovery is the stage where teams have the most assumptions and the least evidence. Real user research is the right answer, but recruiting, scheduling, and synthesizing it takes weeks that a discovery sprint does not have.
The gap is not a lack of ideas about users. It is the lack of a structured way to interrogate those assumptions before real research starts, and a way to keep what you learn attached to evidence instead of opinion.
The platform is explicitly not a replacement for talking to people. It is a way to explore hypotheses quickly, with every generated response traceable to the source material it was grounded in.
tree --architecture
Architecture
Researcher
|
v
React + Vite UI ........ Cloudflare Pages
| HTTPS / JSON
v
FastAPI service ........ FastAPI Cloud
|
+--> Experiment services ------+
+--> LangGraph supervisor |
| | |
| +--> Persona agent |
| +--> Survey agent +--> Groq
| +--> Insight agent | gpt-oss-20b
| |
+--> RAG pipeline -------------+
+--> ReportLab PDF |
v
Supabase PostgreSQL
+ pgvectorEvery workflow retrieves experiment-scoped evidence before the supervisor picks a specialist agent.
| layer | technology | responsibility |
|---|---|---|
| Web client | React 19, Vite, Tailwind CSS, Recharts | Research workflow, persona interactions, charts, voice controls |
| API | FastAPI, Pydantic, SQLAlchemy | Validation, REST endpoints, business logic, persistence |
| Orchestration | LangGraph | Supervisor routing, shared workflow state, durable checkpoints |
| Model | Groq, openai/gpt-oss-20b | Persona generation, responses, and synthesis |
| Retrieval | Feature-hashed vectors + pgvector | Local, no-key embedding and experiment-scoped similarity search |
| Database | SQLite locally, Supabase PostgreSQL hosted | Experiments, personas, messages, documents, vectors, workflow state |
git log --decisions
Key decisions
A supervisor that picks exactly one specialist
Rather than chaining every agent on every request, a LangGraph supervisor routes each task to one of three specialists: persona, survey, or insight. Shared state stays traceable, and durable checkpoints mean a long survey run can resume instead of restarting.
Evidence is scoped to an experiment
Documents uploaded to one research project cannot surface in another. Isolation is enforced at retrieval, not just in the UI, so two experiments exploring competing hypotheses never contaminate each other's findings.
Embeddings run in-process with no API key
Deterministic 384-dimensional feature hashing replaces a hosted embedding service. That removes a per-token cost and a rate limit, and it means uploaded source documents are never sent to a third-party embedding provider.
Generated answers are never indexed as evidence
Synthetic responses stay out of the vector store. Without this the system would eventually retrieve its own output as source truth and quietly launder a guess into a finding.
Voice without a paid voice API
The speaking persona uses browser-native text-to-speech and a live visualizer. It keeps the whole application inside free service tiers, which is what makes a public live demo viable at all.
cat outcome.md
Outcome
- Live at synthetic-user-generator.pages.dev with a React front end on Cloudflare Pages and a managed FastAPI service, running entirely on free tiers.
- A researcher can go from an empty workspace to a downloadable PDF report — experiment, uploaded evidence, personas, survey or interview, synthesized themes and sentiment — without leaving the app.
- Built during the Infosys Springboard AI Engineer internship, June to August 2026.