found

found.

Every Yale startup and every opportunity to fund it, in one verified, searchable place.

found. combines the Yale Startup Directory (122 startups) and the Tsai CITY Yale Startup Opportunities board (130 programs, grants, competitions, perks and asks) into one site, verifies members with their Yale email, lets founders prove and claim their listing, and uses two small AI agents (gpt-6-luna):

Report: open in browser (file) · Slides: open in browser (file). Both files also open by double-clicking after download.

Run it (about 3 minutes)

Needs Python 3.11+. No Node.js needed (the web apps are prebuilt in frontend/dist and admin/dist).

  1. Put your key in a file named .env, in this folder or the folder above it:
    PORTKEY_API_KEY=your-key
    
  2. Install and start (from this folder):

    Mac / Linux

    python3 -m venv .venv
    .venv/bin/pip install -r requirements.txt
    .venv/bin/python run.py
    

    Windows (PowerShell)

    python -m venv .venv
    .venv\Scripts\pip install -r requirements.txt
    .venv\Scripts\python run.py
    
  3. Open http://localhost:8030 (it opens automatically). The admin console is at http://localhost:8030/admin.

The database is created from the included data on first start. Stop with Ctrl+C. The test accounts below (and the demo listing “Bulldog Test Co.”) exist only in local mode and are clearly marked as fake.

Demo accounts (local mode)

Where Email Password
Public site demo@yale.edu (verified member) found2026
Public site test.founder@yale.edu (fake founder of the demo listing “Bulldog Test Co.”) found2026
Public site dan@yale.edu (another fake member, “Handsome Dan”) found2026
Admin console /admin admin@yale.edu found2026

Or create your own account with any @yale.edu address. In local mode nothing is emailed: after signing up, click “Open your email” in the yellow banner to see the verification email and click its link. Members can paste their LinkedIn profile link on their profile (optional, shown on their founder card; not verified).

Things to try

  1. Explore: filter by industry + stage + Yale affiliation; click a card; the “Closing soon” boxes.
  2. Ask Scout (bottom-right of Explore): e.g. “climate startups making revenue” or “grants due in the next month”.
  3. Opportunities: categories, “Due in 30 days”, the “On the horizon” calendar.
  4. Founder card + messaging: log in as demo@yale.edu, turn on Explore’s Founder on found. filter (startups whose founder you can message) and open Bulldog Test Co. (a demo listing, not a real company), then click Message Test. Or go to Messages and type test in New message. Send a message. Then log in as test.founder@yale.edu in another browser (or after logging out) to read it and reply.
  5. Join a startup (for people with no startup or idea): open Join a startup in the nav; on your profile turn on Open to joining. Founders see you at /people: log in as test.founder@yale.edu and click Browse people open to joining (the demo member is already opted in). Non-founders get an explanation instead.
  6. Add your startup: on your profile, + Add startup; it waits hidden until approved in /admin → New startups.
  7. Claim a startup: sign up, verify your email, open a startup, click Claim this startup.
  8. Admin console (/admin): review claims, run Audit on a listing (e.g. Mundaly), apply or dismiss the suggestion.

Data

How it’s built

Part Where
API, auth, verification, budgets, serving the web apps backend/main.py, auth.py, verification.py, config.py, mailer.py
Agent 1 · Scout backend/agent.py, backend/tools.py, backend/prompts/prompt.md
Agent 2 · Listing Auditor backend/auditor.py, backend/prompts/auditor.md
Data model and import backend/db.py, backend/queries.py, backend/models.py
Public site (React + Vite + TypeScript) frontend/ (built into frontend/dist)
Admin console (React + Vite + TypeScript) admin/ (built into admin/dist)
Append-only log of every agent run output/audit_trail.json

Model: gpt-6-luna only, through Portkey (PORTKEY_API_KEY).

Evidence for the report (re-runnable)

Script Output
.venv/bin/python scripts/eval_scout.py output/eval_scout.json: 20-question accuracy and tokens, one-call vs two-call Scout
.venv/bin/python scripts/safety_tests.py output/safety_tests.json: 16 attacks on the defenses (uses a throwaway database)
.venv/bin/python scripts/feature_tests.py output/feature_tests.json: founder card, messaging, LinkedIn link, joining a startup, submit → approve (throwaway database)
.venv/bin/python scripts/audit_all.py output/audit_all.json: Listing Auditor run on every listing with its own website
.venv/bin/python scripts/build_report.py report.html, slides.html (every number read from the files above)

Development (optional)

Hot-reloading dev servers instead of the prebuilt apps (needs Node 20+):

cd backend && ../.venv/bin/uvicorn main:app --reload --port 8030   # API
cd frontend && npm install && npm run dev                           # public site → http://localhost:5185
cd admin && npm install && npm run dev                              # admin → http://localhost:5186/admin/

Rebuild the prebuilt apps with npm run build in frontend/ and admin/. Optional settings (real email, budgets, refresh interval) are listed in .env.example; none are needed to run the app.

Running it as a real website (not needed for grading)

Everything lives in one process (python run.py) and one SQLite file (data/found.db), so hosting is simple:

  1. Host on an always-on service such as Render (Starter web service) or Railway. Start command: python run.py --no-browser with PORT from the host. Put data/ on a persistent disk (and back it up nightly), or move to managed Postgres once you run more than one server. The weekly data refresh runs inside the server.
  2. Settings (host environment variables, never in git): PORTKEY_API_KEY, FOUND_DEV_MODE=0 (no test accounts, no email outbox), FRONTEND_URL=https://your-domain, ADMIN_EMAILS=you@yale.edu.
  3. Email from a dedicated sender: MAIL_MODE=smtp with a Yale shared mailbox or a service such as Resend (SMTP_HOST=smtp.resend.com, SMTP_USER=resend, SMTP_PASSWORD=<API key>, MAIL_FROM=found. <verify@your-domain>).
  4. People: pilot with the SOM Startup & Entrepreneurship Club, then invite founders to claim their listings.

Estimated cost: about $8/month for a club pilot, about $67/month Yale-wide (see the report’s Section 7).