๐Ÿ“š How to install & use ShelfMate

ShelfMate catalogues your books, vinyl records and CDs using your phone camera and Claude AI. Choose your install method below, then follow the cataloguing steps.

1

Install Docker Desktop

Download and install Docker Desktop from docker.com โ€” it's free.

  • Mac: download the .dmg, drag to Applications, launch it
  • Windows: download the installer, run it, restart if asked
  • Linux: follow the instructions at docs.docker.com/engine/install

Wait until Docker Desktop shows "Docker is running" before continuing.

2

Download and unzip ShelfMate

Purchase and download ShelfMate from the download page and unzip it into a permanent folder โ€” somewhere like Documents/ShelfMate/ rather than Downloads, as Docker needs to find it each time you start.

3

Start ShelfMate

๐ŸŽ Mac โ€” .app installer: just double-click ShelfMate Launcher.app โ€” it starts ShelfMate and opens your browser automatically. No Terminal needed.
๐ŸŽ Mac โ€” zip install: double-click mac/Start ShelfMate.command in the shelfmate folder instead of using Terminal.
โš ๏ธ Important โ€” Mac .app users: wherever you put ShelfMate Launcher.app when you first double-click it, that's where ShelfMate will be installed. Choose a permanent location โ€” such as your Applications folder or Documents โ€” before running it for the first time. Moving it afterwards requires stopping Docker and restarting from the new location.
๐Ÿ’ก First run only: the browser opens automatically but you may see an empty page โ€” the database is initialising in the background. Wait 20โ€“30 seconds and refresh. Every start after that is instant.

Windows / Linux โ€” or if you prefer the command line on Mac โ€” open a Terminal or Command Prompt, navigate to the shelfmate folder, and run:

docker compose up -d

Docker sets everything up automatically โ€” database included. When it's done, open your browser and go to:

http://localhost:8585

phpMyAdmin is also available at http://localhost:8586 for importing your catalogue SQL.

โฑ The first run takes a minute or two to download. Every start after that is instant.
4

Set your editor password

Open app/config.php in any text editor and find this line:

define('SM_EDIT_PASS_HASH', password_hash('shelfmate', PASSWORD_DEFAULT));

Replace shelfmate with your chosen password. Anyone can browse your catalogue โ€” only someone with this password can edit it.

5

Photograph, zip and upload to Claude

See Cataloguing your collection below โ€” it's the same for everyone.

6

Import the SQL Claude generates

phpMyAdmin (included)

Go to http://localhost:8586, select the shelfmate database, click the SQL tab, paste and click Go.

Command line

docker exec -i shelfmate_db mysql -u shelfmate -pshelfmate123 shelfmate << 'EOF' -- paste your SQL here EOF
โœ… The SQL uses INSERT IGNORE โ€” safe to re-run as many times as you like.

Already using BookBinder? Upgrade in minutes

Your entire catalogue moves across โ€” no re-photographing, no re-typing. Choose the route that matches how you installed BookBinder.

A

Route A โ€” Docker install (fresh ShelfMate database)

Use this if you installed BookBinder with Docker.

Step 1 โ€” Export from BookBinder

Go to BookBinder's phpMyAdmin at http://localhost:8586. Select your bookbinder database, click the Export tab and choose Custom export method. Then:

  • Under Tables โ€” check books and bookcases. For each, make sure only the Data column is checked โ€” leave Structure unchecked. This exports your data only, without the table definitions.
  • Under Data creation options โ€” check "INSERT IGNORE statements"

Click Export at the bottom to download the .sql file.

Step 2 โ€” Import into ShelfMate

Stop BookBinder first:

docker compose down

Start ShelfMate:

docker compose up -d

Go to http://localhost:8586 โ€” this is phpMyAdmin, included with ShelfMate. Select the shelfmate database in the left panel, click the Import tab, click Choose File, select your .sql file and click Go at the bottom of the page.

โœ… Done โ€” your full catalogue is in ShelfMate.
B

Route B โ€” Shared hosting (BookBinder tables in an existing database)

Use this if you added BookBinder's tables to an existing database such as SoleTrader or a shared hosting database.

Step 1 โ€” Export just the books and bookcases tables

In phpMyAdmin, select your database and click the Export tab. Choose Custom export method. Then:

  • Under Tables โ€” check only books and bookcases, uncheck everything else. For each, make sure only the Data column is checked โ€” leave Structure unchecked. This exports your data only, without the table definitions.
  • Under Data creation options โ€” check "INSERT IGNORE statements"

Click Export at the bottom to download the .sql file.

๐Ÿ’ก phpMyAdmin names the file after your database โ€” e.g. soletrader.sql. You can rename it if you like, but it doesn't matter when importing.

Step 2 โ€” Import into ShelfMate

ShelfMate on shared hosting: in phpMyAdmin select its database in the left panel, click the Import tab, click Choose File, select your .sql file and click Go at the bottom.

ShelfMate on Docker locally: go to http://localhost:8586 โ€” phpMyAdmin is included. Select the shelfmate database, click Import, choose your .sql file and click Go.

โœ… Done โ€” your full catalogue is in ShelfMate.
After import: your catalogue carries across including any genre assignments. The new ShelfMate fields โ€” condition, wishlist, purchase value and last read/played โ€” will be blank to start with. Fill them in gradually using the inline โœ๏ธ edit, or use Batch Edit to set condition or genre across a whole selection at once.

v1.0.0 installs only: if you installed v1.0.0 you'll have a sample book and bookcase. Delete the book first โ€” go to Browse, find "The Wind in the Willows", click โœ๏ธ then ๐Ÿ—‘ Delete. Then go to Bookcases, click โœ๏ธ Edit on "My First Bookcase" โ€” the ๐Ÿ—‘ Delete button will now appear. Then import your catalogue.

Bookcase photos: photos don't transfer with the SQL export โ€” they need to be re-uploaded. Log in, go to Bookcases and use the ๐Ÿ“ท Add photo button on each bookcase card.

Errors about duplicate entries during import are harmless โ€” entries that already existed are just skipped. Your data is fine.

Cataloguing your collection

These steps are the same whether you used Docker or a manual install. ShelfMate handles books, vinyl LPs and CDs equally well.

A

Take photos of your shelves and stacks

For best results:

  • One shelf per photo โ€” don't try to capture everything in one shot
  • Straight on โ€” stand directly in front, not at an angle
  • Good light โ€” natural daylight or overhead; avoid flash glare on spines
  • Fill the frame โ€” get close enough that spine text is readable
  • One wide-angle overview shot per bookcase โ€” useful for the bookcase card photo
๐Ÿ“ฑ Works for books, LP spines and CD stacks equally well. Claude can even read upside-down spines. iPhone or Android both work fine.
B

Zip the photos for each location

Group each bookcase or CD/LP stack's photos into a folder and zip it. Name it clearly:

  • bcase1_lounge_main.zip
  • lounge_lps_classical.zip
  • office_cds.zip

Mac: select photos โ†’ right-click โ†’ Compress.
Windows: select photos โ†’ right-click โ†’ Send to โ†’ Compressed folder.

๐Ÿ’ก You can do multiple stacks at once โ€” just zip them separately and upload together.
C

Open a new chat with Claude

Go to claude.ai and start a new chat. Paste this prompt:

I'm cataloguing my home collection using ShelfMate. I'll upload zipped photos of each bookcase, LP stack or CD stack and I need you to:

1. Read all the spines in the photos (books, LPs and CDs)
2. Generate SQL INSERT statements in this format:

INSERT IGNORE INTO books (title, author, category, sub_category, genre, bookcase, shelf, location_name, notes) VALUES
('Title Here', 'Artist/Author', 'Category', 'Sub-category or NULL', 'Genre or NULL', BOOKCASE_NUMBER, SHELF_NUMBER, 'Room Name', 'any notes');

Rules:
- category: Fiction, Non-Fiction, Music, Classical, Medical, Sailing, TEFL, Reference, Gardening, Cookery, Art, Humour, Games, Sport, Health, Poetry, Nature, Travel, DIY, Magazines
- sub_category for Music: CD or LP
- genre: for music use Jazz, Classical, Blues, Folk, Rock, Soul, Country, World etc. For fiction use Literary, Crime, Historical etc.
- shelf numbers count from top (1=top shelf), 0 = stacked flat
- bookcase number is the number I give you with each upload
- Use NULL for unknown authors/artists
- Flag unclear titles with 'Title unclear - check' in notes

After each stack, output the complete SQL block ready to paste into phpMyAdmin.

Ready โ€” I'll upload bookcase 1 now.
D

Upload your zip files to Claude

Drag your zip files into the Claude chat. Tell Claude which bookcase number each one is and what it contains:

These are bookcases 1, 2 and 3.
Bookcase 1 = Lounge main bookcase (books)
Bookcase 2 = Lounge LP stack by the hifi (vinyl records)
Bookcase 3 = Office CD rack (CDs)

Claude reads the spines and generates the SQL for each location.

๐Ÿ’ก If a title is hard to read, Claude flags it in the notes column so you can check the physical item later.
E

Add location photos (optional but lovely)

Log in and go to the Bookcases page. Upload an overview shot for each bookcase or stack โ€” it appears on the location card so you can see at a glance where something lives.

F

Browse, search and tidy up

On the Browse page you can:

  • Search by title or author/artist
  • Filter by bookcase or category using the sidebar
  • Expand categories with a โ–ถ arrow to filter by sub-category or genre
  • Sort by any column โ€” including Genre
  • Edit any item inline with the โœ๏ธ button (log in first)
  • Add items manually with the + Add Book button
  • Mark items as lent out with the borrower's name
  • Wishlist items you want to find
  • Export your catalogue or wishlist to CSV
  • ๐ŸŽฒ Random pick โ€” browse by category for something to read or listen to tonight
๐Ÿ’ก Items flagged as 'Title unclear' are worth a quick follow-up photo to Claude โ€” a clearer close-up usually does it.

Organising your music collection by genre

Genre is one of ShelfMate's most powerful features for music collectors โ€” here's the best way to use it.

G

Ask Claude to assign genres when cataloguing

The setup prompt above already includes genre. When uploading a stack of jazz LPs, tell Claude:

This is bookcase 7 โ€” my jazz LP collection.
Please set genre = 'Jazz' for all of these unless you can identify a different genre from the spine.

Claude will set Jazz as the default and override where it recognises something different (Classical, Blues etc.).

๐Ÿ’ก Works equally well for book genre โ€” "this is my literary fiction shelf, set genre = Literary Fiction unless clearly otherwise."
H

Batch assign genres after import

Already imported without genres? Use the Batch Edit panel in the Browse page โ€” no need to edit each item individually.

  1. Filter the list โ€” e.g. click Music in the sidebar, then LP under sub-category
  2. Narrow further if needed โ€” e.g. filter to a specific LP bookcase
  3. Click โš™ Batch edit this selection to expand the panel
  4. Set field: Genre, To value: Classical (or Jazz, Blues, Folk etc.)
  5. Click Apply to all N books and confirm
โšก This is the fastest way to genre-tag a large collection. Filter to your Classical LP bookcase, batch set genre to Classical in one click โ€” done. Repeat for each genre/location combination.
I

Browse and sort by genre

Once genres are assigned:

  • Click the Genre column header to sort your whole catalogue by genre โ€” all your Classical together, all your Jazz together
  • Click the โ–ถ arrow next to Music in the sidebar to expand genre sub-filters
  • Click a genre in the sidebar to filter to just those items
  • Combine with category filter โ€” e.g. Music โ†’ LP โ†’ Jazz for just jazz vinyl
๐Ÿ’ก Genre works for books too โ€” sort by genre to find all your Literary Fiction, or filter to Crime for a rainy afternoon.
J

Condition grading for vinyl

For vinyl collectors, the Condition field supports standard grades: Mint, NM, VG+, VG, Good, Fair, Poor.

You can add condition when editing any record inline (โœ๏ธ button), or set it during the Add Item form. Use the Purchase value field alongside condition for insurance records.

๐Ÿ’ก Batch edit can also set condition across a selection โ€” useful if you've just acquired a collection and want to mark it all as VG to start.

ShelfMate extras

A few features worth knowing about.

โ˜…

Wishlist

Mark any item as Wishlist status โ€” either when adding manually or via the inline edit โœ๏ธ. Wishlist items appear in the sidebar with a count, styled differently in the browse list so they stand out.

Export your wishlist to CSV โ€” useful to take to record fairs, second-hand bookshops or car boot sales.

โ˜…

Export to CSV

Go to the Export page (top nav). Filter by bookcase, category or wishlist, then download a CSV that opens in Excel, Numbers or Google Sheets.

Useful for insurance schedules, sharing your catalogue, or keeping an offline backup.

โ˜…

๐ŸŽฒ Random pick

Click ๐ŸŽฒ Random in the top nav. Filter by category if you want (Fiction only, Music only), then click the button โ€” ShelfMate picks something at random from your shelves. Shows title, artist/author, location and condition. Hit it again if you're not feeling it.

๐Ÿ’ก Great for breaking the "what shall I listen to tonight?" deadlock when you have 300 LPs to choose from.

Tips & things to know

Ready to get started?

๐Ÿ“š Get ShelfMate โ€” ยฃ10