How ktaffy/vault works
Vault is a mobile music-discovery and artist-promotion app: listeners hear short snippets and swipe to save/follow or skip; artists upload a single 15-second snippet and track its plays. The graph shows the mobile entry points and API layers, plus the Go services for accounts, snippet management, feed selection, and swipe recording. Backend wiring is based on the bootstrap and router; sampled service excerpts support only some internal calls, so uncertain repository-level and screen-level links are omitted.
Main entry points: router.go HTTP router · auth.ts API services · db.go PostgreSQL · index.tsx Listener screens
Components 27
Mobile app
- Auth screens
frontend/app/(auth)/login.tsx - Listener screens
frontend/app/(tabs)/index.tsx - Artist screens
frontend/app/(tabs)/artist/upload.tsx - Auth hook
frontend/src/hooks/useAuth.ts - API services
frontend/src/services/api/auth.ts - API client
frontend/src/services/api/client.ts - Audio playback
frontend/src/hooks/useAudioPlayback.ts - Secure storage
frontend/src/services/storage/SecureStorage.ts
Backend API
- HTTP router
backend/router/router.go
Music discovery
- Snippet handlers
backend/internal/snippet/snippet_handler.go - Snippet service
backend/internal/snippet/snippet_service.go - Snippet repository
backend/internal/snippet/snippet_repo.go - Feed handler
backend/internal/feed/feed_handler.go - Feed selection
backend/internal/feed/feed_service.go - Feed repository
backend/internal/feed/feed_repo.go - Swipe handler
backend/internal/swipe/swipe_handler.go - Swipe service
backend/internal/swipe/swipe_service.go - Swipe repository
backend/internal/swipe/swipe_repo.go - Feed jobs
backend/jobs/jobs.go
Accounts
- User handlers
backend/internal/user/user_handler.go - User service
backend/internal/user/user_service.go - User repository
backend/internal/user/user_repo.go
Other components
- Listener
- Artist
- PostgreSQL
backend/db/db.go - AWS S3
- Email service
Connections 31
- Listener → Auth screens: signs in
- Listener → Listener screens: discovers music
- Artist → Artist screens: manages music
- Auth screens → Auth hook: uses auth
- Auth hook → API services: requests auth
- Auth hook → Secure storage: stores credentials
- Listener screens → API services: requests feed
- Artist screens → API services: requests artist data
- Listener screens → Audio playback: plays snippets
- API services → API client: sends requests
- API client → HTTP router: HTTP requests
- HTTP router → User handlers: routes account requests
- HTTP router → Snippet handlers: routes snippet requests
- HTTP router → Feed handler: routes feed requests
- HTTP router → Swipe handler: routes swipe requests
- User handlers → User service: calls
- User service → User repository: reads and writes
- User repository → PostgreSQL: persists account data
- User service → Email service: sends account email
- Snippet handlers → Snippet service: calls
- Snippet service → Snippet repository: creates and reads
- Snippet repository → PostgreSQL: persists snippet data
- Snippet service → AWS S3: uploads media
- Feed handler → Feed selection: requests next snippet
- Feed selection → Feed repository: reads candidates and queue
- Feed repository → PostgreSQL: reads feed data
- Feed jobs → Feed selection: refills queues
- Swipe handler → Swipe service: records action
- Swipe service → Snippet repository: validates snippet
- Swipe service → Swipe repository: records and reads swipes
- Swipe repository → PostgreSQL: persists swipe data