Skip to Content
Trips Enjoy
Software (SRS)

Software Requirements

Introduction, overall description and external interfaces of the SRS.

1. Document control

Document control

Product Trips Enjoy (trips-enjoy.com)
Document type Software Requirements Specification
Version 1.1
Date 9 November 2026
Status For review. Items marked [OPEN] need a decision before the affected behavior ships. Items marked (placeholder) carry a working value that the named owner must confirm.
Owner Product and Engineering (Trips Enjoy)
Approvers [OPEN: named approvers, D-314]
Companion documents BRD v1.1 (source of every BR, BRL, OD and RSK ID), ERD v1.0 (data model), user-flows/ 00 to 08 (per-app flows), Tasks.md (delivery backlog), trips-enjoy-technical-architecture.md (architecture, 18 Apr 2026).
Source status for this version Read in full: BRD v1.1, technical architecture (18 Apr 2026), system workflows (18 Apr 2026), auth and account rules (4 Oct 2026), design value audit and screen coverage audit (17 Oct 2026, which quote the decision register D-numbers). Where the October documents and the April documents conflict, the October documents win.

1.1 Changes from v1.0

AreaChange
SourcesArchitecture, workflows and auth rules now reviewed. Conflict C-06 (architecture not reviewed) and C-07 (user-flows 03 to 08 missing) are closed.
Open items closedAbout 40 [OPEN] items are now set from the decision register: verification by role, appeal window, deal expiry, refund table (placeholder), retry after hold expiry, payment attempts, active-trip definition, coupon counting, webhook policy, invoice rules, settlement rules, payout schedule, dispute SLAs, incident categories, retention periods, capacity stages, backups, observability tools, paging, deprecation notice, maintenance window, digits.
Changed behaviorOrganization-cancelled trips now refund in full (D-150, was "same policy as traveler refund"). Filling Up now starts at 80 percent of seats reserved (D-189, was "first booking"). Check-in events are kept 1 year, not 7 (D-45). Account lockout now applies to all roles (D-53).
New modulesMKT (markets), ANL (analytics), API (public API, Could).
New requirementsFR-ORG-08, FR-STF-07, FR-PAY-08, FR-PAY-09, FR-SUB-08 to FR-SUB-11, FR-TRK-07, FR-DRV-08, FR-NTF-07, FR-ADM-08, FR-ADM-09, FR-ACC-08 to FR-ACC-10, FR-MKT-01 to FR-MKT-05, FR-ANL-01 to FR-ANL-05, FR-API-01.
New state machines7.9 Settlement, 7.10 Dispute.
DataSection 6 now points to ERD for tables and columns; entity list extended with Market, Settlement, Dispute and Analytics.

2. Introduction

2.1 Purpose

This SRS states what the Trips Enjoy software shall do and the qualities it shall have. It is the basis for design, build, test and acceptance. Every functional requirement traces to a business requirement (BR), business rule (BRL) or open decision (OD) in the BRD. Section 10 holds the traceability matrix. The BRD states what the business needs. This SRS states how the software must behave to meet those needs. It does not restate business policy except where the software must enforce it.

2.2 Scope

Trips Enjoy is a bilingual (Arabic and English) multi-tenant SaaS marketplace for organized group trips. This SRS covers the software for:

  • Accounts, identity, sign-in and role-specific registration.
  • Applications and approvals for organizations, platform drivers and platform photographers.
  • Organization workspaces: trips, programs, fleet, staff, employees and permissions, coupons, subscriptions, accounting, invoices, analytics, CRM and webhooks.
  • Traveler booking, seat selection, checkout, payment, refunds, receipts and invoices.
  • Deal negotiation between organizations and platform suppliers.
  • Vehicle moderator check-in and check-out, live tracking, and the parent tracker.
  • Photo albums with three privacy modes.
  • Driver lab-test workflow.
  • Notifications, the platform admin console, the ledger, payouts and settlements.
  • Market configuration by country.

This SRS does not cover business policy beyond what the software enforces (BRD), per-market legal reviews, marketing site content, visual design, or the detailed API specification (OpenAPI, generated from code).

2.3 Definitions and acronyms

TermMeaning
Admin consoleThe platform staff web application at admin.trips-enjoy.com.
ApplicantA user who has submitted an application to become an organization, platform driver or platform photographer.
BR, BRL, OD, RSKBusiness requirement, business rule, open decision and risk IDs in the BRD.
Child linkA record that connects a parent or guardian to a child traveler on one booking.
D-nnA decision in the decision register, as quoted in the design value audit (17 Oct 2026).
DealA negotiated agreement between an organization and a platform driver or photographer for one vehicle or trip.
DunningPayment retries and reminders after a failed subscription payment.
Feature gateA server-side check that blocks an action when the account's plan does not allow it.
FRFunctional requirement.
Grace periodThe 7 days after a failed renewal during which features stay active.
HoldA temporary reservation of a seat during checkout: 15 minutes, or the voucher window for Fawry cash.
LedgerThe double-entry record of every financial event.
MarketThe country configuration that sets currency, payment methods, tax rules and default time zone.
ModeratorA person supervising one vehicle on one trip. Sees only that vehicle.
MoSCoWPriority scale: Must, Should, Could. Maps to BRD M, S and C.
NFRNon-functional requirement.
OrganizationA travel company, school, employer or event organizer that runs trips. Each organization is a tenant.
Organization-owned driver or photographerA driver or photographer belonging to one organization and visible only to it.
Parent trackerThe section of the traveler app where parents see their linked children's trip status.
Platform driver or photographerAn independent, admin-approved supplier who serves any organization through a deal.
PlanA subscription tier with limits and features, for one role, priced per market.
SettlementThe per-trip record of amounts owed between the platform, the organization and its suppliers, tracked until every line is paid.
TenantOne organization's isolated workspace.
TravelerA person who books and attends trips.
TripThe single record for one organized trip, which may run many vehicles.
Vehicle typeA reusable seat layout.
ZATCASaudi Arabia's e-invoicing authority and rules.
AcronymsAPI: application programming interface. CDN: content delivery network. FCM and APNS: Firebase Cloud Messaging and Apple Push Notification service. GDPR: EU General Data Protection Regulation. GPS: global positioning system. HMAC: hash-based message authentication code. JWT: JSON Web Token. MRR: monthly recurring revenue. OTP: one-time password. PDPL: personal data protection law. PWA: progressive web app. RLS: row-level security. RPO and RTO: recovery point and recovery time objectives. SSE: server-sent events. TLS: transport layer security. WCAG: Web Content Accessibility Guidelines.

2.4 References

DocumentVersion or dateUse in this SRS
BRDv1.1, 9 Nov 2026Primary source of BR, BRL, OD and RSK IDs, plans, markets and flows.
ERDv1.0, 9 Nov 2026Tables, columns, lookup types and RLS paths for every entity in section 6.
user-flows/9 Nov 2026Per-app flows (UF IDs), screens and edge cases.
Technical architecture18 Apr 2026Stack, tenancy model, real-time design, payments, media, jobs, observability, security, capacity, backups.
System workflows18 Apr 2026State machines and sequences, where the October documents are silent.
Auth and account rules4 Oct 2026Verification, sessions, sign-in, applications, lab tests and deletion.
Design value audit17 Oct 2026Decision register values (D-numbers) and canvas conflicts.

2.5 Document conventions

  • Requirement IDs use FR-module-NN and NFR-group-NN. IDs are stable. A retired ID is not reused.
  • Each functional requirement has a title, a "shall" statement, a priority, its sources, and one to three acceptance criteria written as Given, when, then.
  • Priorities use MoSCoW. Must means required for the BRD phase in which the module appears. Should means required in that phase if effort allows. Could means deferrable.
  • [OPEN] marks a value no source sets. (placeholder) marks a working value that its owner must confirm. Neither blocks the requirements around it, but the affected behavior does not ship until it is set.
  • Money is an amount in minor units with a currency code. Every amount shown carries its currency code.
  • Terms follow the BRD glossary.

3. Overall description

3.1 Product perspective

Trips Enjoy is one product with one codebase (a modular monolith) and shared-schema multi-tenant data with row-level security (architecture sections 1 and 4).

PartFormPrimary users
Traveler app, including the parent tracker sectionResponsive web and mobile apps (iOS, Android)Travelers, parents and guardians
Organization dashboardResponsive web app at business.trips-enjoy.comOrganization owners and employees
Admin consoleWeb app at admin.trips-enjoy.com, staff onlyPlatform admins
Driver appMobile app; web limited to documents and profile (D-86)Platform drivers and organization-owned drivers
Photographer studioResponsive web in phase 1, mobile app available (D-86)Platform and organization-owned photographers
Moderator appInstallable web app on phones, scoped to one vehicleVehicle moderators
Backend servicesREST API, WebSocket channel with SSE fallback, scheduled jobs, queues, notification service, payments and ledger, media pipeline, searchAll surfaces and external systems
External systemsPayment gateways, messaging, email, push, maps, lab partners, CRM and webhook targets, business registry (manual in phase 1)See section 4.3

3.2 Product functions by module

CodeModuleSummary
AUTHAccounts, identity and accessRole-specific registration, verification, sign-in, sessions, multi-role accounts, organization switching, suspension and deletion.
ONBApplications and approvalsSubmission, the single admin queue, changes requested, rejection, appeal and re-application, supplier document rules.
ORGOrganization tenancy and settingsTenant setup, isolation, organization-owned suppliers, fleet, seat settings, CRM and webhooks, invoices, branding.
EMPEmployees and permissionsInvitations, permission sets, limits, scope enforcement.
TRIPTripsWizard, publishing, multi-vehicle trips, lifecycle, changes that affect bookings.
PRGProgramsPricing models, program types, live summary, enrollment reports.
FLTFleet and vehicle typesSeat layouts and vehicles.
STFStaffingDriver and photographer tracks, Ready gate, moderator assignment.
NEGDeal negotiationProposals, counters, expiry, mutual acceptance, finalization.
SEATSeatsCompany-assigned and self-selected seats, live seat map, holds.
BKGBooking and checkoutCart, passengers, programs, seats, coupon, checkout, cancellation, receipts.
PAYPayments and refundsGateway handoff, outcomes, pending and voucher states, retries, refunds, reconciliation.
CPNCouponsScope, validation, redemption, reversal, analytics, abuse flags.
SUBPlans and subscriptionsCatalog, feature gates, dunning, grace, upgrades and downgrades, overrides, counters.
CHKCheck-in and check-outModerator events, vehicle match, offline queue, incidents, occupancy.
MODModerator appScoped access, sign-in, end-of-trip report.
TRKLive trackingVehicle positions and passenger movement for operations.
PARParent trackerChild linking, view scope, eligibility, notifications, safety reports.
MEDMedia and albumsAlbums, privacy modes, watermarking, downloads.
PHOPhotographer studioPortfolio, rates, availability, earnings, plan rules.
DRVDriver app and lab testsWork area, deals, lab-test gate, deadlines, suspension, earnings.
ADMAdmin consoleAccounts, admin staff, configuration, disputes, lab tests, audit log.
ACCAccounting and settlementsLedger, accounting views, payouts, settlements, invoices across parties, reconciliation, exports.
NTFNotificationsChannels, language, quiet hours, templates, delivery, reminders.
TRVTraveler profile and historyProfile, visibility, history, discounts, plan changes, privacy requests.
MKTMarketsCountry configuration: currency, methods, tax, time zone, prices.
ANLAnalyticsOrganization, supplier and admin analytics.
APIPublic APIDocumented API for organizations and partners (Could).

3.3 User classes and characteristics

User classCharacteristicsPlan requirementMain surface
VisitorBrowses public trips and registration pages. Not signed in.NoneTraveler app
TravelerBooks trips. Mobile-first. Any age, so child-data rules apply.None (Free, Explorer, VIP)Traveler app
Parent or guardianA traveler on Explorer or VIP with linked children.Explorer or VIP, plus organization eligibility (FR-PAR-03)Parent tracker
Platform adminStaff. Roles: Super admin, Operations, Finance (D-49).StaffAdmin console
Organization ownerRegisters, pays and runs the tenant.Starter, Growth or EnterpriseOrganization dashboard
Organization employeeWorks within granted permissions. May belong to several organizations.Organization planOrganization dashboard
Platform driverIndependent, admin-approved. Works through deals.Basic, Professional or PremiumDriver app
Organization-owned driverDrives for one organization only.Organization plan (OD-19, proposed)Driver app
Platform photographerIndependent, admin-approved. Works through deals.Basic, Studio or ProPhotographer studio
Organization-owned photographerWorks for one organization only.Organization plan (OD-19, proposed)Photographer studio
Vehicle moderatorOne vehicle on one trip. Often non-technical, on a bus, with a phone.[OPEN: OD-06]Moderator app

3.4 Operating environment

ItemRequirement
Web browsersCurrent and previous major versions of Chrome, Safari, Edge and Firefox on desktop and mobile [OPEN: confirm list].
Mobile operating systemsiOS and Android [OPEN: minimum versions]. Apps prompt for update when below the supported version.
Moderator appInstallable web app on Android and iOS, working on mobile data, with an offline queue (FR-CHK-05).
LanguagesArabic (right to left) and English from the first release. Western digits 0 to 9 in both (D-159).
Time zonesEach trip has a time zone. An organization's time zone defaults to its market's main zone: Cairo, Riyadh or Dubai (D-282). Times show in the trip's time zone, plus the viewer's zone where they differ.
Hosting regionRecommended: AWS me-central-1 (UAE) primary with cross-region backups (architecture 20.2) [OPEN: confirm against Egyptian data residency, [NFR-DAT-04](/en/docs/srs/quality#85-data-nfr-dat)].

3.5 Design and implementation constraints

IDConstraint
CON-01Tenant isolation is mandatory. One organization's data is never visible to another (BRL-01).
CON-02Card data never reaches Trips Enjoy servers. Payment runs on the gateway's hosted pages or SDKs (BR-BKG-02).
CON-03Arabic and English from the first release, with right-to-left layouts.
CON-04Markets: Egypt pilot in phase 2; Saudi Arabia and the UAE in phase 5 (D-69).
CON-05Recommended stack (architecture section 3, to confirm in T-FND-01): TypeScript end to end; NestJS modular monolith; PostgreSQL 16 with RLS and TimescaleDB; Redis 7; SQS and SNS; Next.js web; React Native mobile; S3 or R2 with CDN; AWS with ECS Fargate; Terraform; GitHub Actions.
CON-06Plan limits and feature gates are enforced on the server (BRL-02).
CON-07Every financial event is written to a double-entry ledger (BRL-18).
CON-08Child data is never used for advertising, marketing or model training.
CON-09Delivery follows the six phases in BRD 3.3.
CON-10Providers follow BRD 9.2. Gateway choice per market follows OD-11.
CON-11Database conventions follow ERD section 1: BIGSERIAL keys with a public UUID, TIMESTAMPTZ, soft delete with audit columns, and lookup tables instead of enum types.

3.6 Assumptions and dependencies

Assumptions in BRD 9.1 and dependencies in BRD 9.2 apply. Additional assumptions:

IDAssumptionImpact if wrong
ASM-01One account can hold traveler and supplier roles at once.Account model changes.
ASM-02Lab partner results reach the platform directly. Driver upload is the fallback.FR-DRV-04 changes.
ASM-03Live location is collected only while a trip is In Progress.Tracking and privacy design change.
ASM-04Only the owner, or an employee with the subscription permission, changes plans and billing.Permission design changes.
ASM-05A trip is sold in its organization's market currency only.Multi-currency pricing would be needed.

4. External interface requirements

4.1 User interfaces

SurfaceUsersAccess rules
Traveler appTravelers, parentsPublic browsing. Booking and account actions after sign-in.
Organization dashboardOwners, employeesPassword plus SMS or authenticator code at every sign-in. Tenant-scoped. Organization switcher.
Admin consoleAdminsPassword plus mandatory authenticator. Separate route.
Driver appDriversSign-in. Restricted to four actions while a lab test is pending (FR-DRV-03).
Photographer studioPhotographersSign-in. Plan-gated features.
Moderator appModeratorsStaff code. One vehicle.
Parent trackerParentsSection of the traveler app (D-124). Linked children only.
IDInterface requirementPriority
UI-01Every surface supports Arabic and English, with the language switch available on every screen without losing the current task.Must
UI-02Arabic layouts mirror fully: navigation, forms, tables, charts and icons that imply direction.Must
UI-03Every surface meets WCAG 2.1 Level AA (proposed).Must
UI-04Every surface reflows to a 360 px phone width without horizontal page scrolling, with a 16 px side gutter.Must
UI-05Forms show errors next to the field in the user's language and keep entered data after an error.Must
UI-06Every amount is labeled with its currency code and follows the market's rounding rule.Must
UI-07Admin console and organization dashboard use separate routes from the traveler app.Must
UI-08Destructive and money-moving actions use a confirmation step that names the effect.Must
UI-09No screen shows a card number field. Payment opens the gateway page or SDK.Must

4.2 Hardware interfaces

No special hardware. Phones are used for GPS (check-in location, live tracking), camera (document capture, ticket scan, photo upload) and push. Where a permission is denied, the user is told what is missing and what still works. If location is denied at check-in, the event is still recorded without location and flagged (proposed).

4.3 Software interfaces

InterfacePurposeNotes
Stripe (cards, Apple Pay, Google Pay, Billing, Connect Express)Bookings, plans, refunds, payoutsHosted pages or Elements; webhooks.
Paymob or TapLocal cards in MENAPer market (OD-11).
FawryCash vouchers in EgyptVoucher valid 48 hours (D-31).
SMS and WhatsApp (Twilio or local provider)OTP, staff codes, notificationsDelivery status recorded; switch channel after 3 failed deliveries.
Transactional email (AWS SES, Postmark fallback)Notifications, receipts, invoicesBounce and complaint handling.
Push (FCM, APNS)Mobile notificationsToken per signed-in device.
Maps and routing (Mapbox)Routes, stops, live mapTiles and routing only; location data stays on platform storage.
Object storage and CDN (S3 or R2, CloudFront or Cloudflare)Media and documentsIdentity documents in a restricted bucket. Direct upload by presigned URL.
Lab partner networkDriver lab testsResults sent from the lab to the platform.
Business registry and tax checksOrganization onboardingManual in phase 1 (OD-16).
CRM and outbound webhooksEvents to organization systemsFR-ORG-06.
Search (Postgres full-text first; OpenSearch or Meilisearch later)Trip and supplier discoveryEvent-driven indexing; 5 to 30 seconds lag accepted.

4.4 Communications interfaces

IDRequirementPriority
COM-01All client-server traffic uses HTTPS with TLS 1.3 and HSTS. Mobile apps pin certificates.Must
COM-02The real-time channel uses WebSocket with SSE fallback, for the seat map, live tracking, deal updates and operations dashboards.Must
COM-03Every real-time subscription is authenticated and authorized for the trip, vehicle, deal or account it names before data is sent.Must
COM-04Outbound webhooks use HTTPS, are signed with HMAC-SHA256 over the body and a timestamp, and carry an event identifier. Receivers reject timestamps older than 5 minutes (D-62).Must
COM-05Inbound gateway and messaging callbacks are verified against the provider's signature before any state change.Must

Module index

Section 5 is split into one page per module:

Each module lists its requirements. Source IDs refer to the BRD. Acceptance criteria are Given, when, then sentences.

On this page