Project Info
This project did not submit a demo video on Devpost.
Inspiration
Most startups fail not because founders can't build but because they build the wrong thing for the wrong market at the wrong price. Validation is slow, expensive, and often comes too late. We wanted to compress years of market feedback into 60 seconds, before a single line of product code is written.
What it does
MarketVerse is an AI-powered startup simulator. You describe your startup in one paragraph like name, market, pricing, category and within 60 seconds it: 1) Generates a living market: 20 customer personas, 5 competitors, and 3 investors, each powered by Claude AI with their own budgets, behavior patterns, and decision logic 2) Runs 24 months of simulation: MRR growth, churn, competitor moves, and market events (economic downturns, viral moments, regulatory changes) all unfold in real time via a streaming UI 3) Delivers an investor-grade verdict: confidence score, immediate actions, supporting evidence, and a ranked growth playbook 4) Lets you steer: apply a strategic decision (lower price, launch annual plan, ship mobile app, expand market) and Claude re-simulates all 24 months with that change baked in from day one.
How we built it
Backend - FastAPI with async SSE streaming. Three Claude models run in parallel during market generation: 'claude-sonnet-4.6' for persona and competitor generation, 'claude-haiku-4.5-20251001' for month-by-month economic evaluation, and 'claude-opus-4.8' for the final verdict. The simulation engine publishes events to in-memory asyncio queues and streams them to the client as Server-Sent Events. Frontend - Next.js 16 with React 19. Four distinct UI states (form → generating → running → results) with live-updating KPI cards, an MRR area chart, a market events feed, and an interactive decision panel. Falls back to a full demo mode if the API isn't reachable. AI Architecture - Each month is evaluated by a Claude model that considers the startup's current metrics, active market modifiers, competitor actions, and persona behavior scores. The final verdict uses Claude Opus to synthesize all 24 months into a structured analysis with evidence, immediate actions, and prioritized recommendations.
Challenges we ran into
Streaming latency: getting real-time SSE to feel smooth while actual Claude inference was happening required careful async pipelining and a sleep between months to let the UI breathe Structured output reliability: coaxing Claude to return valid JSON month-data on every call, including edge cases like month 1 with no prior data required careful prompt engineering and fallback handling Decision re-simulation UX: making "apply a decision and re-run" feel instant even though it triggers a full new 24-month Claude pipeline meant pre-computing modified startup params on the frontend before the API call
Accomplishments we're proud of
A multi-model Claude architecture where three different models handle different layers of the simulation fast and cheap for high-volume per-month evaluation, powerful for final synthesis A streaming UI that makes a 60-second AI pipeline feel like a live market unfolding rather than a loading spinner The decision engine: being able to change one variable and immediately see 24 months of alternate history is genuinely useful for founders
What we learned
Multi-model architectures where cheaper/faster models handle high-volume tasks (per-month evaluation) and expensive models handle synthesis (verdict) dramatically improve both cost and latency. The trick is designing clean handoffs between them. We also learned that the best AI product demos aren't chatbots they're experiences where the AI is doing something you couldn't do yourself.
What's next
Persistent simulation history so founders can compare multiple scenarios side by side Multiplayer mode: two founders simulate competing startups in the same market Export to PDF pitch deck with simulation data as supporting evidence for investor meetings
This repository has no readme, or GitHub could not be reached.
Analysis
View
Metric
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- FastAPIIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
8 of 8 appear in the indexed code.
AI coding agents
- Claude CodeConfig
- CodexConfig
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
144 KB
Source files
32
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
dhruvac29/marketverse
48 files · 418 KB · @ d53a0f6
Structure
Interface
8 files · 17%Screens, components and styles rendered to the user.
API & routing
15 files · 31%Request entry points: routes, handlers and controllers.
Application logic
2 files · 4%Domain rules, services and shared utilities.
Data & schema
2 files · 4%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript79%
- Python19%
- Markdown1%
- CSS1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
web/package.json
npm · 13- lucide-react
- next
- react
- react-dom
- recharts
- +8 more
api/requirements.txt
pypi · 8- anthropic
- anyio
- fastapi
- httpx
- pydantic
- pydantic-settings
- python-multipart
- uvicorn
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
24-month simulation with MRR growth, churn, competitor moves, market eventsVerified
Runs 24 months of simulation: MRR growth, churn, competitor moves, and market events (economic downturns, viral moments, regulatory changes) all unfold in real time via a streaming UI
Claimed on Devposthigh confidenceapi/simulation/month_runner.py:28— run_month computes deterministic MRR/customer/churn math and calls Claude for event generation each monthapi/simulation/month_runner.py:103— _generate_month_events asks Claude for tailwind/downturn/competitor/viral/regulation events matching the claimed event typesapi/simulation/engine.py:34— run_simulation loops 1..24 calling run_month and publishing each month via SSE
AI-generated living market (20 personas, 5 competitors, investor panel)Verified
Generates a living market: 20 customer personas, 5 competitors, and 3 investors, each powered by Claude AI with their own budgets, behavior patterns, and decision logic
Claimed on Devposthigh confidenceapi/simulation/market_gen.py:10— generate_personas prompts Claude for exactly 20 personas with budget, tech_score, buying_behavior fieldsapi/simulation/market_gen.py:43— generate_competitors prompts Claude for exactly 5 competitors with threat levelsapi/simulation/market_gen.py:72— generate_investors prompts Claude for 5 investor archetypes
Decision steering / re-simulation with change baked inVerified
Apply a strategic decision (lower price, launch annual plan, ship mobile app, expand market) and Claude re-simulates all 24 months with that change baked in from day one
Claimed on Devposthigh confidenceweb/src/components/simulation/SimulationClient.tsx:408— Four decision options (annual, lower_price, mobile, expand) each produce a modifiedStartup object matching the claimed leversweb/src/components/simulation/SimulationClient.tsx:973— handleApplyDecision resets state and calls createSimulation(modifiedStartup) again, triggering a full fresh 24-month pipeline with the modified params
FastAPI async backend with in-memory asyncio queuesVerified
Backend - FastAPI with async SSE streaming. The simulation engine publishes events to in-memory asyncio queues and streams them to the client as Server-Sent Events
Claimed on Devposthigh confidenceapi/services/sim_store.py:6— In-memory dict/asyncio.Queue based pub-sub store explicitly described as not requiring Redisapi/main.py:1— FastAPI app entrypoint (present in repo)
Full demo mode fallback when API unreachableVerified
Falls back to a full demo mode if the API isn't reachable
Claimed on Devposthigh confidenceweb/src/components/simulation/SimulationClient.tsx:829— runDemoSimulation replays hardcoded DEMO_PERSONAS/DEMO_COMPETITORS/DEMO_MRR data through the same UI statesweb/src/components/simulation/SimulationClient.tsx:963— connectSimulationStream error callback and catch block both call runDemoSimulation() when the API call fails
Investor-grade verdict (confidence score, immediate actions, evidence, playbook)Verified
Delivers an investor-grade verdict: confidence score, immediate actions, supporting evidence, and a ranked growth playbook
Claimed on Devposthigh confidenceapi/simulation/month_runner.py:156— generate_verdict prompts Claude Opus for headline, confidence_score, immediate_actions, evidence, and recommendations fieldsapi/models/startup.py:83— Verdict pydantic model matches all claimed verdict fields
Multi-model Claude architecture (Sonnet, Haiku, Opus)Verified
Three Claude models run in parallel during market generation: claude-sonnet-4.6 for persona/competitor generation, claude-haiku-4.5 for month-by-month evaluation, claude-opus-4.8 for the final verdict
Claimed on Devposthigh confidenceapi/config.py:11— model_generation, model_evaluation, model_verdict settings default to sonnet-4-6, haiku-4-5, opus-4-8 respectivelyapi/simulation/market_gen.py:38— generate_personas/competitors/investors all use settings.model_generation (sonnet)api/simulation/month_runner.py:141— _generate_month_events uses settings.model_evaluation (haiku)api/simulation/month_runner.py:224— generate_verdict uses settings.model_verdict (opus)
Next.js 16 / React 19 frontend with live KPI cards, MRR chart, event feedVerified
Frontend - Next.js 16 with React 19. Four distinct UI states with live-updating KPI cards, an MRR area chart, a market events feed, and an interactive decision panel
Claimed on Devposthigh confidenceweb/package.json:1— next 16.2.9 and react 19.2.4 declared as dependenciesweb/src/components/simulation/SimulationClient.tsx:96— MRRChart uses recharts AreaChart; KPICard and EventFeed components render live KPIs and market events
Streaming SSE UI (form -> generating -> running -> results)Verified
A streaming UI that makes a 60-second AI pipeline feel like a live market unfolding, with four distinct UI states
Claimed on Devposthigh confidenceapi/routers/stream.py:12— FastAPI StreamingResponse implementing Server-Sent Events with keepalive and event replayweb/src/lib/sse.ts:7— connectSimulationStream wires an EventSource to persona_added/competitor_added/month/simulation_complete eventsweb/src/components/simulation/SimulationClient.tsx:12— SimStep type defines form/generating/running/results and each is rendered as a distinct state component
Structured JSON output reliability handlingVerified
Structured output reliability: coaxing Claude to return valid JSON month-data on every call ... required careful prompt engineering and fallback handling
Claimed on Devpostmedium confidenceapi/services/claude_service.py:16— generate_structured strips markdown code fences before json.loads, and system prompt instructs 'valid JSON only'api/simulation/month_runner.py:140— _generate_month_events wraps the Claude call in try/except, falling back to an empty event list on failure
Investor decision logic / budgetsCode-supported
Investors have their own budgets, behavior patterns, and decision logic
Claimed on Devpostmedium confidenceapi/models/startup.py:61— MonthData.investor_feedback field exists but is never populated anywhere in the codebase (always defaults to None)api/simulation/month_runner.py:156— generate_verdict receives an investors argument but never references it inside the prompt text, so investor 'decision logic' isn't actually wired into evaluation
Unused /decisions backend endpointCode-supported
Decision re-simulation UX ... meant pre-computing modified startup params on the frontend before the API call
Claimed on Devpostmedium confidenceapi/routers/simulations.py:36— POST /{sim_id}/decisions is a stub: it returns a stream_id but never triggers re-simulation (no background_tasks.add_task call); the actual re-run happens client-side by calling POST /v1/simulations again, not through this endpoint
Export to PDF pitch deckClaimed only
What's next for MarketVerse: Export to PDF pitch deck with simulation data as supporting evidence for investor meetings
Claimed on Devposthigh confidenceMultiplayer mode (competing startups in same market)Claimed only
What's next for MarketVerse: Multiplayer mode: two founders simulate competing startups in the same market
Claimed on Devposthigh confidencePersistent simulation history for side-by-side comparisonClaimed only
What's next for MarketVerse: Persistent simulation history so founders can compare multiple scenarios side by side
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.