Blue Harvest is a powerful image hosting repository developed by the Web Team at the Matanuska-Susitna Borough. Built with Laravel and Vue.js through InertiaJS, it offers functionality similar to Unsplash, providing a robust platform for image storage and management.
-
PHP 8.x
-
Node.js (Latest LTS)
-
Composer
-
Laravel
-
MySQL 8.0
-
Typesense Server
-
Blue Harvest Clip API (for AI features)
-
IDE with support for:
- Prettier
- ESLint
All components must be properly configured with appropriate environment variables in the
.env
file. Follow the local development setup instructions to configure your environment.
Install NodeJS
NodeJS is required to bundle the application frontend.
Create your environment configuration file:
cp .env.example .env
Important: The application requires proper environment configuration to run. After creating your
.env
file, configure the required values following the documentation or consult with a team member for sensitive information.
PHP, Composer, and Laravel are all required to run the application.
The application requires specific PHP modules to function properly. Installation steps vary by operating system:
Ubuntu/Debian:
sudo apt update
sudo apt install php-bcmath php-curl php-gd php-imagick php-redis php-xml php-zip
# etc...
MacOS (using Homebrew):
brew install php
brew install imagemagick
pecl install imagick redis
# etc...
Windows:
- Enable required extensions in your
php.ini
file - Use XAMPP or Laravel Homestead for a pre-configured environment
See the complete list of required modules below.
Typesense powers the search functionality in Blue Harvest. Follow these steps to set it up:
- Install Typesense by following their Installation Guide
- Configure your
.env
file with the appropriate Typesense connection values - Start the Typesense server
Without proper Typesense configuration, the search features will not work.
Blue Harvest requires MySQL. Follow these steps to configure your database:
-
Install MySQL from the official website. Use the latest LTS version (currently 8.0).
-
Create the database and user:
# Login to MySQL
mysql -u root -p
# Create database and user
CREATE DATABASE blue_harvest;
CREATE USER 'blueharvest_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON blue_harvest.* TO 'blueharvest_user'@'localhost';
FLUSH PRIVILEGES;
exit
-
Update your
.env
file with the database credentials -
Run migrations:
php artisan migrate
The App key is a random string used by Laravel for encryption and security. It's required for secure session management and other encrypted data.
php artisan key:generate
If your .env
doesn't update automatically, copy the output and paste it into .env
manually.
Notifications require Reverb to work. Not required for local development.
php artisan install:broadcasting
This application uses Prettier for code formatting and ESLint for JavaScript/TypeScript linting. Configure your IDE to support these tools.
Setup the Blue Harvest Clip API
AI image processing features require the Clip API. Auto tagging and content flagging will be disabled if the API is not configured.
Run each command in a separate terminal window. See the commands section for details.
npm run dev
php artisan serve
php artisan queue:work
php artisan queue:work --queue=scout
php artisan queue:work --queue=processImages
php artisan reverb:start
Run these commands in separate terminal windows:
# Frontend compilation
npm run dev
# Laravel development server (localhost:8000)
php artisan serve
# Queue workers
php artisan queue:work # Default queue (notifications)
php artisan queue:work --queue=scout # Search indexing
php artisan queue:work --queue=processImages # Image processing
# WebSocket server for real-time events
php artisan reverb:start
# Install dependencies
composer install
npm install
# Database setup
php artisan migrate
php artisan db:seed
Note: Queue workers handle background tasks like notifications, search indexing, and image processing asynchronously. WebSocket server (Reverb) enables real-time notifications.
- bcmath
- calendar
- Core
- ctype
- curl
- date
- dom
- exif
- FFI
- fileinfo
- filter
- ftp
- gd
- gettext
- hash
- iconv
- igbinary
- imagick
- json
- libxml
- mbstring
- mysqli
- mysqlnd
- openssl
- pcntl
- pcre
- PDO
- pdo_mysql
- pdo_pgsql
- pdo_sqlite
- pgsql
- Phar
- posix
- random
- readline
- redis
- Reflection
- session
- shmop
- SimpleXML
- sockets
- sodium
- SPL
- sqlite3
- standard
- sysvmsg
- sysvsem
- sysvshm
- tokenizer
- xml
- xmlreader
- xmlwriter
- xsl
- Zend OPcache
- zip
- zlib