An employee web portal for managing pet boarding and grooming operations, built with TypeScript across the full Express and MongoDB stack. Six domain models — Guests, Clients, Visits, Employees, Kennels, and Services — form an interconnected data layer where visits cross-reference assigned kennels, scheduled services, and check-in state. The visit workflow covers the full operational cycle: scheduling with kennel assignment, check-in and check-out with occupancy tracking, per-service completion logging, and computed billing.
Demo credentials: username
admin/ passwordadmin
Employees manage daily boarding operations — scheduling visits, assigning kennels, tracking service completion, and processing billing — with role-based views separating standard workflows from administrative functions.
- Six domain models with cross-referenced relationships — Visits track Guests, Kennels, and Services; Guests reference their owner Client and visit history
- Visit lifecycle from scheduling through kennel assignment, check-in, per-service completion tracking, check-out, and computed billing
- Two-tier access control: all employees see operational views, admin-flagged users manage Employees, Kennels, and Services
- Defense-in-depth validation: Joi schemas with custom HTML sanitization extension, Mongoose validation, express-mongo-sanitize, and Helmet CSP
- Password reset via time-limited crypto tokens with transactional email confirmation
- Cloudinary image uploads for guest profiles, fuzzy search across records, paginated views, and dynamic breadcrumb navigation
- Frontend: EJS, Bootstrap
- Backend: TypeScript, Node.js, Express
- Database: MongoDB, Mongoose
- Auth: Passport.js, session-based
- Hosting: Heroku



