Always Bring a Gift (ABAG) is a thoughtful gift-giving companion that helps you remember important dates and track gift ideas for the special people in your life. Whether it's birthdays, anniversaries, holidays, or other celebrations, ABAG ensures you're always prepared with the perfect gift.
- 🎂 Event Management - Track birthdays, anniversaries, holidays, and custom events
- 🔁 Recurring Events - Automatic reminders for yearly celebrations
- 👥 Person Management - Keep profiles with photos and event associations
- 💡 Gift Ideas - Save and organize gift ideas with Amazon integration
- 📜 Gift History - Track what you've given and when
- 🛍️ Amazon Integration - Fetch product images and details via OpenWeb Ninja API
- 🔐 Secure Authentication - Built-in 2FA support and optional Authentik SSO
- 👨💼 Admin Dashboard - User management and system oversight
- 🐳 Easy Deployment - Docker images for simple setup
docker run -d \
-p 8000:8000 \
-v abag-data:/app/storage \
ghcr.io/indemnity83/always-bring-a-gift:latestAccess the application at http://localhost:8000
Default admin credentials:
- Email:
admin@example.com - Password: (generated on first run, check logs)
Install via Community Applications or download the template to your UnRAID server.
services:
abag:
image: ghcr.io/indemnity83/always-bring-a-gift:latest
ports:
- "8000:8000"
volumes:
- abag-data:/app/storage
volumes:
abag-data:See DOCKER.md for advanced configuration options.
Requirements:
- PHP 8.2+
- Composer
- Node.js 20+
- SQLite (or your preferred database)
# Clone the repository
git clone https://github.com/Indemnity83/always-bring-a-gift.git
cd always-bring-a-gift
# Install dependencies
composer install
npm install
# Set up environment
cp .env.example .env
php artisan key:generate
# Run migrations and seed database
php artisan migrate --seed
# Build assets
npm run build
# Start the development server
php artisan serveThe application works out-of-the-box with sensible defaults. Optional configuration is available for advanced use cases - see DOCKER.md for details.
On first run, the application will:
- Create an admin user with a randomly generated password
- Seed default event types (Birthday, Anniversary, Holiday)
- Set up the database schema
Check the container logs for the admin password:
docker logs <container-id>- Backend: Laravel 12
- Frontend: Livewire 3 + Volt
- UI: Flux UI + Tailwind CSS 4
- Authentication: Laravel Fortify with 2FA support
- Database: SQLite (easily switchable to MySQL/PostgreSQL)
- Deployment: Docker with multi-architecture support (amd64/arm64)
Coming soon!
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Laravel best practices
- Write tests for new features
- Run
vendor/bin/pintbefore committing - Ensure all tests pass with
php artisan test
If you discover any security vulnerabilities, please email the maintainer directly instead of using the issue tracker.
This project is open-sourced software licensed under the MIT license.
- Built with Laravel
- UI components by Flux UI
- Icons from Heroicons
- Amazon product integration via OpenWeb Ninja
- 📖 Documentation (coming soon)
- 🐛 Issue Tracker
- 💬 Discussions