{
  "generatedAt": "2026-09-13T07:00:36.251Z",
  "config": {
    "title": "Etapp — demo",
    "description": "A live Etapp board running on fictional data.",
    "repoUrl": "https://github.com/tor2dbear/etapp",
    "ribbon": "← Etapp · **live demo** · data is fictional",
    "ribbonHref": "/",
    "demo": true,
    "views": [
      {
        "name": "High priority",
        "q": "priority:high,urgent"
      },
      {
        "name": "By discipline",
        "group": "agent",
        "q": "has:agent"
      },
      {
        "name": "Needs attention",
        "view": "attention"
      }
    ]
  },
  "statuses": [
    "now",
    "next",
    "later",
    "inbox",
    "done",
    "cancelled"
  ],
  "counts": {
    "now": 5,
    "next": 5,
    "later": 1,
    "inbox": 2,
    "done": 4,
    "cancelled": 1
  },
  "total": 18,
  "sources": [
    {
      "repo": "acme/aurora",
      "name": "Aurora",
      "blurb": "Design system",
      "color": "#8a7bab",
      "url": "https://github.com/acme/aurora",
      "adapter": "pucks",
      "backend": "fs",
      "count": 6,
      "native": true,
      "error": null
    },
    {
      "repo": "acme/relay",
      "name": "Relay",
      "blurb": "Realtime chat",
      "color": "#5f80a3",
      "url": "https://github.com/acme/relay",
      "adapter": "pucks",
      "backend": "fs",
      "count": 7,
      "native": true,
      "error": null
    },
    {
      "repo": "acme/ledger",
      "name": "Ledger",
      "blurb": "Personal finance",
      "color": "#7d9163",
      "url": "https://github.com/acme/ledger",
      "adapter": "pucks",
      "backend": "fs",
      "count": 5,
      "native": true,
      "error": null
    }
  ],
  "items": [
    {
      "id": "aurora/design-system-v2",
      "repo": "acme/aurora",
      "repoName": "Aurora",
      "repoColor": "#8a7bab",
      "issueState": null,
      "slug": "design-system-v2",
      "title": "Design system v2",
      "status": "now",
      "priority": "high",
      "tags": [
        "ui"
      ],
      "updated": "2026-09-12",
      "created": "2026-08-05",
      "target": "2026-11-16",
      "parent": null,
      "issue": null,
      "order": 0,
      "depends": [],
      "owner": "tor2dbear",
      "agent": null,
      "body": "## Goal\nThe umbrella for the v2 pass. It is not a second record type — the pucks below name it with `parent:`, and being pointed at is what makes it an etapp.",
      "sourcePath": "roadmap/design-system-v2.md",
      "sourceUrl": "https://github.com/acme/aurora/blob/main/roadmap/design-system-v2.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [
        "aurora/dark-mode-tokens",
        "aurora/icon-set-v2",
        "aurora/motion-guidelines"
      ],
      "progress": {
        "done": 1,
        "total": 3
      },
      "signals": []
    },
    {
      "id": "aurora/dark-mode-tokens",
      "repo": "acme/aurora",
      "repoName": "Aurora",
      "repoColor": "#8a7bab",
      "issueState": null,
      "slug": "dark-mode-tokens",
      "title": "Dark mode tokens",
      "status": "done",
      "priority": "high",
      "tags": [
        "ui",
        "tokens"
      ],
      "updated": "2026-09-06",
      "created": "2026-08-07",
      "target": null,
      "parent": "design-system-v2",
      "issue": null,
      "order": 10,
      "depends": [],
      "owner": "tor2dbear",
      "agent": null,
      "body": "## Delivered\nThe full dark palette as design tokens, so every app flips themes from one source.",
      "sourcePath": "roadmap/dark-mode-tokens.md",
      "sourceUrl": "https://github.com/acme/aurora/blob/main/roadmap/dark-mode-tokens.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": "aurora/design-system-v2",
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "aurora/icon-set-v2",
      "repo": "acme/aurora",
      "repoName": "Aurora",
      "repoColor": "#8a7bab",
      "issueState": null,
      "slug": "icon-set-v2",
      "title": "Icon set v2",
      "status": "now",
      "priority": "medium",
      "tags": [
        "ui"
      ],
      "updated": "2026-09-11",
      "created": "2026-08-15",
      "target": null,
      "parent": "design-system-v2",
      "issue": null,
      "order": 20,
      "depends": [
        "dark-mode-tokens"
      ],
      "owner": null,
      "agent": "design",
      "body": "## Goal\nRedraw the icon set on the new 24px grid. The token pass it waited for has landed.",
      "sourcePath": "roadmap/icon-set-v2.md",
      "sourceUrl": "https://github.com/acme/aurora/blob/main/roadmap/icon-set-v2.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": "aurora/design-system-v2",
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "aurora/motion-guidelines",
      "repo": "acme/aurora",
      "repoName": "Aurora",
      "repoColor": "#8a7bab",
      "issueState": null,
      "slug": "motion-guidelines",
      "title": "Motion guidelines",
      "status": "next",
      "priority": null,
      "tags": [
        "motion"
      ],
      "updated": "2026-09-09",
      "created": "2026-08-18",
      "target": null,
      "parent": "design-system-v2",
      "issue": null,
      "order": 30,
      "depends": [],
      "owner": null,
      "agent": "design",
      "body": "## Goal\nA small, opinionated set of easing + duration tokens. Not another easing toy.",
      "sourcePath": "roadmap/motion-guidelines.md",
      "sourceUrl": "https://github.com/acme/aurora/blob/main/roadmap/motion-guidelines.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": "aurora/design-system-v2",
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "aurora/grid-system",
      "repo": "acme/aurora",
      "repoName": "Aurora",
      "repoColor": "#8a7bab",
      "issueState": "open",
      "slug": "grid-system",
      "title": "Grid & spacing system",
      "status": "done",
      "priority": null,
      "tags": [
        "layout"
      ],
      "updated": "2026-08-03",
      "created": "2026-07-14",
      "target": null,
      "parent": null,
      "issue": 88,
      "order": 40,
      "depends": [],
      "owner": null,
      "agent": null,
      "body": "## Delivered\n4px base grid with responsive gutters. Shipped in v1.2.\n\n(The linked issue is still open — the board flags the disagreement.)",
      "sourcePath": "roadmap/grid-system.md",
      "sourceUrl": "https://github.com/acme/aurora/blob/main/roadmap/grid-system.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": [
        {
          "type": "issue-open"
        }
      ]
    },
    {
      "id": "aurora/figma-sync",
      "repo": "acme/aurora",
      "repoName": "Aurora",
      "repoColor": "#8a7bab",
      "issueState": null,
      "slug": "figma-sync",
      "title": "Figma sync plugin",
      "status": "inbox",
      "priority": null,
      "tags": [
        "tooling"
      ],
      "updated": "2026-09-10",
      "created": "2026-09-10",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 50,
      "depends": [],
      "owner": null,
      "agent": null,
      "body": "## Idea\nPush token changes straight into the Figma library. Undecided — nothing in the inbox is a promise.",
      "sourcePath": "roadmap/figma-sync.md",
      "sourceUrl": "https://github.com/acme/aurora/blob/main/roadmap/figma-sync.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "relay/search",
      "repo": "acme/relay",
      "repoName": "Relay",
      "repoColor": "#5f80a3",
      "issueState": null,
      "slug": "search",
      "title": "Search",
      "status": "next",
      "priority": "medium",
      "tags": [
        "search"
      ],
      "updated": "2026-09-11",
      "created": "2026-08-17",
      "target": "2026-12-16",
      "parent": null,
      "issue": null,
      "order": 60,
      "depends": [],
      "owner": "torbjorn",
      "agent": null,
      "body": "## Goal\nThe etapp that holds the search work. Its rollup counts the parts below.",
      "sourcePath": "roadmap/search.md",
      "sourceUrl": "https://github.com/acme/relay/blob/main/roadmap/search.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [
        "relay/message-search",
        "relay/search-index"
      ],
      "progress": {
        "done": 0,
        "total": 2
      },
      "signals": []
    },
    {
      "id": "relay/search-index",
      "repo": "acme/relay",
      "repoName": "Relay",
      "repoColor": "#5f80a3",
      "issueState": null,
      "slug": "search-index",
      "title": "Message search index",
      "status": "now",
      "priority": "high",
      "tags": [
        "backend"
      ],
      "updated": "2026-09-12",
      "created": "2026-08-19",
      "target": null,
      "parent": "search",
      "issue": null,
      "order": 70,
      "depends": [],
      "owner": null,
      "agent": "backend",
      "body": "## Goal\nBuild the inverted index that message search reads from.",
      "sourcePath": "roadmap/search-index.md",
      "sourceUrl": "https://github.com/acme/relay/blob/main/roadmap/search-index.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [
        "relay/message-search"
      ],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": "relay/search",
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "relay/message-search",
      "repo": "acme/relay",
      "repoName": "Relay",
      "repoColor": "#5f80a3",
      "issueState": null,
      "slug": "message-search",
      "title": "Message search",
      "status": "next",
      "priority": null,
      "tags": [
        "search"
      ],
      "updated": "2026-09-10",
      "created": "2026-08-21",
      "target": null,
      "parent": "search",
      "issue": null,
      "order": 80,
      "depends": [
        "search-index"
      ],
      "owner": "tor2dbear",
      "agent": "frontend",
      "body": "## Goal\nFull-text search across a conversation. Blocked until the index exists — the board says so without anyone maintaining it.",
      "sourcePath": "roadmap/message-search.md",
      "sourceUrl": "https://github.com/acme/relay/blob/main/roadmap/message-search.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [
        "relay/search-index"
      ],
      "parentRef": "relay/search",
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "relay/typing-indicators",
      "repo": "acme/relay",
      "repoName": "Relay",
      "repoColor": "#5f80a3",
      "issueState": "closed",
      "slug": "typing-indicators",
      "title": "Typing indicators",
      "status": "now",
      "priority": "urgent",
      "tags": [
        "realtime"
      ],
      "updated": "2026-09-13",
      "created": "2026-08-17",
      "target": null,
      "parent": null,
      "issue": 214,
      "order": 90,
      "depends": [],
      "owner": "torbjorn",
      "agent": null,
      "body": "## Goal\nShow who is typing, debounced, over the existing socket channel.\n\n(The linked issue is closed — the board asks whether this should be done.)",
      "sourcePath": "roadmap/typing-indicators.md",
      "sourceUrl": "https://github.com/acme/relay/blob/main/roadmap/typing-indicators.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": [
        {
          "type": "issue-closed"
        }
      ]
    },
    {
      "id": "relay/read-receipts",
      "repo": "acme/relay",
      "repoName": "Relay",
      "repoColor": "#5f80a3",
      "issueState": null,
      "slug": "read-receipts",
      "title": "Read receipts",
      "status": "done",
      "priority": null,
      "tags": [
        "realtime"
      ],
      "updated": "2026-08-14",
      "created": "2026-07-26",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 100,
      "depends": [],
      "owner": null,
      "agent": null,
      "body": "## Delivered\nPer-message read state, synced across devices.",
      "sourcePath": "roadmap/read-receipts.md",
      "sourceUrl": "https://github.com/acme/relay/blob/main/roadmap/read-receipts.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "relay/voice-notes",
      "repo": "acme/relay",
      "repoName": "Relay",
      "repoColor": "#5f80a3",
      "issueState": null,
      "slug": "voice-notes",
      "title": "Voice notes",
      "status": "later",
      "priority": null,
      "tags": [
        "audio"
      ],
      "updated": "2026-08-20",
      "created": "2026-08-20",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 110,
      "depends": [],
      "owner": null,
      "agent": null,
      "body": "## Goal\nRecord, waveform-preview and send short voice clips.",
      "sourcePath": "roadmap/voice-notes.md",
      "sourceUrl": "https://github.com/acme/relay/blob/main/roadmap/voice-notes.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "relay/e2e-encryption",
      "repo": "acme/relay",
      "repoName": "Relay",
      "repoColor": "#5f80a3",
      "issueState": null,
      "slug": "e2e-encryption",
      "title": "End-to-end encryption",
      "status": "cancelled",
      "priority": null,
      "tags": [
        "security"
      ],
      "updated": "2026-08-22",
      "created": "2026-07-18",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 120,
      "depends": [],
      "owner": null,
      "agent": null,
      "body": "## Decision\nWon't do — not for this product, at this size. The file stays so the reasoning stays on record.",
      "sourcePath": "roadmap/e2e-encryption.md",
      "sourceUrl": "https://github.com/acme/relay/blob/main/roadmap/e2e-encryption.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "ledger/statement-export",
      "repo": "acme/ledger",
      "repoName": "Ledger",
      "repoColor": "#7d9163",
      "issueState": null,
      "slug": "statement-export",
      "title": "Statement export (CSV)",
      "status": "now",
      "priority": null,
      "tags": [
        "export"
      ],
      "updated": "2026-07-17",
      "created": "2026-07-06",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 130,
      "depends": [],
      "owner": "tor2dbear",
      "agent": "backend",
      "body": "## Goal\nExport a date range as CSV.\n\n(Gone quiet since July — the board flags a `now` puck untouched for more than 21 days.)",
      "sourcePath": "roadmap/statement-export.md",
      "sourceUrl": "https://github.com/acme/ledger/blob/main/roadmap/statement-export.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": [
        {
          "type": "stale"
        }
      ]
    },
    {
      "id": "ledger/multi-currency",
      "repo": "acme/ledger",
      "repoName": "Ledger",
      "repoColor": "#7d9163",
      "issueState": null,
      "slug": "multi-currency",
      "title": "Multi-currency accounts",
      "status": "next",
      "priority": "high",
      "tags": [
        "core"
      ],
      "updated": "2026-09-07",
      "created": "2026-08-10",
      "target": "2026-08-31",
      "parent": null,
      "issue": null,
      "order": 140,
      "depends": [],
      "owner": "torbjorn",
      "agent": null,
      "body": "## Goal\nHold balances in more than one currency with daily FX.\n\n(The horizon has passed — a third axis, flagged like the rest.)",
      "sourcePath": "roadmap/multi-currency.md",
      "sourceUrl": "https://github.com/acme/ledger/blob/main/roadmap/multi-currency.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": [
        {
          "type": "target-passed"
        }
      ]
    },
    {
      "id": "ledger/recurring-rules",
      "repo": "acme/ledger",
      "repoName": "Ledger",
      "repoColor": "#7d9163",
      "issueState": null,
      "slug": "recurring-rules",
      "title": "Recurring transaction rules",
      "status": "next",
      "priority": null,
      "tags": [
        "core"
      ],
      "updated": "2026-09-08",
      "created": "2026-08-27",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 150,
      "depends": [
        "fx-provider"
      ],
      "owner": null,
      "agent": "backend",
      "body": "## Goal\nDetect and roll forward recurring transactions.\n\n(Depends on a puck that does not exist — an unknown blocker is not a finished one, so the board keeps it blocked and flags the reference.)",
      "sourcePath": "roadmap/recurring-rules.md",
      "sourceUrl": "https://github.com/acme/ledger/blob/main/roadmap/recurring-rules.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [
        "fx-provider"
      ],
      "blockedBy": [
        "fx-provider"
      ],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": [
        {
          "type": "depends-missing"
        }
      ]
    },
    {
      "id": "ledger/double-entry",
      "repo": "acme/ledger",
      "repoName": "Ledger",
      "repoColor": "#7d9163",
      "issueState": null,
      "slug": "double-entry",
      "title": "Double-entry ledger",
      "status": "done",
      "priority": null,
      "tags": [
        "core"
      ],
      "updated": "2026-07-31",
      "created": "2026-06-26",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 160,
      "depends": [],
      "owner": null,
      "agent": null,
      "body": "## Delivered\nEvery transaction balances. The foundation everything else sits on.",
      "sourcePath": "roadmap/double-entry.md",
      "sourceUrl": "https://github.com/acme/ledger/blob/main/roadmap/double-entry.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": []
    },
    {
      "id": "ledger/budgets",
      "repo": "acme/ledger",
      "repoName": "Ledger",
      "repoColor": "#7d9163",
      "issueState": null,
      "slug": "budgets",
      "title": "Budgets & envelopes",
      "status": "inbox",
      "priority": "low",
      "tags": [
        "planning"
      ],
      "updated": "2026-09-05",
      "created": "2026-09-05",
      "target": null,
      "parent": null,
      "issue": null,
      "order": 170,
      "depends": [],
      "owner": null,
      "agent": null,
      "body": "## Idea\nEnvelope-style budgeting on top of the ledger. Exploring.",
      "sourcePath": "roadmap/budgets.md",
      "sourceUrl": "https://github.com/acme/ledger/blob/main/roadmap/budgets.md",
      "adapter": "pucks",
      "native": true,
      "blocks": [],
      "missingDepends": [],
      "blockedBy": [],
      "parentRef": null,
      "children": [],
      "progress": null,
      "signals": []
    }
  ]
}
