The main public Ann Lite platform — Next.js + TypeScript.
The public-facing site: prayers, reflections, resources, charity projects, the donation flow, transparency reporting, and account pages.
annlite-web/
├── app/ # Next.js App Router pages
│ ├── prayers/ reflections/ resources/ charity/
│ ├── donate/ # the two-method donation flow
│ ├── transparency/
│ ├── about/ contact/ account/
│ └── layout.tsx, page.tsx
├── components/ # web-specific composition (page sections), NOT base UI
├── lib/
│ ├── api.ts # the only module that calls annlite-backend
│ └── apiModules.ts
├── styles/
├── tests/
└── docs/ARCHITECTURE.md
Base UI primitives (Button, Card, Input, Modal, DonationButton, ContentCard) come from @annlite/design-system — this repo does not redefine them.
See docs/ARCHITECTURE.md for the full data-flow and payment-boundary rules.
npm install
cp .env.example .env.localNEXT_PUBLIC_API_BASE_URL— points atannlite-backend, e.g.http://localhost:4000/api/v1
No payment provider keys belong in this repository, ever — see Security below.
npm run dev
npm run build
npm startnpm testIncludes a guardrail test (tests/paymentBoundary.test.ts) asserting the donate flow never attempts to confirm a payment or write donation totals itself.
- No database connection, no payment provider credentials, and no payment confirmation logic exist in this repository.
- The donate page only ever redirects the donor to a provider-hosted destination (
providerRedirectUrl) returned byannlite-backend— it never collects card details itself. - All rendered content comes from public, already-filtered backend endpoints (published/active only).
- Depends on:
annlite-backend(all data),annlite-design-system(all UI) - Depended on by: end users (public site)