Automated HTML report delivery, refreshed in place
You have a recurring report. Maybe it's a weekly analytics digest, a daily ops summary, a monthly board update. Today it's a Python script that emails a PDF, a Slack message with a screenshot, or a cron job nobody owns. Tomorrow, it's a routine.
The job
Take a report you currently send by hand (or by brittle script). Move it onto a hosted schedule. Make the new revision land in a place your team actually opens — a document, with comments, with history — not a Slack channel that goes unread.
That's what scheduled HTML reports look like as a Comma routine.
Why HTML, not PDF or email
PDFs lose the link between the report and the conversation around it. Email attachments lose version control. Screenshots in Slack scatter feedback across threads.
HTML, rendered as a document with anchored comments, is the format that keeps the report and the discussion in one place. When the routine fires again next week, the next revision lands on the same document. Comments from last week persist. The team sees a diff, not a fresh inbox.
What replaces what
| What you have now | What the routine replaces |
|---|---|
| Python script + crontab on a laptop | Comma-hosted schedule, no laptop |
| GitHub Action emailing the team | Routine posting a new revision on a Comma report |
| Slack screenshot every Monday | Same shareable link with a new revision and live comments |
| PDF attachment with version-number-in-filename | Revision history on one canonical artifact |
| "Hey can you re-run the report?" | The schedule already did |
Three patterns
1. Replace the Monday morning script
You have a script that runs by hand every Monday. The output gets pasted into a Notion page, a Slack channel, or a Google Doc. Feedback gets lost.
Wrap the script as a skill. Wire it as a daily or weekly routine. The HTML posts to a Comma report. Reviewers comment in-place. Next week's revision lands at the same URL.
2. Replace the email-to-the-team digest
You have a service that emails a digest every morning. People stop reading it after week three.
Replace the email rail with a routine that posts the new HTML revision on a Comma report. Subscribers get a notification with a link, not an attachment. The diff between this revision and yesterday's is visible in the report itself.
3. Replace the "I'll just rerun it later" workflow
You have a notebook or dashboard you re-run by hand when someone asks. There is no schedule. Sometimes it's stale; sometimes it's twelve days old.
Wire it to a routine on a cadence that matches the underlying data refresh. The team gets the same link they had before. The artifact is current.
What you give Comma
- A skill. The Markdown instruction-set for how to regenerate the report. The skill can call your warehouse, your eval harness, your internal API, or just produce an HTML report from a prompt.
- A target report. Either a new placeholder, or an existing report where the routine should append revisions.
- A cadence. Monthly (Free), daily (Pro), hourly (Team), or sub-hourly (Enterprise).
- A cost ceiling. Per-plan monthly Bedrock cap by default; tighten per routine if you want.
What Comma handles
- The cron schedule.
- The skill execution against AWS Bedrock.
- The cost cap.
- The scoped credential.
- The posting of the new HTML as a revision.
- The notification to reviewers.
- The run history and audit trail.
Cadence by plan
| Plan | Cadence floor | Use case shape |
|---|---|---|
| Free | Monthly | Monthly check-ins, retros, board prep |
| Pro $15/mo | Daily | Daily eval, daily ops summary, daily digest |
| Team $75/seat | Hourly | On-call dashboards, refresh-on-tick reports |
| Enterprise | Sub-hourly | Custom; needs the right SLA shape |
Anatomy of a scheduled report routine
Routine:
report: rpt_weekly_analytics
skill: analytics-monday-digest.md
cadence: weekly (Monday 09:00 UTC)
cost cap: $2.00 per run
notify: weekly-digest@team
rail: metered (Pro) | BYOK (Team)
Run output: a fresh HTML report, posted as revision N+1 on
rpt_weekly_analytics. Anchored comments from revision N persist. Diff
against the previous revision is one click.
The honest scope
Routines are good at:
- Re-running a focused, well-defined skill.
- Posting the output to a Comma report.
- Capping the cost.
- Surviving as part of an ops rotation without anyone babysitting it.
Routines are not for:
- Multi-hour pipelines. Use a real orchestrator.
- Side-effects beyond Comma. Routines post to a report. They are not a general-purpose cron.
- Warehousing your data. The skill fetches what it needs at run time.
If your need fits in "a focused script that produces an HTML report on a cadence," routines fit. If it doesn't, they won't pretend to.
Try it
The shape is identical at every plan. Start on Free with a monthly cadence and the actual script you'd run by hand. The next time you'd have run it, the routine will already have.