A sophisticated, multilingual portfolio website for professional artists with gallery management, virtual exhibitions, and social media automation.
- Multilingual Artwork Database - Support for Russian, English, Chinese
- Advanced Filtering - Filter by series, year, medium, size, availability
- Responsive Image Gallery - Masonry layout with lazy loading
- High-Quality Image Processing - Multiple sizes, WebP optimization
- Virtual 3D Gallery - Integration with Spatial.io
- Fully Responsive Design - Perfect on desktop, tablet, and mobile
- Progressive Web App - Installable, works offline
- Fast Performance - Optimized loading, caching strategies
- Accessibility - WCAG 2.1 compliant
- Intuitive CMS - Easy artwork management without technical knowledge
- Batch Operations - Bulk upload and editing
- Content Scheduling - Plan publications in advance
- Analytics Dashboard - Track views, engagement, sales inquiries
- Telegram Automation - Auto-post new works to Telegram channel
- Social Media Sync - Cross-publish to multiple platforms
- NFT Integration - Display blockchain artwork information
- Email Newsletter - Built-in subscriber management
- Multilingual Blog - Articles, news, exhibition announcements
- Event Calendar - Exhibition schedules and openings
- Press Kit - Downloadable media materials
- Contact System - Spam-protected inquiry forms
- Advanced Spam Protection - Multi-layer contact form security
- Regular Backups - Automated database and media backups
- SSL Encryption - HTTPS everywhere
- GDPR Compliance - Privacy-focused design
- PHP 8.3+
- Composer 2.5+
- MySQL 8.0+
- Node.js 18+
- Redis (recommended for production)
- Clone the repository
git clone https://github.com/SirAndrewGotham/ArtPortfolio.git
cd ArtPortfolio- Install PHP dependencies
composer install- Install JavaScript dependencies
npm install- Configure environment
cp .env.example .env
php artisan key:generate- Update
.envwith your database credentials
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=art_portfolio
DB_USERNAME=root
DB_PASSWORD=- Run migrations and seeders
php artisan migrate --seed- Build assets
npm run build- Start development server
php artisan serveVisit http://localhost:8000 to see your application!
app/
βββ Http/ # Controllers, Middleware, Requests
βββ Models/ # Eloquent models
βββ Services/ # Business logic services
βββ Jobs/ # Queueable jobs
βββ ViewModels/ # View presentation logic
βββ Traits/ # Reusable model traits
resources/
βββ views/ # Blade templates
βββ css/ # Tailwind CSS
βββ js/ # Alpine.js components
βββ lang/ # Translation files
database/
βββ migrations/ # Database migrations
βββ seeders/ # Test data seeders
βββ factories/ # Model factories
# Run all tests
php artisan test
# Run specific test suite
php artisan test --testsuite=Feature
php artisan test --testsuite=Unit
# Run with coverage
php artisan test --coverage --min=80- Web Server: Nginx or Apache with mod_rewrite
- PHP Extensions: BCMath, Ctype, cURL, DOM, Fileinfo, GD, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML, ZIP
- Database: MySQL 8.0+ or MariaDB 10.3+
- Cache: Redis 6.0+
- Queue: Supervisor for Laravel queues
# 1. Clone repository
git clone https://github.com/SirAndrewGotham/ArtPortfolio.git
# 2. Install dependencies
composer install --optimize-autoloader --no-dev
npm install && npm run production
# 3. Configure environment
cp .env.example .env
# Edit .env with production values
# 4. Generate keys and optimize
php artisan key:generate
php artisan storage:link
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 5. Run migrations
php artisan migrate --force
# 6. Set up queue worker (Supervisor)
# Configure Supervisor to run: php artisan queue:work --tries=3- Configure languages in
config/app.php - Add translations in
resources/lang/{locale} - Set default language in
.env
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_AVAILABLE_LOCALES=en,ru,zhConfigure image optimization in .env:
IMAGE_DRIVER=gd # or 'imagick' for better quality
IMAGE_QUALITY=85
ENABLE_WEBP=true
MAX_UPLOAD_SIZE=10240 # 10MB max file sizeTELEGRAM_BOT_TOKEN=your_token
TELEGRAM_CHANNEL_ID=@your_channel
FACEBOOK_PAGE_TOKEN=your_token
INSTAGRAM_ACCESS_TOKEN=your_token// Cache expensive queries
$artworks = Cache::remember('featured_artworks', 3600, function () {
return Artwork::featured()->with('images')->get();
});
// Use Redis for sessions and cache
SESSION_DRIVER=redis
CACHE_DRIVER=redis- Automatic WebP conversion with JPEG fallback
- Responsive images with srcset attribute
- Lazy loading with blur-up placeholders
- CDN integration (Cloudinary/Cloudflare)
- 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 LICENSE file for details.
Andrew Gotham
- Email: andreogotema@gmail.com
- Telegram: @SirAndrewGotham
- GitHub: @SirAndrewGotham
- Laravel - The PHP Framework For Web Artisans
- Tailwind CSS - A utility-first CSS framework
- Alpine.js - A rugged, minimal framework for composing JavaScript behavior
- Spatial.io - Virtual gallery platform
For support, email andreogotema@gmail.com or join our Telegram channel.
β If you find this project helpful, please give it a star on GitHub!