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.

NotesADRsVerified bugsOrphansUpdated
10496TBD2026-05-03
Total wiki notesDecisions on recordOpen across vaultNo inbound linkLast 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.


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/*.md frontmatter tags: (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" : 57

Counts 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.

NoteUpdatedTags
Dashboard2026-05-03dashboard
Vault Style Guide2026-05-03process
Frontend MOC2026-05-03frontend, process
KB MOC2026-05-03kb, process
Tests MOC2026-05-03test, process
History MOC2026-05-03history, process
Compliance MOC2026-05-03compliance, process
Index2026-05-03process
Autoresearch Result Types2026-05-03operations
Tremor Charts2026-05-03frontend

Recent commits (last 5):

HashSubject
8b3ecd5docs: P1 polish from QA gate audit
62e6800chore: track session artifacts and tighten .gitignore
d6c4d06chore: P0 fixes from QA gate audit
f498e86chore: add Obsidian Vault Designer subagent
e0eb0d3docs: 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)

#TitleStatusDate
0001Record architecture decisions (meta)Accepted2026-05-02
0002Bun runtime over Node.jsAccepted~2026-03-01
0003Crawlee + Playwright as primary scraperAccepted2026-04-01
0004BullMQ + Redis as pipeline backboneAccepted2026-03-24
0005Numeric lead_score >= 5 over 4-of-4 layer countingAccepted (supersedes spec)2026-03-24
0006Article 14 fires at collection time, not exportAccepted2026-03-24
0007HMAC-SHA256 with HASH_SALT for opt-out hashingAccepted (supersedes plain SHA-256)2026-03-07
0008Direct Google Places API instead of SerperAccepted2026-04-02
0009Schema migrations tracked via 000_schema_migrations.sqlAccepted2026-04-27

See docs/adr/README.md in the repo for full text. Bases-based view at Wiki/Bases/adrs.base activates if Obsidian ≥ 1.9.

Verified bugs (7 open)

AreaBugSource
KBServer claude-opus-4-5 vs client claude-opus-4-6 model mismatchKB Chat Flow
KB5 broken from "../../types" imports under KB/src/kb/KB B2B Enrichment, KB IMY Decisions
KBSettings claim “keys never transmitted” — false; transit local server as headersKB Settings
FrontenduseAuth.ts:6 hardcodes DEV_MODE = trueAuth Flow
FrontendecoApiClient.ts:8 ships literal 'change-me-to-a-random-secret' bearerEcoAPI Integration
FrontendContactDistributionChart rendered twice at KundkortPage.tsx:406 and :436Tremor Charts
PipelinePhase 3 isolated workers exist but src/index.ts still wires legacy monolithKnown Issues

Bases-based view at Wiki/Bases/verified-bugs.base activates 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 dataview plugin 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: TBDSELECT count(*) FROM optout_hashes
  • RoPA log entries today: TBDSELECT count(*) FROM ropa_log WHERE created_at >= CURRENT_DATE
  • Article 14 notifications pending: TBDSELECT count(*) FROM art14_queue WHERE status = 'pending'
  • Reklamspärr blocks last 7d: TBDSELECT count(*) FROM ropa_log WHERE action = 'SKIP' AND reason LIKE 'reklamspärr%' AND created_at >= NOW() - INTERVAL '7 days'


Last updated

2026-05-03 — see Dashboard Layout Spec for why this layout, and Vault Style Guide for the vault-wide visual rules.