Loading pubs…
| Pub | Postcode | Area | Type | Status | Managed by | Brewery | Data quality | Actions |
|---|
No pubs match the current filters.
1
Paste JSON2
Review matches3
Resolve conflicts4
ApplyPaste a JSON array of pub objects. Each object should follow the clockapub extended schema. A single object is also accepted.
| Incoming name | Match | Matched pub | Confidence | Fields to update | Action |
|---|
Review field-level conflicts below. Green = incoming wins (higher confidence or new data). Amber = conflict — choose which value to keep. New pubs have no conflicts.
Open backlog
filtered
click a cell to filter the table below
| Theme | High | Medium | Low | Total |
|---|
Loading portal feedback…
| Date | Category | Message | From | Priority | Component | Status | Pub | Actions |
|---|
Page
No feedback matches current filters.
Loading user suggestions…
| Date | Type | Summary | Submitted By | Priority | Component | Status | Pub | Actions |
|---|
Page
No suggestions match current filters.
Status:
Loading claims…
No claims match the filter.
| Pub | Claimant email | Requested | Status | Decided | Actions |
|---|
Status:
● live
Loading invitations…
No invitations match the filter.
| Pub | Kind | Invitee | Inviter | Sent | Expires | Status | Actions |
|---|
Self-claims raised against a pub that's already managed by a landlord. Approve transfers ownership to the challenger (the current owner is removed); Reject dismisses it; Request proof keeps it open with a note.
Loading disputes…
No open disputes.
| Pub | Challenger | Raised | Actions |
|---|
Machine-read hours re-read themselves every Sunday. A person’s check does not, because
re-scraping a judgement would overwrite it with a machine read. Instead it stays live for 18 months and is
due a re-check after six. Past that point the page tells customers when the hours were last checked.
This is the list of what is due.
Seeds every gazetteer candidate for a town into a real pub, then reads each one's opening hours
from its own website, then Google Places, then a social page — publishing whatever a named source
actually states. A pub is only left unpublished when nothing we can reach says when it opens.
Runs in batches and continues on its own every five minutes until the town is done.
Hours read this way are recorded as machine-read, never as reviewed by a person, and
expire sooner than a human confirmation — 90 days for a pub's own website, 30 days for Google Places.
They refresh automatically and drop out of the finder if they can't be re-read.
The weekly sweep scans stale curated pubs for new events and queues them here as pending proposals — nothing goes live until you approve. Run it on demand below.
No pending proposals. Run the sweep to populate the queue.
| Proposed | Evidence | Source |
|---|
Enrich one pub
Enrich one pub from multiple sources, review every proposed change, and submit only what you approve. Base data uses Google Places (you can accept a value that replaces an existing one here); events are scanned from the pub's website / Lemon Rock and reviewed before import. Needs
GOOGLE_PLACES_API_KEY + ANTHROPIC_API_KEY.
Some sites refuse to be embedded — if the frame stays blank, use Open in new tab. To feed a blocked page to the extractor, select all there and paste it into the Hours tab.
Base data — Google Places
| Field | Current | Proposed | Source |
|---|
Which position is right?
Hours — pub's own website
Reads opening and kitchen hours from the pub's own site and shows them beside what we hold. Approving records a verification against that URL — which is what lets a pub publish. Days the page doesn't mention are never proposed.
| Day | What we hold | What the page says | Field |
|---|
Events — website / Lemon Rock
| When | Title | Type | Notes |
|---|
Offers — standing deals
Filled by the Events scan — one read of the page separates the two. An offer is a price promotion ("Steak Thursday £18.95"); an event is something you turn up for. Recurring offers are stored as a series and materialised by the dashboard; dated ones are stored as a single offer.
Run a scan on the Events tab.
| When | Title | Kind | Detail |
|---|
Situation — local news & records
Researches who currently runs the pub and its recent situation (change of hands, refurb, closure, awards) from local news + the FSA register. Intelligence for outreach / data quality — it writes nothing to the pub. Needs
ANTHROPIC_API_KEY.
Persists to the pub's admin notes.
Bulk autofill
Fill empty phone / website / location from Google Places. Existing landlord values are never overwritten. Set filters, Preview matches to see exactly which pubs (and the est. cost) — then Run. Needs
GOOGLE_PLACES_API_KEY on the admin Worker.| Pub | Postcode | Will try to fill |
|---|
| Pub | Result | Details |
|---|
Sport:
Country:
Querying TheSportsDB…
No leagues match. Try a different sport / country combination.
| League | Country | Season | Sport (clockapub) | Status | Action |
|---|
Adding a league here writes a row to
competitions with the TheSportsDB id in external_codes. The next time the importer Worker runs (cron Sunday 03:00 UTC, or on demand via /run), fixtures for the new league populate automatically.
Recent imports
Loading…
No
import_runs rows yet.| Started (UTC) | Duration | Status | Fetched | +Add | ~Upd | Skip | Errors | Trigger |
|---|
Competition images
Optional logo per competition — overrides the generic sport glyph on the In-Pub Display, the dashboard Sport page, the finder and microsites. PNG/JPG/WebP/SVG, max 3MB.
Import fixtures from ICS
For team-less sports where TheSportsDB is too session-noisy (F1 returns FP1/quali/sprint, not just races). Upload a race/event-day
.ics (e.g. f1calendar.com → "Grand Prix" calendar) and it creates fixtures for the chosen competition. Re-importing updates in place.
| Event | When (UTC) | Result |
|---|
Once a month, Claude searches for fixtures UK pubs will show in the next 90 days that we don't carry. Nothing here is added to the catalogue automatically. Check each one with its search links, mark it, then ask a session to seed the ones marked Correct.
Reviewed (0)
Scans existing pub data for evidence of amenities not yet tagged on
pubs.amenities. Tier 1 (free) reads menu data only. Each proposal lists the evidence — you review and apply per-row or in bulk.
Scanning menus…
No proposals — all eligible pubs already tagged, or no menu evidence found.
| Pub | Source | Evidence | Status |
|---|
Bio + amenity synthesis
Reads each pub's website with Haiku 4.5 and proposes a punter-facing bio plus structured amenity / policy claims with evidence quotes. Only suggests positive claims — never denies. Review per-row, then Apply to write to
pubs.bio and pubs.amenities. Pubs without a website URL or with thin homepages are flagged for manual.
Click Synthesize gaps to start. Each pub takes ~3 seconds.
| Pub | Quality | Bio preview | Amenities | Policies | Actions |
|---|
Pick a pub to synthesise
Broadcasts
One-off operator nudges to all active pubs. Shows on every landlord's dashboard as a banner + inbox card until they ack or snooze.
New broadcast
Title
Body
Priority
Starts
Ends
Audience
All active pubs (only option for now)
CTA label (optional)
CTA destination (optional)
Active
Loading…
No active broadcasts.
Past (last 20)
Loading…
No past broadcasts.
Post Templates
Curated social-post captions, shared across every pub. Rows without a ride-along key show in each dashboard's "Ready-made posts" gallery. Rows with one supply the caption for the operational "Share this?" prompt (e.g. kitchen closed) — edit here and it changes on every dashboard, no deploy.
New template
Title
Key (slug)
Caption
Suggested images
Category
Scope (optional)
Post type
Source type
Channels
Default CTA
Ride-along key (optional)
Sort order
Active
Loading…
No templates yet.
System Health
Live probe of every clockapub service — the Workers, Supabase (read + write), the Anthropic AI dependency, and TheSportsDB. Re-runs each time you open this tab.
Loading contacts…
| Name | Role(s) | Pub(s) | Last interaction | Source |
|---|
No contacts match the current filters.
Funnel — all pubs (click a stage to filter)
What each stage means
Loading pipeline…
No pubs match the current filters.
Loading coverage…
● present
○ missing
· not applicable
Marketing campaigns
Click a campaign row to drill in.
Loading scans…
By campaign
| Campaign | Scans | Resolved | Rate | Mats | Res/mat | Last |
|---|
Where it's working
| Pub | Resolved | Mats | Res/mat |
|---|
Recent activity
No scans yet. Print collateral with a
/locate/<code> URL and scans will appear here.No placements logged yet. Record where collateral went — it's the denominator that turns scans into a resolves-per-mat rate.
| Pub | Postcode | Campaign | Qty | Placed | Note |
|---|
Log placement
Placement
✓ Saved
Finder golden-test lab — New case
Running the finder pipeline…
Craft a (when, where, query) scenario → set Expectations → Run → read Results / Diagnostics → Save. Promote good cases into the AI suite from the Test Suite tab.
Results are day- and time-sensitive — kitchen hours, events and fixtures vary by weekday (e.g. a pub with a 21:00 kitchen Fri/Sat closes at 20:30 on a Tue). Leaving this blank uses "now", which drifts day to day; pin a date + time so a saved case reproduces and lab/finder comparisons line up.
Run a case to see the AI interpretation, your-vs-AI comparison, and the ranked results.
Run a case to see the worker's per-pub match diagnostics.
Saved cases
Loading…
Landmarks — finder place registry
Positions punters' "near the cathedral / clock tower / station" queries. Drag the pin to place a point landmark precisely — edits go live on the finder without a redeploy. Aliases are the phrasings that resolve to this landmark.
All landmarks
New landmark — kind: point
The route line is shown read-only; re-tracing waypoints isn't supported in this editor yet.
Finder NL queries — what punters ask, and what's failing
Captured from the finder's natural-language planner (last 30 days). Top asks = demand by frequency (with each query's zero-result rate). Themes = what they want, broken down. Failing = queries that returned zero matches — demand the data can't yet answer.
Most-asked queries (last 30 days)
Loading…
| Query | Times | Sessions | Zero-result | Last seen |
|---|
Loading…
Top failing queries (last 30 days)
Loading…
| Query | Times | Sessions | Top fail reason | Last seen |
|---|
Operators — the clockapub crew
Who's who, what they look after, and their latest footprint. "Seen" is the last Supabase sign-in; "last edit" is the most recent change attributed to their own account (admin-panel edits log as a shared
admin actor and aren't counted). Click a responsibilities line to edit it.Loading operators…
No operators found.
🏆 Add competition to clockapub
Auto-derived from TheSportsDB. Tweak before adding if needed.
TheSportsDB id
Name
Short name
Sport key
Country (2-letter)
Season