Landing page for the DBPOC vault. Open this first. Layout rationale lives in Dashboard Layout Spec. Data provenance and refresh cadence live in Dashboard Data Sources.
| Notes | ADRs | Verified bugs | Orphans | Updated |
|---|---|---|---|---|
| 104 | 9 | 6 | TBD | 2026-05-03 |
| Total wiki notes | Decisions on record | Open across vault | No inbound link | Last vault edit |
KPI strip
The five columns above are the dashboard’s at-a-glance state. Numbers are filled by the data agent; see Placeholders.
Pipeline at a glance
--- config: htmlLabels: false --- flowchart TB BV("`**Bolagsverket** VärdefullaDatamängder`") SCB("`**SCB** PxWebApi + TSV bulk`") CRAWL("`**Crawlee** + Playwright`") MAPS("`**Google Places**`") SQ[(Scrape_Job)] EQ[(Enrich_Job)] UQ[(Update_Job)] A14[(Art14_Job)] DLQ[(Dead_Letter)] REK{"`**reklamspärr** SCB Reklam=2`"} OPT{"`**opt-out hash** match`"} PG[("`**Postgres** companies + RoPA_Log`")] REDIS[("`**Redis** enrich:org_nr · 6mo TTL`")] SCB --> SQ SQ --> REK REK -- blocked --> DLQ REK -- clear --> OPT OPT -- match --> DLQ OPT -- clear --> EQ BV --> EQ CRAWL --> EQ MAPS --> EQ EQ --> UQ UQ --> PG UQ --> REDIS UQ --> A14 EQ -. retry x3 .-> DLQ UQ -. retry x3 .-> DLQ
Source: pipeline-flow. Edit there, not here. See Pipeline for the per-stage walkthrough.
Per-stage detail
Stages
Link to original
- Scrape_Job: gates only (compliance + dedup). Should call
isScbAdvertisingBlocked()and check Opt-Out Hashes.- Enrich_Job: runs EnrichV7 (BV API + Domain Discovery + Google Places + Crawlee Scraper + Lead Scoring).
- Update_Job: persists to
companies, appends to RoPA Log, sets Redis 6-month TTL cache.
Coverage health
Charts render natively via mermaid (no plugin required). The Wiki/Charts/*.json specs are kept in sync as a fallback for when the Charts community plugin is installed.
Coverage by category — 104 notes across 11 controlled tags
--- config: theme: base themeVariables: xyChart: backgroundColor: "transparent" titleColor: "#ffffff" xAxisLabelColor: "#e5e7eb" xAxisTitleColor: "#e5e7eb" xAxisTickColor: "#94a3b8" xAxisLineColor: "#94a3b8" yAxisLabelColor: "#e5e7eb" yAxisTitleColor: "#e5e7eb" yAxisTickColor: "#94a3b8" yAxisLineColor: "#94a3b8" plotColorPalette: "#38bdf8, #f472b6, #facc15, #34d399, #a78bfa, #fb923c, #f87171, #22d3ee, #c084fc, #4ade80, #fbbf24" xyChart: width: 700 height: 320 --- xychart-beta title "Notes per tag (controlled vocab)" x-axis ["proc", "front", "enrich", "kb", "test", "comp", "arch", "scr", "ops", "data", "dash"] y-axis "Notes" 0 --> 30 bar [24, 17, 14, 13, 10, 8, 6, 5, 5, 5, 3]Counts derived from
Wiki/*.mdfrontmattertags:(vocabulary in Vault Style Guide). Refreshed 2026-05-03.
Test coverage gap — 19 covered / 57 untested src modules
pie showData title Test coverage of src/ modules "Covered (incl. partial)" : 19 "Untested" : 57Counts derived from Test Coverage Gaps.
Open verified bugs by area — 7 open
--- config: theme: base themeVariables: xyChart: backgroundColor: "transparent" titleColor: "#ffffff" xAxisLabelColor: "#e5e7eb" xAxisTitleColor: "#e5e7eb" xAxisTickColor: "#94a3b8" xAxisLineColor: "#94a3b8" yAxisLabelColor: "#e5e7eb" yAxisTitleColor: "#e5e7eb" yAxisTickColor: "#94a3b8" yAxisLineColor: "#94a3b8" plotColorPalette: "#f87171, #fb923c, #facc15, #34d399, #38bdf8, #a78bfa" xyChart: width: 700 height: 280 --- xychart-beta title "Open verified bugs by area" x-axis ["Pipeline", "Compliance", "Enrichment", "KB", "Frontend", "Tests"] y-axis "Open" 0 --> 5 bar [4, 2, 1, 0, 0, 0]Sources: Known Issues, Pipeline, EnrichV7, Test Coverage Gaps.
Vault growth — notes touched per day
--- config: theme: base themeVariables: xyChart: backgroundColor: "transparent" titleColor: "#ffffff" xAxisLabelColor: "#e5e7eb" xAxisTitleColor: "#e5e7eb" xAxisTickColor: "#94a3b8" xAxisLineColor: "#94a3b8" yAxisLabelColor: "#e5e7eb" yAxisTitleColor: "#e5e7eb" yAxisTickColor: "#94a3b8" yAxisLineColor: "#94a3b8" plotColorPalette: "#38bdf8" xyChart: width: 700 height: 280 --- xychart-beta title "Notes touched per day" x-axis ["2026-04-27", "2026-05-02", "2026-05-03"] y-axis "Notes" 0 --> 70 line [32, 64, 8]Real data, regenerated by
bun scripts/vault-growth.ts. Switch to weekly buckets when the vault history spans months.
Recent
Recently touched notes
Static snapshot. Regenerate via
bun scripts/recent.ts(writes the table below). Dataview not required.
Note Updated Tags Dashboard 2026-05-03 dashboard Vault Style Guide 2026-05-03 process Frontend MOC 2026-05-03 frontend, process KB MOC 2026-05-03 kb, process Tests MOC 2026-05-03 test, process History MOC 2026-05-03 history, process Compliance MOC 2026-05-03 compliance, process Index 2026-05-03 process Autoresearch Result Types 2026-05-03 operations Tremor Charts 2026-05-03 frontend
Recent commits (last 5):
| Hash | Subject |
|---|---|
8b3ecd5 | docs: P1 polish from QA gate audit |
62e6800 | chore: track session artifacts and tighten .gitignore |
d6c4d06 | chore: P0 fixes from QA gate audit |
f498e86 | chore: add Obsidian Vault Designer subagent |
e0eb0d3 | docs: add Architecture Decision Records (ADRs) |
ADRs and bugs
ADRs live in the repo at docs/adr/ (not in vault). Bug callouts live across the vault.
All Architecture Decision Records (9)
# Title Status Date 0001 Record architecture decisions (meta) Accepted 2026-05-02 0002 Bun runtime over Node.js Accepted ~2026-03-01 0003 Crawlee + Playwright as primary scraper Accepted 2026-04-01 0004 BullMQ + Redis as pipeline backbone Accepted 2026-03-24 0005 Numeric lead_score >= 5 over 4-of-4 layer counting Accepted (supersedes spec) 2026-03-24 0006 Article 14 fires at collection time, not export Accepted 2026-03-24 0007 HMAC-SHA256 with HASH_SALT for opt-out hashing Accepted (supersedes plain SHA-256) 2026-03-07 0008 Direct Google Places API instead of Serper Accepted 2026-04-02 0009 Schema migrations tracked via 000_schema_migrations.sql Accepted 2026-04-27 See
docs/adr/README.mdin the repo for full text. Bases-based view atWiki/Bases/adrs.baseactivates if Obsidian ≥ 1.9.
Verified bugs (7 open)
Area Bug Source KB Server claude-opus-4-5vs clientclaude-opus-4-6model mismatchKB Chat Flow KB 5 broken from "../../types"imports underKB/src/kb/KB B2B Enrichment, KB IMY Decisions KB Settings claim “keys never transmitted” — false; transit local server as headers KB Settings Frontend useAuth.ts:6hardcodesDEV_MODE = trueAuth Flow Frontend ecoApiClient.ts:8ships literal'change-me-to-a-random-secret'bearerEcoAPI Integration Frontend ContactDistributionChartrendered twice atKundkortPage.tsx:406and:436Tremor Charts Pipeline Phase 3 isolated workers exist but src/index.tsstill wires legacy monolithKnown Issues Bases-based view at
Wiki/Bases/verified-bugs.baseactivates if Obsidian ≥ 1.9.
All notes by tag (collapsed; expand to see)
Tag Notes process 24 frontend 17 enrichment 14 kb 13 test 10 compliance 8 architecture 6 scripts 5 operations 5 data 5 dashboard 3 See Index for the full per-category note list. Bases-based grouping at
Wiki/Bases/notes.baseactivates if Obsidian ≥ 1.9.
Architecture
--- config: htmlLabels: false --- flowchart TB subgraph Browser["User Browser"] direction LR KK("`**kundkort SPA** React + Tremor`") KBUI("`**KB SPA** :3001`") end subgraph Backend["DBPOC Backend"] direction TB API("`**REST API** :3000 src/api/index.ts`") DISP("`**Enrich Dispatcher** ~160 / hr`") ENR("`**Enrich Worker** concurrency 20`") UPD("`**Update Worker** concurrency 50`") PW("`**Playwright Worker**`") A14("`**Art14 Worker**`") end subgraph Data["Stateful Containers"] direction LR PG[("`**Postgres** :5433 + pgvector`")] REDIS[("`**Redis** :6379 BullMQ + cache`")] KC[("`**Keycloak** :8080`")] end subgraph External["External services"] direction TB BV("`**Bolagsverket** gateway`") SCB("`**SCB** PxWebApi v2`") CRAWL("`**Crawlee + Playwright** self-hosted`") GP("`**Google Places**`") FC("`**Firecrawl**`") ANT("`**Anthropic SDK**`") end KK --> API KBUI --> ANT API --> PG API --> REDIS API --> KC DISP --> REDIS ENR --> REDIS UPD --> REDIS UPD --> PG A14 --> PG ENR --> BV ENR --> SCB ENR --> GP ENR --> FC PW --> CRAWL ENR -. delegates .-> PW
Source: system-c4. Edit there, not here.
Compliance health
Compliance snapshot
Live counts require DB access from the dashboard agent (Postgres :5433). Until a
dataviewplugin or shell-backed include is wired, treat the four metrics below as TBD and check the API directly. See Dashboard Data Sources for the queries.
- Opt-out hashes loaded: TBD —
SELECT count(*) FROM optout_hashes- RoPA log entries today: TBD —
SELECT count(*) FROM ropa_log WHERE created_at >= CURRENT_DATE- Article 14 notifications pending: TBD —
SELECT count(*) FROM art14_queue WHERE status = 'pending'- Reklamspärr blocks last 7d: TBD —
SELECT count(*) FROM ropa_log WHERE action = 'SKIP' AND reason LIKE 'reklamspärr%' AND created_at >= NOW() - INTERVAL '7 days'
Quick links
| I want to understand X | I want to fix bug X | I want to ship X |
|---|---|---|
| History Overview | Test Coverage Gaps | Lint Checklist |
| System Overview | Known Issues | Wiki Conventions |
| Pipeline | Frontend Overview | Vault Style Guide |
| KB Architecture | Enrichment Tests | Local Development |
Last updated
2026-05-03 — see Dashboard Layout Spec for why this layout, and Vault Style Guide for the vault-wide visual rules.