2.0 KiB
NextChair
NextChair is a multi-tenant, white-label booking platform for barbershops. The application is being rebuilt as a conventional Laravel web application using PHP, MySQL, Blade, Tailwind CSS, Alpine.js, and Vite.
The audited Next.js implementation is preserved in legacy-nextjs
as the functional and visual migration reference. The Laravel application has
its own deployment-neutral Docker option at the repository root; files inside
legacy-nextjs are not used by it.
Local development
composer install
cp .env.example .env
php artisan key:generate
npm install
npm run build
php artisan serve
Configure the MySQL connection in .env before running migrations. The
application resolves a business from the request hostname through the
business_domains table. Local development can use a configured local domain
or the APP_DEFAULT_BUSINESS_SLUG fallback.
Docker deployment
The root compose.yaml runs Laravel with PHP 8.4 FPM, Nginx, MySQL 8,
the database-backed queue worker, and the scheduler. It does not include or
configure Caddy; an existing reverse proxy can forward traffic to Nginx on
127.0.0.1:8085.
First run:
cp .env.example .env
Set private values in .env, including:
APP_URL=http://localhost:8085
APP_KEY=
DB_HOST=db
DB_DATABASE=nextchair
DB_USERNAME=nextchair
DB_PASSWORD=replace-with-a-private-password
DB_ROOT_PASSWORD=replace-with-a-private-root-password
Then build and start the stack:
docker compose build
docker compose up -d
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate
Migrations are intentionally not run by container startup. To inspect the application logs:
docker compose logs -f app nginx queue scheduler db
The default host binding is 127.0.0.1:8085:80. Override it with
NEXTCHAIR_HTTP_BIND and NEXTCHAIR_HTTP_PORT in .env when needed. MySQL
has no published host port and is reachable only as db:3306 inside Compose.
Verification
php artisan test
npm run build