Thirty desks,
one method
running now
Hoops Nightly is a newsroom built around a database. Thirty team desks work from the same live data under the same written rules, with a writing system doing the volume and a human editor owning the rules, the review and the corrections. Nothing here carries an individual byline, and nothing here pretends to: the desk is the author, the publisher is accountable, and every page shows its data and its timestamp so you can check it yourself. This page is the whole method, including the parts we would rather you knew than assumed.
The desk model
the 30 desks →Each team section is a desk: Lakers Nightly Desk, Celtics Nightly Desk, and so on to thirty. A desk owns its club's data, its morning briefing, its show and its pages, and it signs everything it publishes as a desk. There are no individual bylines on Hoops Nightly, and there are no invented ones either: no pen names, no stock-photo faces, no biographies written for people who do not exist.
We chose this over personas because a byline is a promise about who answers for the words. Here the answer is the same on every page: the desk produced it under the rules on this page, and the publisher, CR OU OÜ, answers for it. Wire services and several major titles sign as staff or desk for the same reason; the difference is that we also show you the data the words came from.
What a desk is not is a local reporter. No desk attends practice, sits in a press room or has sources of its own. When a club's beat writers report something, the desk logs it as a report with its source and confidence, and says so.
From a feed to a sentence
five steps, in orderSources
Official league feeds for scores, box scores, standings, injuries, rosters, lineups and schedules; stats.nba.com for ratings and player stats; public salary data for contracts; league and team YouTube channels for video; named insiders' public posts and HoopsRumors for trade reports; Wikimedia Commons for photos. Nothing is lifted from another outlet's articles.
Database
Every source lands in our own database with a timestamp and a fetch log. Pages render from the database only, never from a live call to a source: if a feed dies, the page shows how old its data is instead of breaking or guessing.
Rules
Before a word is written, the data is checked: a rumor needs a source and gets a confidence score; a roundup is not a rumor; a player page exists only for a rostered player or one with a season of stats; a number carries its season label; a game page needs a real game.
Words and voice
The desk's writing system turns the checked data into briefings, recaps, player and team pages and show scripts, under a written brief that allows nothing the data does not say. A fact gate rejects a script that names a player who is not on this roster or in this club's rumor ledger. Two voices, the host and the analyst, read the shows.
Review and corrections
A human editor owns the rules, reads a daily sample of everything published, reviews every rejection the system logs and every reader report, and signs off corrections on the corrections page. No page waits for the editor before publishing: that trade-off is what makes 30 desks possible, and it is why every page shows its data and its timestamp.
The data desk, live
what refreshes, how often, last successThis is the ingestion schedule as it runs, with the last successful run of each job read from the newsroom's own log. If a line goes stale, the pages it feeds say so too.
| Job | Feeds | Cadence | Source | Last success |
|---|---|---|---|---|
| scoreboard | Scores, game status, tonight's slate | every 60 s during games, 15 min otherwise | official league scoreboard feed | 14 min ago |
| boxscore | Box scores, player and team game stats | every 2 min during games, 10 min otherwise | official league box score feed | 14 min ago |
| injuries | Injury report, status changes, return dates | every 15 min | official injury report | 6 min ago |
| rumors | Trade rumors with source and confidence | every 10 min | named insiders' public posts, HoopsRumors | 4 min ago |
| standings | Standings, seeds, streaks, last ten | every 30 min | official league standings | just now |
| videos | Highlights, press conferences, interviews | every 30 min | league and team YouTube channels | 4 min ago |
| radar | Trade radar: who needs what | every 30 min | our own rumor and cap tables | 14 min ago |
| officiating | Referee assignments | every 2 h | official assignments | 4 min ago |
| l2m | Last Two Minute reports | after close games | official L2M reports | 18 min ago |
| team_stats | Team ratings, pace, shooting | every 6 h | stats.nba.com | 6 min ago |
| player_stats | Player season stats, base and advanced | every 6 h | stats.nba.com | 6 min ago |
| schedule | Schedule, tip-off times, broadcasters | every 6 h | official schedule feed | 2 min ago |
| rosters | Rosters, jerseys, positions, bios | every 24 h | official rosters | just now |
| lineups | Most-used lineups | every 24 h | stats.nba.com | 5 min ago |
| teams | Teams, arenas, colors | every 24 h | official team data | 2 min ago |
| cap | Contracts, cap hits, thresholds | weekly | public salary data | 14 min ago |
| headshots | Player photos with credit | weekly | Wikimedia Commons only | 10 min ago |
| gamelogs | Game logs for splits and compare pages | weekly (nightly box scores in between) | stats.nba.com | 10 min ago |
| watchdog | Checks that every job above is alive | every 10 min | this table | 14 min ago |
Text is rewritten on its own schedule: game previews and recaps within 20 minutes of the data, team and player pages every three hours when their data has changed, the morning briefing at 7:00 ET.
What the writing system does, and never does
the whole list- Turns checked data into plain-English briefings, recaps, team and player pages, FAQs and show scripts
- Links every name in the prose to its page and every number to the table it came from
- Reads the shows in two voices, the host and the analyst
- Rewrites a page when the data behind it changes, and dates it
- Invent a quote, a source, an injury, a trade or a number that is not in the database
- Use a fact from outside the brief it was given for that page
- Portray a real person: the voices are roles, with no names, faces or biographies
- Publish a page that fails its own contract: too little data, no source, no season label
- Touch scores, standings, injury statuses or contracts: those are data, shown as received, never rewritten
Every text starts from a brief: the tables on the page, the club's last events, the roster, the rumor ledger, and the rules below. Nothing from outside the brief goes in. A draft that is too short is sent back; a draft that names a player who is not in the brief is thrown away; a draft is never patched by hand, because a hand-patched page would not rewrite itself honestly when the data moves.
The writing rules
full editorial policy →Every claim in a text is traceable to a table on the same page or the page it links to. If the number is not in the brief, the sentence is not written.
The current season is 2026-27. Anything from 2025-26 is called last season, in the text and in the table headers.
A trade rumor is published with its source, its date and a confidence score, and closes when it is confirmed, denied or expires. Roundups and notebooks are excluded from the ledger.
When a table and a sentence disagree, the table is right and the sentence is rewritten from it. Scores, statuses and contracts are never edited by hand.
A page exists only if it can carry its full contract: the data blocks, the prose, the links. Otherwise its content is a section of its parent page.
Every data block shows its last refresh; every text shows when it was written. Stale is labelled stale.
Player and team names in the prose link to their pages. The site uses its own marks in club colors and no official logo, no agency photo, no broadcast frame.
A substantive error is fixed within 24 hours of a report and listed on the corrections page with the date, the page and what changed.
The shows
two voices, no charactersEvery desk has a morning show, eight to twelve minutes, and a four-minute post-game show once the season is on. The script is written from the same brief as the club's pages, as a conversation between two roles: the host, who runs the show and believes in the team until the numbers say otherwise, and the analyst, who brings the numbers and only the numbers in the brief. They are roles, not people: no names, no faces, no biographies, and they never address each other by name.
The shows launch club by club, as each club's own channels open. Every episode page carries the transcript and the chapters, so anything said on air can be checked against the page it came from. A show that fails the fact gate is not produced that day.
- The desk's brief is assembled from the database: last game, next game, injuries, rumors, standings, roster, last season's numbers
- The script is written under the show rules: 1,200 to 1,500 words, cold open, five to seven chapters, every number from the brief
- The fact gate checks every player name against the roster and the rumor ledger
- The host and the analyst read it; the episode page gets the transcript and the chapters
- Listens are counted per platform, without cookies
Review, corrections, accountability
corrections page →We would like to tell you that a person reads every page before it goes out. That is not how a thirty-desk newsroom that refreshes every few minutes can work, so here is what actually happens. The rules on this page are written and maintained by a human editor. Every day that editor reads a sample of what was published, every rejection the system logged (short drafts, fact-gate failures, dead sources), and every message that reaches [email protected]. A substantive error is fixed within 24 hours and logged publicly. A rule that let an error through is changed, and the change applies to all thirty desks at once.
Hoops Nightly is published by CR OU OÜ, registry code 16778262. It is independent: not affiliated with, endorsed by or sponsored by the league, any team or any broadcaster, and it carries no advertising today. Team names identify what the desks cover. The site uses its own marks, in club colors, and no official logo.