Case study · Experiment · Oct 2023
API Resume
My resume as a REST API: Postman-only, rate-limited, with a joke for anyone who POSTs.
- Role
- Solo
- When
- Oct 2023
- Repo
- JavaScript · ★ 0 · last push Oct 2023
01 The problem
A résumé is usually a PDF. As a small experiment, inspired by Eric Lake’s API résumé, I wanted mine to be something a developer could query.
02 What I built
Solo, in October 2023: a small Express app, with most of the interesting work in the middleware that decides who gets an answer.
03 Highlights
- Endpoints for experience, projects, education and contact, a combined /api/resume, and a menu at /api.
- Only answers Postman (other clients get a 403), rate-limits each IP per day (429), and meets any non-GET request with a joke 500.
- Express and Mongoose on MongoDB, deployed to Vercel with Vercel Analytics.
04 Key decisions
Middleware as the personality
The client check, the per-IP daily limit and the joke for non-GET requests all run ahead of the routes, so each section’s route stays a plain read.
Classic layers
Routes, controllers and Mongoose models per résumé section, one file each.
05 Architecture
- 01PostmanThe only client allowed
- 02MiddlewareClient check, daily limit, easter egg
- 03Routesexperience, projects, education…
- 04ControllersOne per section
- 05MongoDBMongoose models
One Express app; each request passes the middleware before reaching a section’s route.
06 Stack
- Node.js
- Express
- MongoDB
- Mongoose
- Vercel
07 Links & sources
The project’s links and the public sources this write-up draws on.
08 Also on GitHub
- v2
- fullstack-portfolioA full stack portfolio made using React, Sass, and Sanity
- movie_websitePersonal movies from Firebase database to full-stack web application
- mathcheckTries to find all open assignments in Childsmath for course 2Z03 and send a SMS to your number. Uses Selenium and Python.
- Automate-runtimes-genres-from-movie-titlesRead google sheets database of movie titles and write runtimes and genres, from IMDB, into the database