A self-hosted MongoDB management dashboard with a TypeScript React frontend and an Atlas-compatible HTTP REST API.
- Backend: Node.js + Express (server.js)
- Spawns
mongodon port 27018 (127.0.0.1 only) via child_process - Serves the React dashboard as static files from
client/dist/ - Builds the frontend automatically on first run if
client/dist/doesn't exist
- Spawns
- Frontend: React 18 + TypeScript + Vite + Tailwind CSS (in
client/)- Built to
client/dist/(git-ignored) - Session-based authentication (express-session)
- Built to
- Database: MongoDB 7 (Nix), data stored in
./data/db/ - Modules:
db.js,middleware/auth.js,routes/auth.js,routes/apps.js,routes/stats.js,routes/databases.js
node server.js
This starts everything:
- Builds frontend (only on first run when
client/dist/is missing) - Spawns mongod on 127.0.0.1:27018
- Connects MongoDB driver
- Serves the dashboard on port 5000
| Page | URL | Description |
|---|---|---|
| Login | /login |
Session-based auth |
| Dashboard | / |
Stats overview: apps, storage, server info |
| Apps | /apps |
List, filter, manage status |
| Create App | /apps/new |
Create a new database/app |
| App Detail | /apps/:id |
Connection strings, collections, danger zone |
| Databases | /databases |
Browse databases, collections, and documents |
| Docs | /docs |
Connection guides, code examples |
- Admin credentials: auto-generated on first run, printed to console once
- Credential file:
data/admin.json(git-ignored, mode 0600) - Session secret:
SESSION_SECRETenv var (falls back to default)
- Key file:
data/api_key.txt(git-ignored, mode 0600) - Override: Set
MONGODB_API_KEYenvironment secret
Base endpoint: /app/data-api/endpoint/data/v1/action/{action}
Auth: api-key: <key> header
Actions: findOne, find, insertOne, insertMany, updateOne, updateMany, deleteOne, deleteMany, aggregate
- Internal:
mongodb://127.0.0.1:27018/<database> - VPS/External:
mongodb://<user>:<pass>@<your-vps-ip>:27017/<database>?authSource=admin
After making changes to client/src/:
cd client && npm run buildThen restart the workflow.
server.jsβ main entry pointdb.jsβ MongoDB client singletonmiddleware/auth.jsβ session auth middlewareroutes/β auth, apps, stats, databasesclient/β React TypeScript frontenddata/api_key.txtβ HTTP API key (git-ignored)data/admin.jsonβ dashboard admin credentials (git-ignored)data/db/β MongoDB data directory (git-ignored)
- MongoDB is bound to 127.0.0.1 only (not publicly accessible)
- Admin credentials and API key never committed to git
data/directory is git-ignored- Session cookies are httpOnly, sameSite=lax