How dogecn/infoto works
Infoto is a collaborative photo gallery with uploads, reactions, announcements, feedback, and administrative data management. The main flow runs from browser edits and uploads through a persistent operation log and sync client to the Worker’s /sync handler, which updates the database and returns a gallery snapshot for the UI. Separate paths handle media delivery and admin/migration endpoints. Several subsystem links are based on SOURCE INDEX references; unsampled route and upload details are not expanded into unverified call chains.
Main entry points: sync.ts Sync endpoint · App.svelte Gallery UI · app.ts HTTP app · media.ts Media endpoint
Components 26
Gallery web app
- Gallery UI
web/src/App.svelte - App state
web/src/state/appStore.svelte.ts - Gallery settings
web/src/settings.ts - Sync engine
web/src/core/engine.ts - Operation log
web/src/core/oplog.ts - Sync client
web/src/core/api/syncClient.ts - Identity flow
web/src/core/identity.ts
Media uploads
- Upload state
web/src/state/uploadStore.svelte.ts - Upload pipeline
web/src/transcode/pipeline.ts - Upload client
web/src/core/api/uploadClient.ts
Worker API
- HTTP app
src/worker/app.ts - Sync endpoint
src/worker/routes/sync.ts - Media endpoint
src/worker/routes/media.ts - Admin routes
src/worker/routes/admin.ts - Migration routes
src/worker/routes/migrate.ts - Identity service
src/worker/identity.ts - Database contract
src/worker/db.ts - D1 adapter
src/worker/db-d1.ts - Turnstile verifier
src/worker/turnstile.ts
Shared contracts
- Domain contracts
src/shared/types.ts - Media IDs
src/shared/media.ts - Locale copy
src/shared/copy.ts
Other components
- Gallery visitor
- Media host
- Turnstile
- Application database
Connections 29
- Gallery visitor → Gallery UI: uses
web/src/App.svelte - Gallery UI → App state: reads state
web/src/App.svelte - Gallery UI → Gallery settings: loads
web/src/App.svelte - Gallery UI → Identity flow: starts identity
web/src/App.svelte - Gallery UI → Sync client: requests sync
web/src/App.svelte - App state → Sync engine: uses
web/src/state/appStore.svelte.ts - Sync engine → Operation log: persists operations
web/src/core/engine.ts - Sync engine → Sync client: posts batches
web/src/core/engine.ts - Identity flow → Sync client: posts identity
web/src/core/identity.ts - Gallery UI → Upload state: uses
web/src/App.svelte - Upload state → Upload pipeline: coordinates upload
- Upload pipeline → Operation log: records upload op
web/src/transcode/pipeline.ts - Upload state → Upload client: uploads media
- HTTP app → Sync endpoint: routes /sync
src/worker/app.ts - HTTP app → Media endpoint: routes /l/:id36
src/worker/app.ts - HTTP app → Admin routes: mounts admin
src/worker/app.ts - HTTP app → Migration routes: routes migration
src/worker/app.ts - Sync endpoint → Database contract: reads and writes
src/worker/routes/sync.ts - Sync endpoint → Identity service: resolves identity
src/worker/routes/sync.ts - Sync endpoint → Turnstile verifier: verifies challenge
src/worker/routes/sync.ts - Sync endpoint → Media endpoint: validates media URL
src/worker/routes/sync.ts - Media endpoint → Database contract: looks up media
src/worker/routes/media.ts - Media endpoint → Media IDs: decodes ID
src/worker/routes/media.ts - Database contract → D1 adapter: implemented by
src/worker/db-d1.ts - D1 adapter → Application database: accesses
- Turnstile verifier → Turnstile: verifies token
- Upload pipeline → Media host: sends media
- Sync endpoint → Domain contracts: uses payload contract
src/worker/routes/sync.ts - Sync client → Sync endpoint: POST /sync
web/src/core/api/syncClient.ts