A multi-user book tracking web application built with Laravel 11 and PHP 8.2. Manage your book collection, track reading progress, view statistics, and organize books with tags.
Live: www.leafmark.app
- Add, edit, and delete books manually or via external sources
- Reading status tracking (Want to Read, Currently Reading, Read)
- Reading progress with page tracking and history graphs
- Book ratings and reviews
- Series tracking with position ordering
- Multiple cover images per book (upload, reorder, set primary)
- Purchase tracking (date, price, currency, format)
- Bulk operations (delete, add/remove tags)
- Google Books API - Search by ISBN, author, or title
- Open Library API - Free, no API key required
- BookBrainz API - Additional metadata source
- Big Book API - Comprehensive book data
- Amazon Scraping - Import book data from Amazon URLs (DE/COM)
- Goodreads CSV Import - Import from Goodreads export files with duplicate detection
- Library Import (ZIP) - Restore a full library backup including books, covers, tags, and progress
- Export entire library as ZIP archive (books, covers, tags, progress, challenges)
- Import ZIP archives with preview and duplicate handling (skip, overwrite, keep both)
- Books and pages read per year with month-by-month breakdown
- Year-over-year comparison charts (Chart.js)
- Average rating, average days per book, average pages per day
- Longest/shortest book, best/worst reading month
- Top authors, language distribution, format breakdown
- Reading challenge progress integration
- Custom tags with color support
- Grid and table view modes (per shelf)
- Configurable table columns per shelf
- Per-page item count settings (10, 25, 50, 100)
- Series grouping view
- Yearly reading goals
- Automatic progress tracking based on finished books
- Individual book collections per user
- Admin dashboard with user statistics
- User management (create, edit, delete, toggle admin)
- First registered user becomes admin automatically
- Registration control: open, domain-restricted, or code-required
- Family accounts with join codes
- 6 languages: English, German, French, Italian, Spanish, Polish
- Configured via
APP_LOCALEin.env
- Password reset via email
- Email verification
- Cloudflare Turnstile CAPTCHA support (optional)
- Dynamic SMTP configuration via admin settings
- Backend: Laravel 11 + PHP 8.2
- Database: SQLite
- Frontend: Blade Templates + Tailwind CSS + Alpine.js
- Charts: Chart.js
- Deployment: Docker / Coolify
- Click Code > Codespaces > Create codespace on main
- Wait for the environment to build (~2 min)
- The app starts automatically at port 8000
See CODESPACES.md for details.
git clone https://github.com/roberteinsle/leafmark.git
cd leafmark
cp .env.example .env
php artisan key:generate
touch database/database.sqlite
php artisan migrate
php artisan storage:link
php artisan serve
# Access at http://localhost:8000See DEPLOY.md for detailed deployment instructions.
| Variable | Description | Required |
|---|---|---|
APP_KEY |
Laravel application key | Yes |
APP_LOCALE |
Application language (de, en, fr, it, es, pl) | Yes |
ADMIN_EMAIL |
Auto-admin assignment for this email | No |
GOOGLE_BOOKS_API_KEY |
Google Books API key | No |
BIGBOOK_API_KEY |
Big Book API key | No |
SMTP, Turnstile CAPTCHA, and API keys can also be configured via Admin > System Settings in the UI.
This project supports development with Claude Code. See CLAUDE.md for project context and conventions.
npm install -g @anthropic-ai/claude-code
claudephp artisan test # Run all tests
php artisan test --testsuite=Feature # Feature tests only
php artisan test --testsuite=Unit # Unit tests only
php artisan test --filter=test_example # Specific testContributions are welcome! Please open an issue or submit a pull request.
MIT License - see LICENSE for details.