A Flutter-based inventory management system for Cayman Humane's Book Loft, designed to help volunteers manage book donations and sales efficiently.
Book Loft is a volunteer-run book loft that accepts donated books and resells them for $2-5 each. This app digitizes their operations while maintaining their volunteer-driven approach, providing:
- Barcode/ISBN Scanning: Quick book identification using mobile camera
- Inventory Management: Track book quantities, donations, and sales
- Search Functionality: Find books by title, author, or ISBN
- Offline Support: Works even in areas with poor connectivity
- Transaction Tracking: Record donations and sales with dates and volunteer information
- Barcode Scanner: Scan ISBN barcodes to quickly identify books
- Book Lookup: Automatic book information retrieval from Open Library API
- Inventory Tracking: Real-time quantity management
- Search & Filter: Find books by various criteria
- Transaction History: Track all donations and sales
- Donation Tracking: Add books to inventory with date and volunteer info
- Sale Processing: Remove books from inventory when sold
- Multiple Copies: Special handling for books with 2+ copies
- Volunteer Attribution: Track which volunteer processed each transaction
- Inventory Summary: Total books, available stock, sales rate
- Multiple Copies Alert: Identify books with special offers
- Sales Analytics: Track donation vs. sale ratios
- Local Database: SQLite storage for offline operation
- Sync Capability: Upload changes when connection is restored
- Fallback Mode: Graceful degradation when API is unavailable
- State Management: Provider pattern for reactive UI
- Local Storage: SQLite database for offline data
- Barcode Scanning: Mobile Scanner plugin for camera integration
- HTTP Client: API communication with backend services
- REST API: Node.js/Express or Python/FastAPI
- Database: PostgreSQL for production data
- Authentication: JWT-based volunteer authentication
- Sync Service: Handle offline data synchronization
- Flutter SDK (3.0.0 or higher)
- Dart SDK (3.0.0 or higher)
- Android Studio / VS Code with Flutter extensions
- Physical device or emulator for testing
-
Clone the repository
git clone <repository-url> cd bookloft
-
Install dependencies
flutter pub get
-
Run the app
flutter run
-
Update API Endpoint
- Edit
lib/services/api_service.dart - Replace
baseUrlwith your backend API URL
- Edit
-
Configure Permissions
- Android: Camera permission in
android/app/src/main/AndroidManifest.xml - iOS: Camera usage description in
ios/Runner/Info.plist
- Android: Camera permission in
- Open the app and tap "Scan Book"
- Point camera at the book's barcode
- Review auto-populated book information
- Enter quantity and volunteer name
- Tap "Add Book" to save
- Search for the book or scan its barcode
- Select "Process Sale" from book details
- Enter quantity sold and volunteer name
- Confirm the transaction
- Tap "Search Books" from home screen
- Enter title, author, or ISBN
- View results with availability status
- Tap any book for detailed information
- Home screen displays key metrics
- Total books, available stock, sales rate
- Books with multiple copies highlighted
- All donations and sales are logged
- Volunteer attribution for accountability
- Date tracking for reporting
{
"id": "unique_id",
"isbn": "9781234567890",
"title": "Book Title",
"author": "Author Name",
"publisher": "Publisher Name",
"quantity": 3,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}{
"id": "unique_id",
"book_id": "book_id",
"type": "donation|sale",
"quantity": 1,
"date": "2024-01-01T00:00:00Z",
"volunteer_name": "Volunteer Name",
"notes": "Optional notes"
}- Automatic book information lookup by ISBN
- Fallback to manual entry if lookup fails
- No API key required for basic usage
- RESTful endpoints for CRUD operations
- Authentication and authorization
- Data synchronization for offline support
lib/
├── models/ # Data models and serialization
├── services/ # API and database services
├── providers/ # State management
├── screens/ # UI screens
├── widgets/ # Reusable UI components
└── main.dart # App entry point
mobile_scanner: Barcode scanning functionalityprovider: State managementsqflite: Local database storagehttp: API communicationjson_annotation: JSON serialization
- Create data models in
lib/models/ - Add API endpoints in
lib/services/api_service.dart - Update state management in
lib/providers/ - Create UI screens in
lib/screens/ - Add reusable widgets in
lib/widgets/
This is an open-source project for Cayman Humane Society. Contributions are welcome!
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
- Follow Flutter/Dart conventions
- Use meaningful variable names
- Add comments for complex logic
- Maintain consistent formatting
- Generate signed APK
- Distribute to volunteers via Google Play or direct install
- Configure app permissions
- Build for iOS devices
- Distribute via TestFlight or App Store
- Configure camera permissions
For technical support or feature requests:
- Create an issue in the repository
- Contact the development team
- Check the documentation wiki
This project is open-source and available under the MIT License. See LICENSE file for details.
- Cayman Humane Society for the opportunity to help
- Flutter community for excellent documentation
- Open Library for free book data API
- All volunteers who will use this system
Built with ❤️ for Cayman Humane Society