{"id":33916848,"url":"https://github.com/guycorbaz/rbibli","last_synced_at":"2026-06-10T09:31:16.210Z","repository":{"id":324544507,"uuid":"1097033728","full_name":"guycorbaz/rbibli","owner":"guycorbaz","description":"Personal book management tool written in rust","archived":false,"fork":false,"pushed_at":"2025-12-12T11:19:14.000Z","size":531,"stargazers_count":1,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-13T13:30:47.823Z","etag":null,"topics":["book","books","rust-lang","slint-ui"],"latest_commit_sha":null,"homepage":"https://guycorbaz.github.io/rbibli/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guycorbaz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-15T12:14:46.000Z","updated_at":"2025-12-13T10:54:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/guycorbaz/rbibli","commit_stats":null,"previous_names":["guycorbaz/rbibli"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/guycorbaz/rbibli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycorbaz%2Frbibli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycorbaz%2Frbibli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycorbaz%2Frbibli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycorbaz%2Frbibli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guycorbaz","download_url":"https://codeload.github.com/guycorbaz/rbibli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycorbaz%2Frbibli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34146871,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["book","books","rust-lang","slint-ui"],"created_at":"2025-12-12T07:32:58.838Z","updated_at":"2026-06-10T09:31:16.181Z","avatar_url":"https://github.com/guycorbaz.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rbibli - Personal Library Management System\n\u003c!--  --\u003e\nA modern, full-featured personal library management system built entirely in Rust using Slint for the user interface. Designed for small-scale use (friends and family) with a focus on simplicity, data integrity, and flexible deployment options.\n\n## ✨ Features\n\n### Currently Implemented (Phase 3 - ~88% Complete)\n\n- **📚 Title Management** - Full CRUD operations with ISBN lookup via Google Books API\n- **📖 Volume Management** - Track multiple physical copies per title with unique barcodes\n- **✍️ Author Management** - Complete biographical information and title associations\n- **🏢 Publisher Management** - Company details and catalogs\n- **🎭 Genre Management** - Categorize your collection\n- **📚 Series Management** - Organize titles into series (e.g., Asterix, Harry Potter)\n- **📍 Location Management** - Hierarchical storage organization (House \u003e Room \u003e Shelf)\n- **👥 Borrower Management** - Track who you lend books to\n- **👪 Borrower Groups** - Organize borrowers with custom loan policies\n- **📅 Loan Management** - Barcode-based lending with automatic due dates\n- **📊 Statistics Dashboard** - Visual analytics for your library:\n  - Library overview (titles, volumes, authors, genres, active/overdue loans)\n  - Volumes per genre with bar charts\n  - Volumes per location\n  - Loan status breakdown\n- **🔍 Dewey Decimal Classification** - Manual code entry and categorization\n- **🌐 Multi-language Support** - Internationalization infrastructure ready\n\n### Architecture Highlights\n\n- **Title/Volume Separation** - Titles represent abstract book metadata, volumes are physical copies\n- **Barcode System** - Code 128 format for volume tracking (VOL-XXXXXX)\n- **Hierarchical Locations** - Organize storage with parent-child relationships\n- **Trust-Based Lending** - Simple loan management without complex restrictions\n- **Cross-Platform UI** - Native desktop now, WASM for web deployment later\n\n## 🛠️ Technology Stack\n\n### Frontend\n\n- **[Slint 1.14.1](https://slint.dev/)** - Declarative UI framework for native and web\n- **Rust** - Type-safe, memory-safe systems programming language\n- **Reqwest** - HTTP client for API communication\n- **WASM Optimization** - Configured for minimal binary size (~55MB -\u003e optimized)\n\n### Backend\n\n- **[Actix-web 4.11.0](https://actix.rs/)** - High-performance web framework\n- **[Tokio 1.47.1](https://tokio.rs/)** - Async runtime\n- **[SQLx](https://github.com/launchbadge/sqlx)** - Compile-time verified SQL queries\n- **MariaDB** - Production-grade relational database\n\n### Development Approach\n\n- **Native-first** - Develop as desktop app for faster iteration\n- **WASM-ready** - Same codebase will compile to WebAssembly for browser deployment\n- **Client-Server** - REST API backend with native/web frontend options\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- **Rust** (latest stable) - [Install from rustup.rs](https://rustup.rs/)\n- **MariaDB/MySQL** - [Installation guide](documentation/sqlx_installation.md)\n- **SQLx CLI** - For database migrations:\n\n  ```bash\n  cargo install sqlx-cli --no-default-features --features mysql\n  ```\n\n### Docker\n\nYou can run rbibli using Docker. Official images are available on Docker Hub:\n[https://hub.docker.com/r/gcorbaz/rbibli](https://hub.docker.com/r/gcorbaz/rbibli)\n\nExample `docker-compose.yml`:\n\n```yaml\nservices:\n  rbibli:\n    image: gcorbaz/rbibli:latest\n    ports:\n      - \"8080:8080\"\n    environment:\n      # Database Connection\n      # Note: Use APP__ prefix (double underscore) for configuration\n      - APP__DATABASE__URL=mysql://user:password@db:3306/rbibli\n      # Optional: Individual fields can also be used\n      # - APP__DATABASE__HOST=db\n      # - APP__DATABASE__USERNAME=user\n      # - APP__DATABASE__PASSWORD=password\n```\n\n**Configuration**: The application is configured entirely via environment variables.\n\n### Installation\n\n1. **Clone the repository**\n\n   ```bash\n   git clone https://github.com/yourusername/rbibli.git\n   cd rbibli\n   ```\n\n2. **Set up the database**\n\n   **a. Configuration**\n   Create a `.env` file in the project root:\n\n   ```env\n   DATABASE_URL=mysql://rbibli:your_password@127.0.0.1:3306/rbibli\n   HOST=127.0.0.1\n   PORT=8000\n   ```\n\n3. **Run database migrations**\n\n   ```bash\n   cd backend\n   sqlx database create\n   sqlx migrate run\n   ```\n\n4. **Start the application**\n\n   **Option A: Docker (Recommended)**\n\n   ```bash\n   docker compose up --build\n   ```\n\n   The application will be available at `http://localhost:8080`.\n\n   **Option B: Manual (Development)**\n   Start the backend:\n\n   ```bash\n   cd backend\n   cargo run --release\n   ```\n\n   Start the frontend (in a new terminal):\n\n   ```bash\n   cd frontend\n   trunk serve --release\n   ```\n\n   The frontend will be available at `http://localhost:8080`.\n   *Note: `trunk serve` is configured to proxy API requests to the backend at `http://127.0.0.1:8000`.*\n\n## 📖 Usage\n\n### Main Features\n\n1. **Manage Your Collection**\n   - Add titles with ISBN lookup for automatic metadata\n   - Create multiple volumes (physical copies) per title\n   - Organize volumes in hierarchical storage locations\n\n2. **Track Loans**\n   - Scan barcodes to check out books\n   - Automatic due date calculation based on borrower groups\n   - Visual indicators for overdue items\n\n3. **View Statistics**\n   - See which genres dominate your collection\n   - Track where volumes are located\n   - Monitor active and overdue loans\n\n### Navigation\n\n- **Titles** - Browse and manage your book collection\n- **Locations** - Organize physical storage spaces\n- **Authors** - Manage author information\n- **Publishers** - Track publishing companies\n- **Genres** - Categorize your books\n- **Series** - Organize titles into series collections\n- **Loans** - Check out, return, and manage loans\n- **Statistics** - View library analytics\n- **About** - Application information\n\n## 📁 Project Structure\n\n```\nrbibli/\n├── frontend/           # Slint UI application\n│   ├── src/           # Rust source code\n│   │   ├── main.rs    # Entry point\n│   │   ├── models.rs  # Data structures\n│   │   └── api_client.rs  # HTTP client\n│   └── ui/            # Slint UI files\n│       ├── app-window.slint\n│       ├── pages/     # Page components\n│       └── side_bar.slint\n├── backend/           # REST API server\n│   ├── src/\n│   │   ├── main.rs    # Server entry point\n│   │   ├── handlers/  # API endpoints\n│   │   └── models/    # Database models\n│   └── migrations/    # SQLx database migrations\n└── documentation/     # Detailed documentation\n    ├── requirements.md\n    ├── architecture.md\n    ├── api.md\n    └── ...\n```\n\n## 📚 Documentation\n\nComprehensive documentation is available in the [`documentation/`](documentation/) folder:\n\n- **[Requirements](documentation/requirements.md)** - Complete functional specifications\n- **[Architecture](documentation/architecture.md)** - Technical design and data models\n- **[API Documentation](documentation/api.md)** - REST API endpoints\n- **[Development Setup](documentation/development_environment.md)** - Detailed setup instructions\n- **[Planning](documentation/planning.md)** - Development roadmap\n\n## 🎯 Development Status\n\n**Current Phase: Late Phase 3 (88% Complete)**\n\n### ✅ Completed\n\n- Database integration with 15 migrations\n- Full CRUD for titles, authors, publishers, genres, series, locations\n- Volume management with barcode support\n- Complete loan management system\n- Statistics dashboard with visualizations\n- ISBN lookup integration\n- **Dewey Decimal Classification** (Manual input)\n- Series management with title associations\n- Cover image upload API\n\n### 🔄 In Progress\n\n- Title-Author relationship management\n- WASM compilation support (Async UI refactoring complete)\n\n### ⏳ Planned (Phase 4)\n\n- Barcode generation (Code 128)\n- Import/export functionality (CSV, JSON)\n- Duplicate detection algorithms\n- Cover image upload UI\n- Progressive Web App (PWA) features\n\n## 🔑 Key Concepts\n\n### Title vs Volume\n\nThe system makes a crucial distinction:\n\n- **Title** - Abstract book metadata (ISBN, authors, genre, summary)\n- **Volume** - Physical copy with unique barcode, condition, location\n\nThis allows:\n\n- Wishlist functionality (titles with 0 volumes)\n- Multiple copies tracking\n- Individual volume notes and locations\n\n### Barcode System\n\n- **Volume Barcodes** - `VOL-000001` (Code 128) for physical copies\n- **ISBN Barcodes** - Standard EAN-13 for title identification\n\n### Loan Management\n\n- Title-based requests, volume-specific fulfillment\n- Automatic due date calculation based on title type\n- Simple, trust-based system (no fines or suspensions)\n\n## 🤝 Contributing\n\nThis is currently a personal project. Feel free to fork and adapt for your own use!\n\n## 📄 License\n\nLicensed under the MIT License - see [LICENSE](LICENSE) for details.\n\n## 🙏 Acknowledgments\n\n- **[Slint](https://slint.dev/)** - Cross-platform UI framework\n- **[Actix-web](https://actix.rs/)** - Web framework\n- **[SQLx](https://github.com/launchbadge/sqlx)** - SQL toolkit\n- **Google Books API** - ISBN metadata lookup\n\n## 📬 Contact\n\nFor questions or suggestions, please open an issue on GitHub.\n\n---\n\n**Built with ❤️ using Rust and Slint**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguycorbaz%2Frbibli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguycorbaz%2Frbibli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguycorbaz%2Frbibli/lists"}