Tracking new books in Rhetoric & Writing, Composition Studies, Technical Communication, and related disciplines. Vist rhetorlist.net.
The public/ folder contains all files for the production website:
index.html- Main pagesearch.html- Search pageabout.html- About pagesubmit.html- Submission page*.json- Book data files (single source of truth)css/- Stylesheetsjs/- JavaScript filescovers/- Book cover imagesfeed.json- JSON feedrhetorlist-og.png- Open Graph image
To deploy: Upload the contents of the public/ folder to your web server.
Files in the root directory are for local development only:
book-manager.html- Web-based tool for adding and editing booksserver.js- Node.js server (serves public folder + book manager)package.json- Node.js dependenciesmanage_urls.py- Python script to scan for dead links and update publisher URLsmatch-and-process-covers.sh- Script for processing book covers
Important: The book manager and scripts write directly to public/*.json - no syncing needed!
The book manager lets you add or edit books, update descriptions, and manage cover images.
-
Install dependencies:
npm install
-
Start the server:
npm start
-
Open in browser:
http://localhost:4000/book-manager.html
- Add a new book or select an existing one
- Update metadata, descriptions, and cover images as needed
- Save to update the JSON file directly in
public/
When you've finished editing, deploy the public/ folder to your production server. Changes are saved directly to the JSON files in public/. (I'm doing this with Github actions, described below.)
When you add a new book with a publication date in the current year, the server also prepends an entry to public/feed.json.
- Upload a cover image in the book manager
- The server matches it against books without covers
- The server resizes/optimizes the image and saves it to
public/covers/ - The matching book entry is updated with the new
coverImagepath
- Single source of truth: All JSON files live in
public/ - Editor writes directly: No copying or syncing required
- Deploy: Just upload the
public/folder contents to your server
GitHub Actions automatically uses git subtree to push the public/ folder contents to a production branch when you push to main.
First time setup on server:
cd /var/www/html
git clone -b production --single-branch https://github.com/yourusername/yourrepo.git .To update (simple git pull!):
cd /var/www/html
git pullHow it works:
- You edit locally and push to
mainbranch - GitHub Action uses
git subtree push --prefix public origin productionto update the production branch - The
productionbranch contains ONLY production files (no dev files!) - Server only tracks
productionbranch, sogit pullalways gets the latest production files - Unlike force-push, subtree maintains proper git history so pulls work cleanly
manage_urls.py- Manage publisher URLs in JSON filesmatch-and-process-covers.sh- Process and match book cover imagesdeploy.sh- Deploy public folder to production server
- Node.js (for the local server)
- npm packages:
express,multer - Python 3 (for cover matching)
- ImageMagick (for cover resizing/optimization)