diff --git a/apps/web/package.json b/apps/web/package.json index adc206a8..216a1d3b 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "@dataconnect/generated": "link:src/dataconnect-generated", "@firebase/analytics": "^0.10.19", "@firebase/data-connect": "^0.3.12", "@radix-ui/react-dialog": "^1.1.15", diff --git a/apps/web/pnpm-lock.yaml b/apps/web/pnpm-lock.yaml index 1f511454..951ab6aa 100644 --- a/apps/web/pnpm-lock.yaml +++ b/apps/web/pnpm-lock.yaml @@ -6,11 +6,15 @@ settings: overrides: dataconnect-generated: link:../../../../../AppData/Local/pnpm/global/5/node_modules/src/dataconnect-generated + '@dataconnect/generated': link:src/dataconnect-generated importers: .: dependencies: + '@dataconnect/generated': + specifier: link:src/dataconnect-generated + version: link:src/dataconnect-generated '@firebase/analytics': specifier: ^0.10.19 version: 0.10.19(@firebase/app@0.14.7) @@ -1517,79 +1521,66 @@ packages: resolution: {integrity: sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.57.0': resolution: {integrity: sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.57.0': resolution: {integrity: sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.57.0': resolution: {integrity: sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.57.0': resolution: {integrity: sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.57.0': resolution: {integrity: sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==} cpu: [loong64] os: [linux] - libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.57.0': resolution: {integrity: sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.57.0': resolution: {integrity: sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==} cpu: [ppc64] os: [linux] - libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.57.0': resolution: {integrity: sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.57.0': resolution: {integrity: sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.57.0': resolution: {integrity: sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.57.0': resolution: {integrity: sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.57.0': resolution: {integrity: sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openbsd-x64@4.57.0': resolution: {integrity: sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==} @@ -1665,28 +1656,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.1.18': resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.1.18': resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.1.18': resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.1.18': resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} @@ -2417,28 +2404,24 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] lightningcss-win32-arm64-msvc@1.30.2: resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} diff --git a/apps/web/pnpm-workspace.yaml b/apps/web/pnpm-workspace.yaml index 62ff1aa4..13edf779 100644 --- a/apps/web/pnpm-workspace.yaml +++ b/apps/web/pnpm-workspace.yaml @@ -1,3 +1,3 @@ overrides: - + '@dataconnect/generated': link:src/dataconnect-generated dataconnect-generated: link:../../../../../AppData/Local/pnpm/global/5/node_modules/src/dataconnect-generated diff --git a/demos/m3/m3-client-note.md b/demos/m3/m3-client-note.md new file mode 100644 index 00000000..ab99dfa7 --- /dev/null +++ b/demos/m3/m3-client-note.md @@ -0,0 +1,258 @@ +# KROW Workforce Platform — Feature Testing Plan for Milestone 3 + +**Version:** Milestone 3 (0.0.1-IlianaStaffM3 and 0.0.1-IlianaClientM3) +**Date:** February 6, 2026 +**Estimated Duration:** 25-30 minutes + +--- + +## Required Applications +- Client Mobile Application (v0.0.1-IlianaClientM3) +- Staff Mobile Application (v0.0.1-IlianaStaffM3) + +--- + +## 1. Testing Environment Setup + +### Required Test Accounts + +**Client Account (Business User):** +- Email: `legendary@krowd.com` +- Password: `Demo2026!` +- Client Name: "Krow" + +**Staff Account (Worker):** +- Phone: `+15557654321` +- OTP Code: `123456` (demo mode) +- Name: "Mariana Torres" + +### Prerequisites +1. ✅ Both apps installed on the device +2. ✅ Network connection stable + +--- + +## 2. Testing Steps + +### 2.1: Register Business (Client App) +**Purpose:** Show the client onboarding experience + +**Steps:** +1. Open Client App → Tap "Create Account" +2. Enter business email, and password (not the provided test account credentials, use a new email for this step) +3. Navigate to the home page + +**Observable Points:** : + - Empty dashboard, no orders, no workers, clean slate + +--- + +### 2.2: Register Staff (Staff App) +**Purpose:** Show the worker onboarding experience + +**Steps:** +1. Open Staff App → Tap "Sign Up" +2. Enter phone number and verify with OTP code (not the provided test account credentials, use a new phone number for this step) +3. Follow the onboarding process +4. Navigate to the home page + +**Observable Points:** : + - Empty shifts list, no available work yet + +--- + +### 2.3: Client Logs In with Existing Account (Client App) +**Note:** Use the client demo account credentials provided above. +**Purpose:** Show the sign-in experience for returning users + +**Steps:** +1. Close Client App and reopen it. +2. Tap "Sign In" button +3. Enter credentials: + - Email: `legendary@krowd.com` + - Password: `Demo2026!` +4. Tap "Sign In" + +--- + +### 2.4: Client Views Populated Dashboard (Client App) +**Purpose:** Show how the client app displays active operations + +**Steps:** +1. After signing in, observe the home screen +2. Navigate through populated sections: + - Home: Coverage stats, upcoming shifts + - Orders: Posted shifts with workers assigned + - Coverage: Real-time worker status + +**Observable Points:** +- Coverage percentage for today's shifts +- Workers checked in vs. needed +- Late workers alerts +- Today's estimated labor cost + +--- + +### 2.5: Client Creates a New Hub (Client App) +**Purpose:** Show the hub creation process + +**Steps:** +1. Navigate to Hubs page via the settings button in the top right corner of the home screen +2. Tap the "Hubs" button in the settings menu. +3. Tap the "+" icon at the bottom right of the hubs list, to open the hub creation form. +4. Fill in hub details: + - Hub name: "Downtown Convention Center" + - Address: Start typing and select an address. +5. Tap "Create Hub" +6. See the new hub appear in the hubs list + +--- + +### 2.6: Client Creates New Order (Client App) +**Purpose:** Walk through the order creation process + +**Steps:**: +1. Go back to the home screen. +2. Navigate to the "Orders" tab in the bottom navigation. +3. Tap the "+ Post" button on top right to open the order type selection screen. +4. Select "One-Time" from the order type options. +5. Fill in order details: +- Order name: "Summer Gala 2026" +- Date: [Select upcoming date] +- Hub: [Select existing hub] +- Add position: Server, Count: 3, Hours: 5PM-9PM +6. Tap "Create Order" + +--- + +### 2.7: Client Views Order Details (Client App) +**Purpose:** View detailed shift information and worker assignments + +**Steps:** +1. View the created order in the orders list on the order screen. + +**Observable Points:** +- Event name and location +- Roles needed +- Clock in/out times +- Estimated cost +- Coverage percentage bar + +--- + +### 2.8: Client Monitors Coverage Dashboard (Client App) +**Purpose:** Show real-time worker tracking capabilities + +**Steps:** +1. Navigate to the "Coverage" tab in the bottom navigation. +2. Observe the worker status for active shifts. + +**Observable Points:** +- Worker status (Checked In, En Route, Late, Not Arrived) +- Color-coded status badges (green, yellow, red) +- Worker information + +--- + +### 2.9: Staff Logs In with Existing Account (Staff App) +**Note:** Use the staff demo account credentials provided above. +**Purpose:** Show the staff app sign-in experience for returning users + +**Steps:** +1. Close the staff app and reopen it. +2. Tap "Log In" button +3. Enter phone number: `5557654321` +4. Tap "Send Code" +5. Enter OTP: `123456` + +--- + +### 2.10: Staff Views Home Dashboard (Staff App) +**Purpose:** View worker's personalized dashboard + +**Observable Points:** +- Welcome message with worker's name +- Today's Shifts section (confirmed shifts for today) +- Tomorrow's Shifts section +- Recommended shifts section + +--- + +### 2.11: Staff Finds Available Shifts (Staff App) +**Purpose:** Show the shift search and discovery experience for workers + +**Steps:** +1. Navigate to the "Shifts" tab in the bottom navigation. +2. Tap the "Find Shifts" button on top to view available shifts. + +**Observable Points:** +- List of shifts +- Hourly rate prominently displayed +- Role requirements (e.g., "Bartender - Spring Gala") +- Date, time, and duration + +**Note:** +>Due to a misunderstanding in the order creation flow, we initially assumed that a newly created order would need to be approved by the vendor before appearing in the >list of available shifts for workers to apply. As a result, the order created in the previous step does not appear in the available shifts list. +>We are currently fixing this issue. +--- + +### 2.12: Staff Applies for Shift (Staff App) +**Purpose:** Show the application process from worker side + +**Steps:** +1. Tap on an available shift to view details +2. Review business name, location, pay, requirements +3. Tap "Book Shift" button +4. Tap "Book" on the confirmation dialog +4. See confirmation + +--- + +### 2.13: Staff Views Confirmed Shifts (Staff App) +**Purpose:** Show worker's shift confirmation + +**Observable Points:** +- Week-by-week calendar navigation +- Color-coded status (Confirmed, Pending, Completed) +- Quick access to shift details and directions + +--- + +### 2.14: Staff Clock-In to Shift (Day of Event) (Staff App) +**Purpose:** Demonstrate the clock-in process + +**Steps:** +1. Navigate to the clock-in page. +2. Use the "Clock In" slider to clock in. + +**Observable Points:** +- Timestamp automatically recorded +- Status changes to "Checked In" with green indicator + +--- + +### 2.15: Staff Clocks-Out of Shift (Day of Event) (Staff App) +**Purpose:** Demonstrate the clock-out process and shift completion + +**Steps:** +1. Navigate to the clock-out page. +2. Use the "Clock Out" slider to clock out. +3. Navigate to the "My Shifts" section in the Shifts tab to see the updated status via the bottom navigation. + +**Observable Points:** +- Clock-out timestamp automatically recorded +- Status changes to "Completed" + +--- + +### 2.16: Staff Profile Management (Staff App) +**Purpose:** Demonstrate worker profile features and compliance management + +**Steps:** +1. Navigate to Profile tab in bottom navigation +2. Review profile sections: + - **Profile Info:** + - **Emergency Contact:** Name, relationship, phone number + - **Bank Account:** Linked payment account for direct deposit + - **Tax Forms:** W-4, I-9 compliance documents + - **Time Card:** Historical shift records with hours and earnings