The product's core value prop (aggregated market data) has zero real data flowing to the UI. We need to align on data sources before we can prioritize tickets — most are blocked until we decide where the data comes from.
We have two reference projects pulling in opposite directions, and most Linear tickets don't specify their data source. Until we decide, those tickets are blocked.
The first prototype was API-heavy: real data from external services, transformed and displayed.
| Source | What It Provides | Our Status |
|---|---|---|
| Polymarket CLOB API | Market events, prices, volume | Route exists, UI doesn't consume it |
| Kalshi API | Prediction market events | Not started |
| The Odds API | Sports betting odds | Not started |
| Twitter API v2 | Sentiment, key figure mentions | Not started |
Paul's horse racing project takes a fundamentally different approach: scrape the web → AI generates content → store in DB → display. The data pipeline is Firecrawl + Gemini, not direct API integrations. PR #18 already replicated this pattern for articles using Apify + OpenAI.
Zero real APIs. All data is hardcoded. Useful only for understanding the data shapes Paul expects on each page: market cards, trending movers, news, sports picks, social feed.
These two models aren't mutually exclusive, but we need clarity on which pages use which approach:
- Market data pages (S-7, S-20, S-11) → API-driven (Polymarket, Kalshi, Odds API)
- Content pages (S-16, S-19) → AI-generated (already built in PR #18)
- Some tickets don't specify either — they describe UI but not where the data comes from
PR #18 proved the AI article pipeline works. Core product pages still have no real data. Recommend: market data first, content in parallel if bandwidth allows.
Merge it. The work is done, schema is in place, doesn't conflict with market data work. Unblocks S-16/S-17/S-19 frontend.
The most critical work has no Linear tickets:
- Market data DB schema (tables, normalization)
- Kalshi API integration
- The Odds API integration
- Data normalization layer
- React Query hooks (frontend ↔ API)
| Dev A (Frontend) | Dev B (Backend) |
|---|---|
| S-6, S-5, S-9 (app shell) | Market DB schema |
| S-18 (learn getting started) | Polymarket → DB pipeline |
| S-7, S-20 (when data ready) | Kalshi + Odds API |
| S-16/S-19 (article pages) | Data normalization |
Not all tickets have clear data sources. That's the blocker.
| Ticket | What | Data Source | Status |
|---|---|---|---|
| S-5 | Header | Auth state | Can build now |
| S-6 | Navigation | Static routes | Can build now |
| S-9 | Footer | Static | Can build now |
| S-18 | Learn: Getting Started | Static/MDX | Can build now |
| S-7 | Trending Ticker | Polymarket + Kalshi prices | Blocked — no data pipeline |
| S-20 | Trending Page | Multi-source market data | Blocked — no data pipeline |
| S-11 | Alerts Page | Market data + user prefs | Blocked — no data pipeline, no alerts table |
| S-16 | Strategy Articles | AI-generated (articles table) | Backend done (PR #18). Missing: public pages. |
| S-17 | Admin Dashboard | Articles + users tables | POC done (PR #18) |
| S-19 | Article Template | Articles table | Depends on S-16 pages |
| S-12 | Auth | Auth0 | ✅ Done |
4 can start today. 3 are blocked on market data. 3 are partially done via PR #18. 1 is done.
Phase 1 — App Shell (no data deps, start now): S-6 → S-5 → S-9 → S-18
Phase 2 — Market Data Pipeline (critical path, blocks everything):
- DB schema:
markets,market_snapshots,market_sources - Wire Polymarket route → DB → React Query hooks
- Kalshi API (public, no auth)
- The Odds API
- Data normalization across sources
Phase 3 — Core Pages (need Phase 2): S-7 → S-20 → S-11
Phase 4 — Content Pages (PR #18 continuation): S-16 public pages → S-19 template → S-17 polish
| What | Status |
|---|---|
| Auth (Auth0) | Done (S-12) |
| Database | Partial — users, articles, scraped_sources. No market data tables. |
| Polymarket API | Route exists, UI doesn't consume it |
| Kalshi / Odds API | Not started |
| Article generation | Working POC (PR #18) |
| Admin dashboard | Working POC (PR #18) |
| Global shell | Not started (S-5/S-6/S-9) |
| Source | Status | Have Key? |
|---|---|---|
| Polymarket | Route exists, not consumed | Yes |
| Kalshi | Not started | N/A (public) |
| The Odds API | Not started | No |
| OpenAI | Working | Yes |
| Apify | Working | Yes |
| Auth0 | Integrated | Yes |
| Not started | No | |
| PostgreSQL | 3 tables, no market data | N/A |