Publish Window Keeper

Cooldown tracking · background agent

syncing…

What’s actionable right now

Every tracked item has a rate limit - a window you cannot act inside. This panel keeps the clocks so you don’t have to, and stays quiet until something clears.

Tracked items

Sorted by time to clear

Every item above is a synthetic demo row or a visitor-created row stored in Supabase. No third-party account is connected. Seed snapshot: 2026-08-01 UTC.

Real data

Track a new recurring action

This writes a real row to the tracked-items table - it becomes part of the ground truth the agent reasons over immediately.

Agent

Check in

Ask in plain English. You get a prioritized list of what is actually actionable.

No check-in yet. Ask a question to get today’s action list.

Beyond the demo

The Agent Pattern

What you just used is the narrowest possible instance of a pattern: deterministic date-math computes ground truth, and a strands.Agent wired to Gemini through Strands’ model-agnostic provider layer is handed that computed state as its only source of facts, then reasons over it in plain English. The math never guesses. The model never invents. Two demo rows and a cooldown clock are one instance of that shape — here are others it fits without changing the architecture, only the schema.

  • Content licensing re-clearance

    A catalog of licensed tracks or clips each carries its own re-clearance window after last use. Swap the tracked-item schema for license_id, exclusivity_hours, last_cleared_at and the same compute_statuses date-math tells you exactly which titles are clear to re-license today.

  • API rate-limit fleet dashboard

    Instead of cooldown_hours per marketplace listing, track per-integration rate-limit reset windows across a dozen third-party APIs your product calls. Same ready/waiting computation, same check-in box: "what can I call right now without a 429?"

  • Compliance re-audit scheduling

    Regulatory or internal audits recur on fixed intervals (quarterly PCI scans, annual access reviews). The last_action_at / cooldown_hours pair becomes last_audit_at / audit_interval_hours, and the agent answers "what's overdue for re-audit" instead of "what's ready to publish."

  • Firmware/config rollout throttling

    Staged rollouts often enforce a minimum soak time between waves. Track each fleet segment's last-rollout timestamp and required soak window; the same grounded check-in tells an on-call engineer which segments have cleared soak and are safe for the next wave.

  • Warranty/contract renewal windows

    Renewal-eligible contracts open a window before expiry. Model each contract as a tracked item with a negative-direction cooldown (window opens rather than closes) and ask the agent which accounts are inside their renewal window this week.

Honest roadmap

Now vs. next

NowNext
Cooldown state lives in one Supabase table, one shape (cooldown_hours + last_action_at).Per-item-type schemas (rate limits, audits, rollouts) behind a shared status-computation interface.
One Gemini model call per check-in, no caching, no rate limiting on the endpoint.Response caching keyed on statuses hash, plus per-IP throttling before this leaves demo scale.
Agent reasons over the full item list on every question.Retrieval step that filters to relevant items first, so the context stays small as the tracked set grows past a few dozen rows.
Single check-in endpoint, pull-based (person asks, agent answers).A scheduled Strands run that proactively surfaces newly-ready items instead of waiting to be asked.
"agent_ok: false" fallback returns raw statuses with no explanation of why the model call failed.Structured error surfaced in the UI (quota exhausted vs. network vs. malformed response) so a real operator knows whether to retry.

This is just the beginning

See the code. Fork it. Make it yours.

The whole system is two files: pure date-math in api/_lib.py and a Strands agent wired to Gemini instead of Bedrock. No AWS bill, no Bedrock model-access request — just a free Gemini key and your own schema.