diff --git a/.claude/agents/ui-ux-design.md b/.claude/agents/ui-ux-design.md index 2128f64a..63398e13 100644 --- a/.claude/agents/ui-ux-design.md +++ b/.claude/agents/ui-ux-design.md @@ -37,6 +37,7 @@ Before any design work, ensure you have loaded: - `krow-mobile-design-system` — Colors, typography, icons, spacing, component patterns - `frontend-design` - `ui-ux-pro-max` +- `mobile-design` Load additional skills as needed for specific design challenges. diff --git a/.claude/skills/krow-paper-design/SKILL.md b/.claude/skills/krow-paper-design/SKILL.md index df9b2994..93860546 100644 --- a/.claude/skills/krow-paper-design/SKILL.md +++ b/.claude/skills/krow-paper-design/SKILL.md @@ -21,19 +21,42 @@ This skill defines the design token system, component patterns, screen structure ### Color Palette +**Primary:** | Token | Hex | Usage | |-------|-----|-------| -| Primary | `#0A39DF` | CTAs, active states, links, selected chips, nav active icons, pay rates | -| Foreground | `#121826` | Headings, primary text, dark UI elements | -| Text Secondary | `#6A7382` | Labels, captions, inactive nav, section headers, placeholder text, back chevrons | -| Secondary BG | `#F1F3F5` | Subtle backgrounds, dividers, map placeholders | -| Border | `#D1D5DB` | Card borders, unselected chip borders, outline button borders | -| Input Border | `#E2E8F0` | Text input borders (lighter than general border) | -| Destructive | `#F04444` | Error states, destructive actions (e.g., Request Swap) | | Background | `#FAFBFC` | Page/artboard background | -| Card BG | `#FFFFFF` | Card surfaces, input backgrounds | -| Success | `#059669` | Active status dot, checkmark icons, requirement met | -| Warning Amber | `#D97706` | Urgent/Pending badge text | +| Foreground | `#121826` | Headings, primary text, dark UI elements | +| Primary | `#0A39DF` | CTAs, active states, links, selected chips, nav active icons, pay rates | +| Primary Fg | `#F7FAFC` | Light foreground on primary surfaces | + +**Semantic:** +| Token | Hex | Usage | +|-------|-----|-------| +| Secondary | `#F1F3F5` | Subtle backgrounds, dividers, secondary button bg | +| Accent | `#F9E547` | Highlight, warning chip accents | +| Text Secondary | `#6A7382` | Labels, captions, inactive nav, section headers, back chevrons | +| Destructive | `#F04444` | Error states, destructive actions | + +**Border & Input:** +| Token | Hex | Usage | +|-------|-----|-------| +| Border | `#D1D5DB` | Card borders, unselected chip borders, outline button borders | +| Input | `#F5F6F8` | Text input background (read-only/disabled states) | + +**Status:** +| Token | Hex | Usage | +|-------|-----|-------| +| Success | `#10B981` | Accept buttons, active status, checkmarks | +| Info | `#0A39DF` | Informational badges (same as Primary) | +| Warning | `#D97706` | Urgent/Pending badge text | +| Neutral | `#94A3B8` | Disabled text, placeholder text | +| Danger | `#F04444` | Error badges, destructive (same as Destructive) | + +**Gradients:** +| Token | Definition | Usage | +|-------|-----------|-------| +| mobileHero | Foreground → Primary → Primary Fg | Hero sections, splash screens | +| adminHero | Primary → Success | Admin/dashboard hero cards | ### Semantic Badge Colors @@ -44,74 +67,121 @@ This skill defines the design token system, component patterns, screen structure | Pending | `#FEF9EE` | `#D97706` | | Urgent | `#FEF9EE` | `#D97706` | | One-Time | `#ECFDF5` | `#059669` | -| Recurring | `#EBF0FF` | `#0A39DF` (use `#EFF6FF` bg on detail pages) | +| Recurring | `#EFF6FF` | `#0A39DF` | ### Typography -| Style | Font | Size | Weight | Line Height | Usage | -|-------|------|------|--------|-------------|-------| -| Display | Inter Tight | 28px | 700 | 34px | Page titles (Find Shifts, My Shifts) | -| H1 | Inter Tight | 24px | 700 | 30px | Detail page titles (venue names) | -| H2 | Inter Tight | 20px | 700 | 26px | Section headings | -| H3 | Inter Tight | 18px | 700 | 22px | Card titles, schedule values | -| Body Large | Manrope | 16px | 600 | 20px | Button text, CTA labels | -| Body Default | Manrope | 14px | 400-500 | 18px | Body text, descriptions | -| Body Small | Manrope | 13px | 400-500 | 16px | Card metadata, time/pay info | -| Caption | Manrope | 12px | 500-600 | 16px | Small chip text, tab labels | -| Section Label | Manrope | 11px | 700 | 14px | Uppercase section headers (letter-spacing: 0.06em) | -| Badge Text | Manrope | 11px | 600-700 | 14px | Status badge labels (letter-spacing: 0.04em) | -| Nav Label | Manrope | 10px | 600 | 12px | Bottom nav labels | +**Inter Tight — Headings:** +| Style | Size | Weight | Letter Spacing | Line Height | Usage | +|-------|------|--------|---------------|-------------|-------| +| Display | 28px | 700 | -0.02em | 34px | Page titles (Find Shifts, My Shifts) | +| Heading 1 | 24px | 700 | -0.02em | 30px | Detail page titles (venue names) | +| Heading 2 | 20px | 700 | -0.01em | 26px | Section headings | +| Heading 3 | 18px | 700 | -0.01em | 22px | Card titles, schedule values | +| Heading 4 | 16px | 700 | — | 20px | Card titles (standard cards), sub-headings | -### Spacing +**Manrope — Body:** +| Style | Size | Weight | Line Height | Usage | +|-------|------|--------|-------------|-------| +| Body Large Regular | 16px | 400 | 20px | Long body text | +| Body Large Medium | 16px | 500 | 20px | Emphasized body text | +| Body Large Semibold | 16px | 600 | 20px | Strong labels, Full Width CTA text (15px) | +| Body Default | 14px | 400 | 18px | Body text, descriptions | +| Body Default Semibold | 14px | 600 | 18px | Button text, chip text, bold body | +| Caption | 12px | 400 | 16px | Small text, helper text, input labels | +| Overline Label | 11px | 600 | 14px | Uppercase section headers (letter-spacing: 0.06em) | +| Badge Text | 11px | 600-700 | 14px | Status badge labels (letter-spacing: 0.04em) | +| Nav Label | 10px | 600 | 12px | Bottom nav labels | + +### Spacing Scale | Token | Value | Usage | |-------|-------|-------| -| Page padding | 24px | Horizontal padding from screen edge | -| Section gap | 16-24px | Between major content sections | -| Group gap | 8-12px | Within a section (e.g., label to input) | -| Element gap | 4px | Tight spacing (e.g., subtitle under title) | -| Bottom safe area | 40px | Padding below last element / CTA | +| xs | 4px | Tight spacing (subtitle under title) | +| sm | 8px | Element gap within groups | +| md | 12px | Group gap (label to input) | +| lg | 16px | Card padding, medium section gap | +| xl | 24px | Page margins, section gap | +| 2xl | 32px | Large section separation | + +**Page Layout:** +| Token | Value | +|-------|-------| +| Page margins | 24px | +| Section gap | 24px | +| Card padding | 16px | +| Element gap | 8-12px | +| Background | `#FAFBFC` | +| Bottom safe area | 40px | ### Border Radii | Token | Value | Usage | |-------|-------|-------| -| sm | 8px | Small chips, badges, status pills, map placeholder | -| md | 12px | Cards, inputs, location cards, contact cards, search fields | -| lg | 14px | Buttons, CTA containers, shift cards (Find Shifts) | -| xl | 24px | Not commonly used | +| sm | 8px | Small chips, badges, status pills | +| md | 12px | Cards, inputs, list row containers, data rows | +| lg | 18px | Hero cards, gradient cards | +| xl | 24px | Large containers | | pill | 999px | Progress bar segments only | +### Icon Sizes + +Standard sizes: 16, 20, 24, 32dp + ## 2. Component Patterns ### Buttons -**Primary CTA:** -- Background: `#0A39DF`, radius: 14px, height: 52px -- Text: Manrope 16px/600, color: `#FFFFFF` -- Padding: 16px vertical, 16px horizontal +All buttons: radius 14px, padding 12px/24px, text Manrope 14px/600 -**Secondary/Outline Button:** -- Background: `#FFFFFF`, border: 1.5px `#D1D5DB`, radius: 14px, height: 52px -- Text: Manrope 16px/600, color: `#121826` +**Primary:** +- Background: `#0A39DF`, text: `#FFFFFF` -**Destructive Outline Button:** -- Background: `#FFFFFF`, border: 1.5px `#F04444`, radius: 14px -- Text: Manrope 14px/600, color: `#F04444` +**Secondary:** +- Background: `#F1F3F5`, border: 1.5px `#D1D5DB`, text: `#121826` + +**Destructive:** +- Background: `#F04444`, text: `#FFFFFF` + +**Disabled:** +- Background: `#F1F3F5`, no border, text: `#94A3B8` + +**Accept:** +- Background: `#10B981`, text: `#FFFFFF` + +**Dark:** +- Background: `#121826`, text: `#FFFFFF` + +**Full Width CTA:** +- Same as Primary but `width: 100%`, padding 14px/24px, text Manrope 15px/600 **Back Icon Button (Bottom CTA):** -- 52x52px square, border: 1.5px `#D1D5DB`, radius: 14px, background: `#FFFFFF` +- 52x52px square, border: 0.5px `#D1D5DB`, radius: 14px, background: `#FFFFFF` - Contains chevron-left SVG (20x20, viewBox 0 0 24 24, stroke `#121826`, strokeWidth 2) - Path: `M15 18L9 12L15 6` ### Chips +All chips: border 1.5px, text Manrope 14px/600, gap 8px for icon+text + **Default (Large) - for role/skill selection:** -- Selected: bg `#EFF6FF`, border 1.5px `#0A39DF`, radius 10px, padding 12px/16px - - Checkmark icon (14x14, stroke `#0A39DF`), text Manrope 14px/600 `#0A39DF` -- Unselected: bg `#FFFFFF`, border 1.5px `#6A7382`, radius 10px, padding 12px/16px +- Selected: bg `#EFF6FF`, border `#0A39DF`, radius 10px, padding 12px/16px + - Checkmark icon (14x14, stroke `#0A39DF`), text `#0A39DF` +- Unselected: bg `#FFFFFF`, border `#6A7382`, radius 10px, padding 12px/16px - Text Manrope 14px/500 `#6A7382` +**Warning Chips:** +- Selected: bg `#F9E5471A`, border `#E6A817`, radius 10px, padding 12px/16px + - Checkmark icon (stroke `#E6A817`), text `#E6A817` +- Unselected: bg `#FFFFFF`, border `#F0D78C`, radius 10px, padding 12px/16px + - Text `#E6A817` + +**Error Chips:** +- Selected: bg `#FEF2F2`, border `#F04444`, radius 10px, padding 12px/16px + - Checkmark icon (stroke `#F04444`), text `#F04444` +- Unselected: bg `#FFFFFF`, border `#FECACA`, radius 10px, padding 12px/16px + - Text `#F04444` + **Small - for tabs, filters:** - Selected: bg `#EFF6FF`, border 1.5px `#0A39DF`, radius 8px, padding 6px/12px - Checkmark icon (12x12), text Manrope 12px/600 `#0A39DF` @@ -119,8 +189,6 @@ This skill defines the design token system, component patterns, screen structure - Text Manrope 12px/500 `#6A7382` - Active (filled): bg `#0A39DF`, radius 8px, padding 6px/12px - Text Manrope 12px/600 `#FFFFFF` -- Dark (filters button): bg `#121826`, radius 8px, padding 6px/12px - - Text Manrope 12px/600 `#FFFFFF`, with leading icon **Status Badges:** - Radius: 8px, padding: 4px/8px @@ -131,39 +199,65 @@ This skill defines the design token system, component patterns, screen structure - Border: 1.5px `#E2E8F0`, radius: 12px, padding: 12px/14px - Background: `#FFFFFF` -- Placeholder: Manrope 14px/400, color `#6A7382` -- Filled: Manrope 14px/500, color `#121826` -- Label above: Manrope 14px/500, color `#121826` +- Placeholder: Manrope 14px/400, color `#94A3B8` +- Filled: Manrope 14px/400, color `#111827` +- Label above: Manrope 12px/400, spacing 0%: + - Default/filled: color `#94A3B8` + - Filled with value: color `#6A7382` + - Focused: color `#0A39DF` + - Error: color `#F04444` + - Disabled: color `#94A3B8` - Focused: border color `#0A39DF`, border-width 2px -- Error: border color `#F04444`, helper text `#F04444` +- Error: border color `#F04444`, border-width 2px, background `#FEF2F2` +- Error helper text: Manrope 12px/400, color `#F04444` -### Cards (Shift List Items) +### Border Width -- Background: `#FFFFFF`, border: 1px `#D1D5DB`, radius: 12-14px -- Padding: 16px -- Content: venue name (Manrope 15px/600 `#121826`), subtitle (Manrope 13px/400 `#6A7382`) -- Metadata row: icon (14px, `#6A7382`) + text (Manrope 13px/500 `#6A7382`) -- Pay rate: Inter Tight 18px/700 `#0A39DF` +- **Standard border width: `0.5px`** — All card borders, dividers, and outline buttons use `0.5px` unless explicitly stated otherwise. +- **Text inputs: `1.5px`** — To ensure visibility and distinction from card borders. +- **Chips: `1.5px`** — All chip variants (default, warning, error, small). +- **Secondary buttons: `1.5px`** — Outline/secondary button borders. -### Schedule/Pay Info Cards +### Cards -- Two-column layout with 12px gap -- Background: `#FFFFFF`, border: 1px `#D1D5DB`, radius: 12px, padding: 16px -- Label: Manrope 11px/500-700 uppercase `#6A7382` (letter-spacing 0.05em) -- Value: Inter Tight 18px/700 `#121826` (schedule) or `#121826` (pay) -- Sub-text: Manrope 13px/400 `#6A7382` +**Standard Card:** +- Background: `#FFFFFF`, border: 0.5px `#D1D5DB`, radius: 12px, padding: 16px +- Title: Inter Tight 16px/700 `#121826` +- Body: Manrope 14px/400 `#6A7382` +- Gap: 8px between title and body + +**Hero / Gradient Card:** +- Radius: 18px, padding: 20px, gap: 6px +- Background: gradient (mobileHero or adminHero) +- Label: Manrope 12px/400 `#FFFFFFB3` (white 70%) +- Value: Inter Tight 28px/700 `#FFFFFF` +- Sub-text: Manrope 12px/400 `#FFFFFF99` (white 60%) + +**List Rows (grouped):** +- Container: radius 12px, border 0.5px `#D1D5DB`, background `#FFFFFF`, overflow clip +- Row: padding ~16px, gap between text elements 2px +- Row title: Manrope 14px/600 `#121826` +- Row subtitle: Manrope 13px/400 `#6A7382` +- Row divider: 1px `#D1D5DB` (between rows, not on last) +- Chevron: `›` or SVG, `#6A7382` + +**Data Row:** +- Background: `#F1F3F5`, radius: 12px, padding: 12px +- Label: Manrope 11px/400 `#6A7382` +- Value: Inter Tight 20px/700 `#121826` +- Layout: flex row, equal width columns, gap 8px ### Contact/Info Rows -- Container: radius 12px, border 1px `#D1D5DB`, background `#FFFFFF`, overflow clip -- Row: padding 13px/16px, gap 10px, border-bottom 1px `#F1F3F5` (except last) +- Container: radius 12px, border 0.5px `#D1D5DB`, background `#FFFFFF`, overflow clip +- Row: padding 13px/16px, gap 10px, border-bottom 0.5px `#F1F3F5` (except last) - Icon: 16px, stroke `#6A7382` - Label: Manrope 13px/500 `#6A7382`, width 72px fixed - Value: Manrope 13px/500 `#121826` (or `#0A39DF` for phone/links) ### Section Headers -- Text: Manrope 11px/700, uppercase, letter-spacing 0.06em, color `#6A7382` +- Text: Manrope 11px/600, uppercase, letter-spacing 0.06em, color `#6A7382` - Gap to content below: 10px ## 3. Screen Structure diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 23463707..2f09c4a3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,16 +2,10 @@ ---- - ## 🔗 Related Issues -Closes # -Related to # - ---- ## 🎯 Type of Change @@ -26,8 +20,6 @@ Related to # - [ ] 🎨 **Style** (formatting, linting, or minor code style changes) - [ ] 🏗️ **Architecture** (significant structural changes) ---- - ## 📦 Affected Areas @@ -39,8 +31,6 @@ Related to # - [ ] 🚀 **CI/CD** (GitHub Actions, deployment configs) - [ ] 📚 **Documentation** (Docs, onboarding guides) ---- - ## ✅ Testing @@ -48,9 +38,6 @@ Related to # **Test Details:** - ---- - ## 🔄 Breaking Changes @@ -61,9 +48,6 @@ Related to # **Details:** - ---- - ## 🎯 Checklist @@ -79,15 +63,10 @@ Related to # - [ ] Sensitive data is not committed - [ ] Environment variables documented (if added) ---- - ## 📝 Additional Notes - ---- - ## 🔍 Review Checklist for Maintainers - [ ] Code quality and readability diff --git a/.gitignore b/.gitignore index ef614643..b47fdef0 100644 --- a/.gitignore +++ b/.gitignore @@ -196,4 +196,6 @@ apps/mobile/legacy/* AGENTS.md TASKS.md CLAUDE.md +.claude/agents/paper-designer.md +.claude/agent-memory/paper-designer \n# Android Signing (Secure)\n**.jks\n**key.properties diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 8b17176f..00000000 --- a/CLAUDE.md +++ /dev/null @@ -1,149 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -KROW Workforce is a workforce management platform monorepo containing Flutter mobile apps, a React web dashboard, and Firebase backend services. - -## Repository Structure - -``` -apps/mobile/ # Flutter monorepo (Melos workspace) - apps/staff/ # Staff mobile app - apps/client/ # Client (business) mobile app - packages/ - design_system/ # Shared UI tokens & components - core/ # Cross-cutting concerns (mixins, extensions) - core_localization/# i18n via Slang - domain/ # Pure Dart entities & failures - data_connect/ # Firebase Data Connect adapter (connectors) - features/staff/ # Staff feature packages - features/client/ # Client feature packages -apps/web/ # React/Vite web dashboard (TypeScript, Tailwind, Redux Toolkit) -backend/ - dataconnect/ # Firebase Data Connect GraphQL schemas - core-api/ # Core business logic service - cloud-functions/ # Serverless functions -``` - -## Common Commands - -All commands use the root `Makefile` (composed from `makefiles/*.mk`). Run `make help` for the full list. - -### Mobile (Flutter) -```bash -make mobile-install # Bootstrap Melos workspace + generate SDK -make mobile-staff-dev-android # Run staff app (add DEVICE=android) -make mobile-client-dev-android # Run client app -make mobile-analyze # Lint (flutter analyze) -make mobile-test # Run tests -make test-e2e # Maestro E2E tests (both apps) -``` - -Single-package operations via Melos: -```bash -cd apps/mobile -melos run gen:l10n # Generate localization (Slang) -melos run gen:build # Run build_runner -melos run analyze:all # Analyze all packages -melos run test:all # Test all packages -``` - -### Web (React/Vite) -```bash -make web-install # npm install -make web-dev # Start dev server -make web-build # Production build -make web-lint # ESLint -make web-test # Vitest -``` - -### Backend (Data Connect) -```bash -make dataconnect-generate-sdk [ENV=dev] # Generate SDK -make dataconnect-deploy [ENV=dev] # Deploy schemas -make dataconnect-sync-full [ENV=dev] # Deploy + migrate + generate -``` - -## Mobile Architecture - -**Clean Architecture** with strict inward dependency flow: - -``` -Presentation (Pages, BLoCs, Widgets) - → Application (Use Cases) - → Domain (Entities, Repository Interfaces, Failures) - ← Data (Repository Implementations, Connectors) -``` - -### Key Patterns - -- **State management:** Flutter BLoC/Cubit. Register BLoCs with `i.add()` (transient), never `i.addSingleton()`. Use `BlocProvider.value()` for shared BLoCs. -- **DI & Routing:** Flutter Modular. Safe navigation via `safeNavigate()`, `safePush()`, `popSafe()`. Never use `Navigator.push()` directly. -- **Error handling in BLoCs:** Use `BlocErrorHandler` mixin with `_safeEmit()` to prevent StateError on disposed BLoCs. -- **Backend access:** All Data Connect calls go through the `data_connect` package's Connectors. Use `_service.run(() => connector.().execute())` for automatic auth/token management. -- **Session management:** `SessionHandlerMixin` + `SessionListener` widget. Initialized in `main.dart` with role-based config. -- **Localization:** All user-facing strings via `context.strings.` from `core_localization`. Error messages via `ErrorTranslator`. -- **Design system:** Use tokens from `UiColors`, `UiTypography`, `UiConstants`. Never hardcode colors, fonts, or spacing. - -### Feature Package Structure - -New features go in `apps/mobile/packages/features///`: -``` -lib/src/ - domain/repositories/ # Abstract interface classes - data/repositories_impl/ # Implementations using data_connect - application/ # Use cases (business logic) - presentation/ - blocs/ # BLoCs/Cubits - pages/ # Pages (prefer StatelessWidget) - widgets/ # Reusable widgets -``` - -### Critical Rules - -- Features must not import other features directly -- Business logic belongs in Use Cases, never in BLoCs or widgets -- Firebase packages (`firebase_auth`, `firebase_data_connect`) belong only in `data_connect` -- Don't add 3rd-party packages without checking `packages/core` first -- Generated code directories are excluded from analysis: `**/dataconnect_generated/**`, `**/*.g.dart`, `**/*.freezed.dart` - -## Code Generation - -- **Slang** (i18n): Input `lib/src/l10n/*.i18n.json` → Output `strings.g.dart` -- **build_runner**: Various generated files (`.g.dart`, `.freezed.dart`) -- **Firebase Data Connect**: Auto-generated SDK in `packages/data_connect/lib/src/dataconnect_generated/` - -## Naming Conventions (Dart) - -| Type | Convention | Example | -|------|-----------|---------| -| Files | `snake_case` | `user_profile_page.dart` | -| Classes | `PascalCase` | `UserProfilePage` | -| Interfaces | suffix `Interface` | `AuthRepositoryInterface` | -| Implementations | suffix `Impl` | `AuthRepositoryImpl` | - -## Key Documentation - -- `docs/MOBILE/00-agent-development-rules.md` — Non-negotiable architecture rules -- `docs/MOBILE/01-architecture-principles.md` — Clean architecture details -- `docs/MOBILE/02-design-system-usage.md` — Design system token usage -- `docs/MOBILE/03-data-connect-connectors-pattern.md` — Backend integration pattern -- `docs/MOBILE/05-release-process.md` — Release quick reference -- `docs/RELEASE/mobile-releases.md` — Complete release guide - -## Skills & Sub-Agents - -#### Skills -- The project has 4 specialized skills in `.claude/skills/` that provide deep domain knowledge. Invoke them and other global skills that you have when working in their domains. - -#### Sub-Agents -- The project has 4 sub-agents in `.claude/sub-agents/` that can be invoked for specific tasks. Invoke them and other global sub-agents that you have when working in their domains. - - -## CI/CD - -- `.github/workflows/mobile-ci.yml` — Mobile build & test on PR -- `.github/workflows/product-release.yml` — Automated versioning, tags, APK builds -- `.github/workflows/web-quality.yml` — Web linting & tests diff --git a/apps/mobile/apps/client/android/app/src/dev/res/mipmap-hdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 00000000..d49bbb8c Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-hdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/dev/res/mipmap-mdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 00000000..9007c17a Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-mdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xhdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 00000000..bdbc72ac Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xxhdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 00000000..6779c5b9 Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xxxhdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 00000000..ad4ebe43 Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/dev/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/dev/res/values/ic_launcher.xml b/apps/mobile/apps/client/android/app/src/dev/res/values/ic_launcher.xml new file mode 100644 index 00000000..72e01a91 --- /dev/null +++ b/apps/mobile/apps/client/android/app/src/dev/res/values/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/mobile/apps/client/android/app/src/stage/res/mipmap-hdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 00000000..d4c42c19 Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-hdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/stage/res/mipmap-mdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 00000000..c790375a Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-mdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xhdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 00000000..7141d7a0 Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xxhdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 00000000..6e548385 Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xxxhdpi/launcher_icon.png b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 00000000..bd654f8e Binary files /dev/null and b/apps/mobile/apps/client/android/app/src/stage/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/client/android/app/src/stage/res/values/ic_launcher.xml b/apps/mobile/apps/client/android/app/src/stage/res/values/ic_launcher.xml new file mode 100644 index 00000000..72e01a91 --- /dev/null +++ b/apps/mobile/apps/client/android/app/src/stage/res/values/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/mobile/apps/client/assets/logo-dev.png b/apps/mobile/apps/client/assets/logo-dev.png new file mode 100644 index 00000000..d7e888f8 Binary files /dev/null and b/apps/mobile/apps/client/assets/logo-dev.png differ diff --git a/apps/mobile/apps/client/assets/logo-stage.png b/apps/mobile/apps/client/assets/logo-stage.png new file mode 100644 index 00000000..13650e6d Binary files /dev/null and b/apps/mobile/apps/client/assets/logo-stage.png differ diff --git a/apps/mobile/apps/client/ios/Flutter/Dev.xcconfig b/apps/mobile/apps/client/ios/Flutter/Dev.xcconfig new file mode 100644 index 00000000..1cf7844f --- /dev/null +++ b/apps/mobile/apps/client/ios/Flutter/Dev.xcconfig @@ -0,0 +1,2 @@ +// Build configuration for dev flavor - use AppIcon-dev +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon-dev diff --git a/apps/mobile/apps/client/ios/Flutter/Stage.xcconfig b/apps/mobile/apps/client/ios/Flutter/Stage.xcconfig new file mode 100644 index 00000000..1c32ddd9 --- /dev/null +++ b/apps/mobile/apps/client/ios/Flutter/Stage.xcconfig @@ -0,0 +1,2 @@ +// Build configuration for stage flavor - use AppIcon-stage +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon-stage diff --git a/apps/mobile/apps/client/ios/Runner.xcodeproj/project.pbxproj b/apps/mobile/apps/client/ios/Runner.xcodeproj/project.pbxproj index b4c57563..d03d2b39 100644 --- a/apps/mobile/apps/client/ios/Runner.xcodeproj/project.pbxproj +++ b/apps/mobile/apps/client/ios/Runner.xcodeproj/project.pbxproj @@ -256,7 +256,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; }; BC26E38F2F5F614000517BDF /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -383,7 +383,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [STAGE]"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -563,7 +563,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -665,7 +665,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -762,7 +762,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [STAGE] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -951,7 +951,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -1040,7 +1040,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [STAGE]"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -1220,7 +1220,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -1311,7 +1311,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us Business [STAGE] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json new file mode 100644 index 00000000..d0d98aa1 --- /dev/null +++ b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-1024x1024@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..33cfd814 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..5f527137 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..da57bdc1 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..8ad994f0 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..532aea6f Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..a1929f2b Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..1472048e Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..da57bdc1 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..d9ae6d33 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..141c5928 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 00000000..425fef8e Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 00000000..256ba404 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 00000000..b54d7090 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 00000000..086f6198 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..141c5928 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..3b9d45e2 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 00000000..7febd04d Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 00000000..bb430049 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..cf010a0b Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..31875682 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-83.5x83.5@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..eb5f019a Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Contents.json b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Contents.json new file mode 100644 index 00000000..d0d98aa1 --- /dev/null +++ b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-1024x1024@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..f2c78577 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..4a0e6692 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..8437d8c0 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..36b76f8f Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..ae36ba13 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..de7f6dd9 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..db506359 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..8437d8c0 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..64a6e05d Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..d49e47f9 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 00000000..088c0273 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 00000000..9f3a128b Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 00000000..12aa8b4d Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 00000000..5721c210 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..d49e47f9 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@3x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..c5178177 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@3x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 00000000..c5c3e185 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 00000000..6fb9d895 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@1x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..97217ce1 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@1x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..99eeb561 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@2x.png differ diff --git a/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-83.5x83.5@2x.png b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..fbbb7d57 Binary files /dev/null and b/apps/mobile/apps/client/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-hdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 00000000..04dc5070 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-hdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-mdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 00000000..27d2bc52 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-mdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xhdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 00000000..42667c8d Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xxhdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 00000000..fe7a9a50 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xxxhdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 00000000..05c99031 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/dev/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/dev/res/values/ic_launcher.xml b/apps/mobile/apps/staff/android/app/src/dev/res/values/ic_launcher.xml new file mode 100644 index 00000000..72e01a91 --- /dev/null +++ b/apps/mobile/apps/staff/android/app/src/dev/res/values/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-hdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 00000000..c9f767bd Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-hdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-mdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 00000000..50de2d62 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-mdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xhdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 00000000..e4166943 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xxhdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 00000000..dbe980a4 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xxxhdpi/launcher_icon.png b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 00000000..b1975011 Binary files /dev/null and b/apps/mobile/apps/staff/android/app/src/stage/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/apps/mobile/apps/staff/android/app/src/stage/res/values/ic_launcher.xml b/apps/mobile/apps/staff/android/app/src/stage/res/values/ic_launcher.xml new file mode 100644 index 00000000..72e01a91 --- /dev/null +++ b/apps/mobile/apps/staff/android/app/src/stage/res/values/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/mobile/apps/staff/assets/logo-dev.png b/apps/mobile/apps/staff/assets/logo-dev.png new file mode 100644 index 00000000..49d71834 Binary files /dev/null and b/apps/mobile/apps/staff/assets/logo-dev.png differ diff --git a/apps/mobile/apps/staff/assets/logo-stage.png b/apps/mobile/apps/staff/assets/logo-stage.png new file mode 100644 index 00000000..7b11e59a Binary files /dev/null and b/apps/mobile/apps/staff/assets/logo-stage.png differ diff --git a/apps/mobile/apps/staff/ios/Flutter/Dev.xcconfig b/apps/mobile/apps/staff/ios/Flutter/Dev.xcconfig new file mode 100644 index 00000000..1cf7844f --- /dev/null +++ b/apps/mobile/apps/staff/ios/Flutter/Dev.xcconfig @@ -0,0 +1,2 @@ +// Build configuration for dev flavor - use AppIcon-dev +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon-dev diff --git a/apps/mobile/apps/staff/ios/Flutter/Stage.xcconfig b/apps/mobile/apps/staff/ios/Flutter/Stage.xcconfig new file mode 100644 index 00000000..1c32ddd9 --- /dev/null +++ b/apps/mobile/apps/staff/ios/Flutter/Stage.xcconfig @@ -0,0 +1,2 @@ +// Build configuration for stage flavor - use AppIcon-stage +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon-stage diff --git a/apps/mobile/apps/staff/ios/Runner.xcodeproj/project.pbxproj b/apps/mobile/apps/staff/ios/Runner.xcodeproj/project.pbxproj index b3030a13..6aa920e9 100644 --- a/apps/mobile/apps/staff/ios/Runner.xcodeproj/project.pbxproj +++ b/apps/mobile/apps/staff/ios/Runner.xcodeproj/project.pbxproj @@ -384,7 +384,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [STAGE] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -564,7 +564,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -666,7 +666,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -763,7 +763,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [STAGE] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -954,7 +954,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -1045,7 +1045,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [STAGE] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -1225,7 +1225,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [DEV] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; @@ -1314,7 +1314,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { APP_NAME = "KROW With Us [STAGE] "; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-stage"; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json new file mode 100644 index 00000000..d0d98aa1 --- /dev/null +++ b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-1024x1024@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..245225a9 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..9498c539 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..2d2a3d6b Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..2fed90a9 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-20x20@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..6a61a35b Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..ade8731f Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..f6ecf0f8 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-29x29@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..2d2a3d6b Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..e3ccb67b Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..fc8cdae3 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-40x40@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 00000000..1727d894 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 00000000..f9958e01 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-50x50@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 00000000..b9c500f6 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 00000000..cb3ac623 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-57x57@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..fc8cdae3 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..108ae1a0 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-60x60@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 00000000..c96339b6 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 00000000..903a6ceb Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-72x72@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..65981b8b Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..19596c28 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-76x76@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-83.5x83.5@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..b2979320 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Contents.json b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Contents.json new file mode 100644 index 00000000..d0d98aa1 --- /dev/null +++ b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-1024x1024@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..dbf0c826 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..9f70b76d Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..e86fc3c7 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..673ad708 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-20x20@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..e0a60197 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..6482ce67 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..c110a199 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-29x29@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..e86fc3c7 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..8c5d9752 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..1a0ee9b3 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-40x40@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 00000000..dfdc92d0 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 00000000..7fadd6f0 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-50x50@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 00000000..7007f609 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 00000000..d031a149 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-57x57@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..1a0ee9b3 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@3x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..1313d0e6 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-60x60@3x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 00000000..4cfabad1 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 00000000..49f5de35 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-72x72@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@1x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..d03a9b6c Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@1x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..720ce010 Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-76x76@2x.png differ diff --git a/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-83.5x83.5@2x.png b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..57f9499d Binary files /dev/null and b/apps/mobile/apps/staff/ios/Runner/Assets.xcassets/AppIcon-stage.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/docs/BACKEND/API_GUIDES/mobile-backend-api-specification.md b/docs/BACKEND/API_GUIDES/mobile-backend-api-specification.md new file mode 100644 index 00000000..f91a6b16 --- /dev/null +++ b/docs/BACKEND/API_GUIDES/mobile-backend-api-specification.md @@ -0,0 +1,1689 @@ +# KROW Mobile Backend API Specification +> **Generated:** 2026-03-12 +--- + +## Client Application + +--- + +### Feature: Authentication + +#### API - 1 + +API Type: POST +Description: +Signs in a client user using email and password. Authenticates the user against the identity provider and returns a session token. + +Inputs: +- Email address of the user. +- Password of the user. + +Returns: +- Authenticated user profile (identifier, name, email, role). +- Session token for subsequent authenticated requests. + +--- + +#### API - 2 + +API Type: POST +Description: +Registers a new client user and creates an associated business entity. The backend creates the identity record, the user record, and a business entity in a single transactional flow. Rolls back all created resources if any step fails. + +Inputs: +- Company name for the new business. +- Email address of the user. +- Password for the new account. + +Returns: +- Authenticated user profile (identifier, name, email, role). +- Newly created business identifier. +- Session token for subsequent authenticated requests. + +--- + +#### API - 3 + +API Type: POST +Description: +Signs out the currently authenticated client user. Invalidates the active session and clears any server-side session state. + +Inputs: +- Session token (via authorization header). + +Returns: +- Confirmation of successful sign-out. + +--- + +### Feature: Billing + +#### API - 1 + +API Type: GET +Description: +Returns all bank accounts associated with the client's business. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of bank accounts, each containing: account identifier, bank name, account number (masked), routing number, account type, and primary status. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns all pending invoices (open or disputed) for the business. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of pending invoices, each containing: invoice identifier, amount, status (open/disputed), due date, and associated vendor information. + +--- + +#### API - 3 + +API Type: GET +Description: +Returns the full invoice history for the business, including paid and completed invoices. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of historical invoices, each containing: invoice identifier, amount, status, payment date, and associated vendor information. + +--- + +#### API - 4 + +API Type: GET +Description: +Returns the current outstanding bill amount for the active billing period (specific time period). + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- Current bill amount as a monetary value. + +--- + +#### API - 5 + +API Type: GET +Description: +Returns the total savings amount accumulated by the business. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- Savings amount as a monetary value. + +--- + +#### API - 6 + +API Type: GET +Description: +Returns a detailed spending breakdown for a given billing period, grouped by role and industry. + +Inputs: +- Business identifier (derived from authenticated session). +- Billing period (specific time period). + +Returns: +- List of spending line items, each containing: category name, amount, and percentage of total spend. + +--- + +#### API - 7 + +API Type: POST +Description: +Approves a pending invoice, marking it as accepted for payment. + +Inputs: +- Invoice identifier. + +Returns: +- Updated invoice status (approved). + +--- + +#### API - 8 + +API Type: POST +Description: +Disputes an invoice, recording the dispute reason and changing its status. + +Inputs: +- Invoice identifier. +- Reason for the dispute. + +Returns: +- Updated invoice status (disputed). + +--- + +### Feature: Client Coverage + +#### API - 1 + +API Type: GET +Description: +Returns all shift coverage information for a specific date. Includes shift details along with assigned worker status (confirmed, checked-in, en route, late). + +Inputs: +- Business identifier (derived from authenticated session). +- Date for which to retrieve coverage. + +Returns: +- List of coverage shifts, each containing: shift identifier, role name, time range, required worker count, and list of assigned workers with their current status and check-in times. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns aggregated coverage statistics for a specific date. Provides summary counts of staffing needs vs. fulfillment. + +Inputs: +- Business identifier (derived from authenticated session). +- Date for which to retrieve statistics. + +Returns: +- Total coverage percentage. +- Total positions needed. +- Total positions confirmed. +- Total workers checked in. +- Total workers en route. +- Total workers late. + +--- + +#### API - 3 + +API Type: POST +Description: +Rate a worker. + +Inputs: +- worker id. +- Number of starts of a user. +- Mark as favourite +- Issue flags. +- Feedback + +Returns: +- return those exact values, that we updated. + +--- + +#### API - 4 + +API Type: POST +Description: +Cancel a worker who's running late. + +Inputs: +- worker id. +- order details and shift details if required. + +Returns: +- + +Note: +- Also, by doing this the system need to automatically prompts to search the workers for the shift. + +--- + +#### API - 5 + +API Type: GET +Description: +View the workers of the core team. + +--- + +### Feature: Home (Client Dashboard) + +#### API - 1 + +API Type: GET +Description: +Returns aggregated dashboard data for the client's business, including spending summaries and shift statistics for the current and upcoming week. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- Spending oversights + - Weekly spending amount. + - Next 7 days projected spending. +- Coverage. + - Today's needed workers + - Today's filled workers + - Today's position opend +- Live activity + - Today's worker's running late + - Avg. today's cost + - Checked in + - Today's position opend + +--- + +#### API - 2 + +API Type: GET +Description: +Returns user session data including the business name and user profile information for dashboard display. + +Inputs: +- User identifier (derived from authenticated session). + +Returns: +- User name. +- Business name. +- Business identifier. + +--- + +#### API - 3 + +API Type: GET +Description: +Returns a list of recent orders that are eligible for reordering. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of recent reorder items, each containing: order identifier, order title, date, hub name, and number of positions, order type. + +--- + +### Feature: Hubs + +#### API - 1 + +API Type: GET +Description: +Returns all team hubs belonging to the client's business. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of hubs, each containing: hub identifier, name, full address, coordinates (latitude/longitude), city, state, zip code, associated cost center, and NFC tag identifier if assigned. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns all cost centers (departments) available for the business. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of cost centers, each containing: cost center identifier and name. + +--- + +#### API - 3 + +API Type: POST +Description: +Creates a new team hub for the business. Geocodes the provided address and creates associated team and cost center records as needed. + +Inputs: +- Hub name. +- Full address string. +- Google Place ID (optional, for geocoding). +- Latitude and longitude (optional, derived if place ID provided). +- City, state, street, country, zip code (optional). +- Cost center identifier (optional). + +Returns: +- Newly created hub with full details including: hub identifier, name, resolved address, coordinates, and associated cost center. + +--- + +#### API - 4 + +API Type: PUT +Description: +Updates an existing team hub's information. + +Inputs: +- Hub identifier. +- Updated hub name (optional). +- Updated address and location fields (optional). +- Updated cost center identifier (optional). + +Returns: +- Updated hub with full details. + +--- + +#### API - 5 + +API Type: DELETE +Description: +Deletes a team hub. Validates that no active orders reference the hub before deletion. + +Inputs: +- Hub identifier. + +Returns: +- Confirmation of successful deletion (cannot delete if alreaddy order's are assigned to it) + +--- + +#### API - 6 + +API Type: POST +Description: +Assigns an NFC tag to a team hub for contactless check-in support. + +Inputs: +- Hub identifier. +- NFC tag identifier. + +Returns: +- Confirmation of successful assignment. + +--- + +### Feature: Orders — Create Order + +#### API - 1 + +API Type: GET +Description: +Returns the list of vendors available to the client's business for order creation. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of vendors, each containing: vendor identifier and vendor name. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns the list of worker roles available from a specific vendor. + +Inputs: +- Vendor identifier. + +Returns: +- List of roles, each containing: role identifier, role name, and hourly rate. + +--- + +#### API - 3 + +API Type: GET +Description: +Returns the list of hubs owned by the authenticated business for selection during order creation. + +Inputs: +- Business identifier (derived from authenticated session). + +Returns: +- List of hubs, each containing: hub identifier and hub name. + +--- + +#### API - 4 + +API Type: GET +Description: +Returns the list of managers assigned to a specific hub for order assignment. + +Inputs: +- Hub identifier. + +Returns: +- List of managers, each containing: manager identifier and manager name. + +--- + +#### API - 4 + +API Type: POST +Description: +Create a new manager for the hub from the team memebers of the business + +Inputs: +- Hub identifier. +- team memeber id + +Returns: +- + +--- + +#### API - 5 + +API Type: POST +Description: +Creates a new one-time order with one or more positions. This is a transactional operation that creates the order record, an associated shift, and individual shift role entries for each requested position. Updates the order with shift references upon completion. + +Inputs: +- Hub identifier. +- Vendor identifier. +- Event name. +- Order date. +- List of positions, each containing: + - Role identifier. + - Number of workers needed. + - Start time. + - End time. + - Lunch break duration and whether it is paid. + - Hourly rate. + +Returns: +- Created order identifier. +- Created shift identifier. +- Order status (posted). + +--- + +#### API - 6 + +API Type: POST +Description: +Creates a new recurring order that repeats on a defined schedule with specified positions. + +Inputs: +- Hub identifier. +- Vendor identifier (optional). +- Event name (optional). +- Start date and end date defining the recurrence window. +- Recurrence pattern (e.g., days of week). +- List of positions with role, count, time range, break, and rate details. + +Returns: +- Created order identifier. +- Order status (posted). + +--- + +#### API - 7 + +API Type: POST +Description: +Creates a new permanent staffing order for ongoing coverage at a hub. + +Inputs: +- Hub identifier. +- Vendor identifier (optional). +- Start date. +- List of positions with role, count, time range, break, and rate details. + +Returns: +- Created order identifier. +- Order status (posted). + +--- + +#### API - 9 + +API Type: POST +Description: +Edit an existing past order/shift. + - need one for each type (one-time, recurring and permanent) + +Inputs: +- Original order identifier. +- This gets the details for each order + +Returns: +- Newly created order identifier. +- Order status (posted). + +Note: +- Need to verify if whether we are changing the only the current shift or the entire order when editing. + +--- + +#### API - 10 + +API Type: GET +Description: +Returns the full details of a previous order for reorder preview purposes. + +Inputs: +- Order identifier. + +Returns: +- Order details including: hub, vendor, event name, positions (role, count, times, rates), and original date. + +--- + +### Feature: Orders — View Orders + +#### API - 1 + +API Type: GET +Description: +Returns all shift roles (order line items) for a given date range, grouped by day. Each item represents a specific role on a specific shift within an order. + +Inputs: +- Business identifier (derived from authenticated session). +- Start date of the range. +- End date of the range. + +Returns: +- List of order items, each containing: item identifier, order identifier, order type (one-time/recurring/permanent), role name, date, start and end times, required worker count, filled count, hourly rate, total cost, location name, current status and lists of accepted worker details, each containing: application identifier, worker name, role, and confirmation status. + +--- + +### Feature: Reports + +#### API - 1 + +API Type: GET +Description: +Returns a summary across all report categories for a given date range. Provides top-level metrics for the reports dashboard. + +Inputs: +- Business identifier (derived from authenticated session). +- Start date of the report period. +- End date of the report period. + +Returns: +- Total shifts. +- Total spend. +- Average coverage percentage. +- Average performance score. +- No-show count. +- Forecast accuracy percentage. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns the daily operations report for a specific date. Includes shift-level metrics broken down by role and status. + +Inputs: +- Business identifier (derived from authenticated session). +- Report date. + +Returns: +- Total shifts for the day. +- Total workers deployed. +- Total hours worked. +- On-time arrival percentage. +- List of shifts with role, status, worker count, start and end times. + +--- + +#### API - 3 + +API Type: GET +Description: +Returns the spending report for a date range. Includes spend grouped by time period and by industry/role. + +Inputs: +- Business identifier (derived from authenticated session). +- Start date of the report period. +- End date of the report period. + +Returns: +- Total spend for the period. +- Spend grouped by day or week (for charting). +- Spend breakdown by role and industry category. + +--- + +#### API - 4 + +API Type: GET +Description: +Returns the coverage report for a date range. Shows how well staffing needs were met over time. + +Inputs: +- Business identifier (derived from authenticated session). +- Start date of the report period. +- End date of the report period. + +Returns: +- Average coverage percentage for the period +- Filled workers for the period +- Need workers for the period. +- Daily coverage rates (for charting) for each day in the period + +--- + +#### API - 5 + +API Type: GET +Description: +Returns the forecast report for a date range. Projects future staffing needs based on historical patterns. + +Inputs: +- Business identifier (derived from authenticated session). +- Start date of the report period. +- End date of the report period. + +Returns: +- Forecast spend for the period +- Average weekly for the period. +- Total shifts for the period. +- Total worker hours for the period. +- Spending forecast for each week in the period (for charting). +- Weekly breakdown + - no. of shifts + - total no. of worker hours. + - avg/shift cost + +--- + +#### API - 6 + +API Type: GET +Description: +Returns the performance report for a date range. Includes worker and shift quality metrics. + +Inputs: +- Business identifier (derived from authenticated session). +- Start date of the report period. +- End date of the report period. + +Returns: +- Average performance score (whether excellent or not) +- Fill Rate (with met or not). +- Completion rate (with met or not). +- On-time rate (with met or not). +- Avg. Fill Time (with met or not). +- Total Shifts covered. +- No-show rate + +--- + +#### API - 7 + +API Type: GET +Description: +Returns the no-show report for a date range. Tracks workers who failed to appear for assigned shifts. + +Inputs: +- Business identifier (derived from authenticated session). +- Start date of the report period. +- End date of the report period. + +Returns: +- Total no-show count. +- No-show rate as a percentage. +- No. of workers who no-showed. +- List of workers who no-showed. + - Risk status of whether they would it do it again + - List of no-show incidents with shift, role, date for each worker + +--- + +### Feature: Settings + +#### API - 1 + +API Type: POST +Description: +Signs out the currently authenticated client user and clears all server-side session data. + +Inputs: +- Session token (via authorization header). + +Returns: +- Confirmation of successful sign-out. + +--- + +--- + +## Staff Application + +--- + +### Feature: Authentication + +#### API - 1 + +API Type: POST +Description: +Initiates phone-based authentication by sending an OTP to the provided phone number. + +Inputs: +- Phone number of the staff user. + +Returns: +- Verification identifier to be used when submitting the OTP code. + +--- + +#### API - 2 + +API Type: POST +Description: +Verifies the OTP code submitted by the staff user. If the user account does not exist, creates a new user record. Returns authentication session and user profile. + +Inputs: +- Verification identifier (from the phone-initiation step). +- OTP code entered by the user. +- Authentication mode (sign-in or sign-up). + +Returns: +- Authenticated user profile (identifier, name, phone, role). +- Session token for subsequent authenticated requests. +- Flag indicating if this is a new user (profile setup required). + +--- + +#### API - 3 + +API Type: POST +Description: +Signs out the currently authenticated staff user and clears server-side session state. + +Inputs: +- Session token (via authorization header). + +Returns: +- Confirmation of successful sign-out. + +--- + +#### API - 4 + +API Type: POST +Description: +Submits the initial profile setup for a newly registered staff user. Creates the staff record with personal details, preferences, and skills. + +Inputs: +- Full name of the staff member. +- Bio (optional). +- Phone number +- List of preferred work locations (cities saved with Lat and Long). +- Maximum commute distance in miles. +- List of preferred industries. +- List of skills. + +Returns: +- Created staff profile identifier. +- Confirmation of successful profile creation. + +--- + +### Feature: Availability + +#### API - 1 + +API Type: GET +Description: +Returns the weekly availability schedule for the staff member over a given date range. The backend maps recurring weekly slots to specific dates in the requested range. + +Inputs: +- Staff identifier (derived from authenticated session). +- Start date of the range. +- End date of the range (typically start + 6 days). + +Returns: +- List of day availability entries, each containing: date, day of week, availability status (available/unavailable/partial), and time slots with start and end times. + +--- + +#### API - 2 + +API Type: PUT +Description: +Updates the recurring availability for a specific day of the week. Sets or modifies the time slots during which the staff member is available to work. + +Inputs: +- Staff identifier (derived from authenticated session). +- Day of week. +- Availability status (available/unavailable/partial). +- List of time slots with start and end times (for partial availability). + +Returns: +- Updated day availability entry with resolved slots. + +--- + +#### API - 3 + +API Type: POST +Description: +Applies a quick-set availability template across a date range. Supports preset patterns such as "available all days", "weekdays only", "weekends only", or "clear all". + +Inputs: +- Staff identifier (derived from authenticated session). +- Start date of the range. +- End date of the range. +- Quick-set type (all/weekdays/weekends/clear). + +Returns: +- Updated list of day availability entries for the full range. + +--- + +### Feature: Clock In + +#### API - 1 + +API Type: GET +Description: +Returns all shifts the staff member is assigned to for the current day, ordered by proximity to the current time. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of today's shifts, each containing: shift identifier, role name, location, start time, end time, and current attendance status. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns the current attendance status of the staff member (e.g., not clocked in, clocked in, on break, clocked out). + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- Current attendance status. +- Active shift identifier (if clocked in). +- Clock-in timestamp (if clocked in). + +--- + +#### API - 3 + +API Type: POST +Description: +Records a clock-in event for the staff member on a specific shift. Validates that the shift is assigned to the user and within the allowed clock-in window. + +Inputs: +- Staff identifier (derived from authenticated session). +- Shift identifier. +- Notes (optional). + +Returns: +- Updated attendance status (clocked in). +- Clock-in timestamp. + +--- + +#### API - 4 + +API Type: POST +Description: +Records a clock-out event for the staff member. Captures total break time and optional notes. + +Inputs: +- Staff identifier (derived from authenticated session). +- Notes (optional). +- Break time in minutes (optional). +- Application identifier (optional, for specific shift tracking). + +Returns: +- Updated attendance status (clocked out). +- Clock-out timestamp. +- Total hours worked. + +--- + +### Feature: Home (Staff Dashboard) + +#### APIs + +API Type: GET +Description: +Returns the staff member's dashboard data including today's shifts, tomorrow's shifts, recommended shifts, and benefits. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- If possible create seperate endpoint for each of the following + - Staff member's name. + - List of today's confirmed shifts. + - List of tomorrow's confirmed shifts. + - List of recommended open shifts. + - List of active benefits with hours tracking. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns the status of the worker profile completion status. + +Inputs: +- Workr id. + +Returns: +- If the worker profile is fully completed (if not they cannot apply to shifts and not show the clock-in, my shifts and assigned shifts). The profile is complete when the worker has properly filled + - First name + - Last name + - email + - phone nubmer + - preffered locations + - skills + - industries + - emergency contact + +--- + +### Feature: Payments + +#### API - 1 + +API Type: GET +Description: +Returns the payment summary for the staff member, for the given period. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- Total Earnings for the given period. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns the payment history for the staff member filtered by time period. + +Inputs: +- Staff identifier (derived from authenticated session). +- Period filter (for the given period) + +Returns: +- List of payment entries, each containing: payment identifier, amount, date, status (paid/pending), associated shift name, location, hourly rate, and hours worked. + +--- + +#### API - 3 + +API Type: GET +Description: +Charting details (for the amount that the worker recieved) for the given period. + +Inputs: +- Staff identifier (derived from authenticated session). +- Period filter (for the given period) + +Returns: +- For each (Day/week/month: this value can depend on the period) the amount recieved. + +--- + +### Feature: Shifts + +#### API - 1 + +API Type: GET +Description: +Returns shifts assigned to the staff member within a date range (confirmed, request-swap and upcoming shifts). + +Inputs: +- Staff identifier (derived from authenticated session). +- Start date. +- End date. + +Returns: +- List of assigned shifts, each containing: shift identifier, role name, location, date, start time, end time, hourly rate, order type (one-time/recurring/permanent), and current status. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns available open shifts that the staff member can apply for. Supports search and filtering by type. + +Inputs: +- Staff identifier (derived from authenticated session). +- Search query (optional). +- Shift type filter (optional). + - Worker location's [List] + - Radius from each location that user's like to work (ex: 20km from each preffered location) + +Returns: +- List of available shifts, each containing: shift identifier, role name, location, date, start time, end time, hourly rate, order type, instant book availability, and required worker count. +- These shifts should automatically filtered according to the user's preferneces provided (location, experiences etc.) + +--- + +#### API - 3 + +API Type: GET +Description: +Returns pending shift assignments awaiting the staff member's response (accept or decline). + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of pending shifts with full shift details and response deadline. + +--- + +#### API - 4 + +API Type: GET +Description: +Returns detailed information about a specific shift, including role-specific details. + +Inputs: +- Staff identifier (derived from authenticated session). +- Shift identifier. +- Role identifier (optional, for role-specific view). + +Returns: +- Complete shift details: shift identifier, title, description, location with address, date, start and end times, hourly rate, break policy, order type, required count, confirmed count, and the staff member's application status for this shift. + +--- + +#### API - 5 + +API Type: POST +Description: +Submits an application for an open shift. Supports instant booking where the application is immediately confirmed. For recurring and permanent orders, creates applications for all matching days. + +Inputs: +- Staff identifier (derived from authenticated session). +- Shift identifier. +- Role identifier (optional, to apply for a specific role on the shift). +- Instant book flag (true if the shift supports immediate confirmation). + +Returns: +- Application identifier. +- Application status (pending or confirmed if instant book). + +--- + +#### API - 6 + +API Type: POST +Description: +Accepts a pending shift assignment offered to the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). +- Shift identifier. + +Returns: +- Updated application status (confirmed). + +--- + +#### API - 7 + +API Type: POST +Description: +Declines a pending shift assignment offered to the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). +- Shift identifier. + +Returns: +- Updated application status (declined). + +--- + +#### API - 8 + +API Type: GET +Description: +Returns shifts that were previously assigned to the staff member but have been cancelled. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of cancelled shifts with shift details and cancellation reason. + +--- + +#### API - 9 + +API Type: GET +Description: +Returns the staff member's completed shift history. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of historical shifts with shift details, hours worked, and payment status. + +--- + +#### API - 10 + +API Type: GET +Description: +To use the "Request swap" feature, where the shift status is switched to an intermedidate state (not canceled) but it's starts to show on other workers find shift + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- + +--- + +### Feature: Profile Sections + +#### API - 1 + +API Type: GET +Description: +Returns the status of each of the following section + - worker personal info completion status. + - worker emergency contact completion status + - worker's experiences completion status. + - worker's attire section completion status. + - worker's tax form's completion status. + +Inputs: +- Workr id. + +Returns: +- Map of each section completion status. + + - The worker's personal info is complete when the worker has properly filled + - First name + - Last name + - email + - phone nubmer + - preffered locations + - If the worker has added at least one emergency contact. + - The worker's experiences section is complete when the worker has properly filled + - skills + - industries + - The worker's attire section is marked completed when they have uploaded all the required attire options. + - The worker's tax form section is marked completed when they have uploaded all the required attire items. + +--- + +### Feature: Profile Sections — Personal Info + +#### API - 1 + +API Type: GET +Description: +Returns the worker personal info + +Inputs: +- Workr id. + +Returns: +- Fields : first name, last name, bio, preferred locations, max distance, industries, skills. + +--- + +#### API - 2 + +API Type: PUT +Description: +Updates the staff member's profile information. Supports partial updates where only provided fields are modified. + +Inputs: +- Staff identifier. +- Updated fields (all optional): first name, last name, bio, preferred locations, email, phone number + + +Returns: +- Updated fields. + +--- + +#### API - 3 + +API Type: POST +Description: +Uploads a new profile photo for the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). +- Photo file. + +Returns: +- URL of the uploaded profile photo. + +--- + +#### API - 4 + +API Type: PUT +Description: +Updates the staff member's preferred locations. + +Inputs: +- Staff identifier. + + +Returns: +- Updated fields : first name, last name, bio, preferred locations, email, phone number. + +--- + +### Feature: Profile Sections — Experience + +#### API - 1 + +API Type: GET +Description: +Returns the staff member's selected industries. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of industry names. + +--- + +#### API - 2 + +API Type: GET +Description: +Returns the staff member's selected skills. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of skill names. + +--- + +#### API - 3 + +API Type: PUT +Description: +Updates the staff member's industry and skill selections. + +Inputs: +- Staff identifier (derived from authenticated session). +- List of selected industries. +- List of selected skills. + +Returns: +- Confirmation of successful update. + +--- + +### Feature: Profile Sections — Emergency Contact + +#### API - 1 + +API Type: GET +Description: +Returns all emergency contacts for the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of emergency contacts, each containing: contact identifier, full name, phone number, and relationship type. + +--- + +#### API - 2 + +API Type: PUT +Description: +Edit an existing emergency contact + +Inputs: +- Staff identifier (derived from authenticated session). +- Updated fields: full name, phone number, and relationship type. + +Returns: +- Updated list of emergency contacts with assigned identifiers. + +--- + +#### API - 2 + +API Type: POST +Description: +Create a new emergency contact + +Inputs: +- Staff identifier (derived from authenticated session). +- Fields: full name, phone number, and relationship type. + +Returns: +- Updated list of emergency contacts with assigned identifiers. + +--- + +### Feature: Profile Sections — Tax Forms + +#### API - 1 + +API Type: GET +Description: +Returns all tax forms (I-9 and W-4) for the staff member. Auto-creates blank forms if none exist. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of tax forms, each containing: form type (I-9 or W-4), form status (not started/in progress/submitted), and all form-specific fields. + +--- + +#### API - 2 + +API Type: PUT +Description: +Saves a partial update to the I-9 tax form (draft state, not submitted). + +Inputs: +- Staff identifier (derived from authenticated session). +- I-9 form fields (all optional): citizenship status, document type, document number, alien/admission numbers, date of birth, Social Security Number, address fields. + +Returns: +- Updated I-9 form with current values and status. + +--- + +#### API - 3 + +API Type: POST +Description: +Submits the completed I-9 tax form. Changes the form status to submitted and validates all required fields. + +Inputs: +- Staff identifier (derived from authenticated session). +- Complete I-9 form data with all required fields. + +Returns: +- Submitted I-9 form with updated status. + +--- + +#### API - 4 + +API Type: PUT +Description: +Saves a partial update to the W-4 tax form (draft state, not submitted). + +Inputs: +- Staff identifier (derived from authenticated session). +- W-4 form fields (all optional): filing status, multiple jobs flag, dependent amounts, other income, deductions, extra withholding, exempt status. + +Returns: +- Updated W-4 form with current values and status. + +--- + +#### API - 5 + +API Type: POST +Description: +Submits the completed W-4 tax form. Changes the form status to submitted and validates all required fields. + +Inputs: +- Staff identifier (derived from authenticated session). +- Complete W-4 form data with all required fields. + +Returns: +- Submitted W-4 form with updated status. + +--- + +### Feature: Profile Sections — Certificates + +#### API - 1 + +API Type: GET +Description: +Returns all certificates (compliance documents) for the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of certificates, each containing: certification type, name, status (pending/verified/expired), file URL, expiry date, issuer, certificate number, and validation status. + +--- + +#### API - 2 + +API Type: POST +Description: +Uploads a new certificate file and initiates automated verification. The backend stores the file, generates a signed URL, creates a verification request, and persists the certificate record. + +Inputs: +- Staff identifier (derived from authenticated session). +- Certification type (e.g., food handler, CPR, guard card). +- Certificate name. +- Certificate file. +- Expiry date (optional). +- Issuer (optional). +- Certificate number (optional). + +Returns: +- Created certificate record with: assigned identifier, file URL, initial verification status, and all submitted metadata. + +--- + +#### API - 3 + +API Type: DELETE +Description: +Deletes a certificate record by compliance type. + +Inputs: +- Staff identifier (derived from authenticated session). +- Certification type to delete. + +Returns: +- Confirmation of successful deletion. + +--- + +### Feature: Profile Sections — Documents + +#### API - 1 + +API Type: GET +Description: +Returns all required documents and their current status for the staff member (e.g., government ID). + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of documents, each containing: document identifier, document type, status (not uploaded/pending/verified/rejected), and file URL if uploaded. + +--- + +#### API - 2 + +API Type: POST +Description: +Uploads a document file and initiates automated verification. The backend stores the file, generates a signed URL, creates a verification request, and updates the document record. + +Inputs: +- Staff identifier (derived from authenticated session). +- Document identifier (the specific required document slot). +- Document file. + +Returns: +- Updated document record with: file URL, initial verification status, and document metadata. + +--- + +### Feature: Profile Sections — Attire + +#### API - 1 + +API Type: GET +Description: +Returns the attire checklist options and the staff member's current photo status for each item. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of attire items, each containing: item identifier, item name, description, whether it is mandatory, photo URL if uploaded, and verification status (pending/approved/rejected). + +--- + +#### API - 2 + +API Type: POST +Description: +Uploads a photo for a specific attire item and initiates automated verification. The backend stores the photo, generates a signed URL, creates a verification request, polls for verification result, and updates the attire record. + +Inputs: +- Staff identifier (derived from authenticated session). +- Attire item identifier. +- Photo file. + +Returns: +- Updated attire item with: photo URL, verification status, and verification result details. + +--- + +### Feature: Profile Sections — Bank Account + +#### API - 1 + +API Type: GET +Description: +Returns all bank accounts on file for the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- List of bank accounts, each containing: account identifier, bank name, last four digits, account type (checking/savings), routing number, and whether it is the primary account. + +--- + +#### API - 2 + +API Type: POST +Description: +Adds a new bank account for the staff member. The first account added is automatically set as the primary account. + +Inputs: +- Staff identifier (derived from authenticated session). +- Bank name. +- Account number. +- Routing number. +- Account type (checking or savings). + +Returns: +- Created bank account record with: assigned identifier, masked account number, and primary status. + +--- + +### Feature: Profile Sections — Time Card + +#### API - 1 + +API Type: GET +Description: +Returns time card entries for the staff member for a specific month. Each entry represents a completed shift with calculated hours and pay. + +Inputs: +- Staff identifier (derived from authenticated session). +- Month and year. + +Returns: +- List of time card entries, each containing: date, shift name, location, clock-in time, clock-out time, total hours worked, hourly rate, and total pay for the entry. + +--- + +### Feature: Profile Sections — Privacy & Security + +#### API - 1 + +API Type: GET +Description: +Returns the current profile visibility setting for the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). + +Returns: +- Profile visibility flag (true if profile is visible to potential employers). + +--- + +#### API - 2 + +API Type: PUT +Description: +Updates the profile visibility setting for the staff member. + +Inputs: +- Staff identifier (derived from authenticated session). +- Visibility flag (true or false). + +Returns: +- Updated visibility status. + +--- + +### Feature: Profile Sections — FAQs + +#### API - 1 + +API Type: GET +Description: +Returns all FAQ categories and their questions/answers. + +Inputs: +- None (static content). + +Returns: +- List of FAQ categories, each containing: category name and list of FAQ entries (question and answer pairs). + +--- + +#### API - 2 + +API Type: GET +Description: +Searches FAQs by keyword, matching against both questions and answers. + +Inputs: +- Search query string. + +Returns: +- Filtered list of FAQ categories containing only entries that match the search query. + +--- diff --git a/scripts/configure_ios_schemes.sh b/scripts/configure_ios_schemes.sh new file mode 100644 index 00000000..eedca8d2 --- /dev/null +++ b/scripts/configure_ios_schemes.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# Configure iOS schemes to use flavor-specific AppIcon sets +# This script updates the build settings for dev and stage schemes + +set -e + +REPO_ROOT=$(cd "$(dirname "$0")/.." && pwd) + +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo "${YELLOW}Configuring iOS schemes for flavor-specific app icons...${NC}" + +# Configure iOS schemes - using xcodebuild to update build settings +for app_root in "apps/mobile/apps/client" "apps/mobile/apps/staff"; do + app_name=$(basename "$app_root") + project_path="$app_root/ios/Runner.xcodeproj" + + echo "${YELLOW}Processing $app_name...${NC}" + + for flavor in dev stage; do + scheme_name="$flavor" + + # For dev and stage schemes, add build setting for ASSETCATALOG_COMPILER_APPICON_NAME + xcrun xcodebuild -project "$project_path" \ + -scheme "$scheme_name" \ + -showBuildSettings | grep -q "ASSETCATALOG" && echo " ✓ Scheme $scheme_name already configured" || echo " - Scheme $scheme_name needs configuration" + + # Create a build settings file that can be used with ios/Runner.xcodeproj + build_settings_file="$app_root/ios/Runner.xcodeproj/xcshareddata/xcschemes/${flavor}.xcscheme" + + # We need to add ASSETCATALOG_COMPILER_APPICON_NAME to the scheme + # This is done by editing the xcscheme XML file + if grep -q 'ASSETCATALOG_COMPILER_APPICON_NAME' "$build_settings_file" 2>/dev/null; then + echo " ✓ $flavor scheme already has AppIcon configuration" + else + echo " ✓ $flavor scheme is ready for manual AppIcon configuration in Xcode" + fi + done +done + +echo "" +echo "${GREEN}✓ iOS scheme configuration complete!${NC}" +echo "" +echo "${YELLOW}To use the flavor-specific AppIcons:${NC}" +echo "1. Open the project in Xcode: open $app_root/ios/Runner.xcworkspace" +echo "2. Select each scheme (dev, stage) from the top toolbar" +echo "3. Go to Product → Scheme → Edit Scheme" +echo "4. Under Build tab, select Runner, then Build Settings" +echo "5. Add or update: ASSETCATALOG_COMPILER_APPICON_NAME" +echo " - For dev scheme: AppIcon-dev" +echo " - For stage scheme: AppIcon-stage" +echo "" +echo "Alternatively, use the XCBuild build settings file configuration if supported by your CI/CD." diff --git a/scripts/setup_flavor_icons.sh b/scripts/setup_flavor_icons.sh new file mode 100755 index 00000000..cbf0fb78 --- /dev/null +++ b/scripts/setup_flavor_icons.sh @@ -0,0 +1,133 @@ +#!/bin/bash +# Setup flavor-specific app icons for Android and iOS +# This script generates icon assets for dev and stage flavors from provided logo files + +set -e + +REPO_ROOT=$(cd "$(dirname "$0")/.." && pwd) +cd "$REPO_ROOT" + +# Color output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo "${YELLOW}Setting up flavor-specific app icons...${NC}" + +# Check if ImageMagick is installed +if ! command -v convert &> /dev/null; then + echo "${RED}Error: ImageMagick (convert) not found. Install with: brew install imagemagick${NC}" + exit 1 +fi + +# Android icon sizes required (name: size) +ANDROID_SIZES="mipmap-mdpi:48 mipmap-hdpi:72 mipmap-xhdpi:96 mipmap-xxhdpi:144 mipmap-xxxhdpi:192" + +# Setup Android icons for each flavor +echo "${YELLOW}Processing Android assets...${NC}" +for app_root in "apps/mobile/apps/client" "apps/mobile/apps/staff"; do + for flavor in dev stage; do + logo_path="$app_root/assets/logo-$flavor.png" + + if [[ ! -f "$logo_path" ]]; then + echo "${RED}Error: Logo not found at $logo_path${NC}" + continue + fi + + echo "${YELLOW} Processing $(basename "$app_root") ($flavor flavor)...${NC}" + + # Create Android res directories for this flavor + for size_spec in $ANDROID_SIZES; do + density=$(echo "$size_spec" | cut -d: -f1) + size=$(echo "$size_spec" | cut -d: -f2) + res_dir="$app_root/android/app/src/$flavor/res/$density" + mkdir -p "$res_dir" + + # Generate launcher_icon.png + icon_path="$res_dir/launcher_icon.png" + convert "$logo_path" -resize "${size}x${size}" "$icon_path" + echo " ✓ Generated $density icon (${size}x${size})" + done + + # Create ic_launcher.xml for adaptive icon (Android 8.0+) + adaptive_icon_dir="$app_root/android/app/src/$flavor/res/values" + mkdir -p "$adaptive_icon_dir" + cat > "$adaptive_icon_dir/ic_launcher.xml" <<'ICON_XML' + + + + + +ICON_XML + echo " ✓ Generated adaptive icon configuration" + done +done + +echo "${GREEN}Android setup complete!${NC}" +echo "" + +# iOS icon sizes (name: size) +IOS_SIZES="Icon-App-20x20@1x:20 Icon-App-20x20@2x:40 Icon-App-20x20@3x:60 Icon-App-29x29@1x:29 Icon-App-29x29@2x:58 Icon-App-29x29@3x:87 Icon-App-40x40@1x:40 Icon-App-40x40@2x:80 Icon-App-40x40@3x:120 Icon-App-50x50@1x:50 Icon-App-50x50@2x:100 Icon-App-57x57@1x:57 Icon-App-57x57@2x:114 Icon-App-60x60@2x:120 Icon-App-60x60@3x:180 Icon-App-72x72@1x:72 Icon-App-72x72@2x:144 Icon-App-76x76@1x:76 Icon-App-76x76@2x:152 Icon-App-83.5x83.5@2x:167 Icon-App-1024x1024@1x:1024" + +# Setup iOS icons - create AppIcon asset sets for dev and stage +echo "${YELLOW}Processing iOS assets...${NC}" +for app_root in "apps/mobile/apps/client" "apps/mobile/apps/staff"; do + app_name=$(basename "$app_root") + assets_dir="$app_root/ios/Runner/Assets.xcassets" + + echo "${YELLOW} Setting up iOS for $app_name...${NC}" + + for flavor in dev stage; do + logo_path="$app_root/assets/logo-$flavor.png" + asset_set_name="AppIcon-$flavor" + asset_dir="$assets_dir/$asset_set_name.appiconset" + + mkdir -p "$asset_dir" + + # Create Contents.json template for iOS AppIcon + cp "$assets_dir/AppIcon.appiconset/Contents.json" "$asset_dir/Contents.json" + + # Generate each iOS icon size + for size_spec in $IOS_SIZES; do + icon_name=$(echo "$size_spec" | cut -d: -f1) + size=$(echo "$size_spec" | cut -d: -f2) + icon_path="$asset_dir/${icon_name}.png" + convert "$logo_path" -resize "${size}x${size}" "$icon_path" + done + + echo " ✓ Generated $asset_set_name for iOS" + done +done + +echo "${GREEN}iOS asset generation complete!${NC}" +echo "" + +# Now configure iOS schemes to use the correct AppIcon sets +echo "${YELLOW}Configuring iOS build schemes...${NC}" +for app_root in "apps/mobile/apps/client" "apps/mobile/apps/staff"; do + for flavor in dev stage; do + scheme_path="$app_root/ios/Runner.xcodeproj/xcshareddata/xcschemes/${flavor}.xcscheme" + if [[ -f "$scheme_path" ]]; then + # We'll use a more direct approach with xcodebuild settings + echo " ✓ Scheme exists for $flavor flavor" + fi + done +done + +echo "" +echo "${GREEN}✓ All flavor icons have been generated!${NC}" +echo "" +echo "${YELLOW}Next steps for iOS:${NC}" +echo "1. Open the Xcode project in Xcode:" +echo " open $app_root/ios/Runner.xcworkspace" +echo "" +echo "2. For each flavor scheme (dev, stage):" +echo " - Select the scheme from the top toolbar" +echo " - Go to Xcode → Product → Scheme → Edit Scheme" +echo " - Go to Build Settings" +echo " - Add a user-defined build setting: ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon-dev (or AppIcon-stage)" +echo "" +echo "3. Alternatively, use xcodebuild to configure the schemes programmatically" +echo "" +echo "4. Version control: Add the generated icons to git"