System context

Status: Accepted · Version: 0.1

Titip is a set of experiences around one authority model. The control plane defines the model. Runtime systems implement it.

Owner (app) ─────────────┐
Trusted contact (web) ───┼──► backend modular monolith ──► data stores
Recipient (web) ─────────┘         │
                                   ├── notifications ──► email / SMS providers
Public site (web) ── reads ────────┤
                                   └── audit trail
AI assists the owner only, and never calls life-check or release.

Diagrams: diagrams/.

Experiences

Surface Repository Who Job
Mobile app app Owner Onboarding, contacts, inventory, life check, timeline, simulation
Public site web Public How it works, security, what to store, what not to store, FAQ, pricing, privacy, legal
verify.titip.id web Trusted contact Accept, reject, verify channel, manage notifications, read responsibility
receive.titip.id web Recipient Verify, accept disclosure, see only authorised vaults

app does not embed backend rules. If the clickable prototype has no API yet, it still follows the states and copy in the specs, and it labels simulation as simulation.

Backend modules

Module Authority spec
auth, users TITIP-002
contacts TITIP-003
assets TITIP-004
vaults TITIP-005
policies, lifecheck TITIP-006
escalation TITIP-007
releases TITIP-008, TITIP-009
notifications contracts/events/catalog.md
audit TITIP-010
admin Reviewer actions and global hold. No plaintext vault browser

Notification path is fixed:

NotificationRequest → Policy → Template → Provider adapter

Application code must not call Twilio, an email API, or WhatsApp directly.

Prototype runtime shape

Enough to build toward, not a production platform:

Not in the prototype runtime: real recipient delivery, WhatsApp, identity-proofing vendor, death registry, multi-region.

External systems later

Identity verification, SMS, WhatsApp, document signing, legal-service partners, and cloud storage sit behind integrations when that repository exists. Until then, adapters live in backend’s notification and verification modules and still obey these contracts.