Hi-Time is a comprehensive project management application built with Laravel 12 and Livewire 3. It features task management with Kanban boards, time tracking, customer management, proposal generation, file attachments (including video support), and reporting capabilities.
- Project Management: Create and manage projects with Kanban-style task boards
- Task Management: Drag-and-drop task organization with status tracking
- File Attachments: Upload documents and videos (up to 20MB for videos, 10MB for documents)
- Time Tracking: Built-in time tracking with detailed reporting
- Customer Management: Maintain customer records and relationships
- Proposal System: Generate, preview, and send professional proposals with PDF export
- Lead Management: Convert leads to customers and projects
- User Management: Role-based access control with admin features
- Reporting: Comprehensive time and project reports
- Real-time Updates: Livewire-powered reactive interface
- Notifications: Simple notification system for important events
- PHP: ^8.2
- Composer: Latest version
- Node.js: ^18.0
- Database: SQLite (default) or MySQL/PostgreSQL
- Web Server: Apache/Nginx or Laravel's built-in server
-
Clone the repository
git clone <repository-url> cd hi-time.test
-
Install PHP dependencies
composer install
-
Install Node.js dependencies
npm install
-
Environment setup
cp .env.example .env php artisan key:generate
-
Database setup
php artisan migrate --seed
-
Build assets
npm run build
-
Start the development server
php artisan serve
For production or containerized environments, use the Docker configuration:
-
Configure PHP settings
Mount the provided
docker-configs/php-custom.confto your PHP-FPM container at/usr/local/etc/php/conf.d/custom.confto support video uploads up to 20MB. -
Use Laravel Sail (recommended for development)
./vendor/bin/sail up -d ./vendor/bin/sail artisan migrate --seed
Key environment variables to configure:
APP_NAME="Hi-Time"
APP_URL=http://your-domain.com
# Database (SQLite is default)
DB_CONNECTION=sqlite
# Mail configuration (for proposal sending)
MAIL_MAILER=smtp
MAIL_HOST=your-smtp-host
MAIL_PORT=587
MAIL_USERNAME=your-email
MAIL_PASSWORD=your-password
MAIL_FROM_ADDRESS=your-emailThe application supports differential file size limits:
- Videos: 20MB maximum (MP4, AVI, MOV, WMV, FLV, WebM, MKV, M4V, 3GP)
- Documents/Images: 10MB maximum
For production deployments, ensure your web server and PHP configuration support these limits:
upload_max_filesize = 20M
post_max_size = 25M
max_file_uploads = 20
max_execution_time = 300
memory_limit = 256MAfter running the database seeder, you'll have access to default accounts:
- Admin User: Check the
database/seeders/DatabaseSeeder.phpfor default credentials - Regular Users: Additional test users may be created by the seeder
- Login to the application using the default credentials
- Create a Customer from the customers section
- Create a Project and assign it to the customer
- Add Tasks to your project using the Kanban board
- Upload Files by clicking on tasks and using the file upload area
- Track Time using the built-in time tracking features
- Generate Reports to analyze project progress and time allocation
app/
βββ Http/Controllers/ # API and web controllers
βββ Livewire/ # Livewire components
βββ Models/ # Eloquent models
βββ Services/ # Business logic services
resources/
βββ views/ # Blade templates
βββ css/ # Styling (Tailwind CSS)
βββ js/ # Frontend JavaScript
database/
βββ migrations/ # Database schema
βββ seeders/ # Sample data
docker-configs/ # Docker configuration files
- Backend: Laravel 12, Livewire 3, PHP 8.2+
- Frontend: Alpine.js, Tailwind CSS 4.0, Vite
- Database: SQLite/MySQL with Eloquent ORM
- File Upload: Custom dropzone integration with differential size validation
- PDF Generation: DomPDF for proposal exports
- Containerization: Docker support with custom PHP configurations
- Time tracking by customer (current/previous month)
- Time tracking by user with enhanced filtering
- Individual daily time reports
- Project progress and task completion metrics
# Start the Laravel development server
php artisan serve
# Watch and compile assets
npm run dev
# Run background queue processing (if needed)
php artisan queue:work# Create new migration
php artisan make:migration create_example_table
# Run migrations
php artisan migrate
# Rollback migrations
php artisan migrate:rollback
# Seed database with sample data
php artisan db:seed# Generate Livewire component
php artisan make:livewire ComponentName
# Generate controller
php artisan make:controller ExampleController
# Generate model with migration
php artisan make:model Example -mIf video uploads fail:
- Check PHP configuration limits (
upload_max_filesize,post_max_size) - Verify web server configuration
- Ensure storage directory permissions are correct
- Check Laravel logs for detailed error messages
# Fix storage permissions
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache# Clear all caches
php artisan optimize:clear
# Or individually
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the Laravel framework license for details.
For support and questions:
- Check the Laravel documentation
- Review the Livewire documentation for component-specific issues
- Check GitHub issues for known problems
- Create a new issue for bug reports or feature requests
Built with β€οΈ using Laravel, Livewire, and modern web technologies