Program portfolio board for all your Coda project trackers

By General Input

Pull every project row scattered across your Coda docs into one fast screen, with red amber green rollups and live delivery signal from Linear.

Integrations

  • Coda
  • Linear
  • Slack Bot

Type

App

Categories

  • Operations

Build me a program portfolio board that pulls every project tracker row scattered across my Coda docs into one fast screen, so my weekly portfolio review stops being a tour of ten slow docs. I am an ops lead running a weekly review over projects that live in many separate Coda docs, each with its own column naming.

First run setup. On first open, walk me through picking which Coda docs count as project trackers. Use List Available Docs to show my docs and page through the full result set with the page token rather than showing only the first page. Coda limits doc listing to roughly 4 requests every 6 seconds, so page politely, cache what you fetch, and do not refetch on every render. Once I pick docs, use List Tables to show the tables and views in each one and let me choose the tracker table per doc.

Column mapping. Every doc names its columns differently, so for each chosen table use List Columns and let me map which column holds status, owner, target date and next step. Also let me optionally map a column that stores a Linear team key or label. Persist this mapping as app state keyed by doc and table so it is remembered on every later open, and give me a settings screen to revisit and remap when a doc changes. Store Coda doc, table, column and row IDs rather than names, because names are user editable and would silently break the mapping.

Status rollup mapping. Status wording differs per doc, where one says On Track, another says Green and another says Healthy. So part of setup is mapping each distinct status value found across the chosen tables to red, amber or green. Prefill that mapping with a sensible guess from the wording and let me correct it, and surface any new unmapped status value that shows up later instead of dropping it into an unknown bucket.

Main view. The main screen is one consolidated table of every project across all mapped docs, read with List Table Rows per table and paged through fully. Group rows by rolled up status with a red, amber and green count summary at the top. Every row shows project name, status, owner, target date, next step and which Coda doc it came from. Let me sort and filter by owner, doc, status and target date, and highlight anything already past its target date.

Linear delivery signal. For projects whose mapped row stores a Linear team key or label, pull live delivery signal with List Issues and aggregate it yourself. Our Linear catalog has no projects or initiatives operation, so match Coda project rows to Linear work by team, label or a stored identifier only, never by fetching a Linear project object. Filter issues by that team or label, page through with cursor pagination, and show open versus completed issue counts plus a count of anything overdue next to the reported Coda status. Make the disagreement the headline: when a project reports green but its engineering work has stalled or is overdue, flag that row visibly so it cannot be skimmed past during the review.

Inline editing and write back. Let me edit status, owner, target date and next step inline in the board, writing straight back to the source Coda row with Update Row. Coda mutations are accepted asynchronously and return a request id, so after each edit poll Get Mutation Status until it reports completed before showing the row as saved. Show the row as saving until then, and if the mutation fails or times out, show the edit as failed, restore the previous value and offer a retry. Never show a saved state on the basis that the write was merely accepted.

Slack review summary. Give me a button that posts a formatted review summary to a Slack channel I choose using Send a Message, covering the red, amber and green counts, projects that changed status since the last review, the overdue list, and the projects where Linear signal disagrees with the reported status. The same action should DM each owner their own projects: resolve the owner to a Slack user with Look Up User by Email, open a direct message with Open a Conversation, then send their personal list with Send a Message. Owners that cannot be resolved to a Slack user get listed in the channel summary rather than silently dropped.

Performance and resilience. The whole point of this app is that the reading experience does not have to be as slow as the docs. Fetch Coda rows in the background, cache the consolidated set, render the board as soon as data is available, and show a last refreshed time with a manual refresh button. Respect Coda rate limits with backoff when a request is throttled instead of hammering, and if one doc fails to load, still show the rest of the portfolio with a clear note about which source is missing.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them