diff --git a/apps/demo plans/MILESTONE 3_DEMO_PLAN.md b/apps/demo plans/MILESTONE 3_DEMO_PLAN.md
index fbd9d8c7..228e0637 100644
--- a/apps/demo plans/MILESTONE 3_DEMO_PLAN.md
+++ b/apps/demo plans/MILESTONE 3_DEMO_PLAN.md
@@ -1,7 +1,7 @@
# KROW Workforce Platform — Feature Demo Plan for Milestone 3
**Version:** Milestone 3 (v3.0)
-**Date:** February 2, 2026
+**Date:** February 3, 2026
**Audience:** Business Stakeholders, Customer Engineers, Sales Teams
**Duration:** 25-30 minutes
@@ -28,33 +28,41 @@ This demo showcases the progress of the milestone 3.
### Required Test Accounts
**Client Account (Business User):**
-- Email: `google_payment@gmail.com`
+- Email: `legendary@krowd.com`
- Password: `Demo2026!`
-- Client Name: "Google Payements"
+- Client Name: "Krow"
**Staff Account (Worker):**
-- Phone: `+1 (555) 123-4567`
+- Phone: `+1 (555) 765-4321`
- OTP Code: `123456` (demo mode)
-- Name: "Alex Martinez"
+- Name: "Mariana Torres"
### Prerequisites
1. ✅ Both apps installed on demo devices (or simulators)
2. ✅ Network connection stable
3. ✅ Seed data is ready to be populated
- the database should be empty.
- - remove unnecessary users from the firebase authetication.
### Pre-Demo Data Seeding
Tracked in :
- https://github.com/Oloodi/krow-workforce/issues/345
-- This should be easily populated and de-populated by the demonstrator to show the empty states in the apps.
- At the start the database should be empty.
+- Commands to use:
+ - `make dataconnect-clean`
+ - To clean the database before seeding.
+ - `make dataconnect-seed`
+ - To populate the database with seed data for demo.
+
---
## 3️⃣ Demo Flows
+**Note:**
+To start the demo you should clean the database running the next command:
+ - make dataconnect-clean
+
### Demo 0: Show Empty Database
**Purpose:** Demonstrate the starting point before any data exists
**Action:** Show the empty database in Firebase console
@@ -64,9 +72,9 @@ Tracked in :
### Demo 1: Register Business & Show Empty States (Client App)
**Purpose:** Show the client onboarding experience and empty states
**Steps:**
-1. Open Client App → Tap "Create Account"
-2. Enter business details (email, password, company name)
-3. Complete sign up and navigate to home page
+1. Open Client App → Tap "Register"
+2. Enter business email, and password.
+3. Navigate to home page
4. **Point out:** Empty dashboard, no orders, no workers, clean slate
---
@@ -74,16 +82,18 @@ Tracked in :
### Demo 2: Register Staff & Show Empty States (Staff App)
**Purpose:** Show the worker onboarding experience and empty states
**Steps:**
-1. Open Staff App → Tap "Sign Up"
+1. Open Staff App → Tap "Register"
2. Enter phone number and verify with OTP code
-3. Complete profile setup wizard (skip detailed sections for speed)
-4. Navigate to home page
-5. **Point out:** Empty shifts list, no available work yet
+3. Navigate to home page
+4. **Point out:** Empty shifts list, no available work yet
---
> **🔄 PAUSE HERE:** Populate the database with seed data (run seeding script)
+- Potulate database with the next comand :
+ - make dataconnect-seed
+
---
### Demo 3: Client Logs In with Existing Account
@@ -93,7 +103,7 @@ Tracked in :
1. Restart Client App
2. Tap "Sign In" button
3. Enter credentials:
- - Email: `google_payment@gmail.com`
+ - Email: `legendary@krowd.com`
- Password: `Demo2026!`
4. Tap "Sign In"
@@ -133,13 +143,13 @@ Tracked in :
> ```
>Client Posts Shift [O1]
> ↓
->*Vendor Accepts the Shift (This Part is missing for now)* [O2]
+>*Vendor Accepts the Shift (This Part is missing for now)/ Vendor is selected by client* [O2]
> ↓
>Worker Searches for a Shift [O3]
> ↓
>Worker Applies [O4]
> ↓
->Confirmation [O5]
+>Confirmation (This Part is missing for now, for now is confirmed)*[O5]
> ↓
>Worker Checks In [O6]
> ↓
@@ -157,12 +167,12 @@ Tracked in :
- Order name: "Spring Gala 2026"
- Date: [Select upcoming date]
- Location: [Select existing hub]
-- Add position: Server, Count: 3, Hours: 5PM-11PM
+- Add position: Server, Count: 3, Hours: 5PM-9PM
---
### Demo 7: Client Views Order Details
-**Purpose:** Show detailed shift information and worker assignments
+**Purpose:** Show detailed shift information and worker assignments (this second part is missing for now)
**Screen:** Orders Tab → Tap on any order card
**Action:** Expand order to see full details
@@ -244,7 +254,7 @@ Tracked in :
---
-### Demo 14: Staff Checks In to Shift (Day of Event) - [O6]
+### Demo 14: Staff Checks In to Shift (Day of Event) [O6]
**Purpose:** Demonstrate the check-in process
**Screen:** Home or My Shifts → Shift Card → "Check In" button
**Action:** Simulate checking in to an active shift
@@ -267,7 +277,7 @@ Tracked in :
---
-### Demo 16: Staff Checks Out of Shift - [O7]
+### Demo 16: Staff Checks Out of Shift - - (this is under fixing)[O7]
**Purpose:** Demonstrate the check-out process and shift completion
**Screen:** Home or My Shifts → Shift Card → "Check Out" button
diff --git a/apps/mobile/NEXT_SPRINT_TASKS.md b/apps/mobile/NEXT_SPRINT_TASKS.md
index 0b758f51..babe1f19 100644
--- a/apps/mobile/NEXT_SPRINT_TASKS.md
+++ b/apps/mobile/NEXT_SPRINT_TASKS.md
@@ -13,3 +13,4 @@
- Fix the location field in CoverageShiftRole to use the correct fallback logic.
- line 125 remove redundant location values.
- Need to clarify the difference b/w `case dc.ApplicationStatus.ACCEPTED` and `case dc.ApplicationStatus.CONFIRMED`.
+- Update the dataconnect docs.
diff --git a/apps/mobile/apps/client/android/app/google-services.json b/apps/mobile/apps/client/android/app/google-services.json
index 20ad2e48..fcd3c0e0 100644
--- a/apps/mobile/apps/client/android/app/google-services.json
+++ b/apps/mobile/apps/client/android/app/google-services.json
@@ -85,6 +85,14 @@
}
},
"oauth_client": [
+ {
+ "client_id": "933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.krowwithus.client",
+ "certificate_hash": "c3efbe1642239c599c16ad04c7fac340902fe280"
+ }
+ },
{
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
"client_type": 3
diff --git a/apps/mobile/apps/client/firebase.json b/apps/mobile/apps/client/firebase.json
new file mode 100644
index 00000000..09f707ae
--- /dev/null
+++ b/apps/mobile/apps/client/firebase.json
@@ -0,0 +1 @@
+{"flutter":{"platforms":{"android":{"default":{"projectId":"krow-workforce-dev","appId":"1:933560802882:android:da13569105659ead7757db","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"krow-workforce-dev","appId":"1:933560802882:ios:d2b6d743608e2a527757db","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"krow-workforce-dev","configurations":{"android":"1:933560802882:android:da13569105659ead7757db","ios":"1:933560802882:ios:d2b6d743608e2a527757db","web":"1:933560802882:web:173a841992885bb27757db"}}}}}}
\ No newline at end of file
diff --git a/apps/mobile/apps/client/ios/Runner/GoogleService-Info.plist b/apps/mobile/apps/client/ios/Runner/GoogleService-Info.plist
index fbbfcc69..86d280e1 100644
--- a/apps/mobile/apps/client/ios/Runner/GoogleService-Info.plist
+++ b/apps/mobile/apps/client/ios/Runner/GoogleService-Info.plist
@@ -7,7 +7,7 @@
REVERSED_CLIENT_ID
com.googleusercontent.apps.933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg
ANDROID_CLIENT_ID
- 933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com
+ 933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com
API_KEY
AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA
GCM_SENDER_ID
diff --git a/apps/mobile/apps/client/lib/firebase_options.dart b/apps/mobile/apps/client/lib/firebase_options.dart
index 08a57ddc..f703aa10 100644
--- a/apps/mobile/apps/client/lib/firebase_options.dart
+++ b/apps/mobile/apps/client/lib/firebase_options.dart
@@ -53,6 +53,7 @@ class DefaultFirebaseOptions {
projectId: 'krow-workforce-dev',
authDomain: 'krow-workforce-dev.firebaseapp.com',
storageBucket: 'krow-workforce-dev.firebasestorage.app',
+ measurementId: 'G-9S7WEQTDKX',
);
static const FirebaseOptions android = FirebaseOptions(
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev',
storageBucket: 'krow-workforce-dev.firebasestorage.app',
+ androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
+ iosClientId: '933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg.apps.googleusercontent.com',
iosBundleId: 'com.krowwithus.client',
);
-}
+
+}
\ No newline at end of file
diff --git a/apps/mobile/apps/staff/android/app/google-services.json b/apps/mobile/apps/staff/android/app/google-services.json
index 5718b28d..fcd3c0e0 100644
--- a/apps/mobile/apps/staff/android/app/google-services.json
+++ b/apps/mobile/apps/staff/android/app/google-services.json
@@ -129,6 +129,14 @@
}
},
"oauth_client": [
+ {
+ "client_id": "933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.krowwithus.staff",
+ "certificate_hash": "ac917ae8470ab29f1107c773c6017ff5ea5d102d"
+ }
+ },
{
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
"client_type": 3
diff --git a/apps/mobile/apps/staff/ios/Runner/GoogleService-Info.plist b/apps/mobile/apps/staff/ios/Runner/GoogleService-Info.plist
index 4a0f6b5d..7fc4d7e6 100644
--- a/apps/mobile/apps/staff/ios/Runner/GoogleService-Info.plist
+++ b/apps/mobile/apps/staff/ios/Runner/GoogleService-Info.plist
@@ -7,7 +7,7 @@
REVERSED_CLIENT_ID
com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh
ANDROID_CLIENT_ID
- 933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com
+ 933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com
API_KEY
AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA
GCM_SENDER_ID
diff --git a/apps/mobile/apps/staff/lib/firebase_options.dart b/apps/mobile/apps/staff/lib/firebase_options.dart
index 343d9f5e..3945a3a2 100644
--- a/apps/mobile/apps/staff/lib/firebase_options.dart
+++ b/apps/mobile/apps/staff/lib/firebase_options.dart
@@ -48,16 +48,17 @@ class DefaultFirebaseOptions {
static const FirebaseOptions web = FirebaseOptions(
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
- appId: '1:933560802882:web:4508ef1ee6d4e6907757db',
+ appId: '1:933560802882:web:173a841992885bb27757db',
messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev',
authDomain: 'krow-workforce-dev.firebaseapp.com',
storageBucket: 'krow-workforce-dev.firebasestorage.app',
+ measurementId: 'G-9S7WEQTDKX',
);
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
- appId: '1:933560802882:android:d49b8c0f4d19e95e7757db',
+ appId: '1:933560802882:android:1ae05d85c865f77c7757db',
messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev',
storageBucket: 'krow-workforce-dev.firebasestorage.app',
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
messagingSenderId: '933560802882',
projectId: 'krow-workforce-dev',
storageBucket: 'krow-workforce-dev.firebasestorage.app',
+ androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
+ iosClientId: '933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com',
iosBundleId: 'com.krowwithus.staff',
);
-}
+
+}
\ No newline at end of file
diff --git a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_verification_header.dart b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_verification_header.dart
index 50837e68..ec4ff79c 100644
--- a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_verification_header.dart
+++ b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_verification_header.dart
@@ -28,7 +28,7 @@ class OtpVerificationHeader extends StatelessWidget {
.code_sent_message,
style: UiTypography.body2r.textSecondary,
children: [
- TextSpan(text: '+1 $phoneNumber', style: UiTypography.body2b),
+ TextSpan(text: phoneNumber, style: UiTypography.body2b),
TextSpan(
text: t
.staff_authentication