Skip to content

Latest commit

 

History

104 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

book  BookIt!  book

Helping people finish what they're reading

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!

Technologies Used

Getting Started

Environment variables

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 (optional admin UI)

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).

How to run it locally

  1. Put ENABLE_ADMINJS=true in .env (with a valid DATABASE_URL so Mongoose can reach your DB).
  2. Start the backend: node server.js (API on http://localhost:3001 by default), or npm run server if you want a fresh npm run build first.
  3. 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.

Security notes

  • 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 set ALLOW_ADMINJS_IN_PRODUCTION=true. Avoid that on any host reachable from the internet unless you fully understand the risk.

Future Enhancements

  • 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

About

A React app for tracking and motivating your book reading. 📚

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages