1 · Chirp before any parental controls
One family account with three profiles. Maya is 12, and her feed shows everything, including 16+ and 18+ posts.
dana@chirp.test.2 · The parent's control panel
Guardian is where the parent sets the rule, once, per child: content rated up to 13+. Each child has a Chirp connection that starts as “Not connected”.
3 · Connecting Chirp with Phosra Link
The parent clicks Connect Chirp for Maya. Everything in the dialog and popup is drawn by the Phosra SDKs, not by Guardian or Chirp.
- Review the requested controls
- Sign in to Chirp in a popup
- Choose which Chirp profile is Maya
- Chirp applies the rule and returns a signed receipt
applied receipt.4 · The restriction in effect
Same site, same account, a few seconds later. Only Maya's profile changes.
5 · How the Cloudflare Worker does it (option 1)
In edge mode Chirp has no Phosra code. The Worker hosts Gatekeeper at /api/phosra/*, records what it enforces,
and filters Chirp's responses with HTMLRewriter.
- No Phosra code in the siteNo SDK, Phosra tables, background process or Phosra secret on Chirp's servers. Chirp only exposes who is signed in and each post's rating.
- One integration, many sitesEverything site-specific is configuration; protocol, signing, retries and receipts are written once.
- Upgrades without the siteNew Gatekeeper versions, credential rotation and new rule categories ship as a Worker deploy.
- One gate in front of everythingIn production the origin accepts traffic only from the Worker, so every response a child receives is checked.
Want Chirp to enforce the rule in its own queries, with the Worker still owning everything Phosra? That is option 2.
GET /api/timeline as Maya: only ratings ≤ 13, with an x-phosra-edge: content_rating<=13 header.PLATFORM_READY: credential, signing key, Trust List standing and database all verified at the edge.6 · Native mode: the same rule, built into Chirp
With npm run demo:native, Chirp runs Gatekeeper itself (chirp/src/phosra.ts) and filters in its timeline query. Same parent flow, same result, plus Chirp can show the control in its own UI.