AF App Frameworkpatterns that hold up View source

Repository-backed personal apps

Make the boundary
the feature.

App Framework is a TypeScript and Astro foundation for small applications whose data, credentials, automation and publishing path stay explicit.

system map
sourceruntime
private datapublic reader
agent hostPages
one declared path from intent to published artifact
01Explicit ownership

Every app names its canonical data and deployment repository.

02Revision-aware writes

Stale reads become visible conflicts, never silent overwrites.

03Publication is a state

Committed, building and published are separate facts.

A small catalogue

Four patterns, one boundary language.

Choose the topology that matches who can read the data and who is allowed to produce it.

02 / FIXED

Fixed private data

A public shell reads one explicitly declared private repository at runtime with a user credential. The build never absorbs the private data.

privatesession PAT
03 / READER

Agent-produced public reader

A local or hosted coding agent researches privately, then promotes only a validated, public-safe release into the reader repository.

AI Dailystaticanonymous
04 / HUB

Hub and child apps

A parent catalogue links independent applications without flattening their source, data, credential or deployment boundaries.

cataloguecomposition

The generated-reader pattern

Private production.
Public reading.

The reader is intentionally boring at runtime: it serves released files and does not know how the content was made.

01
⌁

Trigger

A scheduler starts one deterministic occurrence.

host
02
✦

Generate

An agent writes drafts and provenance into a private repository.

editorial
03
✓

Review

Domain validation and human or automatic review approve a candidate.

gate
04
↗

Promote

Only allowlisted public files cross the repository boundary.

release
05
◌

Publish

GitHub Actions builds Pages; the reader becomes visible at the promoted commit.

public
A private commit is not a publication.Published means the public repository accepted the exact release and Pages deployed that exact commit.

Durable orchestration

The scheduler knows the lifecycle, not the prompt.

The framework owns identity, retry classification, release integrity and recovery. Applications own generation, domain rules and editorial policy.

Read the scheduler contract
scheduler/run
jobId       ai-daily:main
occurrence  2026-09-20T01:00+10:00
releaseKey  2026-09-20--ai

queued → claimed → generating
          → validating → needs-review
          → approved → promoting
          → promoted → building
          → published

digest      64-char SHA-256
boundary   expected-head + reconciliation
T
Temporal fits as an execution adapter.

Workflow ID becomes the stable executionId; Workflow History is the lifecycle authority; side effects run in idempotent Activities. Git release reconciliation remains the final cross-system correctness boundary.

Temporal profile ↗

Private by default

Small apps need fewer surprises.

↳

Private stays private. Prompts, drafts, credentials and hidden research never enter public source, artifacts, URLs or logs.

⊙

Writes carry the last revision. Conflicts are shown to the user or scheduler instead of being overwritten.

◈

Capabilities are narrow. App code uses shared repository and credential contracts; it does not call GitHub directly.