Creative-queue Slack digest
A small daily agent that watches a creative team's Asana project and delivers one Slack summary of everything new since the last run. The kind of automation that replaces a recurring status meeting.
- System
- A scheduled TypeScript job that reconciles Asana project state against a persisted last-run timestamp and posts a sectioned digest to Slack every morning.
- Stack
- TypeScriptNodeAsana APISlack APIcron
- Validation
- The moved-into-project edge case was verified against a week of known project history before launch, and the persisted-timestamp design means a failed run is never silently skipped; the next run covers the gap.
- Outcome
- The "what's new in the creative queue" check went from everyone scanning Asana to one message everyone actually reads.
The loop
human checkpoint
- wake
Runs on a daily 10:00 AM schedule; reads the last successful run's timestamp from persisted state.
cron
- reconcile
Pulls tasks created in, or moved into, the project since that timestamp. Moves are the subtle case, caught by reading the project's event stories rather than task creation dates.
Asana API
- digest
Groups findings by project section and posts one message, or an explicit "no new tasks today," because silence is indistinguishable from breakage.
Slack API
- skim
The team reads it with coffee; anything needing action gets picked up in the normal flow.
why a human here The digest's job is awareness. Routing work is a human call that depends on capacity and priorities the tool can't see.
Why this one is here
It’s the smallest system on the site, built in an afternoon, and it changed a daily habit for a whole team. Small isn’t sloppy: idempotent catch-up after failures, the moved-task edge case handled properly, and an explicit empty-state message so the team can tell “nothing happened” from “the bot died.”
Wins this size are also how a team develops an appetite for bigger ones.