{
 "id": "refaa333d564",
 "found": true,
 "parent_id": "rce8bfb7cce6",
 "created_at": "2026-09-01 15:25:58.946627+00:00",
 "rows": [
  {
   "url": "https://github.com/KonstantinMB/exploreyc",
   "title": "GitHub - KonstantinMB/exploreyc: Explore the Y Combinator portfolio: AI idea validator, success predictor, live hiring board, and email digests. Live at exploreyc.com.",
   "content_excerpt": "# KonstantinMB/exploreyc\n\n## Folders and files\n\nFolders and files\n| Name | | Name | Last commit message | Last commit date |\n|---|---|---|---|---|\n| ## Latest commit ## History | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n\n---\n\n## Why this exists\n\nThere's no good way to slice the YC portfolio if you're not a YC partner with database access. Algolia search is fine for finding one company; it's bad for \"show me every Fintech company hiring engineers in Europe that raised in the last six months.\" So I built one. It started as a CLI scraper and grew into a deployed web app.\n\nThis was a closed-source project until the Product Hunt launch made it clear there's an audience of YC-curious builders who want different cuts of this data than I do. So now you can build them.\n\n## Features\n\n- **Company explorer** \u2014 search, filter, and sort the full YC portfolio\n- **Idea validator** \u2014 paste a startup idea, see the most semantically-similar YC companies (OpenAI embeddings)\n- **Gamified success predictor** \u2014 score an idea + team profile against historical YC patterns\n- **Live hiring board** \u2014 currently-open YC roles, filterable by company / role / location\n- **Email digests** \u2014 subscribe to weekly updates on new batches\n- **Maps & analytics** \u2014 geographic distribution, batch trends, industry breakdowns\n- **Admin dashboard** \u2014 scrape jobs, subscription management, manual tools (auth-gated)\n\n> Try it now: **[exploreyc.com](https://exploreyc.com)** \u2014 no signup required.\n\n## Tech stack\n\n| Layer | What |\n|---|---|\n| Frontend | React 19, Vite, TypeScript, Tailwind, TanStack Query, Radix UI, Recharts, React Leaflet, ReactFlow |\n| Backend | FastAPI (Python 3.11), WebSocket support |\n| Database | SQLite (local) \u2192 PostgreSQL via Supabase (prod). Selected at runtime by `backend/database_factory.py` |\n| Hosting | Vercel (frontend + cron) + Render (backend) |\n| LLM / enrichment | OpenAI, Perplexity, CoreSignal |\n| Email | Resend |\n\n---\n\n## Quick start\n\nYou need Python 3.11+ and Node 20+.\n\n```\n git clone https://github.com/KonstantinMB/exploreyc.git cd exploreyc # Backend cd backend python3 -m venv venv source venv/bin/activate pip install -r requirements.txt cp ../.env.example ../.env # fill in the keys you have python3 -m uvicorn main:app --reload # \u2192 http://localhost:8000 # Frontend (new shell) cd ../frontend npm install npm run dev # \u2192 http://localhost:5173\n```\n\nThe Vite dev server proxies `/api` and `/ws` to `localhost:8000`, so the frontend talks to your local backend automatically.\n\n**Minimum viable local setup:** leave `DATABASE_URL` unset (falls back to SQLite) and provide just an `OPENAI_API_KEY` for the idea-validator features. Every other integration degrades gracefully if its key is missing \u2014 see [`.env.example`](/KonstantinMB/exploreyc/blob/master/.env.example) for the full list.\n\n### Seeding local data\n\nThe local SQLite database starts empty. To populate it, scrape YC company data from the public Algolia API (no API keys needed):\n\n```\n # With the backend running, seed the last 3 batches (~500+ companies) curl -X POST http://localhost:8000/api/scrape \\ -H \" Content-Type: application/json \" \\ -d ' {\"batch\": [\"Winter 2025\", \"Summer 2024\", \"Winter 2024\"], \"hits_per_page\": 1000, \"max_pages\": 20} ' # Check progress (replace 1 with the job_id returned above) curl http://localhost:8000/api/scrape/status/1 # Verify data loaded curl http://localhost:8000/api/stats\n```\n\nOnce the scrape completes (usually under a minute), refresh the frontend to see charts and data populate. To scrape all batches, omit the `batch` filter \u2014 but this takes longer and hits the 3-requests-per-hour rate limit.\n\n## Project layout\n\n```\n backend/ FastAPI app \u2014 most endpoints in main.py, services as siblings frontend/ React SPA, React Router api/cron/ Vercel cron handlers (call back into the backend) supabase/ Migrations, applied in filename order scripts/ Maintenance helpers (embeddings backfill, funding enrichment) .github/ Issue templates, CI, scheduled GitHub Actions cron\n```\n\nDetailed architecture notes are in [`CLAUDE.md`](/KonstantinMB/exploreyc/blob/master/CLAUDE.md) \u2014 written for AI assistants, useful for humans too.\n\n---\n\n## Contributing\n\nPRs and ideas welcome. This is a one-person project and I'm not precious about it. **The goal is to grow this into the explorer the YC-curious community actually wants \u2014 your version, not just mine.**\n\n### I have an idea but I don't write code\n\nOpen a new issue using the [`\ud83d\udca1 Idea` template](https://github.com/KonstantinMB/exploreyc/issues/new/choose). Describe the user, the problem, and what you wish existed. Don't worry about feasibility \u2014 that's my problem. Half-baked is fine. Drawings, screenshots, links to similar features elsewhere \u2014 all welcome.\n\nIf you'd rather send it privately: `konstantin.borimechkov14@gmail.com`.\n\n### I want to ship something\n\n1. Skim the [open issues](https://github.com/KonstantinMB/exploreyc/issues) and the Open ideas section below for inspiration.\n2. **Open an issue first** if the change is non-trivial \u2014 saves you (and me) the cost of building something that won't merge.\n3. Fork \u2192 branch (`feature/short-name` or `fix/short-name`) \u2192 PR against `master`.\n4. Keep PRs focused. One feature or one fix per PR. Smaller diffs ship faster.\n5. If your change touches the API surface, env vars, or migrations, update `.env.example` + the relevant section of this README (or `CLAUDE.md`) in the same PR.\nI try to respond to issues within 48h and review PRs within a week. If I'm slow, ping me \u2014 it's not personal.\n\n### What I'll merge enthusiastically\n\n- New filters, views, or analytics on existing data\n- New data integrations that fit the mission (other accelerators, public funding sources, etc.)\n- Performance improvements (`backend/main.py` is a 3000-line monolith on purpose, not by accident \u2014 but most of it is ripe for tightening)\n- Bug fixes with a test or reproduction\n- Documentation / onboarding improvements\n- A frontend test suite (there is none yet \u2014 first contributor gets eternal gratitude)\n\n### What I'll push back on\n\n- Breaking the \"no required signup\" model \u2014 ExploreYC works for unauthenticated visitors and I want to keep it that way for the core features\n- Adding heavy dependencies for marginal gains\n- Stylistic refactors without a behavioral reason\n- Anything that puts user data, scraped data, or third-party API keys at risk\n- Forking the data model in ways that complicate the SQLite-or-Postgres factory pattern\nIf you're unsure, open an issue and ask before building. I'd rather have the conversation than reject a PR you spent a weekend on.\n\n### Local dev workflow\n\n- Backend autoreloads with `uvicorn main:app --reload`\n- Frontend hot-reloads with `npm run dev`\n- Type-check the frontend before pushing: `cd frontend && npm run build`\n- Run backend tests: `cd backend && python -m pytest`\n- Migrations live in `supabase/migrations/` and are applied in filename order. When adding one, use the next timestamp prefix.\n\n### Code conventions\n\nThere's no enforced lint config \u2014 match surrounding code style.\n\n- **Backend:** PEP 8-ish, type hints where they help, log don't print, raise `HTTPException` for user-facing errors, group related endpoints in `main.py` with a `# ===== SECTION =====` comment\n- **Frontend:** function components, hooks, Tailwind for styling, TanStack Query for any data that comes from the backend, Radix primitives over custom modals/popovers\n- **Secrets:** the only env file in the repo is `.env.example`. Everything sensitive goes in your local `.env`, which is gitignored.\n- **Rate-limited endpoints:** if you add an endpoint that calls a paid API (OpenAI / Perplexity / CoreSignal), wire it up with `_enforce_rate_limit(...)` \u2014 see `backend/main.py` near line 90 for the pattern.\n\n---\n\n## Open ideas\n\nThings I've been thinking about but haven't built. Pick one, open an issue if you have questions, ship it. None of these are claimed.\n\n- **Batch comparison view** \u2014 side-by-side stats for any two YC batches (size, vertical mix, hiring %, top hires, etc.)\n- **Founder profile pages** \u2014 aggregate companies founded by the same person across batches\n- **CLI mode** \u2014 bring back a packaged CLI for people who want JSON/CSV exports without running the full web app\n- **Non-YC accelerator support** \u2014 Techstars, 500, Antler, EF. Plug-in architecture for the scraper\n- **Better embedding model for the idea validator** \u2014 currently `text-embedding-3-small`; experiment with newer or open-source models\n- **Notion / Slack / Discord integrations** \u2014 push the email digest to other channels\n- **Public read-only API** \u2014 rate-limited dataset endpoints, no key required\n- **Frontend test suite** \u2014 Vitest + React Testing Library. Doesn't have to cover everything; a baseline that runs in CI would be huge\n- **Diff view on YC batches** \u2014 \"what changed between Spring and Summer 2026\"\n- **Internationalization** \u2014 site is English-only; YC's reach isn't\n- **Self-hosted deploy guide** \u2014 Docker Compose recipe for people who don't want Vercel + Render\nIf your idea isn't on the list, that doesn't mean no. Open an issue and let's talk.\n\n---\n\n## Testing\n\n```\n cd backend python -m pytest test_email_digest.py python -m pytest test_pagination.py\n```\n\nBackend tests are integration-flavored and may hit real services if the relevant keys are set. There's no frontend test suite yet (see Open ideas).\n\n## Deploying your own instance\n\nThe hosted version uses Vercel (frontend + Vercel cron + rewrites that proxy `/api/*` to `api.exploreyc.com`) and Render (backend). The repo is wired for that, but nothing prevents another layout.\n\nSee [`DEPLOYMENT.md`](/KonstantinMB/exploreyc/blob/master/DEPLOYMENT.md) for the step-by-step.\n\n## Security\n\nFound a vulnerability? See [`SECURITY.md`](/KonstantinMB/exploreyc/blob/"
  }
 ],
 "notes": [
  "WARNING: 1 of 2 URLs failed and were skipped: https://raw.githubusercontent.com/KonstantinMB/exploreyc/main/README.md",
  "Fetch result set: rce8bfb7cce6 (1 rows), reference it as FROM rce8bfb7cce6 in follow-up queries"
 ]
}