01 — Case study
JobSpace
A spreadsheet for your job hunt, with a real backend.

The problem
Most people track applications in a Google Sheet, and by the fiftieth row it is a mess. Resumes live in one folder, company notes in another, and nobody can tell which stage is holding them up.
JobSpace keeps the sheet and puts the rest around it: login, a document vault, company notes and charts, all in one workspace.
What it does
Your own columns
Every application has the usual fields plus any column you add. No schema change, no migration.
Document vault
Attach resumes and cover letters. Uploads are capped at 10 MB and limited to PDFs, documents and images.
Company notes
The same flexible columns for the companies you are watching, not just the jobs you applied to.
Charts of your pipeline
Built with Chart.js from your own application data.
Login with real sessions
Normal users and admins use separate routes with their own guards.
How it works
The React app calls an Express API with credentials. The API reads a session cookie, checks it against sessions stored in MongoDB, runs the route guard and then talks to MongoDB through Mongoose.
- 01React appReact Router · Axios · Chart.js
- 02Express APISessions · route guards · uploads
- 03MongoDBusers · applications · companies · documents · sessions
Engineering decisions
- 01
Cookie sessions, not JWTs
Sessions live in MongoDB, so logging out genuinely ends the session on the server. With a JWT I would have been waiting for it to expire.
- 02
A schema that bends where users need it to
Common fields are real fields. Anything a user adds goes into an open extension map, so new columns cost nothing.
- 03
Uploads are checked before they reach any code
File type and size are enforced in middleware, and passwords are hashed with bcrypt.
- 04
Two services, deployed separately
The front end and the API ship independently, so I can change one without touching the other.
Stack
- React 18
- Vite
- React Router
- Chart.js
- Node.js
- Express 5
- MongoDB
- Mongoose
- connect-mongo
- bcrypt
- Multer
Worth knowing
The API runs on a free hosting tier, so the first visit after a quiet spell can take a few seconds to wake up.