A modern, responsive charity website built with Vite + React, styled with Tailwind CSS, and backed by Supabase for real-time data and auth.
| Layer | Tool |
|---|---|
| Framework | React 18 |
| Build tool | Vite 5 |
| Styling | Tailwind CSS 3 |
| Routing | React Router v6 |
| Database | Supabase (Postgres) |
| Storage | Supabase Storage |
| Auth | Supabase Auth |
| Deployment | Vercel / Netlify |
lumina-foundation/
├── src/
│ ├── pages/
│ │ ├── Home.jsx
│ │ ├── About.jsx
│ │ ├── Work.jsx
│ │ ├── Donate.jsx
│ │ └── admin/
│ │ ├── Admin.jsx ← orchestrates session
│ │ ├── AdminLogin.jsx
│ │ └── AdminPanel.jsx
│ ├── components/
│ │ ├── Navbar.jsx
│ │ ├── Footer.jsx
│ │ ├── WorkCard.jsx
│ │ └── Notification.jsx
│ ├── lib/
│ │ └── supabase.js ← all DB/auth/storage helpers
│ ├── App.jsx ← router + notification context
│ ├── main.jsx
│ └── index.css ← Tailwind + brand tokens
├── .env.example ← safe to commit
├── .env.local ← NEVER commit this
├── tailwind.config.js
├── vite.config.js
└── supabase-setup.sql ← run once in Supabase SQL editor
git clone <your-repo-url>
cd lumina-foundation
npm install- Create a project at supabase.com
- Go to SQL Editor → paste and run
supabase-setup.sql - Go to Storage → New Bucket → name:
project-images→ Public: ON - Go to Authentication → Users → Add User → set the client's email + password
cp .env.example .env.localOpen .env.local and fill in your values from Supabase → Settings → API:
VITE_SUPABASE_URL=https://your-project-ref.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key-here
⚠️ .env.localis gitignored. Never commit it. The anon key is safe to use client-side — Supabase RLS policies control what it can access.
npm run devVisit http://localhost:5173
- Push your repo to GitHub
- Go to vercel.com → Import project
- Add environment variables in the Vercel dashboard:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Deploy. Every
git pushauto-deploys.
- URL:
/admin - Login with the email/password you created in Supabase Auth
- You can add projects (with image upload), view, and delete
- Changes are instantly live on the public site
- Wire up real payment gateway (Stripe / Paystack / Flutterwave) in
Donate.jsx - Add project edit functionality in
AdminPanel.jsx - Add individual project detail pages (
/work/:id) - Replace team placeholder avatars with real photos
- Add mobile hamburger nav
- Add a blog / news section
- Add fundraising goal / progress bar on Donate page
- Connect social media links in Footer
- Add a contact form