DRAFT
/
DAILY
Beta
Home
Product
Data Integration →
Contact
DraftDaily — Data Integration
Low-fi wireframe · Jordan · v0.1 · Apr 17, 2026
WORK IN PROGRESS
① Data layers
What data we need, grouped by where it comes from and who owns it.
LAYER 1 · SLATE
Raw slate data
Games & start times
Rosters + positions
Injuries / lineups
Weather (MLB/NFL)
DFS salaries per platform
LAYER 2 · MODEL
Projections
Proj fantasy points
Variance / confidence
Usage, pace, matchup
Model version + run ts
LAYER 3 · DERIVED
Picks + value
Value score (proj÷$)
Edge vs. market
Top-3 ranker output
AI blurb (cached)
LAYER 4 · USER
User state
Auth / session
Preferences
Push tokens
Streak, tails, reads
LAYER 5 · $$
Attribution
CTA click events
Partner → pick → user
Conversions (if feed)
Revenue reconciliation
external source
internal
core / product differentiator
user-facing output
② Architecture flow
How data moves from provider → app, once per day.
Sports feed
Sportradar / SDIO
→
Ingest
cron · 6 AM
→
Warehouse
Postgres
→
Projection
model · 8:30 AM
↓
Top-3 picker
rank by edge
→
Blurb gen
LLM · cached
→
Slate JSON
immutable · 1/day
→
Mobile API
CDN cached
↓
App
iOS / Android
→
CTA click
tracked link
→
Partner
DK / FD / PP / UD
③ Daily lifecycle
The rhythm the whole product runs on. All times ET.
6:00 AM
morning pull
Pull fresh slate data.
Games, confirmed lineups, latest injury reports, weather. Retry logic for late-posting rosters.
cron
sportradar
8:30 AM
model run
Run projection model.
Score every eligible player, compute value = proj÷salary per platform. Rank, select top 3 per sport with liquidity floor.
model
8:45 AM
blurbs + QA
Generate AI blurbs, cache to slate JSON.
Human QA pass on top-3 reads sanity-check. Slate becomes immutable.
llm
9:00 AM
publish
Publish slate. Fire push notifications.
Warm CDN cache. App fetches today's slate on cold start.
fcm / apns
slate/today
Throughout
monitor
Watch for late scratches.
If a published pick is ruled OUT, push "pick affected" alert. Only case where a slate mutates mid-day.
alert
7:30 PM
lock
Lock slate.
Client switches to live-tracking mode. Low-latency score feed drives the lock-screen ticker.
live/scores
11:59 PM
settle
Settle results.
Compute hit rate per pick, update user streaks, archive day to history.
settle
④ Open decisions
Things I need your call on before I can commit to a design.
Answer these first — everything downstream depends on them.
Q1
Projections: build or buy?
Build.
Differentiator. 3–6 mo lead time. Needs a DS.
License.
Ship in weeks. Same numbers as competitors.
Hybrid.
License day 1; build over time.
Q2
Launch sports?
NBA only.
1 model, 1 schedule.
NBA + MLB.
2x data, daily year-round.
All 4.
Full promise — slow.
Q3
Salary source?
Partner feed.
Clean — depends on deal.
Scrape.
Cheap. ToS risk.
Manual.
MVP only. Doesn't scale.
Q4
Live tracking?
Real-time.
Websocket. Sticky. $.
Polling (30s).
Good enough.
Manual refresh.
Skip it v1.
Q5
Auth gate?
Required.
Know every user.
Optional.
Gate only alerts+history.
None v1.
Anonymous device IDs.
Q6
Regions / legality?
US only.
Geofence allowed states.
US + CA.
Similar rules.
Global content-only.
No picks where gated.
⑤ MVP scope proposal
A narrow slice that ships in weeks, not months. Everything else queued for v2+.
In scope — v1
NBA only
Licensed projection source (1 provider)
One publish/day · 9:00 AM ET
3 picks, one platform per pick
AI blurbs generated at publish
Anonymous browse · optional sign-in for alerts
Affiliate CTA as tracked outbound link
History computed from stored slates
Daily push notifications
Lock at 7:30 PM · static "locked" UI
Out of scope — v2+
Proprietary projection model
Live in-game score tracking
MLB / NFL / NHL
Multi-platform cross-comparison
Parlays, lineup builder
User-submitted picks / social
Partner conversion attribution
Subscription tier / pro features
Web version
⑥ Schema sketch
A starting point — 4 entities cover most of v1.
slate
id
uuid
sport
enum
date
date
published_at
ts
locks_at
ts
model_version
str
pick
id
uuid
slate_id
fk
rank
1..3
player_id
fk
proj / salary / value
num
blurb
text
platform
enum
result (nullable)
enum
player
id
uuid
ext_id
str
name / team / pos
str
injury_status
enum
updated_at
ts
user
id
uuid
device_id
str
push_token
str?
prefs
jsonb
streak
int
Next → answer Q1–Q6 · then wire into UI as real states, empty/loading/error handling.
Early access
Be first in line.
Early access
before the public launch
Exclusive partner signup bonuses
from our DFS platforms
Founding member perks
reserved for day-one supporters
Join the Waitlist
Daily DFS edge. Data-driven picks. One app. See you at 9 AM ET.