This commit is contained in:
bwnyasse
2026-01-10 21:22:35 -05:00
parent 90455d9181
commit d43a14ee0c
116 changed files with 41323 additions and 19 deletions

View File

@@ -0,0 +1,67 @@
graph TB
Title["<b>KROW - Cloud Architecture</b><br/>Production Solution"]
subgraph Prototype[" "]
Proto["🔧 Current KROW Prototype<br/>(Demo Only)"]
end
Title --> Prototype
Title --> Production
subgraph Production["🏢 KROW - PRODUCTION ARCHITECTURE"]
subgraph GCP["☁️ Google Cloud Platform - US Regions"]
subgraph Auth["🔐 Authentication"]
Firebase["Firebase Auth<br/>• MFA<br/>• OAuth 2.0"]
end
subgraph Backend["⚙️ Backend"]
Functions["Cloud Functions<br/>• Serverless<br/>• Auto-scaling"]
API["API Gateway<br/>• Secure APIs<br/>• Rate limiting"]
end
subgraph Data["💾 Data Storage"]
Firestore["Firestore/Cloud SQL<br/>• Encrypted at rest<br/>• Auto backup"]
Storage["Cloud Storage<br/>• Encrypted<br/>• Access control"]
end
subgraph Security["🛡️ Security"]
IAM["Cloud IAM<br/>• Access control<br/>• Least privilege"]
Logs["Logging & Monitoring<br/>• Audit trails<br/>• Real-time alerts"]
end
end
subgraph Compliance["✅ COMPLIANCE"]
GDPR["📋 GDPR Ready<br/>• US data hosting<br/>• User rights<br/>• Data portability"]
SOC2["🏆 SOC 2 Ready<br/>• Google certified<br/>• Security controls<br/>• Full audit trails"]
end
end
Users["👥 End Users"]
Proto -.->|Migration vers| Production
Users --> Auth
Auth --> API
API --> Functions
Functions --> Firestore
Functions --> Storage
IAM --> Auth
IAM --> Backend
IAM --> Data
Logs --> Security
GCP --> GDPR
GCP --> SOC2
style Prototype fill:#FFF3CD,stroke:#856404,stroke-width:2px,stroke-dasharray: 5 5
style Proto fill:#FFF3CD,stroke:#856404
style Title fill:#1976D2,stroke:#0D47A1,stroke-width:3px,color:#FFFFFF
style Production fill:#D4EDDA,stroke:#155724,stroke-width:3px
style GCP fill:#E3F2FD,stroke:#1976D2,stroke-width:2px
style Auth fill:#E8F5E9,stroke:#2E7D32
style Backend fill:#E8F5E9,stroke:#2E7D32
style Data fill:#E8F5E9,stroke:#2E7D32
style Security fill:#FFE0B2,stroke:#E65100
style Compliance fill:#F3E5F5,stroke:#6A1B9A,stroke-width:2px
style GDPR fill:#E1BEE7,stroke:#6A1B9A
style SOC2 fill:#E1BEE7,stroke:#6A1B9A

View File

@@ -0,0 +1,70 @@
sequenceDiagram
participant Client as 🏢 Client App
participant Backend as 🌐 Backend API
participant Admin as ⚙️ KROW Admin
participant Staff as 👥 Staff App
%% Event Creation
Note over Client,Backend: 1. Event & Shift Creation
Client->>Backend: Create Event with Shifts & Positions
Backend-->>Client: Event Created (Draft)
Client->>Backend: Publish Event
Backend-->>Client: Event Published
%% Staff Assignment
Note over Admin,Backend: 2. Staff Assignment
Admin->>Backend: View Available Events
Backend-->>Admin: Event List
Admin->>Backend: Assign Staff to Shift
Backend-->>Admin: Assignment Confirmed
Backend->>Staff: Notification: New Shift Assigned
%% Shift Acceptance
Note over Staff,Backend: 3. Shift Acceptance
Staff->>Backend: View Shift Details
Backend-->>Staff: Shift Information
Staff->>Backend: Accept Shift
Backend-->>Staff: Shift Confirmed
Backend->>Client: Notification: Staff Confirmed
%% Clock In
Note over Client,Staff: 4. Clock In - Day of Event
Client->>Client: Generate QR Code for Event
Staff->>Staff: Scan QR Code
Staff->>Backend: Clock In Request (via QR)
Backend-->>Staff: Clock In Confirmed
Backend->>Client: Notification: Staff Clocked In
Client->>Backend: (Alternative) Manual Clock In
Backend-->>Client: Manual Clock In Confirmed
%% Shift Active
Note over Staff: 5. Shift In Progress
Staff->>Staff: View Real-time Timer
%% Clock Out
Note over Client,Staff: 6. Clock Out - End of Shift
Staff->>Staff: Scan QR Code
Staff->>Backend: Clock Out Request (via QR)
Backend-->>Staff: Clock Out Confirmed
Backend-->>Staff: Shift Status: Completed
Backend->>Client: Notification: Staff Clocked Out
%% Rating & Invoicing
Note over Client,Backend: 7. Post-Shift Activities
Client->>Backend: Rate Staff Performance
Backend-->>Client: Rating Recorded
Backend->>Backend: Generate Invoice
Backend->>Client: Invoice Created
Client->>Backend: Review & Approve Invoice
Backend-->>Client: Invoice Approved
%% Payment
Note over Staff,Backend: 8. Staff Payment
Backend->>Staff: Payment Processed
Staff->>Backend: View Earnings & Payment History
Backend-->>Staff: Payment Details
alt Payment Dispute
Staff->>Backend: Contest Payment Amount
Backend-->>Staff: Dispute Opened
end

View File

@@ -0,0 +1,61 @@
graph TB
subgraph "Actors"
Staff[👥 Staff/Employee]
Client[🏢 Client/Business]
Admin[⚙️ KROW Admin]
end
subgraph "KROW Staff App"
SA_Auth[Authentication & Onboarding]
SA_Shifts[Shift Management]
SA_Earnings[Earnings & Payments]
SA_Profile[Profile Management]
end
subgraph "KROW Client App"
CA_Events[Event Creation]
CA_Staff[Staff Management]
CA_Time[Time Tracking - QR Code]
CA_Invoice[Invoicing]
end
subgraph "Backend System"
API[Backend API]
DB[(Database)]
end
%% Staff interactions
Staff -->|Registers & Manages Profile| SA_Auth
Staff -->|Views & Accepts Shifts| SA_Shifts
Staff -->|Scans QR Code - Clock In/Out| SA_Shifts
Staff -->|Tracks Earnings| SA_Earnings
Staff -->|Updates Skills & Documents| SA_Profile
%% Client interactions
Client -->|Creates Events & Shifts| CA_Events
Client -->|Views Assigned Staff| CA_Staff
Client -->|Generates QR Code| CA_Time
Client -->|Manual Clock In/Out| CA_Time
Client -->|Rates Staff| CA_Staff
Client -->|Reviews & Approves Invoices| CA_Invoice
%% Admin interactions
Admin -->|Assigns Staff to Shifts| API
Admin -->|Validates Staff Profiles| API
%% App to Backend connections
SA_Auth -.->|Profile Data| API
SA_Shifts -.->|Shift Status Updates| API
SA_Earnings -.->|Payment Data| API
SA_Profile -.->|User Data| API
CA_Events -.->|Event & Shift Data| API
CA_Staff -.->|Staff Ratings| API
CA_Time -.->|Time Records| API
CA_Invoice -.->|Invoice Data| API
API <-->|Data Storage & Retrieval| DB
style Staff fill:#e1f5ff
style Client fill:#fff4e1
style Admin fill:#f0e1ff

View File

@@ -0,0 +1,40 @@
graph LR
START[💼 Shift<br/>Completed<br/>& Rated]
START --> CALC[📊 INTERNAL<br/><br/>Calculate Invoice<br/>• Hours worked<br/>• Rates × Hours<br/>• Overtime calc<br/>• Platform fees<br/>• Tax amounts]
CALC --> GENERATE[📄 INTERNAL<br/><br/>Generate Invoice<br/>• Create PDF<br/>• Invoice number<br/>• Line items<br/>• Due date]
GENERATE --> SAVE[💾 INTERNAL<br/><br/>Save to Database<br/>• Store invoice<br/>• Status: pending<br/>• Track history]
SAVE --> SEND[📧 API INTEGRATION<br/><br/>SendGrid<br/>• Send email<br/>• Track delivery<br/>• Reliable inbox]
SEND --> CLIENT[📱 Client<br/>Reviews<br/>Invoice]
CLIENT --> DECISION{Approve or<br/>Dispute?}
DECISION -->|⚠️ Dispute| DISPUTE[🔧 INTERNAL<br/><br/>Handle Dispute<br/>• Admin reviews<br/>• Adjustments<br/>• Re-calculate]
DISPUTE --> SAVE
DECISION -->|✅ Approve| PAY[💳 API INTEGRATION<br/><br/>Stripe<br/>• Credit card<br/>• ACH transfer<br/>• Payment tracking]
PAY --> CONFIRM[💾 INTERNAL<br/><br/>Update Status<br/>• Mark as paid<br/>• Record payment<br/>• Update reports]
CONFIRM --> PAYOUT[💰 API INTEGRATION<br/><br/>Stripe Connect<br/>• Pay staff<br/>• Direct deposit<br/>• Automated]
PAYOUT --> RECORD[📊 INTERNAL<br/><br/>Track Payments<br/>• Staff earnings<br/>• Payment history<br/>• Reports]
RECORD --> DONE[✅ Complete]
style START fill:#E1F5FF
style CALC fill:#FFF9E6,stroke:#F9A825,stroke-width:3px
style GENERATE fill:#FFF9E6,stroke:#F9A825,stroke-width:3px
style SAVE fill:#FFF9E6,stroke:#F9A825,stroke-width:3px
style DISPUTE fill:#FFF9E6,stroke:#F9A825,stroke-width:3px
style CONFIRM fill:#FFF9E6,stroke:#F9A825,stroke-width:3px
style RECORD fill:#FFF9E6,stroke:#F9A825,stroke-width:3px
style SEND fill:#E3F2FD,stroke:#1976D2,stroke-width:3px
style PAY fill:#E3F2FD,stroke:#1976D2,stroke-width:3px
style PAYOUT fill:#E3F2FD,stroke:#1976D2,stroke-width:3px
style DONE fill:#90EE90

View File

@@ -0,0 +1,24 @@
graph TD
subgraph KROW Mobile Applications
direction LR
Mobile_Client[<b>Mobile Client App</b><br>Flutter]
Mobile_Staff[<b>Mobile Staff App</b><br>Flutter]
end
subgraph Firebase Backend Services - GCP
direction TB
Auth[Firebase Authentication]
DataConnect[<b>Firebase Data Connect</b><br>GraphQL API &<br>Generated SDKs]
SQL_DB[<b>Cloud SQL for PostgreSQL</b><br><i>Managed by Data Connect</i>]
end
Mobile_Client -- "Authenticates with" --> Auth
Mobile_Client -- "Calls API via generated SDK" --> DataConnect
Mobile_Staff -- "Authenticates with" --> Auth
Mobile_Staff -- "Calls API via generated SDK" --> DataConnect
DataConnect -- "Manages & Queries" --> SQL_DB
style Mobile_Client fill:#eef,stroke:#333,stroke-width:2px
style Mobile_Staff fill:#eef,stroke:#333,stroke-width:2px

View File

@@ -0,0 +1,29 @@
graph LR
subgraph Base44 Environment
direction TB
Client[Client] -- Modifies --> B44_UI[<b>Base44 Visual Builder</b><br><i>Features:</i><br>- Event Management<br>- Staff Directory<br>- Vendor Onboarding]
B44_UI --> B44_Backend[<b>Base44 Backend</b><br>Provides Entity Schemas<br>& SDK Operations]
B44_Backend --> B44_DB[Base44 Database]
end
subgraph Firebase Ecosystem - GCP
direction TB
KROW_FE[<b>KROW Frontend</b><br>Vite/React + TanStack Query<br><i>From Export</i>]
subgraph Firebase Services
direction TB
Auth[Firebase Authentication]
DataConnect[<b>Firebase Data Connect</b><br>GraphQL API &<br>Generated SDKs]
SQL_DB[<b>Cloud SQL for PostgreSQL</b><br><i>Managed by Data Connect</i>]
end
KROW_FE -- "Uses" --> Auth
KROW_FE -- "Calls Queries/Mutations via SDK" --> DataConnect
DataConnect -- "Manages & Queries" --> SQL_DB
end
B44_UI -- "<b>UI Code Export</b><br>(React Components)" --> KROW_FE
style Client fill:#f9f,stroke:#333,stroke-width:2px
style B44_UI fill:#ffe,stroke:#333,stroke-width:2px
style KROW_FE fill:#eef,stroke:#333,stroke-width:2px

View File

@@ -0,0 +1,32 @@
sequenceDiagram
participant Staff as Staff Member
participant App as KROW Staff App
participant Client as Client
participant Backend as Backend
Staff->>App: Opens shift and taps "Clock In"
activate App
App->>App: **1. Geofencing Check (GPS) BEFORE scan**
alt Proximity Validated
App->>Client: Requests QR Code
Client-->>Staff: Presents QR Code
Staff->>App: Scans the code
App->>Backend: Validates Clock In with eventId
Backend-->>App: Confirmation
App->>Staff: Displays "Clock In Successful"
else Proximity Failed (GPS bug, too far)
App->>Staff: Displays "Error: You are too far"
end
deactivate App
loop Continuous Monitoring DURING the shift
App->>App: **2. Checks GPS position (anti-fraud)**
opt Staff member leaves the > 500m area
App->>Backend: Notifies area exit
Backend-->>App: Triggers a "Force Clock-Out"
end
end
%% Clock Out process follows a similar logic (Geofencing + QR Code) %%

View File

@@ -0,0 +1,110 @@
[
{
"path": "assets/diagrams/architectures/0-infra-compliance.mermaid",
"title": "Infrastructure & Compliance",
"type": "mermaid",
"icon": "bi-shield-check"
},
{
"path": "assets/diagrams/architectures/1-core-workflow.mermaid",
"title": "Core Workflow",
"type": "mermaid",
"icon": "bi-diagram-3"
},
{
"path": "assets/diagrams/architectures/2-high-level-architecture.mermaid",
"title": "High-Level Architecture",
"type": "mermaid",
"icon": "bi-diagram-3"
},
{
"path": "assets/diagrams/architectures/3-invoice-workflow-simple.mermaid",
"title": "Invoice Workflow (Simple)",
"type": "mermaid",
"icon": "bi-receipt"
},
{
"path": "assets/diagrams/architectures/4-mobile-app-architecture.mermaid",
"title": "Mobile App Architecture",
"type": "mermaid",
"icon": "bi-phone"
},
{
"path": "assets/diagrams/architectures/5-web-app-architecture.mermaid",
"title": "Web App Architecture",
"type": "mermaid",
"icon": "bi-window"
},
{
"path": "assets/diagrams/architectures/6-geofencing-clockin-clockout.mermaid",
"title": "Geofencing Clock-In/Out",
"type": "mermaid",
"icon": "bi-geo-alt"
},
{
"path": "assets/diagrams/roadmap/roadmap.mermaid",
"title": "Project Roadmap",
"type": "mermaid",
"icon": "bi-calendar-check"
},
{
"path": "assets/diagrams/legacy/staff-mobile-application/overview.mermaid",
"title": "Legacy App Overview",
"type": "mermaid",
"icon": "bi-phone"
},
{
"path": "assets/diagrams/legacy/staff-mobile-application/use-case-flowchart.mermaid",
"title": "Legacy App Use Cases",
"type": "mermaid",
"icon": "bi-diagram-2"
},
{
"path": "assets/diagrams/legacy/staff-mobile-application/api-map.mermaid",
"title": "Legacy App API Map",
"type": "mermaid",
"icon": "bi-phone"
},
{
"path": "assets/diagrams/legacy/staff-mobile-application/use-case-flows.mermaid",
"title": "Legacy App Use Cases BE Chart",
"type": "mermaid",
"icon": "bi-diagram-2"
},
{
"path": "assets/diagrams/legacy/staff-mobile-application/backend-architecture.mermaid",
"title": "Legacy App Backend Architecture",
"type": "mermaid",
"icon": "bi-diagram-2"
},
{
"path": "assets/diagrams/legacy/client-mobile-application/overview.mermaid",
"title": "Legacy App Overview",
"type": "mermaid",
"icon": "bi-phone"
},
{
"path": "assets/diagrams/legacy/client-mobile-application/use-case-flowchart.mermaid",
"title": "Legacy App Use Cases",
"type": "mermaid",
"icon": "bi-diagram-2"
},
{
"path": "assets/diagrams/legacy/client-mobile-application/api-map.mermaid",
"title": "Legacy App API Map",
"type": "mermaid",
"icon": "bi-phone"
},
{
"path": "assets/diagrams/legacy/client-mobile-application/use-case-flows.mermaid",
"title": "Legacy App Use Cases BE Chart",
"type": "mermaid",
"icon": "bi-diagram-2"
},
{
"path": "assets/diagrams/legacy/client-mobile-application/backend-architecture.mermaid",
"title": "Legacy App Backend Architecture",
"type": "mermaid",
"icon": "bi-diagram-2"
}
]

View File

@@ -0,0 +1,55 @@
flowchart TD
subgraph "GraphQL API"
direction LR
subgraph "Queries"
Q1[getEvents]
Q2[getEventDetails]
Q3[getInvoices]
Q4[getInvoiceDetails]
Q5[getNotifications]
Q6[getNotificationDetails]
Q7[getProfile]
Q8[getAssignedStaff]
end
subgraph "Mutations"
M1[createEvent]
M2[updateProfile]
M3[rateStaff]
M4[clockIn]
M5[clockOut]
M6[uploadProfilePicture]
end
end
subgraph "Firebase"
direction LR
subgraph "Firestore Collections"
FS1[events]
FS2[invoices]
FS3[notifications]
FS4[users]
end
subgraph "Firebase Storage"
FB1[Profile Pictures]
end
end
Q1 --> FS1
Q2 --> FS1
Q3 --> FS2
Q4 --> FS2
Q5 --> FS3
Q6 --> FS3
Q7 --> FS4
Q8 --> FS1
Q8 --> FS4
M1 --> FS1
M2 --> FS4
M3 --> FS1
M3 --> FS4
M4 --> FS1
M5 --> FS1
M6 --> FB1

View File

@@ -0,0 +1,28 @@
flowchart TD
subgraph "Client"
A[Flutter App]
end
subgraph "Backend"
B[GraphQL Server - Node.js]
C[Firebase]
end
subgraph "Firebase Services"
C1[Firebase Auth]
C2[Firebase Firestore]
C3[Firebase Storage]
end
A -- "GraphQL Queries/Mutations" --> B
A -- "Authentication" --> C1
B -- "Data Operations" --> C2
B -- "File Operations" --> C3
C1 -- "User Tokens" --> A
C2 -- "Data" --> B
C3 -- "Files" --> B
B -- "Data/Files" --> A

View File

@@ -0,0 +1,65 @@
flowchart TD
subgraph "App Initialization"
A[main.dart] --> B(KrowApp);
B --> C{MaterialApp.router};
C --> D[Initial Route: /];
end
subgraph "Authentication Flow"
D --> E(SplashRoute);
E --> F{SplashRedirectGuard};
F -- Authenticated --> G(HomeRoute);
F -- Unauthenticated/Error --> H(SignInFlowRoute);
end
subgraph "Sign-In/Welcome Flow"
H --> I[WelcomeRoute];
I --> J[SignInRoute];
J --> K[ResetPassRoute];
L[Deeplink with oobCode] --> M[EnterNewPassRoute];
J -- Forgot Password --> K;
I -- Sign In --> J;
end
subgraph "Main Application (Home)"
G --> G_Tabs((Bottom Navigation));
G_Tabs -- Events --> Events;
G_Tabs -- Invoices --> Invoices;
G_Tabs -- Notifications --> Notifications;
G_Tabs -- Profile --> Profile;
G_Tabs -- Create Event --> CreateEvent;
end
subgraph "Events Flow"
Events[EventsFlow] --> Events_List(EventsListMainRoute);
Events_List --> Events_Event_Details(EventDetailsRoute);
Events_Event_Details --> Events_Assigned_Staff(AssignedStaffRoute);
Events_Assigned_Staff --> Events_Clock_Manual(ClockManualRoute);
Events_Event_Details --> Events_Rate_Staff(RateStaffRoute);
end
subgraph "Create Event Flow"
CreateEvent[CreateEventFlow] --> Create_Event_Edit(CreateEventRoute);
Create_Event_Edit --> Create_Event_Preview(EventDetailsRoute);
end
subgraph "Invoice Flow"
Invoices[InvoiceFlow] --> Invoice_List(InvoicesListMainRoute);
Invoice_List --> Invoice_Details(InvoiceDetailsRoute);
Invoice_Details --> Invoice_Event_Details(EventDetailsRoute);
end
subgraph "Notifications Flow"
Notifications[NotificationFlow] --> Notification_List(NotificationsListRoute);
Notification_List --> Notification_Details(NotificationDetailsRoute);
end
subgraph "Profile Flow"
Profile[ProfileFlow] --> Profile_Preview(ProfilePreviewRoute);
Profile_Preview --> Profile_Edit(PersonalInfoRoute);
end
style F fill:#f9f,stroke:#333,stroke-width:2px
style G fill:#bbf,stroke:#333,stroke-width:2px
style H fill:#bbf,stroke:#333,stroke-width:2px
style L fill:#f9f,stroke:#333,stroke-width:2px

View File

@@ -0,0 +1,80 @@
flowchart TD
subgraph "User"
U((User))
end
subgraph "Authentication Use Cases"
UC1(Sign In)
UC2(Sign Out)
UC3(Password Reset)
end
subgraph "Event Management Use Cases"
UC4(Create Event)
UC5(View Event Details)
UC6(List Events)
end
subgraph "Invoice Management Use Cases"
UC7(List Invoices)
UC8(View Invoice Details)
end
subgraph "Staff Management Use Cases"
UC9(View Assigned Staff)
UC10(Rate Staff)
UC11(Manual Clock In/Out)
end
subgraph "Profile Management Use Cases"
UC12(View Profile)
UC13(Edit Profile)
end
subgraph "Notification Use Cases"
UC14(List Notifications)
UC15(View Notification Details)
end
U --> UC1
UC1 -- Success --> UC6
UC1 -- Forgot Password --> UC3
UC6 --> UC5
UC5 --> UC9
UC9 --> UC11
UC5 --> UC10
U --> UC4
UC4 -- Success --> UC5
UC6 -- Triggers --> UC7
UC7 --> UC8
UC8 -- View Event --> UC5
U --> UC12
UC12 --> UC13
UC13 -- Success --> UC12
U --> UC14
UC14 --> UC15
UC12 -- Sign Out --> UC2
UC2 -- Success --> UC1
%% Styling
style UC1 fill:#f9f,stroke:#333,stroke-width:2px
style UC2 fill:#f9f,stroke:#333,stroke-width:2px
style UC3 fill:#f9f,stroke:#333,stroke-width:2px
style UC4 fill:#bbf,stroke:#333,stroke-width:2px
style UC5 fill:#bbf,stroke:#333,stroke-width:2px
style UC6 fill:#bbf,stroke:#333,stroke-width:2px
style UC7 fill:#bbf,stroke:#333,stroke-width:2px
style UC8 fill:#bbf,stroke:#333,stroke-width:2px
style UC9 fill:#bbf,stroke:#333,stroke-width:2px
style UC10 fill:#bbf,stroke:#333,stroke-width:2px
style UC11 fill:#bbf,stroke:#333,stroke-width:2px
style UC12 fill:#bbf,stroke:#333,stroke-width:2px
style UC13 fill:#bbf,stroke:#333,stroke-width:2px
style UC14 fill:#bbf,stroke:#333,stroke-width:2px
style UC15 fill:#bbf,stroke:#333,stroke-width:2px

View File

@@ -0,0 +1,45 @@
flowchart TD
subgraph "Sign-In Flow"
A1[User enters credentials] --> B1{SignInBloc};
B1 --> C1[Firebase Auth: signInWithEmailAndPassword];
C1 -- Success --> D1[Navigate to Home];
C1 -- Failure --> E1[Show error message];
end
subgraph "Password Reset Flow"
A2[User requests password reset] --> B2{SignInBloc};
B2 --> C2[Firebase Auth: sendPasswordResetEmail];
C2 -- Email Sent --> D2[User clicks deep link];
D2 --> E2[UI with new password fields];
E2 --> F2{SignInBloc};
F2 --> G2[Firebase Auth: confirmPasswordReset];
G2 -- Success --> H2[Show success message];
G2 -- Failure --> I2[Show error message];
end
subgraph "Event Listing Flow"
A3[User navigates to Events screen] --> B3{EventsBloc};
B3 --> C3[GraphQL Query: getEvents];
C3 --> D3[Firestore: events collection];
D3 -- Returns event data --> C3;
C3 -- Returns data --> B3;
B3 --> E3[Display list of events];
end
subgraph "Create Event Flow"
A4[User submits new event form] --> B4{CreateEventBloc};
B4 --> C4[GraphQL Mutation: createEvent];
C4 --> D4[Firestore: events collection];
D4 -- Success --> C4;
C4 -- Returns success --> B4;
B4 --> E4[Navigate to event details];
end
subgraph "Profile Viewing Flow"
A5[User navigates to Profile screen] --> B5{ProfileBloc};
B5 --> C5[GraphQL Query: getProfile];
C5 --> D5[Firestore: users collection];
D5 -- Returns profile data --> C5;
C5 -- Returns data --> B5;
B5 --> E5[Display profile information];
end

View File

@@ -0,0 +1,57 @@
graph TD
subgraph GraphQL API
subgraph Queries
Q1[getStaffStatus]
Q2[getMe]
Q3[getStaffPersonalInfo]
Q4[getStaffProfileRoles]
Q5[getShifts]
Q6[staffNoBreakShifts]
Q7[getShiftPosition]
end
subgraph Mutations
M1[updateStaffPersonalInfo]
M2[updateStaffPersonalInfoWithAvatar]
M3[uploadStaffAvatar]
M4[acceptShift]
M5[trackStaffClockin]
M6[trackStaffClockout]
M7[trackStaffBreak]
M8[submitNoBreakStaffShift]
M9[cancelStaffShift]
M10[declineShift]
end
end
subgraph Firebase Services
FS[Firebase Storage]
FF[Firebase Firestore]
FA[Firebase Auth]
end
M2 --> FS;
M3 --> FS;
Q1 --> FF;
Q2 --> FF;
Q3 --> FF;
Q4 --> FF;
Q5 --> FF;
Q6 --> FF;
Q7 --> FF;
M1 --> FF;
M2 --> FF;
M4 --> FF;
M5 --> FF;
M6 --> FF;
M7 --> FF;
M8 --> FF;
M9 --> FF;
M10 --> FF;
Q1 --> FA;
Q2 --> FA;
Q3 --> FA;

View File

@@ -0,0 +1,37 @@
graph TD
subgraph Flutter App
A[Flutter UI]
B[GraphQL Client]
C[Firebase SDK]
end
subgraph Backend
D[GraphQL Server]
E[Firebase]
end
subgraph Firebase
F[Firebase Auth]
G[Firebase Firestore]
H[Firebase Storage]
I[Firebase Cloud Functions]
J[Firebase Cloud Messaging]
K[Firebase Remote Config]
end
A --> B;
A --> C;
B --> D;
C --> F;
C --> J;
C --> K;
D --> G;
D --> H;
D --> I;
D --> F;
I --> G;
I --> H;
I --> J;

View File

@@ -0,0 +1,117 @@
flowchart TD
A[main.dart] --> B{KrowApp};
B --> C{MaterialApp.router};
C --> D[SplashRoute];
D --> E{SplashRedirectGuard};
E -- Authenticated --> F[HomeRoute];
E -- Admin Validation --> G[WaitingValidationRoute];
E -- Prepare Profile --> H[CheckListFlowRoute];
E -- Unauthenticated/Error --> I[AuthFlowRoute];
F --> F1[ShiftsFlowRoute];
F --> F2[EarningsFlowRoute];
F --> F3[ProfileMainFlowRoute];
F1 --> F1a[ShiftsListMainRoute];
F1a --> F1b[ShiftDetailsRoute];
F1a --> F1c[QrScannerRoute];
F2 --> F2a[EarningsRoute];
F2a --> F2b[EarningsHistoryRoute];
F3 --> F3a[ProfileMainRoute];
F3a --> F3b[RoleKitFlowRoute];
F3a --> F3c[CertificatesRoute];
F3a --> F3d[ScheduleRoute];
F3a --> F3e[WorkingAreaRoute];
F3a --> F3f[LivePhotoRoute];
F3a --> F3g[ProfileSettingsFlowRoute];
F3a --> F3h[WagesFormsFlowRoute];
F3a --> F3i[BankAccountFlowRoute];
F3a --> F3j[BenefitsRoute];
F3a --> F3k[SupportRoute];
F3a --> F3l[FaqRoute];
F3g --> F3g1[ProfileSettingsMenuRoute];
F3g1 --> F3g2[RoleRoute];
F3g1 --> F3g3[PersonalInfoRoute];
F3g1 --> F3g4[EmailVerificationRoute];
F3g4 --> L1;
F3g1 --> F3g5[AddressRoute];
F3g1 --> F3g6[EmergencyContactsRoute];
F3g1 --> F3g7[MobilityRoute];
F3g1 --> F3g8[InclusiveRoute];
F3h --> F3h1[FormsListRoute];
F3h1 --> F3h2[OfferLetterFormRoute];
F3h1 --> F3h3[EddFormRoute];
F3h1 --> F3h4[INineFormRoute];
F3h1 --> F3h5[WFourFormRoute];
F3h2 --> F3h6[FormSignRoute];
F3h3 --> F3h6;
F3h4 --> F3h6;
F3h5 --> F3h6;
F3h6 --> F3h7[SignedFormRoute];
F3h6 --> F3h8[FormPreviewRoute];
F3i --> F3i1[BankAccountRoute];
F3i1 --> F3i2[BankAccountEditRoute];
F3b --> F3b1[RolesKitListRoute];
F3b1 --> F3b2[RoleKitRoute];
H --> H1[CheckListRoute];
H1 --> H2[PersonalInfoRoute];
H1 --> H3[EmailVerificationRoute];
H3 --> L1;
H1 --> H4[EmergencyContactsRoute];
H1 --> H5[AddressRoute];
H1 --> H6[WorkingAreaRoute];
H1 --> H7[RoleRoute];
H1 --> H8[CertificatesRoute];
H1 --> H9[ScheduleRoute];
H1 --> F3i;
H1 --> F3h;
H1 --> F3b;
I --> I1[WelcomeRoute];
I1 --> I2[PhoneVerificationRoute];
I2 --> I3[CodeVerificationRoute];
I3 --> J{SingUpRedirectGuard};
J -- Prepare Profile --> K[SignupFlowRoute];
J -- Authenticated --> F;
J -- Admin Validation --> G;
J -- Unauthenticated/Error --> I;
K --> K1[PersonalInfoRoute];
K1 --> K2[EmailVerificationRoute];
K2 --> K3[EmergencyContactsRoute];
K2 --> L1;
K3 --> K4[MobilityRoute];
K4 --> K5[InclusiveRoute];
K5 --> K6[AddressRoute];
K6 --> K7[WorkingAreaRoute];
K7 --> K8[RoleRoute];
subgraph PhoneReLoginFlow
L1[PhoneReLoginFlowRoute]
L1 --> L2[CodeVerificationRoute]
end
subgraph CheckListFlow
H
end
subgraph AuthFlow
I
end
subgraph SignUpFlow
K
end
subgraph HomeFlow
F
end

View File

@@ -0,0 +1,85 @@
flowchart TD
subgraph AppInitialization
A[Start App] --> B{Check Auth Status};
B -- Authenticated --> C[Go to Home];
B -- Unauthenticated --> D[Go to Auth];
B -- Admin Validation --> E[Go to Waiting Validation];
B -- Prepare Profile --> F[Go to Checklist];
end
subgraph UserAuthentication
D --> G[Welcome Screen];
G --> H{Select Sign In/Up};
H -- Sign In --> I[Sign In With Phone];
I --> J[Verify Phone Code];
J -- Success --> C;
H -- Sign Up --> K[Go to User Onboarding];
end
subgraph UserOnboarding
K --> L[Collect Personal Info];
L --> M[Verify Email];
M --> N[Add Emergency Contacts];
N --> O[Specify Mobility];
O --> P[Provide Inclusivity Info];
P --> Q[Enter Address];
Q --> R[Define Working Area];
R --> S[Select Role];
S -- Success --> F;
end
subgraph ProfileCompletion
F --> T[View Checklist];
T --> U[Complete Personal Info];
T --> V[Complete Email Verification];
T --> W[Complete Emergency Contacts];
T --> X[Manage Certificates];
T --> Y[Set Schedule];
T --> Z[Manage Bank Account];
T --> AA[Fill Out Wage Forms];
T --> AB[Manage Role Kit];
AB -- All Complete --> C;
end
subgraph MainApp
C --> AC[Home Screen];
AC --> AD{Navigate};
AD -- Shifts --> AE[Shift Management];
AD -- Earnings --> AF[Earnings Management];
AD -- Profile --> AG[Profile Management];
end
subgraph ShiftManagement
AE --> AH[View Shifts];
AH --> AI[View Shift Details];
AH --> AJ[Clock In/Out via QR];
end
subgraph EarningsManagement
AF --> AK[View Current Earnings];
AK --> AL[View Earnings History];
end
subgraph ProfileManagement
AG --> AM[View Profile];
AM --> AN[Manage Role Kit];
AM --> AO[Manage Certificates];
AM --> AP[Manage Schedule];
AM --> AQ[Manage Working Area];
AM --> AR[Update Live Photo];
AM --> AS[Manage Profile Settings];
AS --> AT[Update Personal Info];
AS --> AU[Update Email];
AU --> AV[Re-login with Phone];
AS --> AW[Update Address];
AM --> AX[Manage Wage Forms];
AM --> AY[Manage Bank Account];
AM --> AZ[View Benefits];
AM --> BA[Access Support];
BA --> BB[View FAQs];
BA --> BC[Contact Support];
end
subgraph QRScanning
AJ --> BD[Scan QR Code];
end

View File

@@ -0,0 +1,39 @@
graph TD
subgraph User Authentication
direction LR
UA1[Flutter App] -->|Phone Number| UA2[Firebase Auth];
UA2 -->|Verification Code| UA1;
UA1 -->|Verification Code| UA2;
UA2 -->|Auth Token| UA1;
UA1 -->|Auth Token| UA3[GraphQL Server];
UA3 -->|User Data| UA1;
end
subgraph User Onboarding
direction LR
UO1[Flutter App] -->|Personal Info| UO2[GraphQL Server];
UO2 -->|update_staff_personal_info| UO3[Firebase Firestore];
UO2 -->|User Data| UO1;
end
subgraph Shift Management
direction LR
SM1[Flutter App] -->|Get Shifts| SM2[GraphQL Server];
SM2 -->|getShifts| SM3[Firebase Firestore];
SM3 -->|Shift Data| SM2;
SM2 -->|Shift Data| SM1;
SM1 -->|Accept Shift| SM2;
SM2 -->|accept_shift| SM3;
SM3 -->|Updated Shift| SM2;
SM2 -->|Updated Shift| SM1;
end
subgraph Profile Update with Avatar
direction LR
PU1[Flutter App] -->|Image| PU2[Firebase Storage];
PU2 -->|Image URL| PU1;
PU1 -->|Image URL & Personal Info| PU3[GraphQL Server];
PU3 -->|update_staff_personal_info & upload_staff_avatar| PU4[Firebase Firestore];
PU3 -->|User Data| PU1;
end

View File

@@ -0,0 +1,17 @@
timeline
title KROW Platform - Accelerated Migration & Enhancement Roadmap (2 Months to Production)
section Phase 1: Foundation & New Workflow Adoption
Week 1-2 : Initialize Firebase projects (Dev, Staging) and configure hosting<br>Set up CI/CD pipelines for automated deployments<br>Adopt new development and deployment workflows
Week 3-4 : Configure internal launchpad for easy access to resources<br>Team training on new tools and workflows<br>Documentation setup
Key Milestones : <b>Dev & Staging environments fully operational</b><br><b>Team ready to work with new infrastructure</b>
section Phase 2: Functional Parity & New Experience
Week 5-6 : Migrate core backend logic (Cloud Functions, Firestore/Cloud SQL)<br>Reconnect Web and Mobile apps to new APIs<br>Database migration and validation
Week 7-8 : Integrate new UI/UX design across all applications<br>Implement new core business workflows<br>Feature parity testing
Key Milestones : <b>All existing features are ISO-functional on the new platform</b><br><b>New design and core workflows fully integrated and tested</b>
section Phase 3: Preparation & Production Launch
Week 9-10 : Complete end-to-end testing and performance optimization<br>Security audits and penetration testing<br>Load testing and optimization
Week 11-12 : Set up robust monitoring and alerting system for production<br>Final production deployment<br>Legacy infrastructure decommissioning plan
Key Milestones : <b>KROW is live in production with new design and workflows</b><br><b>Legacy infrastructure ready for decommissioning</b>