Repository navigation
feat(notifications): setup reminders for brands + creators, policy warnings - #103
Merged
Merged
Conversation
…rnings Most brands and creators sign up and stall before they can earn anything: 41 of 43 creators are hidden from discovery with incomplete profiles, and brands stop before creating a program, listing it, or connecting tracking. Brand setup reminders (openpartner): - brand-setup.ts: one checklist (program, marketplace listing, conversion tracking, first partner) from local signals, batched across brands. Feeds the reminders, the ops console, and the dashboard's new tracking step. - brand-setup-reminders.ts: up to 3 emails (2 days after signup, then 4 and 7 days later) to the brand's signed-in admin, in the platform voice. Exactly-once via a BrandNotification claim row; failed sends release it. - Signed one-click unsubscribe (GET confirm page, POST + RFC 8058 List-Unsubscribe-Post), scoped so it never silences sign-in or billing. Creator profile reminders: the Network sends them (it owns creators and the unsubscribe flow, see openpartner-network feat/creator-profile-reminders); openpartner's scheduler triggers the run and the console previews it. Both sweeps are OFF until an operator turns them on in the new ops-console Notifications tab (PlatformSetting table: runtime config in the DB, not env), which previews exactly who the next run would email and can send now. Brands and Creators cards show setup/reminder history and a manual "send reminder" button. Marketplace policy warning (manual, per Keith): Brands card action that emails the brand a templated notice (the free listing means creators must join and be tracked through OpenPartner; fix by the deadline or the listing is removed) with the operator's findings, and records it in the audit log. Creator portal: a checklist on the profile page of exactly what's missing (now including the handle the directory already required), a site-wide "brands can't find you yet" banner, and expectations set at signup. Dashboard: fixes the duplicated "Create your first program" step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…p the /api prefix Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ted card matches the discovery bar The deadline was now+N days, so the email (UTC) and the console (local time) could show different dates. The Discover card listed handle + bio + apply, out of step with the real requirements; it now points at the same checklist as the profile page and banner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflict in mailer.ts: both sides added Message.platform. #88 uses it to skip tenant brand colors; this branch uses it to send as "OpenPartner" with Reply-To PLATFORM_OPS_EMAIL. Kept both behaviours under one flag (same meaning: OpenPartner talking, not a brand) and kept this branch's extra `headers` alongside #88's branded `html` in the SMTP send. Side effect for main's existing platform senders: ops alerts and the ops-console sign-in (DEFAULT_TENANT context) now also go out as "OpenPartner" with the ops Reply-To, and the unified workspace sign-in (signin.ts — whose tenant context is an arbitrary first-matched brand) now sends as "OpenPartner" instead of "<that brand> via OpenPartner". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Most brands and creators sign up and stall before they can earn anything. This adds setup reminders for both, an ops-console Notifications tab, and a manual marketplace policy warning.
brand-setup.tsbuilds one checklist (program, marketplace listing, conversion tracking, first partner) and feeds the reminders, the ops console and the dashboard.BrandNotification.publicUrl: NETWORK_URLso unsubscribe links keep the/apiprefix.PlatformSettingtable. The tab previews exactly who the next run would email and can send immediately. The Brands and Creators cards show setup and reminder history, with a manual "send reminder" button.Merge note (
mailer.ts)This branch and #88 both added
Message.platform. #88 uses it to skip brand colors; this branch uses it to send as "OpenPartner" with Reply-ToPLATFORM_OPS_EMAIL. Both now apply under the one flag. Side effect onmain's existing platform senders:signin.ts) now sends as "OpenPartner" instead of " via OpenPartner".Deploy order
Deploy https://github.com/getcoherence/openpartner-network/pull/3 first, then this. Migration
20261012000000_platform_notificationsruns automatically on deploy.Test plan
main. The only conflict wasmailer.ts, resolved as above.pnpm typecheckis clean.pnpm lint: 0 errors (the 5 warnings were already there).main; CI passes them.mainauto-deploys to production.🤖 Generated with Claude Code