Sri Lanka booking platform for local businesses — built by Ardeno Studio
Public booking pages, PayHere payments, automated reminders, CRM, and AI growth workflows.
dinaya.lk · Deployment checklist · Dinaya MCP · GitHub Actions
| Area | What you get |
|---|---|
| Booking | Branded public pages at /book/[slug] and {slug}.dinaya.lk subdomains |
| Payments | PayHere checkout and subscription billing for Starter / Pro / Growth plans |
| Operations | Business dashboard — calendar, clients, locations, staff, automations |
| Growth | Reviews, referrals, directory discovery, AI workflow hub |
| Integrations | Google Calendar sync, webhooks, API keys, WhatsApp / SMS messaging |
| Platform | Internal admin for plans, support, health, and webhooks |
- Framework — Next.js 16 (App Router), React 19, TypeScript
- Data — Neon Postgres, Drizzle ORM
- Auth — NextAuth (credentials)
- Payments & comms — PayHere, Resend; Groq/OpenAI-compatible AI workflows
- Node.js 22 (matches CI)
- A Neon database
npm installcp .env.example .env.localMinimum for local development:
| Variable | Example / notes |
|---|---|
DATABASE_URL |
Neon connection string |
AUTH_SECRET |
openssl rand -base64 32 |
NEXT_PUBLIC_APP_URL |
http://localhost:3000 |
See .env.example for PayHere, cron, Google Calendar, Redis, and optional integrations.
npm run db:migratenpm run devContributors using Cursor: see AGENTS.md for repo conventions and agent context.
- Sign in:
/auth/signin - Register a business:
/register
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Production build |
npm test |
Unit tests (Vitest) |
npm run test:e2e |
Playwright end-to-end tests |
npm run lint |
ESLint |
npm run verify |
Lint + test + build (same as CI verify job) |
npm run db:migrate |
Apply Drizzle migrations |
npm run db:studio |
Open Drizzle Studio |
npm run docs:screenshots |
Regenerate docs UI screenshots |
npm run mcp:dinaya |
Start Dinaya MCP server (stdio) |
npm run mcp:dinaya:self-test |
Run Dinaya MCP self-test snapshot |
Public booking (/book/[slug]) → API routes → Neon Postgres
Business dashboard (/dashboard) → authenticated CRUD APIs
Platform admin (/admin) → internal operations
Cron (/api/cron/*) → reminders, automations, AI workflows
Subdomain routing rewrites {slug}.dinaya.lk to /book/[slug] via middleware.
| Workflow | Trigger | Purpose |
|---|---|---|
| CI | Push to master / main, all PRs |
npm run verify; Playwright e2e on PRs when secrets are set |
| Automations cron | Every 15 min | Run tenant automations |
| Booking reminders | Scheduled | Send booking reminders |
| Google Calendar | Scheduled | Sync calendars |
| AI workflows | Scheduled | Process AI hub jobs |
| Webhook retries | Scheduled | Retry failed outbound webhooks |
PR e2e requires repository secrets DATABASE_URL and AUTH_SECRET — see docs/deployment-checklist.md.
Production checklist, environment variables, cron secrets, and smoke tests:
- Set
AUTH_SECRETandSECRET_ENCRYPTION_KEYin production. - Protect health endpoints with
HEALTH_CHECK_SECRETorCRON_SECRET. - Cron routes require
Authorization: Bearer $CRON_SECRET.
src/app/ Next.js routes (booking, dashboard, admin, API, docs)
src/components/ UI for booking flow, dashboard, and docs
src/lib/ Domain logic, integrations, schemas
drizzle/ SQL migrations
.github/workflows CI and production cron invokers
public/ Static assets (including dinaya-logo.svg)
Built by Ardeno Studio