# Basecamp cross-project dashboard with at-risk flags

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

- Workflow type: app
- Services: Basecamp, Slack
- Categories: Operations
- Published: 2026-08-14

## What it does

- Lists every active Basecamp project as a single row showing open to-dos, how many are overdue, the nearest due date, and how many days since anyone posted or finished anything
- Sorts the worst projects to the top and flags the ones at risk, so you stop opening projects one by one to find out what is slipping
- Opens a detail panel on any project with its overdue to-dos and recent messages, where you can add a to-do or post a nudge to that project's message board without leaving the screen
- Shares the whole roll up as a formatted summary into a Slack channel you pick, so the team sees the same picture you do

## What you'll need

- A Basecamp account with access to the projects you want to see
- A Slack workspace, only if you want to use the Share button
- Projects that use to-do lists, since the counts and due dates come from them

## Prompt

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.

## How to customize

- Change the at-risk rules, which default to no activity for 7 days or any to-do more than 3 days overdue
- Choose which projects appear, for example hiding internal or archived-in-spirit projects you never want in the roll up
- Set the default Slack channel the Share button posts to, and reword the summary that gets posted

## FAQ

### Why can't I just do this in Basecamp?

Basecamp is built around one project at a time and does not offer a cross-project roll up on most plans. Teams usually end up exporting data and rebuilding a dashboard elsewhere, or opening each project in turn. This app does the roll up for you.

### What makes a project count as at risk?

By default a project is flagged when nobody has posted or completed anything for 7 days, or when any to-do is more than 3 days past its due date. Both numbers are settings you can change, and the flag updates as soon as you save them.

### Will this change anything in my Basecamp projects?

Not unless you ask it to. The dashboard only reads your projects. The only things written back are a to-do you add or a nudge you post from the detail panel, and both go to the project you have open.

### How many projects can it handle?

It works across all your active projects. Basecamp limits how fast anyone can read data, so the app fetches gently and fills rows in as they arrive rather than making you wait for everything. Larger accounts simply take a little longer on the first load.

### Do I need Slack to use it?

No. Slack is only used by the Share button. Without it you still get the full dashboard, the detail panels, and the ability to add to-dos and post nudges.

Use this prompt in General Input: https://www.generalinput.com/prompts/basecamp-cross-project-dashboard-with-at-risk-flags