Skip to content

Creator Experience

This covers everything a creator sees and can do when logged into the affiliate platform at secure.moneymatchup.com (or the MoneyMatchup portal).

Sign-In Flow

Creators sign in via the ca-auth portal — a standalone sign-in page hosted separately from the main platform. There are two sign-in options:

Magic Link (email)

  1. Creator enters their email address and clicks "Send magic link"
  2. The ca-auth portal forwards the request to the affiliate platform's auth service
  3. An email is sent via MailerSend with a sign-in button
  4. Clicking the button authenticates the creator and redirects them to their dashboard
  5. Magic links expire after a short window — if the link is expired, the creator just requests a new one → DB: Token stored in Verification (identifier = email, value = token, expiresAt). On successful sign-in, creates a row in Session (userId, token, expiresAt).

Google OAuth

  1. Creator clicks "Continue with Google"
  2. Redirected to Google's auth flow, then back to the platform
  3. Must use the email address on file — Google accounts that don't match a registered creator account are rejected

The ca-auth page displays branding as "MoneyMatchup by Creators Agency" and explicitly states it's for authorized accounts only. Creators without an account are told to contact their MoneyMatchup admin.


Onboarding

New creators who sign in for the first time are taken through a multi-step onboarding flow before reaching their dashboard. → DB: Checked via CreatorProfile.onboardingComplete — if false, onboarding is shown before the dashboard

What onboarding collects:

  • Creator's display name (if not already set)
  • Their social media channels: platform (YouTube, YouTube Shorts, TikTok, Facebook, Instagram, Email Newsletter), their handle/channel name, and the URL to their channel
  • Which channel is their primary promotion channel (used as the default when generating links)

→ DB: Each channel added inserts a row into CreatorChannel (userId, platform, handle, url, isPrimary)

Creators can add multiple channels. The platform auto-selects the option for single-option platforms (e.g. YouTube has one option: long-form). Instagram requires the creator to choose between Instagram Reels, Instagram Stories, or Instagram Link in Bio.

Onboarding can be skipped, but creators who haven't completed it will have limited profile information until they do.


Dashboard

After signing in, creators land on their main dashboard. It is a dark-themed interface with a persistent left sidebar for navigation.

Header bar

  • Greeting with the creator's first name
  • All-time earnings figure displayed prominently in the top right
  • If the creator has PS Workflow access: a "Creator Dashboard ↗" button that generates a one-time secure link to the PS Workflow creator dashboard and opens it in a new tab
  • If the creator is also an admin: an "⚙ Admin" button to access the admin panel

Stats row (four cards)

  • 30-day clicks
  • 30-day conversions
  • 30-day earnings
  • Total affiliate links (count of active links)

→ DB: Reads from affiliate_analytics (clicks, conversions, earnings) filtered by userId, last 30 days

Each card shows the metric label, the value, and a small sub-label (e.g. "past 30 days").

Sparkline chart Below the stats, a 30-day earnings trend line is displayed. Hovering shows the exact date and earnings value for any point on the chart. → DB: Reads from affiliate_analytics (date, earnings) last 30 days grouped by date

Featured Offers A grid of featured financial product offers that the creator hasn't generated links for yet. Each card shows the offer name, category, payout summary, and conversion event. Clicking opens the Link Generation Modal (see Offers section below). If the offer requires approval, clicking opens a request form instead. → DB: Reads from Offer where featured = true; filters out offers already in AffiliateLink for this user

Active Links table Shows the creator's 5 most recently created affiliate links. Columns: Offer name, platform badge, slug, and a one-click copy button. The full link shown is secure.moneymatchup.com/{slug}. Clicking "copy" copies the full URL to clipboard with a brief visual confirmation. → DB: Reads from AffiliateLink (slug, platform, offerId) ordered by createdAt desc, limit 5

Navigation sidebar items: Dashboard, Offers, Links, Analytics, Settings, Support


Offers Page

The Offers page shows all financial product offers available to the creator, with filtering and search.

Category filter tabs Creators can filter by: All, Business, Credit Cards, Investing, Banking, Insurance, Loans, General. Active filter is highlighted in red.

Search A search input filters offers by name in real time. A count of matching offers is shown.

Offer cards (grid layout) Each offer is displayed as a card with:

  • Offer name and category label
  • Payout summary (e.g. "Up to $150 per conversion")
  • Conversion event description
  • Featured badge (red border + badge) if flagged as featured by admin

→ DB: Reads from Offer (name, category, featured, visibility, approvalType); filters private offers through OfferAllowlist

Card states and actions:

  • Approved — Creator has been approved; a "Get Link →" button opens the Link Generation Modal
  • Pending — Creator has requested access; card shows "Pending" with a pulsing indicator
  • Denied — Request was rejected; creator can re-apply (opens the request form again)
  • Approval required — Offer requires approval; button shows "Request Access" which opens the Request Modal
  • Auto-approved (no approval type) — Creator can generate a link immediately via "Get Link →"

→ DB: Offer state derived from OfferApproval (userId, offerId, status) for this creator

Link Generation Modal Opens when a creator clicks "Get Link" on an approved offer:

  • A dropdown lets the creator select which of their connected channels they're promoting on
  • A live preview shows the full slug that will be generated (e.g. moneymatchup.com/caleb-sofi-youtube)
  • Tier 3 creators see their actual slug auto-generated; Tier 2 creators see a placeholder
  • Clicking "Generate" creates the affiliate link record in the database, notifies the router backend, and closes the modal with a redirect to the Links page

→ DB: Inserts into AffiliateLink (userId, offerId, slug, slugStatus, platform, channelId); then inserts a row in GeneratedLink per provider

Request Modal Opens when a creator clicks "Request Access" on an offer that requires approval:

  • Collects any required information for the approval request
  • On submit, creates an OfferApproval record with status "pending" — visible to admins in the Approvals panel
  • Creator's card updates immediately to "Pending" state without a page reload

→ DB: Inserts into OfferApproval (userId, offerId, offerName, creatorPlatformIds, status = 'pending')

Toast notification When a creator's offer approval is granted (detected on next page load), a toast appears announcing which offer was unlocked.


Shows all of the creator's generated affiliate links.

Each link displays:

  • The offer name
  • Platform badge (color-coded by platform: red for YouTube, pink for Instagram, teal for TikTok, etc.)
  • The full slug as a URL: secure.moneymatchup.com/{slug}
  • A one-click copy button with clipboard confirmation

→ DB: Reads from AffiliateLink ordered by createdAt desc

Links are ordered by creation date, newest first.


Analytics Page

The analytics page shows full performance history for all of the creator's affiliate links.

Time range selector Creators can filter data to the last 7 days, 30 days, 90 days, or 365 days.

Per-link breakdown Each affiliate link is shown with:

  • Offer name and platform badge
  • Total clicks in the selected period
  • Total conversions in the selected period
  • Total earnings in the selected period (with the creator rate multiplier applied — creators see their share, not the gross figure)

→ DB: Reads from affiliate_analytics joined to AffiliateLink for selected time range; earnings displayed as earnings × 0.8

Day-by-day detail Below the per-link summary, daily data is shown for each link. This allows creators to see exactly when clicks and conversions happened.

Data is refreshed once per day by the analytics cron job. What creators see today reflects activity through the previous day.


Settings Page

The Settings page has two tabs:

Profile tab

  • Display name
  • Email address (read-only — contact admin to change)
  • Profile photo (shown as a circular avatar in the sidebar footer)
  • Legal name (used for payment processing — this is what appears on payout records)

→ DB: Saves update to User (name, legalName) and CreatorProfile (profilePhotoUrl)

Channels tab Managed via the ChannelManager component. Creators can:

  • Add a new channel: select platform (YouTube, YouTube Shorts, TikTok, Facebook, Instagram Reels, Instagram Stories, Instagram Link in Bio, Email Newsletter), enter a handle/channel name, and optionally a URL
  • Edit an existing channel inline
  • Delete a channel
  • Set a primary channel (used as the default selection when generating offer links)

→ DB: Creates/updates/deletes rows in CreatorChannel (userId, platform, handle, channelId, url, isPrimary)

The platform dropdown auto-selects the only option for single-option platforms. Instagram requires manual selection between its sub-types.

Sidebar footer The bottom of the left sidebar always shows a clickable row with the creator's circular avatar (34px), their display name, and a right-pointing chevron. Clicking navigates to Settings.


Support Page

Creators can submit support tickets from the Support page. Submitted tickets are visible to admins in the Admin Support panel, where staff can reply. Reply threads are shown in order. → DB: Inserts into SupportTicket (userId, message, category)