Knowledge Portal · engineering documentation

Skip to content

Federated from workspace · PRD-001 · Dental Clinic Revenue Operating System/docs/deployment/CUSTOMER_1_MANUAL_TEST_SETUP.md Do not edit canonical truth here — update the source repo, then re-run npm run docs:sync.


Customer #1 — Manual Test Setup Guide

Repository: Dental Clinic Revenue Operating System (PRD-001)
Audience: Developer / QA / product owner
Scope: Local and staging manual testing — setup, auth, cron, mail, keys
Authority: CUSTOMER_1_GO_LIVE_RUNBOOK.md · CUSTOMER_1_MANUAL_SMOKE_RESULTS.md · LOCAL_DEVELOPMENT_RUNTIME.md

Related portal pages (after npm run docs:deploy):


1. One-time local setup

bash
cd "/path/to/Dental Clinic Revenue Operating System"

composer install
npm install
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
php artisan db:seed --class=PilotProductionSeeder
php artisan zaixos:setup-local --install
php artisan zaixos:validate-env
php artisan zaixos:doctor

Start the dev stack (server + queue + logs + Vite):

bash
composer run dev
# equivalent: bin/zaixos dev

Start the scheduler (second terminal — replaces production cron locally):

bash
php artisan schedule:work

2. Minimum .env for local manual testing

For composer run dev (port 8000):

dotenv
APP_URL=http://zaixos.com:8000
TENANCY_BASE_DOMAIN=zaixos.com
SESSION_DOMAIN=.zaixos.com
VITE_ZAIXOS_HMR_HOST=zaixos.com

# Database (sqlite or local pgsql)
DB_CONNECTION=sqlite

# Mail — Mailpit (no real SMTP)
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_FROM_ADDRESS=noreply@zaixos.com
MAIL_FROM_NAME="ZAIXOS"

# Tenancy
TENANCY_ENABLED=true
TENANCY_PUBLIC_DEFAULT_CLINIC_FALLBACK=true

# SaaS (easier local testing)
SAAS_REQUIRE_EMAIL_VERIFICATION=false
SAAS_BILLING_PROVIDER=manual

# AI Copilot — works without API keys (stub + rule fallback)
AI_DEFAULT_PROVIDER=stub
CLINIC_COPILOT_FALLBACK_RULES=true

# Safe pilot automation flags
CLINIC_ORCHESTRATION_EXECUTE=false
CLINIC_DAILY_REPORT_SEND_EMAIL=false

Required secrets

VariableRequired?How to get it
APP_KEYYesphp artisan key:generate
DB_*YesYour local database
MAIL_*Yes (for email tests)Mailpit defaults above

Optional keys (live features only)

FeatureVariablesNeeded for manual GO?
AI Copilot (live LLM)GROQ_API_KEY, AI_GROQ_MODE=liveNo — fallback works
Stripe billingSTRIPE_KEY, STRIPE_SECRET, STRIPE_WEBHOOK_SECRETNo — use SAAS_BILLING_PROVIDER=manual
AWS S3AWS_*NoFILESYSTEM_DISK=local
OpenAI / AnthropicOPENAI_API_KEY, ANTHROPIC_API_KEYNo

3. Panels and URLs

Local (composer run dev)

SurfaceURLPurpose
Identity / admin loginhttp://account.zaixos.com:8000/admin/loginMain CRM login
Admin dashboardhttp://account.zaixos.com:8000/adminCommand center
Pilot tenant publichttp://pilot-dental.clinic.zaixos.com:8000/enPublic site
Pilot tenant adminhttp://pilot-dental.clinic.zaixos.com:8000/adminTenant-scoped admin
Clinic showcasehttp://clinic.zaixos.com:8000/enDemo public site
Platform marketinghttp://platform.zaixos.com:8000/platform/enPlatform pages
Healthhttp://account.zaixos.com:8000/upMust return 200
Mailpit UIhttp://127.0.0.1:8025Read test emails
Vite HMRhttp://zaixos.com:5173Frontend assets

Production / staging

  • Account: https://account.YOURBASEDOMAIN.com/admin
  • Tenant: https://pilot-dental.YOURBASEDOMAIN.com/en

4. Auth data — all test accounts

Default password for all seeded users: password

Customer #1 pilot clinic (primary)

RoleEmailAccess
Clinic Ownerowner@pilot.dentalFull admin
Receptionistreception@pilot.dentalLeads, bookings, appointments
Doctordoctor@pilot.dentalToday view, treatment plans

Tenant slug: pilot-dental · Seeder: PilotProductionSeeder

Generic dev accounts

RoleEmail
Super Adminsuperadmin@clinic.test
Clinic Owneradmin@clinic.test

Change all passwords before production go-live.


5. Services that must be running

ServiceLocal commandWhy
Web + queue + Vitecomposer run devPages and async jobs
Schedulerphp artisan schedule:workCron jobs locally
MailpitHerd / local installCatch emails at :8025

Verify:

bash
bin/zaixos status
php artisan zaixos:doctor
php artisan queue:failed
php artisan schedule:list

6. Scheduled jobs (cron)

Production cron:

bash
* * * * * cd /var/www/dental-clinic-ros && php artisan schedule:run >> /dev/null 2>&1

Local: php artisan schedule:work

ScheduleCommandManual test
Every minuteworkflow:process-schedulesphp artisan workflow:process-schedules
Every 5 minrealtime:cleanup-presencephp artisan realtime:cleanup-presence
Every 10 minclinic-ai:runphp artisan clinic-ai:run
Every 10 mingrowth:analyzephp artisan growth:analyze
Every 10 minclinic:orchestrate --executephp artisan clinic:orchestrate --execute
Every 15 minreminders:processphp artisan reminders:process
Every 15 minnotifications:smart-scanphp artisan notifications:smart-scan
Every 15 minrevenue-leak:scanphp artisan revenue-leak:scan
Hourlyautopilot:runphp artisan autopilot:run
Daily 01:00revenue:aggregate-dailyphp artisan revenue:aggregate-daily
Daily 02:00backup:runphp artisan backup:run
Daily 02:30saas:billingphp artisan saas:billing
Daily 06:00no-show:predictphp artisan no-show:predict
Daily 07:00clinic:daily-report --sendphp artisan clinic:daily-report --send
Daily 08:00workspace:digest-notificationsphp artisan workspace:digest-notifications

7. Email testing

Local (Mailpit)

dotenv
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025

Open http://127.0.0.1:8025 for all captured mail.

ScenarioTriggerVerify
Signup verification/signup (if SAAS_REQUIRE_EMAIL_VERIFICATION=true)Mailpit
Password reset/admin/password-reset/requestMailpit
Contact form/en/contact submitLead + Mailpit
Appointment reminderAppointment +24h → php artisan reminders:processMailpit + /admin/crm/reminder-logs
Invoice notificationIssue invoice → resend in FilamentMailpit
Daily reportphp artisan clinic:daily-report --sendMailpit

Quick mail smoke

bash
curl -f http://127.0.0.1:8025
php artisan reminders:process
grep -i "reminder\|mail" storage/logs/laravel.log | tail -20

Production

Real SMTP required — see CUSTOMER_1_GO_LIVE_RUNBOOK.md Section 2.


8. Pre-test commands

bash
composer test:first-customer-pack
php artisan pilot:validate-deployment --strict

php artisan pilot:run-manual-smoke \
  --verify-tests \
  --report=docs/deployment/CUSTOMER_1_MANUAL_SMOKE_RESULTS.md \
  --environment=local

Re-publish smoke results to the portal after each run:

bash
cd ../zaixos-engineering-platform
npm run docs:deploy

9. Browser manual test map

Login: owner@pilot.dental / password at http://account.zaixos.com:8000/admin/login

AreaPath
Dashboard/admin
Leads/admin/leads
Lead pipeline/admin/lead-pipeline-page
Bookings/admin/crm/bookings
Appointments/admin/crm/appointments
Calendar/admin/appointment-calendar-page
Invoices/admin/invoices
Payments/admin/payments
P&L/admin/profit-loss-report
Outstanding/admin/outstanding-invoices-page
AI Copilot/admin/ai/clinic-agent
Compliance/admin/compliance/violations
Website/admin/website
Reminders/admin/crm/reminder-settings

Public (incognito): http://pilot-dental.clinic.zaixos.com:8000/en


10. Production-only checklist

dotenv
APP_ENV=production
APP_DEBUG=false
DB_CONNECTION=pgsql
CACHE_STORE=redis
QUEUE_CONNECTION=redis
TENANCY_PUBLIC_DEFAULT_CLINIC_FALLBACK=false
BACKUP_ENABLED=true

Plus: Nginx + SSL, Supervisor queue worker, system cron, real SMTP, changed passwords.

bash
php artisan pilot:validate-deployment --strict && echo "CUSTOMER_1_GO"

Complements CUSTOMER_1_GO_LIVE_RUNBOOK.md · v1.1.0-first-customer-pack.md

ZAIXOS Knowledge Portal — public engineering docs at /docs · Staff operations at /admin