Skip to main content
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