Build / Cursor / regional-newsroom

Regional Newsroom Assignment Desk

Build an AI assignment desk for regional newsroom product leaders: market-specific story drafts, claim packs, source receipts, and editor-ready leads on first live load. Role-based reporter and editor workspace with market and beat filters; Assignment queue with cited story drafts, local angles, and why-it-matters copy; Claim inspector with confidence, evidence, quote, source URL, and editorial caveats; Editor packet export with sources, coverage gaps, and next-reporting steps; Morning Cursor Automation for fresh assignment digests

Sign Up Cursor setup guide
Cursor + Synorb build video

How do you build Regional Newsroom Assignment Desk with Cursor and Synorb?

Use the Regional Newsroom Assignment Desk one-shot prompt to have Cursor build a working product with Synorb discovery, server-side REST, source-linked claims, and Cursor-native automation.

Watch Synorb build videos on YouTube →

Role-based reporter and editor workspace with market and beat filters; Assignment queue with cited story drafts, local angles, and why-it-matters copy; Claim inspector with confidence, evidence, quote, source URL, and editorial caveats; Editor packet export with sources, coverage gaps, and next-reporting steps; Morning Cursor Automation for fresh assignment digests

Regional media AI and product leads can see how a newsroom AI layer gives reporters a steady stream of source-grounded local story leads without replacing editorial judgment.

Built for

AI product lead, newsroom transformation lead, or product engineer at a regional publisher or media company responsible for rolling out AI tools to reporters across multiple local markets.

Product type

authenticated newsroom assignment dashboard

Industries

Media, Regional publishing, Local news, Civic data

A real app, not a flattened feed.

Cursor builds the product layer. Synorb supplies the cited core.

Cited data core
Synorb
StreamsBLS metro employment, CPI, wages, labor, and regional source channels; state legislature and state executive Streams for the default markets; U.S. Congress and 2026 midterm-adjacent civic Streams; official sports and team Streams for civic, venue, campus, labor, and business hooks; data-center policy, energy, tax-incentive, zoning, and statehouse activity
FacetsManifests, Briefs, Signals, claims, citations, source URLs, coverage, diagnostics, usage, and pagination.
Experience layer
Cursor
ComposesCursor Agent; Cursor MCP; Cursor Automations; Next.js App Router; server-side Synorb REST route; typed claim and citation adapters
Stays liveCursor Automations, saved Synorb Beacons, scheduled refresh, and source-linked comments or digests where useful.

Credential safetySynorb credentials stay server-side or in Cursor MCP config. The browser never receives an one server-side Synorb Key, Synorb Key, or raw credential response.

Paste this into Cursor.

Cursor should ask the setup checkpoint, run Synorb discovery, show the Live Scope Receipt, then build against the real data shape.

CREDENTIALS FIRST: Before any Synorb setup, ask the user in plain English for one Synorb Key (SYNORB_KEY). Parse only credentials.synorb_key from GET https://synorb.com/connect; store the one key as a server-side secret and use Authorization: Bearer <synorb_key> for both REST and MCP. A self-provisioned key is DEMO access for 1,000 Manifests and expires 24 hours after mint; read and surface the top-level expires_at field. Bind an email with POST https://api.synorb.com/api/connect/bind-email using the same Bearer key to get Starter, free forever with 1,000 Manifests/month and no expiry; Paid is $10/month for 10,000 Manifests/month. After expiry, bind an email, mint a new demo at https://synorb.com/connect, or sign up free at https://synorb.com/signup. Store one server-side key, show "Synorb key expired - bind an email or mint a new demo key" instead of a generic auth failure, and document expires_at plus these recovery paths in the generated README and environment template. You are Cursor. Build Regional Newsroom Assignment Desk in this repository. PROMPT METADATA Slug: cursor-regional-newsroom Title: Regional Newsroom Assignment Desk Short title: Newsroom Desk Domain: regional-newsroom Tagline: Build an AI assignment desk for regional newsroom product leaders: market-specific story drafts, claim packs, source receipts, and editor-ready leads on first live load. Video state: Watch build video Partnership hook: Regional media AI and product leads can see how a newsroom AI layer gives reporters a steady stream of source-grounded local story leads without replacing editorial judgment. What you get: - Role-based reporter and editor workspace with market and beat filters - Assignment queue with cited story drafts, local angles, and why-it-matters copy - Claim inspector with confidence, evidence, quote, source URL, and editorial caveats - Editor packet export with sources, coverage gaps, and next-reporting steps - Morning Cursor Automation for fresh assignment digests Cursor and platform tools: - Cursor Agent - Cursor MCP - Cursor Automations - Next.js App Router - server-side Synorb REST route - typed claim and citation adapters Synorb stream families: - BLS metro employment, CPI, wages, labor, and regional source channels - state legislature and state executive Streams for the default markets - U.S. Congress and 2026 midterm-adjacent civic Streams - official sports and team Streams for civic, venue, campus, labor, and business hooks - data-center policy, energy, tax-incentive, zoning, and statehouse activity Tags: newsroom, regional, reporters, BLS, statehouse, sports, elections, data centers, claims, citations PRODUCT TO BUILD Build an authenticated regional newsroom assignment desk for the AI/product leader responsible for newsroom AI rollout. Reporters and editors log in and immediately see prebuilt local story drafts, claim packs, source references, beat filters, and editor-ready assignments. The first screen must prove the product vision: a steady, source-grounded stream of local and regional story ideas that reporters can use as a draft, rewrite from claims, assign for follow-up, save as a watch, or export as an editor packet. PRIMARY USER AI product lead, newsroom transformation lead, or product engineer at a regional publisher or media company responsible for rolling out AI tools to reporters across multiple local markets. APP-SPECIFIC LIVE SCOPE Use this default market pack unless the user edits it: New Jersey; Lehigh Valley; Pennsylvania; Ohio and Cleveland; Michigan; Alabama, Gulf Coast, Huntsville, Birmingham, and Mobile; Oregon and Portland; Massachusetts; Syracuse and upstate New York; Staten Island and New York City. Discover and confirm live Synorb coverage for BLS metro and regional economic source channels, state legislature Streams, state executive Streams, U.S. Congress and 2026 midterm-adjacent civic Streams, official sports/team Streams, and data-center policy or energy/zoning/tax-incentive activity. Sports material is allowed only when it supports civic, business, campus, venue, transportation, labor, or community-facing story angles. Do not build a generic sports recap product. CORE PRODUCT FEATURES - Market switcher with the default market pack preloaded and editable - Beat filters for jobs, inflation and cost of living, housing and labor, statehouse, data centers, elections, sports and community, and courts or public safety only when live coverage exists - Assignment queue with draft headline, story frame, local angle, newsroom value, why it matters, freshness, priority, confidence, editor status, and claim chips - Claim inspector with source URL, source name, source channel, published date, evidence type, media format, tags, citation snippet, quote when present, and confidence - Actions for Use draft, Rewrite from claims, Assign reporter, Save watch, Export editor packet, Mark needs reporting, and Escalate to editor - Honest empty and partial coverage states by market and beat SYNORB ACCESS CHECKPOINT - KEEP IT BRIEF Do not spend the build on Synorb setup. Treat access as a protected implementation gate for the AI/product lead, not as a reporter-facing feature. Before live calls, ask the lead for one protected path: - Use the existing Synorb Key in Cursor MCP configuration and server-side SYNORB_KEY environment variables. - Self-provision a DEMO Synorb Key through Synorb Connect. For Synorb Connect, be explicit: https://synorb.com/connect self-provisions DEMO access for a new user. Do not claim it is tied to an existing account, sign-in session, registration flow, or credit card. If the lead elects self-provisioning, make exactly one local or server-side GET request to https://synorb.com/connect, parse only credentials.synorb_key without printing the response body, read and surface expires_at, and store one SYNORB_KEY for both MCP and server-side REST. DEMO is 1,000 Manifests for 24 hours; bind an email with POST https://api.synorb.com/api/connect/bind-email using the same Bearer key for free-forever Starter access, or show "Synorb key expired - bind an email or mint a new demo key" and document the recovery path. Never ask the lead, reporters, or editors to paste secrets into chat, generated source files, NEXT_PUBLIC variables, browser storage, logs, HTML, screenshots, fixtures, database rows, or documentation. In plain words: do not paste secrets into chat or generated files. Validate with synorb-profile through MCP and one temporary server-side REST check using Authorization: Bearer <synorb_key>. Report only pass or fail, account name, account ladder state, quota state, allowed date window, and environment variable names only. If access is unavailable, render a setup-blocked state while keeping the newsroom workflow, market pack, story queue, claim inspector, and source receipt UI visible. Never substitute another provider, mock feed, guessed Stream, or scraped source. SYNORB MCP DISCOVERY CONTRACT 1. Call synorb-profile once first. Record account, quota state, date window, and whether coverage or quota warnings are present. 2. Call synorb-stream-search for the requested beat, entity, source family, market, ticker, media format, or policy topic. Use include_details true when choosing streams or source channels. Treat coverage.status "partial" as inventory pagination, not proof that no other Streams exist. 3. Select only real customer-visible Streams with positive 17-digit IDs. Preserve every Synorb ID as a JSON string end to end. Never guess, shorten, coerce, or invent an ID. 4. Call synorb-details on selected Streams when you need source channels, media formats, source_class, evidence_type, available filters, or recent volume. 5. Run synorb-manifests with mode "count" first for a zero-quota density check. Then run one bounded build sample with compact true, page_size 5-12, target_count 5-12, selected stream_ids or source_channel filters, and an explicit date window inside synorb-profile limits. 6. Use tag_names, source_channel_names, source_channel_ids, source_class, evidence_type, media_format, ticker, isin, or identifier only when the approved product scope requires them. 7. Count and orient responses are preflight only. Do not summarize them as exhaustive result sets. Preserve quota_header, coverage.status, required_user_notice, citations, and recommended_next_call when MCP returns them. 8. Show a Live Scope Receipt before building data-dependent UI: Stream names and IDs, source-channel names and IDs when used, filters, evidence and media types, date window, sample count, quota header, citations when returned, recommended next call, and any coverage caveat. Ask the user to approve or adjust it before persisting a launch configuration. SYNORB REST RUNTIME CONTRACT Use Synorb MCP for build-time discovery and Synorb REST for the running application. Put runtime calls behind a server-only route such as /api/synorb, /api/synorb/policy, /api/synorb/company, or the equivalent backend endpoint in the detected framework. The server route calls POST https://api.synorb.com/streams/query with Authorization: Bearer <synorb_key> from the one server-side SYNORB_KEY secret. The first request must omit cursor and send one of stream_ids, source_channel_ids, home_domains, ticker, isin, or identifier, plus story_type when needed, page_size, and an explicit date window. Multi-stream REST results are returned as flat rows under data.briefs, data.signals, or data.manifests depending on the request. Pagination is under data.pagination, and the next request uses data.pagination.next. Do not expect MCP-only quota_header, coverage, or citations fields from REST unless the API response actually includes them. Surface REST usage honestly. Cite each returned row's real source_url. Validate inputs, enforce auth where appropriate, lock CORS to the app origin, rate-limit public routes, and never expose SYNORB_KEY to browser code. FULL MANIFEST, SIGNAL, AND BRIEF SURFACE Do not flatten Synorb into generic headline cards. Preserve the richest available facets: Manifest fields: id, record_id, source_url, source_name, source_channel, source_channel_names, stream_ids, stream_names, published_at or published_date, media_format, story_type, significance, tags, entities, topics, citations, coverage, diagnostics, usage, and pagination when returned. Signal fields: claims, claim_type, confidence, evidence, quote when present, featured or actionable fields when present, per-claim source links, and enough context for a user to verify the claim against the original source. Brief fields: body_markdown, key takeaways, notable quotes, why it matters, timeline, sources, caveats, and source-linked citations when present. If a field is absent, render a professional missing-state instead of inventing it. Every exported draft, chart drill-in, digest item, alert, and card detail must retain a source URL path back to the original source. GAP-ONLY WEB POLICY Synorb is the source-grounded context layer. Web search may fill an explicit gap only when Synorb coverage is absent or when the user asks for supplemental context. Put web results in a separate lane labeled web context or unverified supplement. Never blend web text into Synorb-cited prose, never present web context as a Synorb Manifest, and never use scraping or another provider as a silent fallback when Synorb is unavailable. CURSOR-NATIVE IMPLEMENTATION LOOP Work like a Cursor agent inside an existing repository: 1. Inspect the repo first. Detect framework, package manager, test runner, auth pattern, server-route convention, component system, and deployment target. If the app is new, recommend Next.js App Router with TypeScript unless the user chooses another stack. 2. Ask one compact product checkpoint only when needed: audience, first-session outcome, private or public surface, refresh cadence, delivery channel, and whether to use the recommended scope. 3. Add repo guidance in .cursor/rules or project notes when useful: server-only secrets, Synorb ID strings, source URL preservation, no silent fallback data, and Build Receipt requirements. 4. Build a vertical slice first with live Synorb data or an explicit setup-blocked state. Local fixtures may exist only for tests. 5. Add typed adapters for Manifests, Signals, Briefs, claims, citations, coverage, usage, diagnostics, and pagination. Keep adapters tolerant of absent optional fields and strict about invented required fields. 6. Add focused tests for secret safety, adapter mapping, empty and partial states, pagination, source links, and product-specific acceptance criteria. 7. Run the local checks that fit the repo. Summarize failures instead of hiding them. 8. Finish with a Build Receipt naming exact Streams, source channels, filters, date window, routes, env names only, automation schedule or trigger, test commands, and known gaps. AUTOMATION FOR THIS BUILD Create a weekday morning Cursor Automation that refreshes approved watches and opens a cited digest issue or comment when high-priority leads appear. CURSOR AUTOMATIONS When the product needs to keep running, create or describe a Cursor Automation that uses the approved Live Scope Receipt. Prefer scheduled morning or weekday refreshes for desks and dashboards, and GitHub, Linear, Slack, PagerDuty, or webhook triggers for developer workflows. Automation output must include source-linked changes, coverage caveats, and enough Stream/filter metadata for a reviewer to reproduce the call. Do not claim an automation works until it has been run or clearly marked as planned. APP-SPECIFIC ACCEPTANCE TESTS - The product, prompt, metadata, docs, and generated page do not name any target publisher prospect. - Every default market appears in the market switcher and can be removed or edited. - No draft, assignment, claim chip, or editor packet appears without a source URL path. - Claims retain claim_type, confidence, evidence, quote when present, source name, and source URL. - The first live preview is either real Synorb data or an explicit setup-blocked state. SHARED ACCEPTANCE TESTS 1. MCP and REST credential paths are validated before live data is used. 2. No Synorb Key, credential bundle, or secret value appears in client code, NEXT_PUBLIC variables, HTML, logs, fixtures, screenshots, database rows, docs, or API responses. 3. Every persisted Synorb ID is a validated 17-digit string. 4. Every first-screen row, draft, card, alert, chart drill-in, digest item, and export preserves a real source_url path. 5. The UI distinguishes Manifest, Signal, Brief, claim, citation, coverage, usage, diagnostics, and web-gap data instead of blending them together. 6. Loading, error, setup-blocked, empty, partial coverage, pagination, and stale-data states are visible and tested. 7. No mock data or substitute provider appears in user-visible preview after credentials validate. 8. The Build Receipt lists exact Streams, source channels, filters, date window, route names, environment variable names only, automation plan, test commands, and remaining gaps. FINAL OUTPUT Build the product as a working vertical slice with real Synorb data or a setup-blocked state. Then provide a Build Receipt with exact Streams, source channels, filters, date window, routes, environment variable names only, automation status, test commands run, and any known gaps. Do not deploy unless the user separately asks after review.