Welcome Mustafa
Monthly sourcing KPI
0%
NEXT STEP
—
📊 Stats
📆 Calendar
W
M
‹
›
🕐 World Clock
Inbox
📅 Upcoming events (next 3)
🌱 Treeo VC Portfolio
🎓 University Radar
Tomorrow's stars are on campus today.
⚡ Review Queue
📁 Lists & Sheets
✅ Monthly checklist
🏁 This week's goals
⚡ My day
📝 Today's note
⛔ Overdue follow-ups
🗺 Network Map — 25 orgs by Dec 2026
📄 Recent reports
toggle cards · drag to reorder · ⚙ Edit layout keeps size/hide controls visible
Deal Screening
Drop the PDFs your supervisor sends (pitch-session one-pagers, deal lists) — or paste links/text. Every company and founder is analyzed against the Treeo VC thesis, DOUBLE-CHECKED via web search, reported here, and auto-added to Master People & Companies.
📄 Drop PDFs here or click to choose
No files yet
Step 1 extracts EVERY company from the documents, scores and ranks them (nothing added to Master yet — just fills the table below). Step 2 deep-searches your +-selected picks (or, if none selected, falls back to REACH OUT/MONITOR-labeled ones, or top-scored as a last resort) — real web search for founders, LinkedIn, contact info, discrepancies — and produces a VC-ready Contact List, then AUTO-ADDS every deep-searched company + founder to Master People & Companies.
Screening Report — Ranked List (Best → Worst by Treeo VC Thesis)
+ selects a company for Deep Search (turns orange, saved to memory) · after deep-searching, M adds it to Master People & Companies.
Inbox
Everything that needs your attention, item by item — live from your data.
Daily Digest
The same digest that lands in your inbox every morning, readable here in full — it is saved as a report automatically the moment it is sent.
Lists & Sheets
Bring your existing Excel / Google Sheets lists inside. Drop a file — it becomes a tracked page: every row gets a status + note, cells stay editable, and any row can be pushed to Master with one click.
📁 Drop a .csv, .xlsx or .pdf here (or click) — each file becomes its own tracked list
Google Sheets: File → Download → CSV. Excel: .xlsx or .csv. PDFs: table layout is auto-detected from the text.
Mission Control
The AI plans, researches, validates, ranks and reports. You decide.
Today's Intelligence
Daily scan: founders, startups, markets, technologies, events, funding, Founder Talk candidates, hidden opportunities.
Founder Intelligence
Never miss an exceptional founder.
Discover Founders
Deep Profile
Fact-check pass, verdict calibration and exclusion list are applied automatically. Results → Founder Watchlist.
Includes red-flag scan (lawsuits, layoffs, co-founder departures, negative press) and warm intro path analysis.
Startup Intelligence
"Should Treeo spend time with this startup?"
Discover Startups
Deep Profile
Market Intelligence
"Should Treeo care? Should Treeo invest time?"
Research a Market
Discover Emerging Markets
Decision Center
A SINGLE shared view for all entity types (founder, portfolio company, whatever gets added later) — shows the calibrated model's score if one exists, otherwise the best available signal. Keeps no records of its own, just reads existing data; the partner always makes the final call.
Portfolio Monitoring
Scale, market and competitor tracking for existing investments -- reads investor reports, runs weekly/monthly live research, merges it with the data you upload, and produces a monitoring signal ready for the partner decision meeting. This is a decision-support tool -- it never executes an investment/exit action automatically, the partner always makes the final call.
Metrik zaman serisi
Scan: live web research combined with any related data already in Lists & Sheets for this company. Report upload: reads the full text of the PDF and extracts numbers (treeo-metrics) and highlights, without doing a web search.
Board toplantisi
Cap table / dilution takibi
Elle girilir -- AI sayi uretmez, gordugun turlari sen ekliyorsun.
Exit / comps scan
Bu sirket icin gecmis raporlar
Universities (US)
Dedicated radar for U.S. universities: clubs, newly funded student startups, open days, demo days, VC days — plus their LinkedIn/X/GitHub/news/newsletter channels. Everything found flows to Master People & Companies and Events automatically.
Scans
Each scan covers your tracked list, respects the exclusion/dedup layer, and reports only items newer than the last scan. Weekly automatic version runs in Autopilot ("Schools & Colleges").
University Directory — websites, news centers, e-centers, clubs
Founder Talk Studio
Complete preparation before, during and after every Founder Talk.
Speaker Discovery
Pre-Talk Prep
Promotion
Post-Event
Events Calendar
Every VC-relevant event with dates, importance and purpose, plus your own due dates/deadlines. Autopilot re-checks events every 2 days (dates, new events, Turkish org / TSA / consulate channels) — you just follow it. This calendar is the same data as the Home widget — changes here or there show up in both.
‹
›
Automatic versions run in Autopilot every 48h. Turkish scan covers: Turkish Student Associations, Turkish-American orgs (Turks in Tech, TASSA, ATAA...), consulates & Türkevi announcements — via Instagram, X, LinkedIn, news and newsletters.
Monthly Ecosystem Brief
1–2 pages · Emerging Founders · Themes · Events · Observations · KPI check.
Turkish-American Innovation Network Map
25 organizations by Dec 2026 · priority-scored · action-recommended.
Master People & Companies
The full database — every person/company ever found, every field, fully searchable and exportable. Look anyone up here. To update status/notes/follow-ups use Watchlists & Pipeline · to see who needs attention next use Review Queue.
Search & the dropdown filters look across the whole database, no matter which period tab is selected above.
Review Queue
Who to look at next, in plain language — why they matter and which report surfaced them. Hides Passed/Invested by default (they don't need more attention). For the complete searchable database use Master People & Companies · to update status/notes use Watchlists & Pipeline. No AI calls, always current.
Watchlists & Scout Pipeline
Work a record here: status, partner verdict, notes, follow-up date. The ⏰ chip below jumps straight to who's overdue. Full database → Master · undecided new finds → Review Queue.
Founders
Startups
Events
Investors
Signals
Time-stamped signals per entity. Momentum = signals in the last 60 days.
Reports Center
Every deliverable, archived and searchable — filed by when it was made.
Today
This week
This month
All
Autopilot
14 jobs run server-side 24/7 (Supabase Edge Function + pg_cron, hourly) — sourcing continues even with this tab/browser closed. daily_brief, monitor, momentum, silence and wake still run here while this tab is open. Every action is budget-capped, deduplicated and audit-logged.
Jobs
Each job remembers its last scan ("source tracking") and only reports items newer than that.
Decision Engine — calibrated scoring (Phase 1)
A lightweight logistic regression that learns weekly (via an Autopilot job) from Partner Good/Not relevant decisions, with no in-house model server required. Kicks in once at least 10 decisions have accumulated; the raw AI score keeps being used before that.
Audit log
Every autonomous decision, with its reason. Trust comes from traceability.
🧑🤝🧑 Team
Team members and public status updates. You need to be signed in with Supabase — if you don't use it, nothing changes, the app keeps working as single-user.
You need to be signed in with Supabase (email+password) for this page.
Team tables aren't set up yet — run the "TEAM PAGE" section from Settings → Supabase → "Show SQL setup" once in the Supabase SQL Editor.
My username
This name shows up instead of your email in messages and the team list. Only changes your own name.
Team members
💬 Status updates
Your teammates can post short status updates here to keep everyone in the loop.
💬 Messages
Broadcast messages to the team and private direct messages. You need to be signed in with Supabase.
You need to be signed in with Supabase (email+password) for this page.
Message tables aren't set up yet — run the "TEAM PAGE" and "DIRECT MESSAGES" sections from Settings → Supabase → "Show SQL setup" once in the Supabase SQL Editor.
💬 Message the team
✉️ Direct message
Only you and the selected person can see this (kept separate at the database level too — RLS).
Settings
API key stays in this browser and goes directly to Anthropic.
Stored only in this browser (never in the published file/repo). If it looks empty after a publish, or in a different browser/device, that\'s expected — just re-enter it once here.
Roller
The Observer role hides verdict/status change controls in this browser (a lightweight, single-browser restriction — real multi-user authorization needs a Supabase auth table).
Appearance — Custom Colors
Pick any color from the wheel — changes apply instantly. Light and Dark mode each keep their own separate palette (switch with the "Theme" button in the sidebar to customize both).
Structured Investment Thesis (drives all scoring)
Usage & Cost
Treeo Relationship Graph (real network — powers warm intros)
The AI uses these ACTUAL relationships instead of guessing intro paths. The more you fill, the sharper "Intro" analyses get.
Supabase (SQL) — permanent storage
Data syncs to your own Supabase project so nothing is ever lost, and the Master People Table becomes SQL-queryable. Auto-syncs 20s after every new discovery.
-- ============================================================================ -- Run this once in Supabase → SQL Editor. Safe to re-run (idempotent). -- -- WHY THIS CHANGED: the sync code upserts with on_conflict=user_id,key (and -- user_id,id). That REQUIRES a unique constraint on those column pairs. The -- older version of this block created tables keyed only by (key)/(id) and had -- no user_id at all, so a freshly-created project would fail on the first -- "Sync now" with a Postgres 42P10 error. This version creates/repairs the -- schema the code actually expects, and gives every account its own private -- rows instead of one shared pile. -- ============================================================================ create table if not exists treeo_store ( key text, data jsonb, updated_at timestamptz default now() ); create table if not exists treeo_people ( id text, name text, company text, category text, nationality text, location text, building text, why text, ai_comment text, links text, score int, source_report text, tag text, status text, verdict text, note text, followup date, found_at timestamptz, updated_at timestamptz default now() ); -- Per-account ownership. auth.uid() is the signed-in user's id, filled in -- automatically on insert, so the browser never has to send it. alter table treeo_store add column if not exists user_id uuid default auth.uid(); alter table treeo_people add column if not exists user_id uuid default auth.uid(); -- Adopt any pre-existing rows that were created before user_id existed. -- Run while signed in as the account that should own the old data. update treeo_store set user_id = auth.uid() where user_id is null; update treeo_people set user_id = auth.uid() where user_id is null; -- Drop the old single-column keys, then add the (user_id, ...) uniqueness the -- upserts need. Two people can now both have a row with the same key/id. alter table treeo_store drop constraint if exists treeo_store_pkey; alter table treeo_people drop constraint if exists treeo_people_pkey; alter table treeo_store drop constraint if exists treeo_store_user_key; alter table treeo_people drop constraint if exists treeo_people_user_id_key; alter table treeo_store add constraint treeo_store_user_key unique (user_id, key); alter table treeo_people add constraint treeo_people_user_id_key unique (user_id, id); alter table treeo_store enable row level security; alter table treeo_people enable row level security; -- Real, database-level isolation: you can only ever see and write your own rows. -- (Replaces the old "anon all" policies, which let any key read everything.) drop policy if exists "anon all store" on treeo_store; drop policy if exists "anon all people" on treeo_people; drop policy if exists "own store" on treeo_store; drop policy if exists "own people" on treeo_people; create policy "own store" on treeo_store for all to authenticated using (user_id = auth.uid()) with check (user_id = auth.uid()); create policy "own people" on treeo_people for all to authenticated using (user_id = auth.uid()) with check (user_id = auth.uid()); -- ============ TEAM PAGE (optional, additive) — only needed if you use the "Team" nav page ============ -- Two simple, non-tenant tables shared by everyone signed into this Supabase project (there is -- only one team here — Treeo — so no per-org isolation needed, unlike the multi-tenant SQL that -- was tried and removed earlier). Nothing in the login flow depends on these tables existing; -- if you never run this block, the "Team" page just shows a friendly "not set up yet" message. create table if not exists team_members ( id uuid primary key default gen_random_uuid(), name text not null, email text, added_by uuid references auth.users, created_at timestamptz default now() ); create table if not exists team_messages ( id uuid primary key default gen_random_uuid(), author_name text not null, author_email text, text text not null, created_at timestamptz default now() ); alter table team_members enable row level security; alter table team_messages enable row level security; -- anyone signed in (any authenticated Supabase user on this project) can read/write both tables — -- there's no per-org split here, it's one shared team space. Swap `to authenticated` policies for -- something tighter later if this project ever needs to isolate multiple separate teams. drop policy if exists "authenticated all team_members" on team_members; create policy "authenticated all team_members" on team_members for all to authenticated using (true) with check (true); drop policy if exists "authenticated all team_messages" on team_messages; create policy "authenticated all team_messages" on team_messages for all to authenticated using (true) with check (true); -- ============ DIRECT MESSAGES (optional, additive) — private 1:1 messages, real RLS (not just UI-hidden) ============ -- Unlike team_messages (public board, anyone signed in can read all rows), this table is actually -- restricted at the database level: a row is only selectable by its sender or its recipient. Uses -- Supabase's built-in auth.email() (the signed-in user's own email from their JWT) — nobody can -- read someone else's DMs even by calling the REST API directly. create table if not exists team_dm ( id uuid primary key default gen_random_uuid(), from_email text not null, to_email text not null, text text not null, created_at timestamptz default now() ); alter table team_dm enable row level security; drop policy if exists "dm select own" on team_dm; create policy "dm select own" on team_dm for select to authenticated using (from_email = auth.email() or to_email = auth.email()); drop policy if exists "dm insert own" on team_dm; create policy "dm insert own" on team_dm for insert to authenticated with check (from_email = auth.email());
Page access (Admin)
Only you (mustafaindap@gmail.com) can see this panel. If you restrict a page, only the allowed emails can see it in the menu; it's hidden from everyone else. This is only a menu/UI-level hiding — most data still comes from shared Supabase tables, so it is not a full database-level block. Only matters while signed in with Supabase; in local/offline mode everyone sees every page.
Data