Wellspring is a polished, 5-page website prototype built for NGOs and nonprofit organizations. It was designed as a client-pitch template β a way to demonstrate, in a single running demo, exactly what a modern nonprofit web presence can look and feel like: donation flows, volunteer sign-ups, campaign tracking, and a transparent "About" story β all wrapped in a clean, accessible UI.
The problem it solves: Most NGOs either have outdated, static websites or no online donation/volunteer infrastructure at all. Wellspring provides a realistic, ready-to-demo front-end that developers and agencies can use as a starting point or sales asset β without needing a backend to show real functionality.
The entire app runs client-side only. A custom useLocalStorage hook and a simulated mockApiCall utility handle "persistence" for donations, volunteer applications, and contact messages β meaning the whole experience feels real, with zero server setup required.
- π Home Page β animated impact counters, hero section, core pillars, and story previews
- π About Page β mission/vision split, organizational timeline, team grid, and fund transparency bars
- π― Campaigns Page β filterable project grid with a donation modal that updates funding progress live
- π Get Involved Page β a 3-step validated volunteer application form, an openings accordion, and masonry-style testimonials
- π³ Contact & Donate Page β validated contact form, location/map placeholder, and a one-time/monthly donation checkout with a mock confirmation screen
- πΎ Mock Backend β simulated async API calls +
localStoragepersistence, so donations, applications, and messages "save" realistically in the browser - π± Fully Responsive β built mobile-first with Tailwind's utility classes
- π¨ Easily Re-skinnable β swap colors, fonts, and copy via config files to reuse for any client pitch
| Category | Technology |
|---|---|
| Frontend Library | React 18 |
| Build Tool | Vite |
| Styling | Tailwind CSS (custom design tokens) |
| Routing | React Router |
| Icons | Lucide React |
| State/Persistence | Custom useLocalStorage hook + mock async API layer |
| Images | Unsplash (free-to-use, via direct URLs) |
wellspring/
βββ src/
β βββ components/ # Reusable UI components (navbar, cards, modals, etc.)
β βββ pages/ # Route-level pages (Home, About, Campaigns, GetInvolved, Contact)
β βββ hooks/ # Custom hooks (e.g. useLocalStorage)
β βββ data/ # Mock data (mockData.js) β campaigns, team, testimonials
β βββ utils/ # Helper functions (mockApiCall, formatters, etc.)
β βββ main.jsx # App entry point
βββ index.html # HTML entry template
βββ tailwind.config.js # Custom design tokens (colors, fonts, spacing)
βββ postcss.config.js # PostCSS configuration
βββ vite.config.js # Vite build configuration
βββ package.json # Project dependencies & scripts
βββ README.md # You are here
Note: Exact file names within
src/may vary slightly β check the live file tree for the most current layout.
Follow these steps to get Wellspring running locally:
1. Clone the repository
git clone https://github.com/smritiesharma/wellspring.git
cd wellspring2. Install dependencies
npm install3. Run the development server
npm run devThen open the printed local URL in your browser (usually http://localhost:5173).
4. Build for production
npm run build
npm run previewπ‘ Tip: No environment variables, API keys, or database setup are needed β the entire demo runs in-browser.
Once running, you can explore the app just like a real visitor would:
- Navigate to
/campaignsand click "Donate" on any project card β watch the funding progress bar update live. - Go to
/get-involvedand fill out the multi-step volunteer form β your submission is saved tolocalStorage. - Visit
/contactto submit a message or simulate a one-time/monthly donation checkout.
To re-skin the demo for a specific client pitch, edit:
// tailwind.config.js β update brand colors & fonts
theme: {
extend: {
colors: {
primary: '#YOUR_BRAND_COLOR',
},
},
}// src/data/mockData.js β update campaigns, team members, and testimonials
export const campaigns = [
{ title: "Clean Water Initiative", goal: 10000, raised: 4200 },
// add your own campaigns here
];Note: All "backend" data resets if you clear your browser's site data β this is intentional, since Wellspring has no real server or database.
- Connect a real backend (Node/Express or Firebase) for persistent donations & applications
- Integrate a real payment gateway (Stripe/Razorpay) for live donation testing
- Add automated tests (Vitest + React Testing Library)
- Add dark mode support
- Deploy a live demo link (Vercel/Netlify) for instant preview
- Add i18n support for multi-language NGO outreach
Contributions, issues, and feature requests are welcome! Feel free to check the issues page or open a pull request.
This project is open source.
Made with π to help NGOs tell their story online.