Decision-first source intelligence for startup ideas.
IdeaGo turns a rough product idea into a structured validation report with recommendation, pain signals, commercial signals, whitespace opportunities, competitors, evidence, and confidence.
简体中文 · Quick Start · How It Works · Project Structure · Deployment
IdeaGo is the main branch of the project: a local or personal-deployment edition with no login,
no Supabase requirement, no billing, and no account system.
If you want the commercial version with auth, profile, billing, and admin flows, use the saas
branch instead.
Most idea validation tools stop at surface-level summaries. IdeaGo is built for the question that comes next: should this idea move forward now, and why?
It keeps the report decision-first:
- recommendation and why-now
- pain signals
- commercial signals
- whitespace opportunities
- competitors
- evidence
- confidence
That ordering is part of the product contract, not a presentation detail.
The main branch is the anonymous, personal-deployment line of the product:
- anonymous analysis flow
- persisted report history through local file cache
- report detail pages and markdown export
- SSE progress streaming during long-running analysis
- local SQLite checkpoints for LangGraph runtime state
- no Supabase, no Stripe, no LinuxDo variables required to boot
Core sources currently include:
- Tavily
- GitHub
- Hacker News
- App Store
- Product Hunt
- Python 3.10+
- uv
- Node.js 20+
pnpm
uv sync --all-extras
pnpm --prefix frontend installcp .env.example .env
cp frontend/.env.example frontend/.envMinimum useful configuration:
- required:
OPENAI_API_KEY - recommended:
TAVILY_API_KEY
Useful defaults already live in .env.example.
Terminal 1:
uv run uvicorn ideago.api.app:create_app --factory --reload --port 8000Terminal 2:
pnpm --prefix frontend devOpen:
- frontend: http://localhost:5173
- backend health: http://localhost:8000/api/v1/health
pnpm --prefix frontend build
uv run python -m ideagoOpen: http://localhost:8000
The default docker-compose.yml uses the published Docker Hub image (simonsun3/ideago).
cp .env.example .env
docker compose pull
docker compose up -dOptional: pin to a release tag instead of latest:
IDEAGO_IMAGE_TAG=0.3.8 docker compose up -dVerify:
curl http://localhost:8000/api/v1/healthIdeaGo takes a single idea and pushes it through an explicit retrieval chain:
intent_parser -> query_planning_rewriting -> platform_adaptation -> sources -> extractor -> aggregator.
That chain produces a decision-first report that can be reopened from history later.
flowchart TD
A["User idea"] --> B["POST /api/v1/analyze"]
B --> C["LangGraph engine"]
C --> D["Intent parsing"]
D --> E["Query planning + rewriting"]
E --> F["Platform adaptation"]
F --> G{"Cache hit?"}
G -->|Yes| H["Return persisted report"]
G -->|No| I["Fetch source data"]
I --> J["Extract structured signals"]
J --> K["Aggregate findings"]
K --> L["Assemble report"]
L --> M["Persist report + status"]
M --> N["Report detail / history / export"]
C -.-> O["SSE progress stream with query planning stage"]
Runtime model on main:
- API routes:
/api/v1/analyze,/api/v1/reports,/api/v1/health - explicit query-planning stage before source fetch
- report persistence: local
FileCache - runtime checkpoints: local SQLite
- progress updates: SSE
- user flow: submit idea -> stream progress -> read report -> reopen from history -> export markdown
Fixed source-role split on main:
- Tavily for broad recall
- Reddit for pain and migration language
- GitHub for open-source maturity and ecosystem signals
- Hacker News for builder sentiment
- App Store for review-cluster pain
- Product Hunt for launch positioning
Public API on main:
POST /api/v1/analyzeGET /api/v1/reportsGET /api/v1/reports/{id}GET /api/v1/reports/{id}/statusGET /api/v1/reports/{id}/streamGET /api/v1/reports/{id}/exportDELETE /api/v1/reports/{id}DELETE /api/v1/reports/{id}/cancelGET /api/v1/health
main does not expose auth, billing, profile, pricing, or admin APIs.
Important settings on main:
OPENAI_API_KEYOPENAI_MODELTAVILY_API_KEYCACHE_DIRANONYMOUS_CACHE_TTL_HOURSFILE_CACHE_MAX_ENTRIESLANGGRAPH_CHECKPOINT_DB_PATHCORS_ALLOW_ORIGINS
Optional Reddit credentials:
REDDIT_CLIENT_IDREDDIT_CLIENT_SECRET
If Reddit OAuth credentials are missing, public read fallback can still work when
REDDIT_ENABLE_PUBLIC_FALLBACK=true.
main: personal/open-source deployment onlysaas: same core product, plus auth, billing, profile, admin, and SaaS-only environment variables
Sync rule:
- shared product work lands on
main saaspulls frommain- do not move SaaS runtime dependencies back into
main
.
├── src/ideago/ # FastAPI app, LangGraph pipeline, sources, models
├── frontend/src/ # React app
├── tests/ # Backend tests
├── ai_docs/ # Project standards and guides
├── assets/ # README assets used on main
└── DEPLOYMENT.md # Main-branch deployment guide
Key backend areas:
api/: routes, schemas, app setup, errorspipeline/: orchestration, events, merger, extractor, intent parsingcache/: file cache and persistence abstractionssources/: external source fetchers
Key frontend areas:
frontend/src/appfrontend/src/features/homefrontend/src/features/historyfrontend/src/features/reportsfrontend/src/lib/api
uv run ruff check src tests scripts
uv run ruff format --check src tests scripts
uv run mypy src
uv run pytest
pnpm --prefix frontend lint
pnpm --prefix frontend typecheck
pnpm --prefix frontend test
pnpm --prefix frontend buildNo. This README describes the main branch, which is meant for local or personal deployment.
No. main must boot and run without Supabase, Stripe, or LinuxDo variables.
On the saas branch. Keep commercial deployment docs there instead of mixing them into main.
MIT. See LICENSE.

