TL;DR: Mooja centralizes verified protest events and gives NGOs tools to organize effectively — solving fragmentation, mistrust, and low turnout caused by using scattered tools like Facebook, WhatsApp, and Twitter.
- Live Mobile Demo: Open in Appetize (no install needed)
- Main Website: mooja.app
- Tech Repos: Mobile • Server • Admin Dashboard
- Fragmentation: Protest details are scattered across multiple apps → Mooja unifies them in one feed.
- Mistrust: Events come only from verified organizations → protestors know what’s legit.
- Coordination Chaos: Organizations get a dashboard to manage events, volunteers, and logistics.
| Component | Purpose | Tech |
|---|---|---|
| Mooja Mobile | Flutter app for protestors & organizers. Login-free feed + org dashboard. | Flutter, Dart, BloC |
| Mooja Server | REST API + org verification + protest management. | NestJS, Prisma, PostgreSQL (Supabase) |
| Mooja Admin | Next.js dashboard for reviewing org applications & managing data. | Next.js, Supabase, shadcn/ui |
You can spin up Mooja locally in under 5 minutes using Railway.
git clone https://github.com/MoojaLabs/mooja-server.git
cd mooja-server
# Install dependencies
npm install
# Setup environment
cp .env.example .env
# Database
npx prisma generate
npx prisma migrate dev
npm run prisma:seed
# Start dev server
npm run start:devYour API will run at http://localhost:3000/api.
git clone https://github.com/MoojaLabs/mooja-mobile.git
cd mooja-mobile
flutter pub get
# Create .env in project root
API_BASE_URL=http://localhost:3000/api
flutter rungit clone https://github.com/MoojaLabs/mooja-admin.git
cd mooja-admin
npm install
# Setup environment
cp .env.example .env.local
npx prisma db push
npm run devDashboard will be available at http://localhost:3001.
- Public Feed (No Login): Country-based filtering, infinite scroll, verified-only events.
- Org Verification Flow: Social media handle submission + invite-code validation.
- Org Dashboard: Event creation, management, and analytics (in development).
- Admin Panel: Approve/reject orgs, manage protests, issue invite codes.
- Secure: JWT auth, Supabase storage, role-based org access.
- Scalable: Modular NestJS server + Prisma ORM + PostgreSQL.
- Cross-platform: iOS + Android from a single Flutter codebase.
- Dev-friendly:
.envbased config, Railway deployment ready, Prisma studio for DB.
Licensed under GNU AGPL-3.0 — open-source.