A minimalist bookshelf built with SvelteKit and TypeScript
⚠️ Building in public: This bookshef is currently in its initial phase, and what is being published is only its first version, far from the desired result.
Demo: https://juanchiparra.github.io/svelte-bookshelf/
svelte-bookshelf/
├── src/
│ ├── lib/
│ │ ├── components/
│ │ │ ├── Filters.svelte
│ │ │ └── Shelf.svelte
│ │ ├── data/
│ │ │ └── books.csv # your Goodreads export goes here
│ │ ├── styles/
│ │ │ ├── global.css
│ │ │ └── variables.css
│ │ ├── utils/books.ts # covers, normalization, ISBN helpers
│ │ ├── constants.ts
│ │ ├── types.ts
│ │ └── index.ts
│ ├── routes/
│ │ ├── +page.server.ts # loads/parses CSV at build time
│ │ └── +page.svelte # filters, sorts, renders gallery
│ ├── app.html
│ └── app.d.ts
├── static/
│ └── no-cover.svg # local fallback cover
├── package.json
├── svelte.config.js
├── tsconfig.json
└── vite.config.ts
# Clone this repository
git clone https://github.com/juanchiparra/svelte-bookshelf.git
cd svelte-bookshelf
# Install the dependencies
npm install
# Start the development server
npm run dev
You can export your library from Goodreads and drop it into this project:
.csvbooks.csvsrc/lib/data/books.csvCover resolution follows a clear fallback chain to avoid broken images:
userCover or Cover column:/covers/xyz.jpg)https://covers.openlibrary.org/ using default=false so a missing image returns a 404 cleanlyno-cover.svg is usednpm run devnpm run buildnpm run previewnpm run deployContributions are welcome! If you encounter a problem or have an idea to improve the project, open an issue or send a pull request.