Basecamp cross-project dashboard with at-risk flags

By General Input

See every active Basecamp project on one screen with open and overdue to-do counts, the nearest due date, and an at-risk flag, sorted worst first.

Integrations

  • Basecamp
  • Slack

Type

App

Categories

  • Operations

I want an app that gives me one screen for every active Basecamp project. Basecamp has no cross project roll up, so today I open each project one by one to work out what is slipping. Build me a dashboard that answers "which projects are in trouble" at a glance.

The main view is a table with one row per active project. Each row shows the project name, the number of open to-dos, how many of those are overdue, the nearest upcoming due date across the project, and how many days it has been since anyone posted a message or completed a to-do. Each row also shows an at risk flag when the project trips the rules below. Sort worst first: at risk projects at the top, then by overdue count descending, then by days since last activity descending, then by nearest due date ascending.

Handlers build each row like this. Call List Projects to get the active projects. For each project, call Get a Project and read its dock array to find the ids of the todoset and the message_board, since those sub resource ids are only discoverable there. Call List To-Do Lists on the todoset, then List To-Dos on each list to get open items, their due dates, and their completion state. Call List Messages on the message board to get the most recent post. Skip gracefully when a project has no todoset or no message board in its dock, since not every project enables every tool.

Days since last activity is the number of days since the most recent of: the newest message on the message board, and the newest completed or updated to-do. Overdue means a to-do that is not complete and whose due date is before today. The nearest due date is the earliest due date among open to-dos, and should render as empty rather than zero when a project has no dated work.

Clicking a row opens a detail panel for that project. It lists the overdue to-dos grouped by their to-do list, each with its due date, how many days overdue it is, and its assignees, plus the recent messages with title, author, and date. From this panel I can do two things. Add a to-do with Create a To-Do into a to-do list I pick from that project, with optional due date and assignee. Post a nudge with Create a Message to that project's message board, with a subject and body I can edit, prefilled with something sensible like a short summary of what is overdue. After either action, refresh just that project's row rather than reloading the whole dashboard.

A Share button posts the whole roll up as a formatted summary into Slack using the Slack Send a Message operation, with List Channels filling a searchable channel picker. Format the summary for Slack rather than as plain markdown, so bold is *single asterisks* and links are <url|text>. Lead with the at risk projects and their reason for being flagged, then the rest with their overdue counts and next due dates. Let me preview and edit the text before it sends, and remember the last channel I posted to.

Make the at risk rules configurable in a settings panel, defaulting to no activity for 7 days or any to-do more than 3 days overdue. Persist the settings, the hidden or pinned projects, and the last used Slack channel per user, so my configuration survives a reload and does not affect anyone else.

Fetch gently, because Basecamp allows only about 50 requests per 10 seconds and this app fans out across every project. Cap how many requests are in flight at once, keep a small delay between them, and honour the Retry-After header on a 429 by backing off and resuming rather than failing the whole load. Every path ends in .json and a User-Agent header is mandatory on every request. Pagination is geared, so page 1 returns 15 results, page 2 returns 30, page 3 returns 50, and page 4 onward returns 100, advancing by following the next link in the Link header. Cache the roll up and show a last refreshed time with a manual Refresh button, and render rows progressively as each project resolves so I am not staring at a blank screen while it works through a large account.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredChat quality review board for LiveChat support leadsWin back no-show and cancelled appointments every morningLive Loop returns analytics with product-level drill-downNewsletter pre-flight and approval board for Mailjet sendsTurn a prospect spreadsheet into personalized sequence enrollmentsMailjet email delivery lookup console for support teamsCatch feature flags that never got switched on in productionKajabi customer support console for member access fixes