Guest Check‑In SaaS Web App (Multi‑Property, Subscription Model)
Budget: ₹1,500 – ₹12,500 INR
We need a custom **Next.js web application** offered as a **SaaS platform** to manage guest check‑in across multiple properties. Each property registers with unique details and can create booking links. Guests use the links to upload ID documents and accept house rules. Hosts verify uploads via a backend dashboard and approve/reject check‑ins. The system enforces **subscription packages** (6 months or 12 months) that control access for each property.
## Core Features
### 1) Property Registration & Authentication
- Each property must **register** with:
- Unique property name
- Mobile number
- Email address
- Authentication:
- Email OTP login (property owner logs in with their registered email)
- Session remains active until explicit logout
- Admin verifies payment and activates subscription before property can access features.
### 2) Subscription Management
- Two subscription packages:
- **6 months**
- **12 months**
- Admin dashboard:
- Approve/activate subscription once payment is confirmed
- Assign subscription period (6/12 months)
- Track subscription start and end dates
- Notify property before subscription expiry
- System access restricted if subscription expired or not activated.
### 3) Booking Link Creation (Property Side)
- Property user creates booking by providing:
- **Booking ID** (always host‑provided, must be unique per property)
- Main guest name
- Mobile number
- Check‑in & Check‑out dates
- Number of guests
- Custom house rules (HTML allowed)
- API validates `bookingId` uniqueness **per property**.
- Returns booking link: `/checkin/{propertyId}/{bookingId}`.
### 4) Guest Check‑In Page
- Guest visits `/checkin/{propertyId}/{bookingId}`.
- Fetches booking details (guest name, dates, guest count).
- Displays summary and one file upload per guest.
- Supported formats: **PDF, JPG, PNG**.
- Files uploaded directly to **Firebase Storage** → stored under `ids/{propertyId}/{bookingId}/{guestIndex}/...`.
- House rules must be accepted before submission.
- On submit → call `/api/submit` to mark status = `SUBMITTED`.
### 5) Backend Review, Approval & Downloads (Property Admin)
- Property admin portal `/admin/booking/{bookingId}`:
- View booking summary and uploaded files.
- Modal viewer for each file (inline image/PDF preview, no default download links).
- Optional watermark overlay + disable right‑click to discourage saving.
- Approve/Reject check‑in:
- Approve → status = `APPROVED`, save approver + timestamp
- Reject → status = `REJECTED`, save reason, user + timestamp
- **Download options** (within 60‑day retention):
- Single file download (authorized role only)
- Bulk ZIP download for entire booking
- All downloads must be time‑boxed signed URLs with audit logs (who, when, what).
- Global toggle `ALLOW_DOWNLOADS=true|false`.
### 6) Data Retention & Security
- Uploaded files auto‑deleted **60 days after check‑out**.
- Firestore/DB keeps booking metadata.
- Firebase Storage rules deny public access; only server can generate signed URLs.
- All file views and downloads are **audit‑logged**.
### 7) Admin Superuser Panel (Platform Owner)
- Manage properties:
- Approve/reject new registrations
- Assign subscriptions (6/12 months)
- View active/expired accounts
- Global monitoring of:
- Subscriptions
- File usage and storage metrics
- Download audit logs
## Tech Stack
- **Frontend**: Next.js + TypeScript + TailwindCSS
- **Backend**: Next.js API routes / Firebase Functions
- **DB**: Firestore (multi‑tenant with propertyId isolation)
- **Storage**: Firebase Storage
- **Auth**: Email OTP (e.g., Magic Links or Supabase/NextAuth with email provider)
## APIs (Minimum)
- `POST /api/properties/register` → register property
- `POST /api/properties/login` → email OTP login
- `POST /api/admin/properties/activate` → admin activates subscription (6/12 months)
- `POST /api/bookings` → create booking (requires `bookingId` per property)
- `GET /api/bookings?propertyId=...&id=...` → fetch booking details
- `POST /api/submit` → guest submits IDs & acceptance
- `GET /api/admin/booking?propertyId=...&id=...` → property admin fetch booking with files
- `POST /api/admin/approve` / `POST /api/admin/reject`
- `POST /api/admin/signed-url` → short‑lived inline/download link with audit logging
- `POST /api/admin/download-zip`
## Deliverables
1. Multi‑tenant Next.js SaaS app supporting property registration, login, subscription, and guest check‑in.
2. Booking creation & check‑in flow tied to property accounts.
3. Admin dashboards:
- Property admin: review/approve/reject bookings & files
- Platform superadmin: manage subscriptions & properties
4. Firebase Storage rules for secure multi‑tenant isolation.
5. Cloud Function/cron to auto‑delete files 60 days post check‑out.
6. README: setup, deployment, SaaS usage.
## Acceptance Criteria
- Property must register with unique email, name, and mobile.
- Platform admin can activate subscription only after payment.
- Property cannot access booking tools until subscription is active.
- Subscriptions expire automatically after 6 or 12 months unless renewed.
- Property user logs in via email OTP and remains active until logout.
- Bookings created under a property must validate unique `bookingId`.
- Guests can upload IDs and accept rules successfully.
- Property admin can review uploads, approve/reject, and download (if enabled).
- All files auto‑deleted after 60 days.
- Audit logs capture file views/downloads and admin actions.
## Test Cases
1. Register a property → requires unique email and property name.
2. Login → OTP emailed; valid OTP grants session.
3. Property cannot access booking APIs before subscription is activated.
4. Admin activates property with 6‑month plan → property gains access until expiry.
5. Create booking with duplicate `bookingId` under same property → rejected.
6. Create booking with same `bookingId` under different property → allowed.
7. Guest uploads IDs → stored under `ids/{propertyId}/{bookingId}/...`.
8. Submit without rules acceptance → rejected.
9. Property admin opens booking → sees inline previews, no default download.
10. Property admin approves booking → status updated, timestamp logged.
11. Property admin rejects booking → status updated, reason logged.
12. Property admin downloads file (if enabled) → signed URL with audit log.
13. Expired subscription property cannot create new bookings.
14. Scheduler deletes files 60 days after check‑out.
15. Superadmin dashboard shows property list with subscription status.
## Core Features
### 1) Property Registration & Authentication
- Each property must **register** with:
- Unique property name
- Mobile number
- Email address
- Authentication:
- Email OTP login (property owner logs in with their registered email)
- Session remains active until explicit logout
- Admin verifies payment and activates subscription before property can access features.
### 2) Subscription Management
- Two subscription packages:
- **6 months**
- **12 months**
- Admin dashboard:
- Approve/activate subscription once payment is confirmed
- Assign subscription period (6/12 months)
- Track subscription start and end dates
- Notify property before subscription expiry
- System access restricted if subscription expired or not activated.
### 3) Booking Link Creation (Property Side)
- Property user creates booking by providing:
- **Booking ID** (always host‑provided, must be unique per property)
- Main guest name
- Mobile number
- Check‑in & Check‑out dates
- Number of guests
- Custom house rules (HTML allowed)
- API validates `bookingId` uniqueness **per property**.
- Returns booking link: `/checkin/{propertyId}/{bookingId}`.
### 4) Guest Check‑In Page
- Guest visits `/checkin/{propertyId}/{bookingId}`.
- Fetches booking details (guest name, dates, guest count).
- Displays summary and one file upload per guest.
- Supported formats: **PDF, JPG, PNG**.
- Files uploaded directly to **Firebase Storage** → stored under `ids/{propertyId}/{bookingId}/{guestIndex}/...`.
- House rules must be accepted before submission.
- On submit → call `/api/submit` to mark status = `SUBMITTED`.
### 5) Backend Review, Approval & Downloads (Property Admin)
- Property admin portal `/admin/booking/{bookingId}`:
- View booking summary and uploaded files.
- Modal viewer for each file (inline image/PDF preview, no default download links).
- Optional watermark overlay + disable right‑click to discourage saving.
- Approve/Reject check‑in:
- Approve → status = `APPROVED`, save approver + timestamp
- Reject → status = `REJECTED`, save reason, user + timestamp
- **Download options** (within 60‑day retention):
- Single file download (authorized role only)
- Bulk ZIP download for entire booking
- All downloads must be time‑boxed signed URLs with audit logs (who, when, what).
- Global toggle `ALLOW_DOWNLOADS=true|false`.
### 6) Data Retention & Security
- Uploaded files auto‑deleted **60 days after check‑out**.
- Firestore/DB keeps booking metadata.
- Firebase Storage rules deny public access; only server can generate signed URLs.
- All file views and downloads are **audit‑logged**.
### 7) Admin Superuser Panel (Platform Owner)
- Manage properties:
- Approve/reject new registrations
- Assign subscriptions (6/12 months)
- View active/expired accounts
- Global monitoring of:
- Subscriptions
- File usage and storage metrics
- Download audit logs
## Tech Stack
- **Frontend**: Next.js + TypeScript + TailwindCSS
- **Backend**: Next.js API routes / Firebase Functions
- **DB**: Firestore (multi‑tenant with propertyId isolation)
- **Storage**: Firebase Storage
- **Auth**: Email OTP (e.g., Magic Links or Supabase/NextAuth with email provider)
## APIs (Minimum)
- `POST /api/properties/register` → register property
- `POST /api/properties/login` → email OTP login
- `POST /api/admin/properties/activate` → admin activates subscription (6/12 months)
- `POST /api/bookings` → create booking (requires `bookingId` per property)
- `GET /api/bookings?propertyId=...&id=...` → fetch booking details
- `POST /api/submit` → guest submits IDs & acceptance
- `GET /api/admin/booking?propertyId=...&id=...` → property admin fetch booking with files
- `POST /api/admin/approve` / `POST /api/admin/reject`
- `POST /api/admin/signed-url` → short‑lived inline/download link with audit logging
- `POST /api/admin/download-zip`
## Deliverables
1. Multi‑tenant Next.js SaaS app supporting property registration, login, subscription, and guest check‑in.
2. Booking creation & check‑in flow tied to property accounts.
3. Admin dashboards:
- Property admin: review/approve/reject bookings & files
- Platform superadmin: manage subscriptions & properties
4. Firebase Storage rules for secure multi‑tenant isolation.
5. Cloud Function/cron to auto‑delete files 60 days post check‑out.
6. README: setup, deployment, SaaS usage.
## Acceptance Criteria
- Property must register with unique email, name, and mobile.
- Platform admin can activate subscription only after payment.
- Property cannot access booking tools until subscription is active.
- Subscriptions expire automatically after 6 or 12 months unless renewed.
- Property user logs in via email OTP and remains active until logout.
- Bookings created under a property must validate unique `bookingId`.
- Guests can upload IDs and accept rules successfully.
- Property admin can review uploads, approve/reject, and download (if enabled).
- All files auto‑deleted after 60 days.
- Audit logs capture file views/downloads and admin actions.
## Test Cases
1. Register a property → requires unique email and property name.
2. Login → OTP emailed; valid OTP grants session.
3. Property cannot access booking APIs before subscription is activated.
4. Admin activates property with 6‑month plan → property gains access until expiry.
5. Create booking with duplicate `bookingId` under same property → rejected.
6. Create booking with same `bookingId` under different property → allowed.
7. Guest uploads IDs → stored under `ids/{propertyId}/{bookingId}/...`.
8. Submit without rules acceptance → rejected.
9. Property admin opens booking → sees inline previews, no default download.
10. Property admin approves booking → status updated, timestamp logged.
11. Property admin rejects booking → status updated, reason logged.
12. Property admin downloads file (if enabled) → signed URL with audit log.
13. Expired subscription property cannot create new bookings.
14. Scheduler deletes files 60 days after check‑out.
15. Superadmin dashboard shows property list with subscription status.
Related categories:
PHP
Software Architecture
MySQL
HTML
Web Development
Frontend Development
API Development
Next.js
Web Application
SaaS