At this level
app.kalangitan · 1- app.kalangitan.actor.profile record not from the namespace authority A persona: one of possibly several profiles on a single account. Every post, note, and story belongs to exactly one persona. Location visibility, precision, and gating defaults are set per-persona (see app.kalangitan.location.visibility). A public persona's records live in the account's public repo. A gated persona's records, including this profile record itself, live inside that persona's atproto Space, with a public stub record (app.kalangitan.actor.stub) in the public repo for discovery.
- app.kalangitan.actor.stub record not from the namespace authority Minimal public record for a gated persona, living in the owner's public repo. A Space's address (authority/type/skey) cannot be stumbled onto by browsing a public repo, so each gated persona needs a stub that says only: this persona exists, here is how to request access. Name, bio, avatar, and all content stay inside the Space and are invisible to non-members. Required whenever an actor.profile exists with gated=true; must not exist for public personas.
- app.kalangitan.feed.note record not from the namespace authority A short, lightweight status note. Location is optional. Belongs to exactly one persona via profileUri. For a gated persona this record lives inside the persona's Space; Spaces provide access control, not confidentiality.
- app.kalangitan.feed.post record not from the namespace authority A standard post. Location is a required part of every record in this app, not an optional tag. Belongs to exactly one persona via profileUri; the persona's location.visibility defaults govern how the location is stored and shared. For a gated persona this record lives inside the persona's Space. Spaces provide access control, not confidentiality. The space host and PDS operator can technically read this data.
- app.kalangitan.feed.story record not from the namespace authority An ephemeral story: visible until expiresAt, then hidden and eligible for deletion. Location is required. Belongs to exactly one persona via profileUri. For a gated persona this record lives inside the persona's Space; Spaces provide access control, not confidentiality.
- app.kalangitan.graph.accessGrant record not from the namespace authority Owner-authored acceptance of a follow-as-access-request on a gated persona. Written by the owner of the persona named in the referenced follow record. Effective access state = follow record exists AND matching grant record exists. NOTE: writing this record alone is not sufficient at the protocol level. The owner must also add the follower's DID to the Space's member list via the space host. Both actions are required; the AppView treats the grant as the app-layer signal and the member list as the
- app.kalangitan.graph.follow record not from the namespace authority Follow of a persona, identified by its profile record's AT-URI. This is both a follow and (for gated personas) an access request, one record type, not two. Lives in the follower's own public repo; only the follower can write or delete it. For a public persona, the follow record alone grants read access to the persona's content. For a gated persona, the AppView treats this record as a pending access request; effective access requires a matching app.kalangitan.graph.accessGrant written by the pers
- app.kalangitan.location.live record not from the namespace authority Live location: a single continuously-overwritten record, NOT a growing collection. Belongs to a persona via profileUri; near-real-time updates are feasible because Spaces support direct PDS-to-PDS sync without a relay, so this record never bloats the repo. Only written when the owning persona's location.visibility mode is 'live'. CONVENTION: this record's repo key (rkey) MUST match the rkey of the app.kalangitan.actor.profile record named in profileUri, so the two records pair up deterministical
- app.kalangitan.location.snapshot record not from the namespace authority A discrete "here's where I was" location record. A snapshot, like any other post. Contrast with app.kalangitan.location.live, which is a single continuously-overwritten record. Belongs to a persona via profileUri; the persona's location.visibility defaults govern whether snapshots are recorded at all and at what precision.
- app.kalangitan.location.visibility record not from the namespace authority Per-persona location defaults: whether location is shared at all (mode) and at what granularity (precision). These defaults keep posting low-friction. Location behavior is configured once per persona, not per post. CONVENTION: this record's repo key (rkey) MUST match the rkey of the app.kalangitan.actor.profile record named in profileUri, so the two records pair up deterministically.