mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-12 10:12:11 +03:00
feat(radar): contributor + supporter claim buttons on the activation screen (#9710)
* feat(radar): add F4/T7 contributor-claim / supporter-plans link config Pure, DB-free src/lib/radar/links.ts resolves the two outbound "get a supporter key" URLs (contributor GitHub-OAuth claim + supporter plans page), same env-override pattern as RADAR_FEED_URL. No pricing/value is ever resolved here (D14) — only the link. * feat(radar): relay F4/T7 claim/plans links via GET /api/radar/settings Smallest-surface option per spec: no dedicated route. The existing settings snapshot now also returns contributorClaimUrl/supporterPlansUrl so the dashboard client never reads process.env itself. Both are plain public URLs, gated by the same flag/auth checks as the rest of the response. * feat(radar): add contributor/supporter claim buttons to activation screen F4/T7 — "I'm a contributor" opens the GitHub OAuth claim flow; "Support the project" opens the plans/payment page. Both links come from the settings fetch (never a hardcoded URL in this client component) and open in a new tab. No price/value anywhere in the copy — the destination page is the only place pricing lives (D14). i18n: 5 new radarPage keys (claimSectionTitle, contributorButton, contributorHint, supporterButton, supporterHint) added to all 43 locale files with the English copy as fallback value. * docs(radar): document F4/T7 supporter-key acquisition paths RADAR.md: new "Getting a supporter key" section covering both claim flows, the two env-var overrides, and the current gap (no dedicated key-paste input in the dashboard yet — POST /api/radar/settings is the only way to set one today). ENVIRONMENT.md + .env.example: register RADAR_CONTRIBUTOR_CLAIM_URL / RADAR_SUPPORTER_PLANS_URL for check:env-doc-sync. --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
976d670ff3
commit
02534f4e8e
@@ -82,6 +82,43 @@ that lets the feed service decide which tier to serve (see
|
||||
|
||||
---
|
||||
|
||||
## Getting a supporter key
|
||||
|
||||
The activation screen (`/dashboard/radar`) links out to two flows for **obtaining** a
|
||||
supporter key. The OSS repo itself never issues one, never runs payment code, and
|
||||
**never states a price** — pricing is decided and displayed entirely on the
|
||||
destination pages, not in this repo (spec decision D14).
|
||||
|
||||
- **"I'm a contributor"** — opens `RADAR_CONTRIBUTOR_CLAIM_URL` (default
|
||||
`https://radar.omniroute.online/auth/github`), a GitHub OAuth claim flow hosted on
|
||||
the private radar server. It verifies the visitor's GitHub account and grants a
|
||||
supporter key to anyone with 5+ merged pull requests or a top-100 contributor spot
|
||||
on the repo.
|
||||
- **"Support the project"** — opens `RADAR_SUPPORTER_PLANS_URL` (default
|
||||
`https://radar.omniroute.online/planos`), the payment/plans page.
|
||||
|
||||
Both URLs are resolved server-side (`src/lib/radar/links.ts`, same env-override
|
||||
pattern as `RADAR_FEED_URL`) and relayed to the dashboard through the existing
|
||||
`GET /api/radar/settings` response (`contributorClaimUrl`, `supporterPlansUrl`) — the
|
||||
client component never reads `process.env` itself.
|
||||
|
||||
| Var | Purpose |
|
||||
| -------------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `RADAR_CONTRIBUTOR_CLAIM_URL` | Overrides the contributor-claim URL (default `https://radar.omniroute.online/auth/github`). |
|
||||
| `RADAR_SUPPORTER_PLANS_URL` | Overrides the supporter-plans URL (default `https://radar.omniroute.online/planos`). |
|
||||
|
||||
Once a visitor has a key (`omr_` + 40 hex chars), it is set with `POST
|
||||
/api/radar/settings` (`{ supporterKey }`) — the same endpoint documented under
|
||||
[Data sync](#data-sync-is-a-separate-opt-in--the-privacy-promise) above.
|
||||
|
||||
**Known gap:** the dashboard activation screen does not yet have a dedicated
|
||||
key-paste input — pasting a key today requires calling `POST /api/radar/settings`
|
||||
directly (curl, a script, or a future UI). This release only adds the two claim/plans
|
||||
buttons; the API already accepts and masks the key, but no `<input>` for it exists in
|
||||
`src/app/(dashboard)/dashboard/radar/page.tsx` yet.
|
||||
|
||||
---
|
||||
|
||||
## Security model
|
||||
|
||||
### Ed25519 signature over exact bytes
|
||||
|
||||
Reference in New Issue
Block a user