TEAL is a Laravel-based application for tracking and managing reading collections. The application provides tools for importing data from Goodreads, organizing books, and tracking reading progress.
- Book collection management with CRUD operations
- Import functionality for Goodreads data
- Custom cover image support
- Reading status tracking
- Clean URL structure with slugs
- Dark-themed UI based on Gruvbox color palette
- Responsive design for desktop and mobile
- Laravel 10
- Bootstrap 5 with custom theming
- PostgreSQL database
- Eloquent ORM
- Laravel's built-in authentication
- PHP 8.1+ with required extensions
- Composer
- PostgreSQL database server
- Node.js and npm for frontend assets
- Clone the repository
- Set up PostgreSQL with the provided script:
# This script will create the required PostgreSQL user and databases ./setup_postgres.sh
- Run the installation script:
./install.sh
- Start the server with
php artisan serve
The installation script will:
- Create the necessary .env file
- Connect to PostgreSQL and create the database if it doesn't exist
- Run migrations and seed the database
- Create a storage link for file uploads
- Migrate any existing file-based data to the database
The default database configuration uses:
- Database:
teal
- Username:
postgres
- Password:
postgres
You can change these in your .env
file after installation.
- Export your Goodreads library as CSV
- Convert to JSON format
- Use the Import Books page to upload the JSON file
After installation, you can log in with:
- Email: [email protected]
- Password: TEALAdmin@2025#Secure
The application includes comprehensive tests for all features. To run the tests:
./run_tests.sh
This will:
- Create a dedicated PostgreSQL test database (teal_testing)
- Run all tests against the test database
- Generate a coverage report
The test suite includes:
- Unit tests for model methods
- Feature tests for authentication
- Feature tests for book operations
- Tests for data migration from JSON to database
This application is licensed under the MIT license.