A rigorous, honest, and evidence-based system for validating startup and product ideas.
Built with TypeScript, React, Hono, AI SDK, and OpenAI β’ Powered by Bun
Quick Start β’ Features β’ Architecture β’ Manual Setup β’ Contributing
β οΈ DisclaimerThis tool provides AI-generated insights for informational purposes only. Validation results, competitor analysis, and market assessments are generated by AI and may not be accurate, complete, or current.
- Not professional advice: This is not business, legal, financial, or investment advice
- Do your own research: Always verify information independently before making decisions
- No guarantees: Generated insights do not predict future success
- AI limitations: Competitor data and market analysis may contain errors
Use this tool as a starting point for research, not the sole basis for business decisions.
idea-sieve-demo.mp4
Get up and running in under 2 minutes:
- Docker and Docker Compose installed (Get Docker)
- OpenAI API key (Get one here)
- Tavily API key (Get one here)
- Clone the repository
git clone https://github.com/kzeitar/idea-sieve.git
cd idea-sieve- Set up environment variables
cp .env.example .envEdit .env and add your API keys:
# Required: Add your actual API keys
OPENAI_API_KEY=sk-proj-your-actual-openai-key
TAVILY_API_KEY=tvly-your-actual-tavily-key
# These are pre-configured for Docker
DATABASE_URL=postgresql://postgres:password@postgres:5432/idea-sieve
CORS_ORIGIN=http://localhost:3002 # 3002 for development, 3001 for production
VITE_SERVER_URL=http://localhost:3000- Start the application
docker-compose up- Access the application
- π Web App: http://localhost:3001 (production) or http://localhost:3002 (development)
- π API: http://localhost:3000
- π Database: PostgreSQL on port 5432
That's it! The application is now running with a complete stack including the database, backend, and frontend.
Note: Production mode uses port 3001, while development mode (with hot-reload) uses port 3002 to avoid port conflicts.
# Start in production mode
docker-compose up
# Start in background (detached mode)
docker-compose up -d
# Stop the application
docker-compose down
# Stop and remove volumes (clean slate)
docker-compose down -v
# View logs
docker-compose logs -f
# Rebuild after code changes
docker-compose up --build
# Development mode with hot-reload (see Development section)
docker-compose -f docker-compose.yml -f docker-compose.dev.yml upChoose the validation tone that matches your needs:
- Brutal π₯ - Harshly critical, very high standards, emphasizes every risk
- Balanced βοΈ - Fair and honest, constructive criticism (DEFAULT)
- Encouraging πͺ - Supportive while honest, focuses on solving challenges
- Optimistic β¨ - Highlights potential and opportunities, growth-focused
All tones maintain:
- β Real competitor research with actual company names
- β Evidence-based assessments on market data
- β Specific, actionable feedback
- β Honest risk identification
- β Never fabricate statistics or competitors
- Multi-stage validation with research tasks and analysis
- Real-time progress updates using Server-Sent Events (SSE)
- Competitor research using Tavily AI search
- Evidence-based recommendations with market data
- Detailed scoring across multiple dimensions
- Actionable insights for next steps
- SaaS (Software as a Service)
- Micro-SaaS
- Mobile Applications
- Chrome Extensions
- API Tools
- Marketplaces
- Information Products (courses, ebooks, templates)
- Generic products
Frontend (apps/web)
- βοΈ React 19 - Modern UI library
- π TanStack Router - File-based routing with full type safety
- π¨ TailwindCSS 4 - Utility-first CSS
- π§© shadcn/ui - Reusable UI components
- π‘ TanStack Query - Server state management
- π₯ Vite - Lightning-fast build tool
Backend (apps/server)
- π₯ Hono - Lightweight, ultra-fast web framework
- β‘ Bun - Fast JavaScript runtime
- π‘ Server-Sent Events - Real-time progress updates
AI (packages/ai)
- π€ AI SDK - AI-powered validation
- π Tavily AI - Web research and competitor analysis
Database (packages/db)
- π PostgreSQL - Reliable relational database
- π· Prisma - TypeScript-first ORM
- π³ Docker - Containerized database
Monorepo Tools
- π¦ pnpm - Fast, disk space efficient package manager
- β‘ Turborepo - High-performance build system
- π― TypeScript - End-to-end type safety
- π§Ή Biome - Fast linting and formatting
- πͺ Husky - Git hooks for code quality
idea-sieve/
βββ apps/
β βββ web/ # React frontend (Vite + TanStack Router)
β β βββ src/ # Source code
β β βββ Dockerfile # Production Docker image
β β βββ Dockerfile.dev # Development Docker image
β βββ server/ # Hono backend API
β βββ src/ # Source code
β βββ Dockerfile # Production Docker image
β βββ Dockerfile.dev # Development Docker image
βββ packages/
β βββ ai/ # AI validation logic (OpenAI + Tavily)
β βββ db/ # Database schema & queries (Prisma)
β βββ env/ # Environment variable validation
β βββ config/ # Shared TypeScript config
βββ docker-compose.yml # Production stack
βββ docker-compose.dev.yml # Development overrides
βββ .env.example # Environment template
βββ README.md # You are here!
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β β β β β β
β React βββββββΆβ Hono API βββββββΆβ PostgreSQL β
β Frontend ββββββββ (Bun) ββββββββ Database β
β β SSE β β β β
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β
βΌ
ββββββββββββββββ
β β
β OpenAI + β
β Tavily AI β
β β
ββββββββββββββββ
- User submits an idea through the React frontend
- Backend creates a validation job and streams progress via SSE
- AI agent performs research tasks using OpenAI and Tavily
- Results are stored in PostgreSQL and streamed back to the frontend
- User receives a comprehensive validation report
If you prefer not to use Docker:
- Bun (v1.0+) or Node.js (v18+)
- pnpm (v8+)
- PostgreSQL (v14+)
- Clone the repository
git clone https://github.com/kzeitar/idea-sieve.git
cd idea-sieve- Install dependencies
pnpm install- Set up environment variables
Create .env files in the following locations:
apps/server/.env
DATABASE_URL=postgresql://postgres:password@localhost:5432/idea-sieve
OPENAI_API_KEY=sk-proj-your-openai-api-key
TAVILY_API_KEY=tvly-your-tavily-api-key
CORS_ORIGIN=http://localhost:3001apps/web/.env
VITE_SERVER_URL=http://localhost:3000packages/db/.env
DATABASE_URL=postgresql://postgres:password@localhost:5432/idea-sieve- Start PostgreSQL
Using Docker:
pnpm run db:startOr start your own PostgreSQL instance and create a database named idea-sieve.
- Push database schema
pnpm run db:push- Start development servers
pnpm run devThis will start:
- Frontend: http://localhost:3001
- Backend: http://localhost:3000
- Database: PostgreSQL on port 5432
# Development
pnpm run dev # Start all services
pnpm run dev:web # Start only frontend
pnpm run dev:server # Start only backend
# Building
pnpm run build # Build all applications
pnpm run check-types # Type-check all packages
# Database
pnpm run db:push # Push schema changes
pnpm run db:studio # Open Prisma Studio
pnpm run db:generate # Generate Prisma client
pnpm run db:migrate # Run migrations
pnpm run db:seed # Seed the database
pnpm run db:start # Start PostgreSQL (Docker)
pnpm run db:stop # Stop PostgreSQL (Docker)
# Code Quality
pnpm run check # Run Biome linting and formattingFor a development environment with hot-reload:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml upThis mounts the source code into the containers, so changes are reflected immediately without rebuilding.
Access the development environment:
- π Web App: http://localhost:3002 (note: different port than production)
- π API: http://localhost:3000
- π Database: PostgreSQL on port 5432
Note: Development mode uses port 3002 for the frontend to avoid conflicts with other services.
# Terminal 1: Start PostgreSQL
pnpm run db:start
# Terminal 2: Start all dev servers
pnpm run dev
# Or start services individually
pnpm run dev:server # Backend only
pnpm run dev:web # Frontend only# View/edit data in Prisma Studio
pnpm run db:studio
# Push schema changes without migrations (development)
pnpm run db:push
# Create a migration (production)
pnpm run db:migrate
# Regenerate Prisma client after schema changes
pnpm run db:generate| Variable | Description | Example |
|---|---|---|
OPENAI_API_KEY |
OpenAI API key for AI validation | sk-proj-... |
TAVILY_API_KEY |
Tavily API key for web research | tvly-... |
DATABASE_URL |
PostgreSQL connection string | postgresql://user:pass@host:5432/db |
CORS_ORIGIN |
Frontend URL for CORS | http://localhost:3002 (dev) or http://localhost:3001 (prod) |
VITE_SERVER_URL |
Backend API URL (frontend) | http://localhost:3000 |
| Variable | Description | Default |
|---|---|---|
NODE_ENV |
Environment mode | development |
# Run tests (when implemented)
pnpm test
# Type checking
pnpm run check-types
# Linting and formatting
pnpm run check- Build production images
docker-compose build- Deploy to your server
# On your server
docker-compose up -d- Run database migrations
docker-compose exec server bun run db:pushFor production, create a .env.production file:
DATABASE_URL=postgresql://user:password@prod-db:5432/idea-sieve
OPENAI_API_KEY=sk-proj-production-key
TAVILY_API_KEY=tvly-production-key
CORS_ORIGIN=https://yourdomain.com
VITE_SERVER_URL=https://api.yourdomain.com
NODE_ENV=productionThen use it with:
docker-compose --env-file .env.production up -dGET /api/ideas- List all ideasPOST /api/ideas- Create a new ideaGET /api/ideas/:id- Get idea detailsPUT /api/ideas/:id- Update an ideaDELETE /api/ideas/:id- Delete an idea
POST /api/validate- Start validation jobGET /api/validate/jobs/:jobId- Get job statusGET /api/validate/jobs/:jobId/stream- Stream job updates (SSE)GET /api/validate/jobs/:jobId/progress- Get job progressGET /api/validate/jobs/:jobId/tasks- Get task resultsGET /api/validate/ideas/:ideaId/validation- Get validation report
GET /api/frameworks- List validation frameworksGET /api/frameworks/:ideaType- Get framework for idea type
GET /api/stats- Get application statistics
For detailed API documentation, see API.md (coming soon).
Docker build fails
# Clean and rebuild
docker-compose down -v
docker system prune -a
docker-compose up --buildPort already in use
# Check what's using the port
lsof -i :3000 # Backend API
lsof -i :3001 # Frontend (production Docker)
lsof -i :3002 # Frontend (development Docker)
lsof -i :5432 # Database
# Kill the process or change ports in docker-compose.yml / docker-compose.dev.ymlDatabase connection fails
# Make sure PostgreSQL is running
docker-compose ps
# Check DATABASE_URL in .env
# For Docker, use: postgres:5432
# For local, use: localhost:5432Prisma Client not generated
# Regenerate Prisma client
pnpm run db:generate
# Or inside Docker
docker-compose exec server bun run db:generateHot-reload not working in Docker
# Make sure you're using the dev override
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
# Check volume mounts are correct
docker-compose -f docker-compose.yml -f docker-compose.dev.yml configCORS errors
# Verify CORS_ORIGIN matches your frontend URL
# For production Docker: CORS_ORIGIN=http://localhost:3001
# For development Docker: CORS_ORIGIN=http://localhost:3002
# For manual development: CORS_ORIGIN=http://localhost:3001We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run linting and type checks (
pnpm run check && pnpm run check-types) - Commit your changes (
git commit -m 'Add amazing feature') - Push to your branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Hono - Fast, lightweight web framework
- Powered by OpenAI - AI validation
- Research by Tavily - AI-powered web search
- UI by shadcn/ui - Beautiful components
Remember: A harsh truth now saves months of wasted effort. Good luck! π