AgendaPro v1.0 - multi-tenant SaaS, mobile calendar, public booking

Multi-tenant scheduling SaaS (AgendaPro-equivalent):
- Backend: Node + Express + node:sqlite, multi-tenant (admin/owner/employee),
  versioned migrations, 4 templates (estetica-spa, barberia, clinica, blank).
- Frontend: React 18 + TS + Vite + Tailwind, FullCalendar drag-and-drop,
  Recharts dashboard, mobile-first (day/list views on mobile).
- Features: calendar+services+employees+clients+tickets, dashboard with
  best employee/service, top tickets, top/frequent clients, commissions,
  cancellation policy + no-show tracking, public online booking (/b/:slug),
  cash register (cierre de caja), reminders/notifications center.
- Verification: 65/65 e2e API, 58/58 visual (0 overflow, 0 console errors),
  typecheck clean, vite build OK.
This commit is contained in:
AgendaPro Dev
2026-07-25 13:45:53 -06:00
commit e8d2435cc2
63 changed files with 16539 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
{
"name": "agenda-pro",
"version": "1.0.0",
"private": true,
"type": "module",
"description": "Visual scheduling and business management app for owners and employees",
"scripts": {
"dev": "concurrently -k -n SERVER,WEB -c blue,magenta \"npm:dev:server\" \"npm:dev:web\"",
"dev:server": "tsx watch server/index.ts",
"dev:web": "vite",
"build": "tsc -b && vite build",
"start": "cross-env NODE_ENV=production tsx server/index.ts",
"typecheck": "tsc -b --noEmit",
"lint": "eslint . --ext ts,tsx",
"seed": "tsx server/scripts/seed.ts",
"test:e2e": "node e2e-test.mjs",
"test:admin": "node admin-test.mjs",
"audit:visual": "node visual-audit.mjs"
},
"dependencies": {
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/sortable": "^8.0.0",
"@fullcalendar/core": "^6.1.15",
"@fullcalendar/daygrid": "^6.1.15",
"@fullcalendar/interaction": "^6.1.15",
"@fullcalendar/list": "^6.1.21",
"@fullcalendar/react": "^6.1.15",
"@fullcalendar/timegrid": "^6.1.15",
"@tanstack/react-query": "^5.59.0",
"clsx": "^2.1.1",
"cors": "^2.8.5",
"express": "^4.21.0",
"lucide-react": "^0.451.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.26.2",
"recharts": "^2.12.7",
"zod": "^3.23.8"
},
"devDependencies": {
"@playwright/test": "^1.62.0",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/node": "^22.7.4",
"@types/react": "^18.3.11",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.2",
"autoprefixer": "^10.4.20",
"concurrently": "^9.0.1",
"cross-env": "^7.0.3",
"eslint": "^9.12.0",
"playwright": "^1.62.0",
"postcss": "^8.4.47",
"tailwindcss": "^3.4.13",
"tsx": "^4.19.1",
"typescript": "^5.6.2",
"vite": "^5.4.8"
},
"allowScripts": {
"[email protected]": true,
"[email protected]": true
}
}