kelly-followups · git:20260902.126c038 · 2026-09-02 · sha256 d8c4159f7fc9dfc6

kelly-followups git:20260902.126c038A

Immutable. This exact content is served forever at /api/v1/blob/d8c4159f7fc9dfc6.

---
name: kelly-followups
description: Busabase-backed App-in-Skill for one thing only — record who you need to follow up with after a meeting, see what is due today, mark it done. Use when the user invokes $kelly-followups or /kelly-followups, mentions a followup, follow-up, meeting action item, or wants a lightweight daily reminder of who to check in with, without a full project-management tool.
metadata:
  category: productivity
  tags:
    - risk:gated-write
    - surface:busabase
  busabase:
    template: true
    folderSlug: kelly-followups
    resources:
      - followups
    risk: gated-write

---

# Kelly Followups

## Overview

Kelly Followups is a Busabase Cloud App-in-Skill. Its canonical product
surface is the AirApp in Busabase, not a separate local-data product. The
same Hono source supports an explicitly requested local preview with OAuth
connection bootstrap.

It does exactly one thing, on purpose: after a meeting, record who you need
to follow up with and what needs doing; open the app any morning and see
today's list; mark each one done.

## Origin

This skill exists as a worked example of the `$kelly-ideas` → `$kelly-app-creator`
handoff: a real idea ("周会太多我总忘记谁该跟进" — too many weekly meetings,
can never remember who to follow up with) was interrogated through
`$kelly-ideas`'s BRD → MRD → PRD ladder, and the resulting PRD's own
non-goals — no full project management, no calendar sync, no notification
delivery, no team permissions — are exactly this app's scope. It is
intentionally this small; growing it into a project-management tool is a
different PRD, not a feature request on this one.

## Mandatory Dependencies

1. Read and follow `$busabase` for connection, target Space, node discovery,
   ChangeRequests, review, merge, and trusted mutations.
2. Read and follow `$kelly-app-creator` for the App-in-Skill artifact
   contract, the UI contract, and AirApp delivery.

## Busabase Resources

| Resource | Holds |
| --- | --- |
| `followups` | One row per followup: who, what, when it's due, and whether it's done |

## Authentication

Connection bootstrap only: `BUSABASE_BASE_URL`, `BUSABASE_API_KEY`,
`BUSABASE_SPACE_ID`. Everything else lives in Busabase through
`busabase-sdk`. Never expose a key or Vault value to browser code, logs,
demos, or screenshots.

## Non-Goals (inherited from the PRD, kept deliberately)

- No multi-level tasks, no Gantt chart, no full project management.
- No calendar sync, no scheduled notification delivery — v1 is "open it and
  see", not "get pinged".
- No per-user permissions — v1 shows every followup to everyone who opens it.

Do not add these as a side effect of an unrelated request. If a real need for
one of them shows up, that is a new PRD to interrogate through
`$kelly-ideas`, not a quiet scope creep here.

## Demo Mode

`?demo=1` serves a deterministic read-only set of followups — some due
today, one upcoming, one already done — so the today/all split is visible
without touching a real Space. Demo never impersonates a connection and is
labeled read-only.

## Completion Criteria

- The `kelly-followups` Folder and `followups` Base exist.
- Recording a followup takes one write; marking it done takes one write.
- A done item disappears from "Today" immediately.
- Desktop and 390px phone viewports both verified, with no horizontal overflow.
- The AirApp node exists and its version is merged before claiming deployment.

## Stop Conditions

- Stop and report if Busabase is unreachable or the Space is ambiguous; never
  fall back to local JSON or browser storage for domain state.
- Stop before any external side effect. This skill only writes to Busabase;
  it does not send, publish, or notify anyone outside the app itself.