Integrate Google Maps Places Autocomplete for hub address validation; update demo plan and Firebase configurations

This commit is contained in:
Achintha Isuru
2026-02-03 12:59:44 -05:00
parent 11ad6c47d1
commit 065af4fd7f
10 changed files with 64 additions and 28 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View 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"}}}}}}

View File

@@ -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>

View File

@@ -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',
); );
} }

View File

@@ -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

View File

@@ -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>

View File

@@ -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',
); );
} }

View File

@@ -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