# Application Overview: Krow Web Platform (Backend) ## 1. Executive Summary The **Krow Web Platform** is the central "brain" and "command center" of the entire Krow ecosystem. While the mobile apps are the tools used in the field, this web application is the engine that powers them. It serves two primary functions: 1. **The Engine:** It processes all data from the mobile apps—saving new events, finding available staff, handling payments, and verifying check-ins. 2. **The Control Tower (Admin Panel):** It provides a powerful website where Krow administrators can oversee the entire business, manage users, resolve disputes, and configure system-wide settings. ## 2. High-Level Architecture The application follows a **Monolithic Web Architecture** using the **Laravel** framework. This is a battle-tested, robust structure ideal for building complex, data-heavy business platforms. * **The API Server (The Voice):** It listens for requests from the mobile apps (using **GraphQL**). When a phone asks "Show me my shifts," this server understands the question, fetches the answer, and sends it back. * **The Database (The Memory):** A centralized vault where all information (User profiles, Shift details, Invoices) is safely stored. * **The Admin Interface (The Dashboard):** A secure website (built with **Laravel Nova**) that allows internal staff to view and edit this data directly without writing code. ## 3. Major Components & Modules The system is divided into logical "domains" representing different parts of the business. ### A. Core Business Logic (`app/Models`, `app/Actions`) * **Purpose:** The rules of the business. * **Key Functions:** Defining what an "Event" is, how a "Shift" relates to a "Position," and ensuring that a Staff member cannot be in two places at once. ### B. API Layer (`app/GraphQL`) * **Purpose:** The communication hub for mobile apps. * **Key Functions:** * **Client API:** specialized endpoints for business owners to create jobs. * **Staff API:** specialized endpoints for workers to find jobs. * **Authentication:** Verifying who is asking for data. ### C. Administration Panel (`app/Nova`) * **Purpose:** Internal management tool. * **Key Functions:** * **User Management:** Approving new staff, verifying documents. * **Content Management:** Managing skills lists, certificate types, and system tags. * **Audit Logs:** Viewing history of who did what. ### D. Financial Engine (`app/Models/Payroll`, `app/Models/Invoice`) * **Purpose:** Money management. * **Key Functions:** Calculating staff pay based on hours worked, generating invoices for clients, and tracking payment status. ### E. Notification System (`app/Notifications`) * **Purpose:** Keeping everyone in the loop. * **Key Functions:** Sending emails, SMS, or push notifications when shifts are accepted, cancelled, or when payments are processed. ## 4. Component Responsibilities * **Controllers/Resolvers:** These receive a request (e.g., "Create Shift"), validate it (e.g., "Is the date in the future?"), and pass it to the Logic layer. * **Service Classes:** These perform specific complex tasks, like "Calculate total cost for this event including tax and service fees." * **Eloquent Models:** These represent the data tables. The `Staff` model knows how to talk to the `staff` table in the database. * **Nova Resources:** These define how data looks in the Admin Panel. A `StaffResource` defines that a staff member has a name, photo, and rating, and tells the admin panel how to display them. ## 5. External System Communication * **Firebase:** Uses Firebase Authentication for secure user identity and Firebase Cloud Messaging for push notifications. * **Database (MySQL/PostgreSQL):** The primary storage for all application data. * **Storage (AWS S3 / DO Spaces):** Stores user uploaded files like profile photos and certificates. * **Payment Gateway (Stripe/Similar):** (Implied) Handles the actual processing of credit card transactions and payouts. * **Maps/Geolocation APIs:** Used to validate addresses and calculate distances between staff and venues. ## 6. Architectural Patterns * **MVC (Model-View-Controller):** The traditional Laravel pattern, adapted here where "View" is mostly replaced by the GraphQL API or the Nova Admin panel. * **Action-Based Domain Logic:** Complex business operations (like "Assign Staff to Shift") are often encapsulated in single "Action" classes rather than hidden inside massive models. * **GraphQL Schema-First:** The API is defined by a typed schema (`.graphql` files), ensuring a strict contract between the frontend and backend. ## 7. Key Design Decisions & Impact ### A. GraphQL (Lighthouse) * **Decision:** Using GraphQL instead of traditional REST API endpoints. * **Why it matters:** Allows the mobile apps to be very efficient. They can ask for deep, related data (Event -> Shifts -> Staff -> Ratings) in a single network request, making the apps faster. ### B. Laravel Nova * **Decision:** Using a pre-built administration package instead of building a custom admin panel from scratch. * **Why it matters:** Drastically reduced development time. It provides a professional, secure, and feature-rich dashboard out of the box, allowing the team to focus on the unique app features. ### C. Role-Based Access Control (Spatie Permissions) * **Decision:** Implementing a granular permission system. * **Why it matters:** Security. It ensures that a "Client" can never see "Admin" data, and a "Staff" member can only see shifts relevant to them. ## 8. Overview Diagram ```mermaid flowchart TD %% Define Styles classDef interface fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1 classDef logic fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#bf360c classDef data fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20 classDef external fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c subgraph Server_Application [Krow Web Platform] direction TB subgraph Interfaces [Access Layers] direction TB Admin_Panel[Admin Panel (Laravel Nova)]:::interface GraphQL_API[GraphQL API (Lighthouse)]:::interface end subgraph Domain_Logic [Core Business Engine] direction TB Models[Data Models]:::logic Actions[Business Actions & Rules]:::logic Notifications[Notification System]:::logic Payroll[Payroll & Invoicing Engine]:::logic end subgraph Data_Storage [Persistence Layer] direction TB MySQL[(Main Database)]:::data Storage[File Storage (S3/DO Spaces)]:::data end end subgraph External_World [External Ecosystem] direction TB Mobile_Apps[Mobile Apps (Client & Staff)]:::external Firebase[Firebase (Auth & Push)]:::external Maps_API[Maps & Geolocation]:::external end %% Connections Mobile_Apps <-->|GraphQL Requests| GraphQL_API Admin_Panel --> Actions GraphQL_API --> Actions Actions --> Models Actions --> Payroll Actions --> Notifications Models <--> MySQL Models <--> Storage Notifications -->|Send Push/Email| Firebase Actions -->|Validate Location| Maps_API ```