Laravel 13 Available on Vibe96.com

Online Booking & Studio Management

A complete booking platform for salons, spas, and clinics to manage appointments, staff, clients, payments, and daily operations from one place.

Demo login: mariam@noorwellness.ae · password Demo@2026 · client booking page: /p/noor/book

Online Booking Staff Scheduling Client Management Payments & Deposits Laravel 13 · MySQL 8 English + Arabic
bookpoint.x1980.com/dashboard
LIVE
Dashboard Calendar Bookings Payments and deposits Reports Client booking page
AED Deposit received · 70 Signature facial · Mastercard 2090
24h Reminder sent on WhatsApp Aisha M. · tomorrow 09:00
01 / 06 Dashboard
What sets it apart

Everything a studio needs, in one install.

Every feature below is in the demo and in the source you receive. Nothing here is a mock-up.

Online booking with deposits
1Service 2Specialist 3Time 4Details 5Payment
Signature facial60 min · with Layla · Fri 13:00 AED 350
Deposit paid nowAED 70
Balance at studioAED 280
Card declined? The slot stays held ~2 hours.
Friday09:00 — 18:00
LH
OF
PN
SM
Day · Week views Double-booking blocked
24 h 24 hours before WhatsApp
2 h 2 hours before SMS
+1 h Thank-you and review Email
Later Time to rebook WhatsApp
English العربية · RTL
AED · SAR · QAR · USD Dubai · Riyadh · Qatar time
N Noor Wellness Studio/p/noor · 5 staff
+ Your next studiosigns up on its own
scopebusiness_id on every query
Try it now

See these features in the live demo

Sign in as the studio owner and open the calendar, bookings, clients and payments pages with six weeks of real demo data.

Ownermariam@noorwellness.aesign in as "Owner or manager"
PasswordDemo@2026for every demo account
Gallery · the real app

Every screen, running for real.

These are the actual screens from the demo studio, not designs. Open any of them in the live demo and use it with the sample data already loaded.

bookpoint.x1980.com/dashboard
Dashboard
Try it now

Open any of these screens yourself

Every screenshot above is a live page. Sign in and click through the same menu.

Ownermariam@noorwellness.aesign in as "Owner or manager"
PasswordDemo@2026for every demo account
Who it is for

One system. A door for everyone.

Each account opens only the side it has access to. Clients need no account at all. Pick a door to look inside.

Owner and admin · everything

Owner & admin

Runs the whole studio — money, team, settings and every report.

Dashboard with today’s numbers and a Today on the floor timeline
Calendar: day and week per staff member, blocked time, working hours, leave
Bookings with one drawer for status, payment, messages, notes, invoice, reschedule and refund
Services with categories, duration, price and a deposit rule per service
Manager +
Manager +
Staff portal +
Staff portal +
Booking page +
Booking page +
Studio page & after the visit +
Studio page & after the visit +
API, webhooks & embed +
API, webhooks & embed +
Try it now

One login for each door

Each account only opens the side it has access to. Try all three, then book as a client with no account at all.

Ownermariam@noorwellness.aesign in as "Owner or manager"
Managerlayla@noorwellness.aeowner app and staff portal
Staffomar@noorwellness.aesign in as "Staff"
Clientany phone numbersign-in code 123456 on the demo
PasswordDemo@2026for every demo account
Technical details

Code you can read on the first day.

Plain Laravel 13 with thin controllers, the rules in services and one tenant scope on every model. No npm, no bundler, no build step.

BookingService.php web.php BelongsToBusiness.php
1 public function create(array $data): Booking
2 {
3 return DB::transaction(function () use ($data) {
4 // lock the staff row for this slot
5 $staff = Staff::whereKey($data['staff_id'])
6 ->lockForUpdate()->firstOrFail();
7
8 $this->availability->assertFree($staff, $data['starts_at']);
9
10 return Booking::create($data + [
11 'business_id' => current_business()->id,
12 ]);
13 });
14 }
Row lock + re-check inside the transaction a slot can never be sold twice
How a request travels
Routes & middleware web and api; current business, locale, admin and staff guards
Controllers Thin: validate, call a service, return a view or JSON
Services BookingService, Availability, Payments, Messenger, Webhooks, Audit
Models & MySQL 8 Eloquent with a business scope on every tenant table · 44 tables
Runtime Laravel 13, PHP 8.3
Database MySQL 8.0 (MariaDB 10.6+ with the shipped schema.sql); 44 tables
Front end 57 Blade views, one CSS file and one JavaScript file; no npm, no build step
Auth Laravel session guard, bcrypt, database sessions; clients sign in by a 6-digit code
API Bearer keys, read-only bookings endpoint, 5 webhook events, embed script
Scheduler One cron entry: reminders, release unpaid, daily schedule
Payments Simulated driver; one charge() method to connect Stripe, Checkout.com or Network International
Messaging Email via Laravel’s mailer; WhatsApp and SMS queued until a provider is connected
Languages English and Arabic (RTL) from one translation map
Hosting Ubuntu with Nginx and PHP-FPM, Docker Compose, or cPanel shared hosting
Security

Hiding a button is convenience, not authorisation.

Every mutating route sits behind middleware.

Roles enforced on the server Owner and admin see everything; managers get 403 on payments and settings; staff are kept to their own portal.
Tenant isolation A global scope adds business_id to every query, so another business’s record is a 404, not a leak.
Passwords, codes and keys bcrypt for passwords and client codes. API keys stored as a SHA-256 hash. Client notes encrypted at rest.
CSRF and rate limits Every form carries a CSRF token. Sign-in 10/min, booking 20/min, codes 5/min, API 60/min.
Server-side booking rules Client-supplied times are never trusted; coupons and deposits are re-validated inside the transaction.
Card data and private links Only card brand and last four are stored. Public links use long random tokens, never numeric ids.
Try it now

Look under the hood

Sign in as the owner, open Settings → API and webhooks to create a key, and call the REST API against the demo data.

Ownermariam@noorwellness.aesign in as "Owner or manager"
PasswordDemo@2026for every demo account
Deployment

Pick a server. Be live today.

Docker, a VPS or shared hosting — no build step on any of them. The live demo itself runs on cPanel.

docker — bookpoint About 5 minutes
00:02 > docker compose up --build -d run
00:09 ✓ Image built · PHP 8.3 + Nginx done
00:16 ✓ MySQL 8 container started done
00:23 ✓ Packages installed, migrations ran done
00:30 ✓ Owner account created done
00:37 ✓ Demo business loaded · ready on :8080 done
BookPoint is live book.yourstudio.com

Requirements

PHP 8.3 or newer with pdo_mysql, mbstring, openssl, xml, bcmath, fileinfo, curl
Database MySQL 8.0 or newer; MariaDB 10.6+ with schema.sql
Tooling Composer 2. No Node, no npm, no bundler
Scheduler One cron entry running php artisan schedule:run
Browsers Chrome, Edge, Firefox or Safari; client pages built for phones

In the box · complete source, no obfuscation

Source The complete Laravel 13 app: controllers, services, models, 57 Blade views, CSS, JS, migrations and seeders.
Database Migrations for migrate --seed, plus schema.sql and seed.sql for phpMyAdmin imports.
Documentation README, setup guides, API and webhook reference, ER diagram, security overview, changelog and CLAUDE.md.
Deployment Dockerfile, docker-compose stack, Nginx server block, systemd units and a commented .env.example.
Try it now

This demo is the cPanel target

The live demo runs on shared cPanel hosting exactly as described in HowToSetup.md. Sign in and use it like your own install.

Ownermariam@noorwellness.aesign in as "Owner or manager"
PasswordDemo@2026for every demo account

Launch your studio's booking system.

Owner app, staff portal, client booking page and REST API in one Laravel 13 application, with the source, database scripts, documentation, Docker stack and demo data.

AI-ready codebase

The project can be modified with Claude, Codex and Antigravity.

The repository ships with a CLAUDE.md — architecture, folder map, conventions and gotchas — so your agent understands the project before it writes a line. The 58 tests tell you when a change breaks something.

CLAUDE.md included Unobfuscated source Conventions documented 58 tests No build step
Claude · bookpoint/ agent session
Add a loyalty-points page to the client account, following the project conventions.
✓ Read CLAUDE.md · architecture in one minute read
✓ Conventions: thin controllers, rules in services plan
1 app/Http/Controllers/Client/LoyaltyController.php + new
2 resources/views/client/loyalty.blade.php + new
3 routes/web.php · client group edit
4 tests/Feature/LoyaltyTest.php + new
58 tests passed ready for review
Try it now

Try the result before you buy

Everything on this page is running at the demo address with the demo accounts below.

Ownermariam@noorwellness.aesign in as "Owner or manager"
Managerlayla@noorwellness.aeowner app and staff portal
Staffomar@noorwellness.aesign in as "Staff"
PasswordDemo@2026for every demo account