Integrate Google Maps Places Autocomplete for hub address validation; update demo plan and Firebase configurations
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# KROW Workforce Platform — Feature Demo Plan for Milestone 3
|
# KROW Workforce Platform — Feature Demo Plan for Milestone 3
|
||||||
|
|
||||||
**Version:** Milestone 3 (v3.0)
|
**Version:** Milestone 3 (v3.0)
|
||||||
**Date:** February 2, 2026
|
**Date:** February 3, 2026
|
||||||
**Audience:** Business Stakeholders, Customer Engineers, Sales Teams
|
**Audience:** Business Stakeholders, Customer Engineers, Sales Teams
|
||||||
**Duration:** 25-30 minutes
|
**Duration:** 25-30 minutes
|
||||||
|
|
||||||
@@ -28,33 +28,41 @@ This demo showcases the progress of the milestone 3.
|
|||||||
### Required Test Accounts
|
### Required Test Accounts
|
||||||
|
|
||||||
**Client Account (Business User):**
|
**Client Account (Business User):**
|
||||||
- Email: `google_payment@gmail.com`
|
- Email: `legendary@krowd.com`
|
||||||
- Password: `Demo2026!`
|
- Password: `Demo2026!`
|
||||||
- Client Name: "Google Payements"
|
- Client Name: "Krow"
|
||||||
|
|
||||||
**Staff Account (Worker):**
|
**Staff Account (Worker):**
|
||||||
- Phone: `+1 (555) 123-4567`
|
- Phone: `+1 (555) 765-4321`
|
||||||
- OTP Code: `123456` (demo mode)
|
- OTP Code: `123456` (demo mode)
|
||||||
- Name: "Alex Martinez"
|
- Name: "Mariana Torres"
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
1. ✅ Both apps installed on demo devices (or simulators)
|
1. ✅ Both apps installed on demo devices (or simulators)
|
||||||
2. ✅ Network connection stable
|
2. ✅ Network connection stable
|
||||||
3. ✅ Seed data is ready to be populated
|
3. ✅ Seed data is ready to be populated
|
||||||
- the database should be empty.
|
- the database should be empty.
|
||||||
- remove unnecessary users from the firebase authetication.
|
|
||||||
|
|
||||||
### Pre-Demo Data Seeding
|
### Pre-Demo Data Seeding
|
||||||
|
|
||||||
Tracked in :
|
Tracked in :
|
||||||
- https://github.com/Oloodi/krow-workforce/issues/345
|
- 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.
|
- 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
|
## 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
|
### Demo 0: Show Empty Database
|
||||||
**Purpose:** Demonstrate the starting point before any data exists
|
**Purpose:** Demonstrate the starting point before any data exists
|
||||||
**Action:** Show the empty database in Firebase console
|
**Action:** Show the empty database in Firebase console
|
||||||
@@ -64,9 +72,9 @@ Tracked in :
|
|||||||
### Demo 1: Register Business & Show Empty States (Client App)
|
### Demo 1: Register Business & Show Empty States (Client App)
|
||||||
**Purpose:** Show the client onboarding experience and empty states
|
**Purpose:** Show the client onboarding experience and empty states
|
||||||
**Steps:**
|
**Steps:**
|
||||||
1. Open Client App → Tap "Create Account"
|
1. Open Client App → Tap "Register"
|
||||||
2. Enter business details (email, password, company name)
|
2. Enter business email, and password.
|
||||||
3. Complete sign up and navigate to home page
|
3. Navigate to home page
|
||||||
4. **Point out:** Empty dashboard, no orders, no workers, clean slate
|
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)
|
### Demo 2: Register Staff & Show Empty States (Staff App)
|
||||||
**Purpose:** Show the worker onboarding experience and empty states
|
**Purpose:** Show the worker onboarding experience and empty states
|
||||||
**Steps:**
|
**Steps:**
|
||||||
1. Open Staff App → Tap "Sign Up"
|
1. Open Staff App → Tap "Register"
|
||||||
2. Enter phone number and verify with OTP code
|
2. Enter phone number and verify with OTP code
|
||||||
3. Complete profile setup wizard (skip detailed sections for speed)
|
3. Navigate to home page
|
||||||
4. Navigate to home page
|
4. **Point out:** Empty shifts list, no available work yet
|
||||||
5. **Point out:** Empty shifts list, no available work yet
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> **🔄 PAUSE HERE:** Populate the database with seed data (run seeding script)
|
> **🔄 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
|
### Demo 3: Client Logs In with Existing Account
|
||||||
@@ -93,7 +103,7 @@ Tracked in :
|
|||||||
1. Restart Client App
|
1. Restart Client App
|
||||||
2. Tap "Sign In" button
|
2. Tap "Sign In" button
|
||||||
3. Enter credentials:
|
3. Enter credentials:
|
||||||
- Email: `google_payment@gmail.com`
|
- Email: `legendary@krowd.com`
|
||||||
- Password: `Demo2026!`
|
- Password: `Demo2026!`
|
||||||
4. Tap "Sign In"
|
4. Tap "Sign In"
|
||||||
|
|
||||||
@@ -133,13 +143,13 @@ Tracked in :
|
|||||||
> ```
|
> ```
|
||||||
>Client Posts Shift [O1]
|
>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 Searches for a Shift [O3]
|
||||||
> ↓
|
> ↓
|
||||||
>Worker Applies [O4]
|
>Worker Applies [O4]
|
||||||
> ↓
|
> ↓
|
||||||
>Confirmation [O5]
|
>Confirmation (This Part is missing for now, for now is confirmed)*[O5]
|
||||||
> ↓
|
> ↓
|
||||||
>Worker Checks In [O6]
|
>Worker Checks In [O6]
|
||||||
> ↓
|
> ↓
|
||||||
@@ -157,12 +167,12 @@ Tracked in :
|
|||||||
- Order name: "Spring Gala 2026"
|
- Order name: "Spring Gala 2026"
|
||||||
- Date: [Select upcoming date]
|
- Date: [Select upcoming date]
|
||||||
- Location: [Select existing hub]
|
- 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
|
### 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
|
**Screen:** Orders Tab → Tap on any order card
|
||||||
**Action:** Expand order to see full details
|
**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
|
**Purpose:** Demonstrate the check-in process
|
||||||
**Screen:** Home or My Shifts → Shift Card → "Check In" button
|
**Screen:** Home or My Shifts → Shift Card → "Check In" button
|
||||||
**Action:** Simulate checking in to an active shift
|
**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
|
**Purpose:** Demonstrate the check-out process and shift completion
|
||||||
**Screen:** Home or My Shifts → Shift Card → "Check Out" button
|
**Screen:** Home or My Shifts → Shift Card → "Check Out" button
|
||||||
|
|
||||||
|
|||||||
@@ -13,3 +13,4 @@
|
|||||||
- Fix the location field in CoverageShiftRole to use the correct fallback logic.
|
- Fix the location field in CoverageShiftRole to use the correct fallback logic.
|
||||||
- line 125 remove redundant location values.
|
- line 125 remove redundant location values.
|
||||||
- Need to clarify the difference b/w `case dc.ApplicationStatus.ACCEPTED` and `case dc.ApplicationStatus.CONFIRMED`.
|
- Need to clarify the difference b/w `case dc.ApplicationStatus.ACCEPTED` and `case dc.ApplicationStatus.CONFIRMED`.
|
||||||
|
- Update the dataconnect docs.
|
||||||
|
|||||||
@@ -85,6 +85,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"oauth_client": [
|
"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_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
"client_type": 3
|
"client_type": 3
|
||||||
|
|||||||
1
apps/mobile/apps/client/firebase.json
Normal file
1
apps/mobile/apps/client/firebase.json
Normal file
@@ -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"}}}}}}
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<key>REVERSED_CLIENT_ID</key>
|
<key>REVERSED_CLIENT_ID</key>
|
||||||
<string>com.googleusercontent.apps.933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg</string>
|
<string>com.googleusercontent.apps.933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg</string>
|
||||||
<key>ANDROID_CLIENT_ID</key>
|
<key>ANDROID_CLIENT_ID</key>
|
||||||
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string>
|
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
|
||||||
<key>API_KEY</key>
|
<key>API_KEY</key>
|
||||||
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
|
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
|
||||||
<key>GCM_SENDER_ID</key>
|
<key>GCM_SENDER_ID</key>
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ class DefaultFirebaseOptions {
|
|||||||
projectId: 'krow-workforce-dev',
|
projectId: 'krow-workforce-dev',
|
||||||
authDomain: 'krow-workforce-dev.firebaseapp.com',
|
authDomain: 'krow-workforce-dev.firebaseapp.com',
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
measurementId: 'G-9S7WEQTDKX',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions android = FirebaseOptions(
|
static const FirebaseOptions android = FirebaseOptions(
|
||||||
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
|
|||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '933560802882',
|
||||||
projectId: 'krow-workforce-dev',
|
projectId: 'krow-workforce-dev',
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
||||||
|
iosClientId: '933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg.apps.googleusercontent.com',
|
||||||
iosBundleId: 'com.krowwithus.client',
|
iosBundleId: 'com.krowwithus.client',
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -129,6 +129,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"oauth_client": [
|
"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_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
"client_type": 3
|
"client_type": 3
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<key>REVERSED_CLIENT_ID</key>
|
<key>REVERSED_CLIENT_ID</key>
|
||||||
<string>com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh</string>
|
<string>com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh</string>
|
||||||
<key>ANDROID_CLIENT_ID</key>
|
<key>ANDROID_CLIENT_ID</key>
|
||||||
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string>
|
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
|
||||||
<key>API_KEY</key>
|
<key>API_KEY</key>
|
||||||
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
|
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
|
||||||
<key>GCM_SENDER_ID</key>
|
<key>GCM_SENDER_ID</key>
|
||||||
|
|||||||
@@ -48,16 +48,17 @@ class DefaultFirebaseOptions {
|
|||||||
|
|
||||||
static const FirebaseOptions web = FirebaseOptions(
|
static const FirebaseOptions web = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
|
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
|
||||||
appId: '1:933560802882:web:4508ef1ee6d4e6907757db',
|
appId: '1:933560802882:web:173a841992885bb27757db',
|
||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '933560802882',
|
||||||
projectId: 'krow-workforce-dev',
|
projectId: 'krow-workforce-dev',
|
||||||
authDomain: 'krow-workforce-dev.firebaseapp.com',
|
authDomain: 'krow-workforce-dev.firebaseapp.com',
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
measurementId: 'G-9S7WEQTDKX',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions android = FirebaseOptions(
|
static const FirebaseOptions android = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
|
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
|
||||||
appId: '1:933560802882:android:d49b8c0f4d19e95e7757db',
|
appId: '1:933560802882:android:1ae05d85c865f77c7757db',
|
||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '933560802882',
|
||||||
projectId: 'krow-workforce-dev',
|
projectId: 'krow-workforce-dev',
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
@@ -69,6 +70,9 @@ class DefaultFirebaseOptions {
|
|||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '933560802882',
|
||||||
projectId: 'krow-workforce-dev',
|
projectId: 'krow-workforce-dev',
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
||||||
|
iosClientId: '933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com',
|
||||||
iosBundleId: 'com.krowwithus.staff',
|
iosBundleId: 'com.krowwithus.staff',
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ class OtpVerificationHeader extends StatelessWidget {
|
|||||||
.code_sent_message,
|
.code_sent_message,
|
||||||
style: UiTypography.body2r.textSecondary,
|
style: UiTypography.body2r.textSecondary,
|
||||||
children: <InlineSpan>[
|
children: <InlineSpan>[
|
||||||
TextSpan(text: '+1 $phoneNumber', style: UiTypography.body2b),
|
TextSpan(text: phoneNumber, style: UiTypography.body2b),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: t
|
text: t
|
||||||
.staff_authentication
|
.staff_authentication
|
||||||
|
|||||||
Reference in New Issue
Block a user