The EVO Dialed backend is a Rails 8 API-only application that powers all platform functionality. It manages commercial relationships between brands and content creators.
Technology stack
Directory structure
Key documentation files
API namespaces
The backend exposes three API namespaces:
Internal API (/api/internal/*)
For the admin frontend (EVO team):
- Full CRUD on all resources
- Mission Control, Pipeline, Roster operations
- Analytics and reporting
- Requires admin JWT (
user_typ: "evo")
Creator API (/api/creator/*)
For the iOS app (creators):
- Dashboard, brand hubs, chat
- Content submission and metrics
- Strategy viewing
- Requires creator JWT (
user_typ: "creator")
Public API (/api/public/*)
For unauthenticated access:
- Client Hub (with optional passcode)
- Public brand reports
- Contract signing
- Invite acceptance
Authentication
Authentication is handled by Better Auth (a separate service in the Next.js frontend). The Rails backend validates JWTs.
Critical ADR: user_id across ~46 tables is a Better Auth id (string(64)), NOT users.id. Always join via users.auth_user_id.
Core patterns
Single write paths
Critical state changes go through service objects:
Brands::PipelineStatusChange for brand status
Creators::Rejector for creator removal
Campaigns::PlacementAllocator for content attribution
Brand-centric model
Creators are assigned to brands, not campaigns:
BrandCreatorMembership is the core assignment table
- Campaigns run under brands
- Removing from a brand removes all campaign access
Dual-table identity
Better Auth owns authentication, Rails owns business data:
better_auth_users - Auth credentials
users - Business data (linked via auth_user_id)
Running locally
Pre-push checklist