A Laravel-based web application for organizing and managing your image collections. Upload, categorize, and archive your photos with an intuitive folder-based system.
- Folder Management: Create and organize unlimited folders for your images
- Image Upload: Upload multiple images (up to 1GB each) with preview functionality
- Image Gallery: View all images in a responsive grid layout
- Archive Creation: Select multiple folders and download them as a ZIP archive
- Image Deletion: Remove individual images or entire folders
- User Authentication: Secure user accounts with Laravel Fortify
- Dark Mode: Built-in dark mode support
- Mobile Responsive: Fully responsive design that works on all devices
- PHP 8.1 or higher
- Composer
- MySQL/MariaDB or PostgreSQL
- Node.js & NPM (for frontend assets)
- ZipArchive PHP extension (usually enabled by default)
git clone <repository-url>
cd photosorter# Install PHP dependencies
composer install
# Install Node dependencies
npm install# Copy the example environment file
cp .env.example .env
# Generate application key
php artisan key:generateEdit the .env file and configure your database connection:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=photosorter
DB_USERNAME=your_username
DB_PASSWORD=your_password# Run migrations to create database tables
php artisan migrate
# (Optional) Seed the database with sample data
php artisan db:seedThe seeder will create:
- Admin user with email:
admin@example.comand password:123456789 - 10 sample folders
# Create symbolic link for public storage
php artisan storage:linkFor large image uploads (up to 1GB), update your php.ini:
upload_max_filesize = 1024M
post_max_size = 1024M
max_execution_time = 300
memory_limit = 512M# Development
npm run dev
# Production
npm run buildFor Development:
php artisan serveVisit http://localhost:8000
For Production:
Configure your web server (Apache/Nginx) to point to the public directory.
Example Nginx configuration:
server {
listen 80;
server_name your-domain.com;
root /path/to/photosorter/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}chmod -R 755 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache- Visit the application URL
- Click "Register" to create a new account
- Fill in your name, email, and password
- Log in with your credentials
- Click "New Folder" in the sidebar to create a folder
- Click on a folder name to view its contents
- Delete folders from the dashboard table
- Navigate to a folder
- Click "Upload Images"
- Select one or multiple images
- Preview your selections
- Click "Upload" to save
- Go to the Dashboard
- Click "Make Archive"
- Select the folders you want to include
- Click "Download Archive"
- A ZIP file containing all selected folders and images will be downloaded
- Click the trash icon on any image card
- Confirm the deletion in the modal
- Backend: Laravel 11
- Frontend: Livewire 3, Flux UI Components
- Styling: Tailwind CSS
- Authentication: Laravel Fortify with 2FA support
- Database: MySQL/PostgreSQL
app/
├── Http/Controllers/
│ └── FolderController.php # Handles folder and image operations
├── Models/
│ ├── User.php # User model with folder relationship
│ ├── Folder.php # Folder model with images relationship
│ └── Image.php # Image model
database/
├── migrations/ # Database structure
├── factories/ # Model factories for testing
└── seeders/ # Database seeders
resources/
├── views/
│ ├── dashboard.blade.php # Dashboard with folder table
│ ├── folders/
│ │ └── show.blade.php # Folder detail view
│ └── layouts/
│ └── app/
│ └── sidebar.blade.php # Main layout with sidebar
routes/
└── web.php # Application routes
This project is open-sourced software licensed under the MIT license.
For issues, questions, or contributions, please open an issue in the repository.