Project monitoring and review by the Chief Minister's Office (CMO) using satellite imagery
BusinessTypeScript · CSSGitHub @arun8340OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Verification layer for government infrastructure projects in Rajasthan and Maharashtra: every project has a site, dated satellite / drone / field imagery, progress history, issues and directives. See PROJECT_BRIEF.md for the full scope.
Next.js 16 (App Router) · TypeScript · Tailwind v4 · shadcn/ui (Base UI) · Prisma 7 + SQLite (better-sqlite3 adapter) · next-intl (English / हिन्दी / मराठी)
npm install # also runs `prisma generate`
cp .env.example .env # then set AUTH_SECRET (see below)
npm run db:migrate # create / update the SQLite database
npm run db:seed # demo data + real site imagery
npm run dev # then open a portal (below)
| Portal | Local address | Who signs in |
|---|---|---|
| Rajasthan | http://rj.localhost:3000 | Rajasthan users only |
| Maharashtra | http://mh.localhost:3000 | Maharashtra users only |
| Admin | http://admin.localhost:3000 | Admin only — the one place both states are visible |
| Main page | http://localhost:3000 | Public: lists the states and links to each state's sign-in |
The main page shows Rajasthan and Maharashtra (plus greyed-out "Coming soon" states from
config/upcoming-states.ts) and never links to the admin portal, which stays an internal address.
During development http://localhost:3000/portals lists every portal, admin included. *.localhost addresses work in any
browser with no setup. A state portal never shows or links to the other state; a user of one state can't
sign in on the other's portal, and sessions only work on the portal that issued them.
For production, point each address at the same deployment and set them in .env:
PORTAL_HOST_RJ="rajasthan.cmo-monitor.in"
PORTAL_HOST_MH="maharashtra.cmo-monitor.in"
PORTAL_HOST_ADMIN="admin.cmo-monitor.in"
PORTAL_HOST_MAIN="cmo-monitor.in"
Unknown addresses get "Not found". Behind a reverse proxy, forward the public host (X-Forwarded-Host).
npm 11 blocks dependency install scripts unless approved. The ones this project needs (
better-sqlite3,prisma,@prisma/engines,esbuild,unrs-resolver) are already listed underallowScriptsinpackage.json.
AUTH_SECRET encrypts the login session cookie. Generate one with openssl rand -base64 33 and paste it
into .env. Changing it signs everyone out.
Useful scripts:
| Script | What it does |
|---|---|
npm run db:seed | Wipes and re-seeds all data (safe to re-run) |
npm run db:reset | Drops the DB, re-applies migrations and re-seeds |
npm run db:studio | Opens Prisma Studio to browse the data |
npm run check:scopes | Verifies each demo user sees only the data in their scope |
npm run geo:build | Regenerates the district boundary files in public/geo/ |
npm run imagery:migrate | One-off: moves imagery from the old public public/uploads/ into private storage (keeps all data) |
All demo users have the password Demo@123. Each portal's login page has a clickable "Demo accounts"
list with only that portal's accounts; hide it with NEXT_PUBLIC_SHOW_DEMO_ACCOUNTS="false" in .env.
Admin: [email protected] on the admin portal.
| Role | Rajasthan portal | Maharashtra portal |
|---|---|---|
| CM / CMO / Chief Secretary | [email protected] | [email protected] |
| Department Head | [email protected] (Roads & Buildings) | [email protected] (Roads & Buildings) |
| DoIT – Imagery desk | [email protected] | [email protected] |
| District Collector | [email protected] | [email protected] |
| Field Officer | [email protected] | [email protected] |
WITHOUT_IMAGERY in prisma/seed.ts). The six real before/after image sets (four from Jaipur, two from Mumbai) are each
used once in Rajasthan (Jaipur, Jodhpur) and once in Maharashtra (Mumbai Suburban, Mumbai City, Pune, Nagpur);
the copies carry local project names and locations, but the screenshots show the original site. prisma/seed-data/projects.ts
holds 65 projects; set ONLY_IMAGED_PROJECTS = false in prisma/seed.ts to seed them all.prisma/seed-data/ — edit those files to change names, budgets or statuses.This is the beginning of the README. Read the rest at the original. Read the full README ↗