BookIt! is a React app to help users track and motivate their reading progress and find their next great read with AI-generated book recommendations. Users can create an account to access full CRUD functionality using RESTful APIs to create books and bookshelves, pin them to prioritize, see their progress and cumulative reading stats, and be motivated to pick up that book! Google Books API provides full book information and beautiful cover images. Users can even get custom, AI-generated recommendations using the Claude API!
Â
Â
Â
Â
Â
Â
Â
- Claude API (Anthropic)
- Google Books API
- React-Select
- AdminJS
- Heroku
- Trello planning board with user stories
- ERD
- Wireframes
- Deployed Version — demo login if available:
demo@demo.com(password length rules apply only to new sign-ups; older accounts may still use shorter passwords).
| Variable | Purpose |
|---|---|
DATABASE_URL |
MongoDB connection string |
SECRET |
JWT signing secret |
CLAUDE_API_KEY / CLAUDE_MODEL |
Anthropic API for book recommendations |
GOOGLE_BOOKS_API_KEY |
Google Books search (server-side) |
ENABLE_ADMINJS |
Set to true to run the optional AdminJS server (local dev) |
ALLOW_ADMINJS_IN_PRODUCTION |
Must be true together with ENABLE_ADMINJS for AdminJS when NODE_ENV=production (avoid on public hosts) |
TRUST_PROXY |
Set to 1 behind a reverse proxy (other than Vercel) so rate limits use the real client IP |
VERCEL |
Set automatically on Vercel; enables trust proxy for rate limiting |
New accounts require a password of at least 8 characters (bcrypt cost 12).
AdminJS is a separate small Express app that edits User, Book, and Bookshelf in MongoDB through a browser UI. It only starts when you run node server.js (or npm run server) as the main process—not when the app is only loaded as a module (e.g. Vercel’s api/index.js).
- Put
ENABLE_ADMINJS=truein.env(with a validDATABASE_URLso Mongoose can reach your DB). - Start the backend:
node server.js(API onhttp://localhost:3001by default), ornpm run serverif you want a freshnpm run buildfirst. - Open
http://localhost:8000/admin— AdminJS listens on port 8000 and mounts the UI at/admin.
You should see a log line like: AdminJS started on http://localhost:8000/admin.
- The Admin router is not wired to BookIt’s JWT auth; treat it as trusted-network / local-dev only.
- If
NODE_ENV=production, AdminJS will not start unless you also setALLOW_ADMINJS_IN_PRODUCTION=true. Avoid that on any host reachable from the internet unless you fully understand the risk.
- User profile, including profile image, reading speed, etc.
- Amazon, GoodReads, and Zotero API integrations
- Login with Google or Apple
- Add course and due dates for school
- Search and filter through user library
- Refactoring to move more functionality to front end, minimizing fetch calls
- Ability for user to rank books in top ten priority list
- Add reading streak functionality
