Skip to content

Goodreads but better. Built on top of Bluesky.

License

Notifications You must be signed in to change notification settings

nperez0111/bookhive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

361 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐝 BookHive

GitHub license Build workflow status GitHub commit activity GitHub contributors


Goodreads, but better, built on Bluesky.

  • OAuth with Bluesky with session storage, and persistence
  • Defined Lexicons for books (with reviews, ratings, etc)
  • Displaying a feed of new books & reviews from the firehose
  • Works without JavaScript, but has some dynamic features
  • All data is stored in your PDS, and can be used by other apps

I'll be posting updates on this Bluesky thread to share my progress, but this is usable right now on https://bookhive.buzz.

📚 Vision

Goodreads has held the market for a long time, without improving their user experience, and with actively hampering their API access. I wanted to make a decentralized, Bluesky-based alternative to Goodreads.

The goal is to:

  • Manage your read & want to read books
  • Have a much nicer UI/UX than Goodreads
  • "Buzz" about the books with friends with Bluesky comments
  • Be decentralized, take your books to other apps if you want to!

Have a feature request? Open an issue!

🧑‍💻 Development

To install dependencies:

pnpm install

Copy .env.example to .env and fill in the values.

To run:

pnpm run dev

Running Tests

# Run all tests
pnpm test

# Run tests in watch mode
pnpm test

# Run tests once
pnpm test:run

# Run tests with UI
pnpm test:ui

🏗️ Architecture

  • Backend: Hono with AT Proto for OAuth
  • Frontend: Mostly static HTML, with some Hono JSX for dynamic content (Fast as possible)
  • Database: SQLite, with Kyesly as the ORM

🗄️ Weekly database export (GitHub Actions artifact)

This repo includes a workflow that can fetch a sanitized SQLite export from your running BookHive instance and upload it as a GitHub Actions artifact (weekly cron + manual trigger).

  • Server endpoint: GET /admin/export
    • Requires EXPORT_SHARED_SECRET to be set
    • Request header: Authorization: Bearer <EXPORT_SHARED_SECRET>
    • Returns a .tgz containing db.sqlite, kv.sqlite (with auth tables excluded), and manifest.json
  • Workflow: .github/workflows/database-export.yml
    • Configure GitHub repo secrets:
      • BOOKHIVE_EXPORT_URL (e.g. https://bookhive.example.com/admin/export)
      • BOOKHIVE_EXPORT_SHARED_SECRET

About

Goodreads but better. Built on top of Bluesky.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors 6

Languages