🏁 Project archived. This repository is now read-only. All content management continues via the admin panel. The live site at ruclub.rweb.site remains fully functional — built to last.
Environmental Sustainability Club at Motherland Secondary School, Pokhara, Nepal.
Transforming environmental awareness into collective action for a sustainable Pokhara.
RU Club Motherland is a student-led environmental initiative at Motherland Secondary School. We organize tree plantations, waste management drives, community clean-ups, and awareness campaigns — working toward a zero-waste ecosystem in Pokhara.
Website: ruclub.rweb.site
| Category | Technology |
|---|---|
| Frontend | React 19 + TypeScript 6 |
| Build | Vite 8 + Tailwind CSS v4 |
| Routing | React Router DOM v7 |
| Backend | Supabase (Postgres + Storage) |
| Animations | Framer Motion + AOS |
| Carousel | Swiper 12 |
| SEO | react-helmet-async |
| Analytics | Google Analytics GA4 (G-HWFPCZ4W1Q, G-HJTLGVDNYK) |
| State | React hooks (no state library) |
| Hosting | Vercel (auto-deploy from main) |
/
├── public/ → Static assets (brand, icons, partners, mission images)
├── src/
│ ├── App.tsx → All routes, lazy-loaded
│ ├── main.tsx → Entry point
│ ├── index.css → Tailwind v4 + theme tokens + animations
│ ├── data/ → Hardcoded static site text (never from DB)
│ ├── lib/ → Supabase queries, analytics, utils
│ ├── hooks/ → Theme, data fetching, DB status, page tracking, site config
│ ├── components/ → Layout, SEOHead, CookieConsent, ErrorBoundary, Navbar, Footer
│ ├── pages/ → 13 page components (lazy-loaded)
│ └── types/ → TypeScript interfaces
├── supabase-migration.sql → Full schema + seed data (dynamic tables only)
├── .env.example
├── vercel.json
├── AGENTS.md
├── README.md
└── LICENSE
# 1. Install dependencies
npm install
# 2. Copy env template and fill in Supabase credentials
cp .env.example .env
# Edit .env with your Supabase URL and anon key
# 3. Run DB migration in Supabase SQL Editor (supabase-migration.sql)
# 4. Start dev server
npm run dev
# 5. Build for production
npm run build| Route | Page | Data Source |
|---|---|---|
/ |
Home | Supabase (stats, partners, missions) + hardcoded text |
/missions |
Missions | Supabase (getMissionList) |
/mission/:slug |
Mission Detail | Supabase (getMissionInfo, getMissionImages) |
/gallery |
Gallery | Supabase (getAllGalleryImages — batch query) |
/announcements |
Announcements | Supabase (getAnnouncementList) |
/announcement/:id |
Announcement Detail | Supabase (getAnnouncementDetail) |
/members |
Members | Supabase (getMembers) |
/contact |
Contact | Supabase (submitContactForm) + Formspree |
/privacy |
Privacy Policy | Static |
/license |
License | Static |
/consent |
Cookie Policy | Static |
/secret-garden |
About Me | Static |
* |
404 | Static |
All dynamic content is fetched from Supabase at runtime. Static site text (hero, intro, features, CTA, mission heading) is hardcoded in src/data/index.ts — never from DB.
getStats()— homepage statisticsgetPartners()— partner logos and linksgetMembers()— teacher advisors, core team, general membersgetMissionList()— all active missions (show: true)getMissionInfo(slug)— single mission detail with stats/timeline/partnersgetMissionImages(slug)— mission image gallerygetAllGalleryImages()— batch query all mission images (handles 100+)getAnnouncementList()— all active announcements (active: true)getAnnouncementDetail(id)— single announcement full detailsubmitContactForm()— contact form submission
- Insert into Supabase
missionstable withshow: true - Upload images to Supabase Storage bucket
ruclub/static/assets/mission/mission-NN/ - Add images to
mission_imagestable withmission_idmatching
- Insert into Supabase
announcementstable withactive: true - Upload image to Supabase Storage bucket
ruclub/static/assets/announcements/
Required in .env:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
npm run dev # Start Vite dev server
npm run build # TypeScript check + production build
npm run preview # Preview production build locallyMIT — see LICENSE.
Made with care by Sincere Bhattarai (@VoidX3D) — Student at Motherland Secondary School, Class 10.
- Website: ruclub.rweb.site
- GitHub: github.com/RU-Club-Motherland
- Facebook: RU Club Motherland
- Instagram: @rucl.ub
- Email: ruclubmotherland@gmail.com