Glossary¶
Tomoda-specific terms (product nouns, internal subsystems) and tech terms used throughout these docs. Skim it once; come back when you hit something unfamiliar.
A¶
Active Location — A user's currently-shared live location pin. Distinct from the user's general location: a user is always somewhere, but only sometimes has an active location to broadcast. Stored in Redis under active_location:{user_id} with a TTL; turned on/off explicitly by the user. See Presence.
Air — Hot-reload tool for Go (github.com/cosmtrek/air). Watches backend/ and rebuilds on save. Auto-started by task dev.
ArgoCD — GitOps continuous-delivery controller running in our GKE cluster. Watches the devops repo for manifest changes and reconciles them into Kubernetes. Production rollouts happen when a manifest is pushed, not when a Docker image is built.
Asynq — Go background task library (github.com/hibiken/asynq). Wraps Redis as a job queue with retries, scheduling, priorities. Used for fire-and-forget work like activity logging. Distinct from the custom internal/scheduler (which handles cron + leader-elected dispatch).
C¶
Connect — Product term for the "send a friend request / accept connection" flow. The user-facing surface around the friendships table.
D¶
Discover — Product term for the map/feed surface where users browse nearby events, locations, and moments. Backed by discovery_service.
E¶
EAS Build — Expo Application Services' hosted build infrastructure for native iOS/Android binaries. Config lives in frontend/eas.json. Replaces local Xcode/Android Studio builds for distribution.
Event — A scheduled, location-bound social gathering. The core social primitive — has a host, participants, a chat room, a location, a start time. See internal/models/event.go.
Expo Router — File-system-based routing for the React Native app. frontend/app/foo/bar.tsx becomes the /foo/bar route. Replaces React Navigation as the top-level navigator.
F¶
Friend — An accepted bidirectional connection between two users. Backed by the friendships table with a status enum (pending, accepted, blocked).
G¶
GORM — Go ORM (gorm.io/gorm). Used for all DB access in the backend. Repository layer wraps it; services consume the repositories.
H¶
H3 — Uber's hexagonal hierarchical geospatial index. We use it at multiple resolutions to cluster events/locations on the map at low zoom (the "geo_cluster" marker type) and to deduplicate locations near the same place. Stored in Postgres (locations.h3_index), not Redis.
Horizon — Product term for the time-windowed feed of upcoming events visible from a user's current location. The user's "what's happening near me, soon" view.
Hub (product) — The user's home tab in the app — personalised feed of friends, events, and moments. Distinct from the WebSocket Hub below.
Hub (WebSocket) — The in-process WebSocket connection manager in backend/internal/websocket/hub.go. Routes outbound messages to subscribers of a given chat room. See Real-time.
J¶
JWT — JSON Web Token. Stateless session token signed with JWT_SECRET. Carries the user_id claim; auth middleware validates it on every request. Pair with a refresh token (stored in Redis) for rotation. See Auth.
M¶
MinIO — S3-compatible object store used as the local drop-in replacement for AWS S3. Configured via S3_ENDPOINT=http://localhost:9000 and S3_USE_PATH_STYLE=true. Same aws-sdk code paths in prod and locally.
Moment — Short-lived user-generated content tied to a location — like a photo or quick note. Has a TTL; cleaned up by the moment_cleanup and moment_purge cron tasks in internal/scheduler. See internal/models/moment.go.
O¶
OTP — One-time password. Six-digit code emailed during email verification + password reset. Tracked in Postgres with short TTL.
P¶
Participant — A user attending an event. Stored in event_participants. Has a status (going, maybe, declined) and feeds the event's chat room membership.
Passkey — WebAuthn credential (FIDO2). Passwordless authentication. Tomoda uses go-webauthn/webauthn; registration and login session state cached in Redis under webauthn:reg:* and webauthn:login:*. See Auth.
Photon — Self-hosted OpenStreetMap-based geocoder (github.com/komoot/photon). Reverse-geocodes lat/lng to place names without hitting Google or paying per-request. Optional — toggled via PHOTON_URL/config.photon.enabled.
PostGIS — Postgres extension for geospatial types and queries (ST_DWithin, ST_MakePoint, etc.). Backs all DB-side "nearby" lookups. The location column on events/locations is geography(Point, 4326).
Presence — A user's online/offline status. Implemented as a heartbeat: client pings every ~60s; backend writes presence:{user_id} with a 3-minute TTL. Absence of the key ⇒ offline.
R¶
Resend — Transactional email provider. Backend's email_service.go posts to the Resend HTTP API using EMAIL_APIKEY.
S¶
Sim Workers — Test-data simulation processes in backend/cmd/test/sim-workers/. Long-running goroutines that animate 50 seeded users — moving them around, sending DMs, creating events, toggling presence — to populate a realistic-looking local dev environment. Started by task test:simulation.
V¶
Voyage — Product term for a multi-stop journey or "trip" composed of multiple Waypoints. A higher-order surface above the single-event primitive.
W¶
Waypoint — A single stop within a Voyage — typically a location or event the user plans to visit. The atomic unit a Voyage is built from.
WebAuthn — The W3C standard underlying Passkeys. See Passkey.
Wire — Compile-time dependency injection for Go (github.com/google/wire). The DI wiring lives in backend/internal/wire/. Re-generate after adding a constructor: task wire:gen. See Wiring (DI).