Renamed Campaign → Program; categories on programs
- Renamed the Campaign object to Program across the stack — matches Dub, Tolt, PartnerStack, ShareASale and the everyday brand vocabulary. The original "Campaign" naming was Rewardful-inspired and implied a time-bounded promo, but the object actually represents an ongoing partner program.
- DB rename of Campaign → Program + PartnerCampaign → PartnerProgram, plus all FK columns (campaignId → programId on Click, Link, Attribution, Coupon, PartnerProgram) and constraint names. RLS policies and route paths (/campaigns → /programs) updated.
- Network wire contract: Offering.vendorCampaignId → vendorProgramId, federation client’s CreateLinkInput field renamed.
- New: industry categories on programs. Multi-select from a curated 16-entry list (SaaS, AI, DevTools, Marketing, Sales, E-commerce, Finance, Education, Productivity, Design, Media, Analytics, HR, Communication, Security, Other). Capped at 5 per program.
- Discover page filter for Category. Card chip strip surfaces up to 2 categories alongside the lead commission chip.