What changed since the 26 Jul L10, what was measured rather than assumed, and the two things that are now decided. Everything below was tested — where something is an inference or still unverified, it says so.
Shlink now geolocates every scan. This closes the 26 Jul to-do “could we create something like scan.ourlocalspotlight.com…” — the answer is yes, and the QR stack is feature-complete.
db_location yourself — so we installed DB-IP's free IP-to-City Lite (same
MMDB format, no registration) into a named Docker volume. Verified end-to-end.Three real phone scans, same standing spot in Bishop's Stortford, three networks:
| Network | Reported city | Error |
|---|---|---|
| Toob (FTTP) | Chilworth | 92 miles |
| 4G mobile | Romford | 20 miles |
| Virgin Media | Harlow | 7 miles |
Country and region were correct all three times. City was wrong all three times. Toob is a Southampton company, so its entire IP range reports Southampton regardless of where the customer lives. Cloudflare's own geolocation and iplocation.net independently agree — so this is not a database-quality problem and swapping providers won't fix it.
rid instead. Every card carries a
unique recipient id, so a scan ties to a known address by construction — exact, not
inferred. Geo is colour; rid is the attribution. It also means
geo cannot confirm a drop landed in the right area — that's an rid question.Detail: qr-tracking/README.md → “Accuracy — measured”.
Run your own test any time: ./geocheck.sh
The demo landing pages now capture what a scan can tell us without asking the visitor for anything — no GPS, no permission dialog, no consent surface. Cloudflare resolves the network at the edge; the IP is never stored.
| Captured | What it's for |
|---|---|
| ASN + AS organisation | Bot filtering. A scan from a datacentre ASN is a link-preview bot, not a prospect |
| Accept-Language | UK vs DE targeting — the open L10 question, answered free |
| Connection type | Mobile vs fixed = scanned-in-the-street vs scanned-at-a-desk |
| Country / region | The reliable geo fields only |
We deliberately did NOT add GPS. It's redundant (the rid already
identifies the household), the permission prompt lands at exactly the moment Kennedy warns
about attrition in the offline→online handoff, and it's precise location data on a cold
prospect. Wrong trade.
Server: barber-demo/functions/api/scan.js ·
Client: barber-demo/scan-beacon.js ·
Store: klaudius_scans ·
Diagnostic: /api/scan (GET, writes nothing)
The idea: pick Bishop's Stortford households over £50k median income, drop cards, track
scans, and know the profile of who scanned. Right in direction, wrong in three details
— per our own _KO/RESEARCH-royal-mail-door-to-door.md §4.
| Assumption | Reality |
|---|---|
| Select households by income | Royal Mail books at postcode sector only (~3,000 addresses). Mosaic/Cameo profiling is consultant-led and “narrows which sectors, it does not sub-divide one” |
| Every door in the area gets one | Majoritisation (T&C 5.5.1): cards may go to parts of sectors not on your schedule and skip parts that are, ±5% volume tolerance. If items run short, Royal Mail picks who gets one |
| A scan tells us their demographics | It tells us the segment, not the household. A sector at £50k median contains plenty of households well below it |
The beacon already accepts a sid (sector id) alongside rid, so
the pipeline supports both honestly: rid = exact household for addressed mail,
sid = sector for unaddressed door drops.
Not yet built minting sid codes per
sector × advertiser slot in klaudius_qr.py — held until the shared-mailer
lane is actually decided.
Researched 26–28 July from primary Deutsche Post PDFs and put through an adversarial
verification pass — _KO/RESEARCH-germany-direct-mail.md. All figures
EUR, net (netto, zzgl. USt); Deutsche Post publishes these products net only.
The product is POSTAKTUELL, the true equivalent of Royal Mail Door to Door:
fully unaddressed, geographically selected, delivered on the normal postal round.
POSTWURFSENDUNG no longer exists in the tariff — it is a retired product name
that DP still uses as generic marketing language. POSTWURFSPEZIAL is not
the equivalent — it is part-addressed.
| UK — Royal Mail D2D | Germany — POSTAKTUELL | |
|---|---|---|
| Lead time | Plan 5–6 weeks. Handover 18–10 days before start; Local Handover ≥13 days; booking ~3 weeks in practice | E+4 — delivery normally within 4 working days of handover, Tue–Sat |
| Minimum | Volume floors apply | No minimum piece count. Only a €300 net minimum order value (≈2,326 pieces at the full-coverage rate) |
| Granularity | Postcode sector (~3,000 addresses) | Down to one Zustellbezirk ≈ 600 households — finer than anything Royal Mail offers |
| Rate (≤20g, full coverage, Kerngebiet) | £75.60–£82.40 / 1,000 | €129.00 net / 1,000 = 12.9c per piece 2027: €137.00 |
| Cheapest variant | — | €76.00 net / 1,000 = 7.6c — but that is “an Haushalte mit Tagespost”, only households getting other mail that day (~23.1m vs ~32.1m). Not like-for-like with D2D |
Format fits either way. DP's spec is L 140–353mm, W 90–250mm, ≤30mm thick, 250g standard maximum. A5 (148×210) and A4 (210×297) both sit comfortably inside it — and note the thickness allowance is 30mm against Royal Mail's 5mm, so a rigid card is a non-issue in Germany. (Format arithmetic is our reading of the published spec, not a DP statement.) All items in a run must be inhaltsgleich — identical in content.
Mirror-image risk in the UK worth naming in the same breath: Royal Mail T&C 4.11 caps an agent at nine clients per financial year — a 16-slot card breaches it on day one unless RM treats us as a publisher buying for its own title. Both countries have an unresolved legal question; they are just different questions. Both need written rulings
Answers the open Issue and Rock. Each candidate was scored against a five-part productisation test rather than on appeal, because the binding constraint is Oliver's Issue — “how do we minimise work and not become web designers.”
Already productised. The wedge.
Built once already for Emily. One container, human approves before send, so it can't embarrass them.
Uses the QR tracking nobody else in the category will give an advertiser.
Only for clients whose call volume we've already seen.
Posting assets they already own — explicitly not content creation.
Financial dashboards stay off-menu — offered to the client who already bought three things, never listed. Every connector is an OAuth integration that rots on someone else's schedule, and a cafe with a £400 website does not have a data problem.
| Triage is 3 channels, not 4 | Email, SMS, Messenger. WhatsApp is not built. Messenger is hard-gated to a test PSID until Meta grants Advanced Access — it refuses real members by design |
| Voice = after-hours only | Otherwise the failure mode is unbounded. A bad email draft gets caught by the human approving it; a bad phone call has already happened |
| The KB is the unpriced cost | Retrieval-drafting is only as good as the client's written policies, and this ICP has none. Writing it is real work and must sit in the onboarding price |
Full workings: strategy/ADDITIONAL-SERVICES-SPEC.md
Oliver sent Nick Saraev's “$1 website effect that looks like $10K” and Nick's 288-page template site. The technique: a video is chopped into ~55 stills at 11fps, each drawn into a tiny offscreen canvas, luma-converted, then quantised through an 8×8 Bayer matrix into circles. Cursor movement displaces the sampling coordinates, so the interaction is free. Nick's 288 pages cost him about $17.
We rebuilt it clean-room from the published spec rather than copying his code — his licence isn't stated, and the spec is explicitly published as a reproducible prompt. One file, zero dependencies, 12 self-test assertions passing including the one that matters (dot density stable across the loop — the pulsing bug that ruins most attempts).
foreground, ground, colorMix and
saturation — exactly what Oliver's proposed “gatherer” would scrape from a
prospect's existing site or flyer. Pipe a brand palette straight in and every site carries
the client's own colours while sharing one distinctive engine. That's “feels like them”
solved without bespoke design, which is also “we don't become web designers” solved.Engine + demo: research/web-techniques-20260730/klaudius-demo/
· Technique spec: templates/prompts_03-dither-engine.md
· Transcript: video/transcript-nick-saraev-dither.md
API key created and stored in Doppler infra/prd
(IDEABROWSER_API_KEY, IDEABROWSER_MCP_URL). Tested live —
handshake, 49 tools, real data from get_founder_profile and
browse_ideas.
The existing launchd scraper also ran fine (09:01 daily, nothing to troubleshoot). The MCP is a cleaner second path to the same data — structured JSON instead of scraped HTML — so there's a consolidation opportunity that would kill the ~28% historical miss rate.
Every zero above turns into a number the week one test batch goes out. Oliver's 28 Jul Stannp call secured a test phase for sample runs; that thread is still open.
| When | What |
|---|---|
| Fri 31 today |
Run the L10 and close the six already-done items · Call Royal Mail 0345 266 0858 — answers in writing · Submit Meta Advanced Access so the review queue runs while away |
| Sat 1 – Sun 2 | Leave it. Nothing lead-time-bound lands on a weekend. At most, ten minutes looking at the dither demo |
| Mon 3 – Tue 4 | Get the Stannp test batch ordered — the highest-value action of the week · Clear the provider registration blocker: chase Intelliprint's pay-now-later or just pay the £10 and stop waiting on it |
| Wed 5 onward away |
Don't plan to build. Chase written answers · photograph samples when they
arrive · ./geocheck.sh if cards get scanned · read, don't build |
Deliberately parked until Paul is back — and deliberately not put on the
board, because to-dos you know won't get done erode a board's credibility: the QR landing
page on the dither hero, sid minting per sector, and evaluating Paper Shaders.
Six new to-dos added with due dates, and the board tidied around them: 19 open → 14, with the top seven all dated. Nothing to action in the meeting — just worth telling Oliver what moved.
| Change | What and why |
|---|---|
| Closed ×3 | The A5/shared-mailer investigation, the Skool postcard ingest, and the
scan.ourlocalspotlight.com QR question — all genuinely done |
| Deleted ×2 | Oliver's “Look into a gatherer…” (superseded by the brand-palette gatherer, which names the output contract) and Oliver's “Get a test from print.one delivered” (duplicate of the new Print.one item) |
| Rewritten ×1 | Paul's “Resolve issues with Print.one” — see the correction below |
Left alone deliberately: the seven undated backlog items — cold-email domains, opt-out mechanism, niche selection, UK/DE split, the Apify KO feed, the pipeline dashboard, and Oliver's cafe follow-up. Several are arguably Rocks or Issues rather than to-dos, but that's a call for the meeting.
Pre-change snapshot of all four tables:
meetings/backups/eos-board-20260731-pre-merge.json — the two deletions are
recoverable.
Prepared 31 Jul 2026 for the Klaudius L10.
Full meeting guide: meetings/L10-PREP-2026-07-31.md.