Superadmin and org dashboards are the separate Remix app: run npm run dev in donation-frontend (default http://localhost:3000), then open /admin/auth/login there — not on this widget dev port. Replace data-campaign-id with a campaign UUID from your admin. In Vite dev, omit VITE_API_URL to use the dev proxy to Nest on port 4000 (same origin, no CORS); set VITE_API_URL only to hit a remote API (e.g. production). Production builds default to https://api.aidconnect.net. For recent-donations, add data-demo="true" only when you want static sample rows (no API); omit it to load live donations for data-campaign-id. Frequency options (e.g. monthly) come from each campaign's published API settings (see GET /campaign/getCampaignById/<id> — many campaigns only list e.g. one-time + quarterly).

Campaign card

Donate button

Goal meter

Inline form

Donation tiers (opens dialog with preset amount)

Recent donations