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
|
||||
|
||||
**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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
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>
|
||||
<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>
|
||||
|
||||
@@ -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',
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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',
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user