Follower marketing (owner campaigns)

Fans who favorite a truck in Find are that truck’s in-app followers. FoodTruckNerdz can advertise to those customers for the owner (specials, “we’re here,” menu drops) as a paid income line. This is not a POS upsell and not an Adapty subscription entitlement.

Audience is FTN favorites, not Instagram/Facebook follower graphs. Instagram and Facebook stay a live public bridge for later listing copy (see AGENTS / directory notes).

Status

Scaffolded (MVP). Owners can request a campaign; PR can queue or decline. Customer.io journeys that actually send to followers are planned — do not blast from Resend Broadcasts. Convex table/functions land on the next Production convex deploy (CONVEX_DEPLOY_KEY); local next dev must not convex dev against the shared production deployment.

Piece Status

Owner pitch (homepage Owner lens)

Live copy: Get found. Claim your business. Send marketing emails.

Owner request UI

/manage/marketing (work context + active membership; manager+ to submit)

Convex followerCampaignRequests

Scaffolded — request, withdraw, PR review

PR queue

/manage/pr/follower-campaigns (FTN_PR_EMAILS / developer)

Ops ping to PR

Resend transactional (FTN_PR_NOTIFY_EMAIL) — not a fan campaign

Fan send (email / SMS / push)

Planned — Customer.io journey keyed off queued requests + favorites

Billing / Adapty SKU

Not wired. Treat as a service quote until pricing lands.

Product rules

  • Manage stays owner ops. Fan\|Owner is a session lens, not a URL rename.

  • Product stays on this origin (/manage/marketing). Do not invent app..

  • Square remains optional POS, not identity. A claimed directory truck is enough.

  • Marketing brain is Customer.io. Resend is for hard transactional mail (including “new request” to PR). Do not dual-send marketing from Resend Broadcasts and Customer.io.

Flow (current)

  1. Owner (or manager) opens /manage/marketing, picks a truck, chooses a goal, optional note.

  2. Convex stores followerCampaignRequests with a snapshot of favorite count (followerCountAtRequest).

  3. PR reviews at /manage/pr/follower-campaigns and Queue or Decline.

  4. Queued rows are the handoff for a later Customer.io campaign to users who favorited that foodTruckId and opted in.

TODO (Customer.io)

  1. Identify people with the Better Auth / Convex user id.

  2. Segment or trigger: truck_favorited / follower_campaign_queued with foodTruckId.

  3. Honor CMP + marketing opt-in; STOP for SMS.

  4. Send on news.foodtrucknerdz.com, not updates..