imajij/parallel-dashboard
Parallel — Internship Dashboard
Manage two (or more) remote internships in parallel: track projects through a flow, log progress, record blockers, post updates, and log hours. React + Express + MongoDB, single login, responsive (laptop + mobile).
client/ Vite + React UI (the Parallel design)
server/ Express API + Mongoose models + JWT auth1. Install
npm run install:all2. Configure the server
cp server/.env.example server/.envFill in server/.env:
- MONGO_URI — your MongoDB Atlas connection string (Atlas → cluster → Connect → Drivers). Add a database name, e.g.
…/parallel. In Atlas → Network Access, allow your IP (or0.0.0.0/0to reach it from anywhere). - JWT_SECRET — any long random string.
- ADMIN_EMAIL — the email you'll log in with.
- ADMIN_PASSWORD_HASH — generate from your chosen password:
npm run hash -- "your-password"Paste the printed hash as the value.
3. (Optional) Seed demo data
Populates two example internships with projects/tasks/blockers/hours so the dashboard isn't empty. Clears existing data first.
npm run seed4. Run (development)
npm run dev- API: http://localhost:4000
- App: http://localhost:5173 ← open this, log in with your email + password.
No Atlas yet / want a local DB?docker compose up -dand setMONGO_URI=mongodb://localhost:27017/parallelinserver/.env.
5. Production / "on the go"
Build the client and let the server serve it:
npm run build # outputs client/dist
npm start # serves API + app on PORT (default 4000)Deploy server/ to any Node host (Render, Railway, Fly, a VPS). Set the same env vars there, run npm --prefix client install && npm run build in the build step, then npm start. Point your phone's browser at the deployed URL — same login works everywhere.
6. Deploy with Docker (recommended)
One image builds the client and serves it from the API on port 7860.
docker build -t parallel .
docker run -p 7860:7860 \
-e MONGO_URI="your-atlas-uri" \
-e JWT_SECRET="long-random-string" \
-e ADMIN_EMAIL="you@example.com" \
-e ADMIN_PASSWORD_HASH="$(npm run --silent hash -- 'your-password')" \
parallelOpen http://localhost:7860.
Hugging Face Spaces
This works on a Docker Space (not a static one).
- Create a new Space → SDK: Docker (blank template).
- Push this repo to the Space (the YAML front-matter at the top of this README tells HF to build the
Dockerfileand expose port7860). - Space → Settings → Variables and secrets, add as secrets:
MONGO_URI,JWT_SECRET,ADMIN_EMAIL,ADMIN_PASSWORD_HASH. - In MongoDB Atlas → Network Access, allow
0.0.0.0/0(Spaces have no fixed IP). - The Space builds and serves the app — open it on your laptop or phone.
GitHub Pages won't work — it only serves static files, so there's no Node server or database to run the API/login. Use the Docker Space (or any Node host) instead.
Data model
Internship → Project (status = the flow: backlog → active → review → blocked → done; plus a progress %) → Task, Blocker, Update. HoursLog powers the weekly chart, program rings, streak and focus calendar.
It's a single-user app (one login), built multi-user-ready on the data side.
