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

View File

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

View File

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

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>
<string>com.googleusercontent.apps.933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg</string>
<key>ANDROID_CLIENT_ID</key>
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string>
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
<key>API_KEY</key>
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
<key>GCM_SENDER_ID</key>

View File

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

View File

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

View File

@@ -7,7 +7,7 @@
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh</string>
<key>ANDROID_CLIENT_ID</key>
<string>933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com</string>
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
<key>API_KEY</key>
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
<key>GCM_SENDER_ID</key>

View File

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

View File

@@ -28,7 +28,7 @@ class OtpVerificationHeader extends StatelessWidget {
.code_sent_message,
style: UiTypography.body2r.textSecondary,
children: <InlineSpan>[
TextSpan(text: '+1 $phoneNumber', style: UiTypography.body2b),
TextSpan(text: phoneNumber, style: UiTypography.body2b),
TextSpan(
text: t
.staff_authentication