Connections
What Account Platform gives to and takes from the other three services, proven in code.
Only what's provable in code today — no planned contracts.
What Platform gives
- The domain event journal.
events/journal.pyis the single legal writer of thedomain_eventtable (append +read_since). Other products read from this journal instead of querying Platform's internal tables directly — it's the spine the rest of the system is built on. - A reconnect entry point. The
?reconnect=<external_account_id>parameter on the accounts page is a URL contract other surfaces can link into (e.g. a "connection lost" banner) to land a user directly on the right account's reconnect dialog.
What Platform takes
- Club's money events, projected into a shared table.
money_projection.pyreads Club'smoney.*event stream and writes rows intoplatform_transactions— deleting and rebuilding one owner+platform's rows at a time. Platform owns the mechanics of this projection; it does not own the meaning of the money, which stays Club's. - Club's fan and subscription data, read-only, to order sync work.
fan_priority.pyreads spend, subscription state, and message activity from Club's tables to decide which fan's chat gets scanned first. It changes nothing in Club's data — it only orders Platform's own sync queue.
What reads Platform's data, from outside Platform
- Club reads the raw sync store to re-fetch signed media URLs.
ops/fansly_media_fetch.pyjoins against theplatform_sync_raw_snapshotstable with raw SQL (not the ORM) to recover signed CDN URLs forplatform_fans.avatar_urlandplatform_content.cover_urldisplay — this bypasses Platform's own resolvers entirely, so it won't show up in an import-based audit of who depends on Platform.
Two different mount shapes for sync APIs
The Fansly sync engine's API (/api/platform-engine/v1/fansly/*) is not a
bare route registration — it's built by a factory
(compose_browser_native) and only appended to the app's routers when the
fansly_engine_enabled setting is on. A grep for a literal
include_router(...) call by name will not find this mount point.
What's next
Looking for the actual request/response shapes behind any of this? See the API reference.
Boundaries
What Account Platform owns, what it deliberately does not do, and where to go instead.
API — Connecting an account
Endpoints that move a platform account from "extension has a session" to "Platform has a bound, syncing account" — token minting, saved proxies, session import, and the browser-profile v2 provisioning chain.