Problem
wxyc.org has no /donate page (pages/ has no route for it), and the mobile apps' compile-time fallback URL — https://wxyc.org/donate — needs a real page behind it before either app ships. The page is also where the legally load-bearing donation copy lives.
Desired end state
pages/donate.jsx plus nav entries — which means editing components/Header.js (and likely components/Footer.js), not just adding the page. Depending on the SEB board's donation-platform decision, the page is either a thin page linking/embedding the LGL donation form or the canonical hosted page itself. Until that decision lands, ship the page with the ask and the disclosures below and no payment button — it must exist because the apps bake it in as their fallback destination, and it can gain the payment link/embed without any app release.
Copy constraints (legally load-bearing — from SEB's status, not taste)
- NEVER describe gifts as "tax-deductible". SEB (Student Educational Broadcasting, Inc., the license-holding NC nonprofit) has no IRS 501(c)(3) determination.
- The non-deductibility statement must appear in the federal safe-harbor format: same type size as the ask, near it, visible before any payment button. Exact wording is pending CPA sign-off; use the current draft and mark it for replacement.
- Appeals must identify SEB, not UNC, as the soliciting organization (UNC Policy Manual 600.2.5.2[R]).
- Include a plain sentence on how funds are used — Apple's App Store Review Guideline 3.2.1 requires the page the app links to disclose this.
Tests
The repo has a live Vitest + RTL suite (__tests__/, run by npm test in pr-open.yml). Add __tests__/donatePage.test.jsx asserting the rendered page contains the safe-harbor non-deductibility statement, names SEB as the soliciting organization, and carries the use-of-funds sentence. Repo trap: Vitest here cannot transform JSX in .js files — the test file must be .jsx.
Infrastructure note (for the record, not this ticket)
If WXYC ever self-hosts Apple Pay on the Web, the merchant domain must serve /.well-known/apple-developer-merchantid-domain-association — and wxyc.org/.well-known/* is delicate: the links-registry Worker routes the AASA file as an exact path so GitHub Pages' /.well-known/acme-challenge/* cert renewal passes through, and a wildcard route would silently break certificate renewal for all of wxyc.org. Hosting payment on the vendor's domain avoids this entirely.
Acceptance criteria
Branch: feature/220-donate-page off main.
Related
Sibling slices of the WXYC donation-button initiative (contract → backend → clients):
Problem
wxyc.org has no
/donatepage (pages/has no route for it), and the mobile apps' compile-time fallback URL —https://wxyc.org/donate— needs a real page behind it before either app ships. The page is also where the legally load-bearing donation copy lives.Desired end state
pages/donate.jsxplus nav entries — which means editingcomponents/Header.js(and likelycomponents/Footer.js), not just adding the page. Depending on the SEB board's donation-platform decision, the page is either a thin page linking/embedding the LGL donation form or the canonical hosted page itself. Until that decision lands, ship the page with the ask and the disclosures below and no payment button — it must exist because the apps bake it in as their fallback destination, and it can gain the payment link/embed without any app release.Copy constraints (legally load-bearing — from SEB's status, not taste)
Tests
The repo has a live Vitest + RTL suite (
__tests__/, run bynpm testinpr-open.yml). Add__tests__/donatePage.test.jsxasserting the rendered page contains the safe-harbor non-deductibility statement, names SEB as the soliciting organization, and carries the use-of-funds sentence. Repo trap: Vitest here cannot transform JSX in.jsfiles — the test file must be.jsx.Infrastructure note (for the record, not this ticket)
If WXYC ever self-hosts Apple Pay on the Web, the merchant domain must serve
/.well-known/apple-developer-merchantid-domain-association— andwxyc.org/.well-known/*is delicate: the links-registry Worker routes the AASA file as an exact path so GitHub Pages'/.well-known/acme-challenge/*cert renewal passes through, and a wildcard route would silently break certificate renewal for all of wxyc.org. Hosting payment on the vendor's domain avoids this entirely.Acceptance criteria
/donaterenders with the ask + all disclosure copy above__tests__/donatePage.test.jsxpins the three disclosure assertionsBranch:
feature/220-donate-pageoffmain.Related
Sibling slices of the WXYC donation-button initiative (contract → backend → clients):
AppConfig.donateUrl+donateEnabledGET /configserves both fields (dark)/configlaunch plumbing