diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31f2df8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +*.tsbuildinfo + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? \ No newline at end of file diff --git a/TRADHOX_DESIGN_AND_POSSIBILITIES.md b/TRADHOX_DESIGN_AND_POSSIBILITIES.md new file mode 100644 index 0000000..e6acb94 --- /dev/null +++ b/TRADHOX_DESIGN_AND_POSSIBILITIES.md @@ -0,0 +1,185 @@ +# Tradhox Seller Marketplace — Design Analysis & Implementation Guide + +**Source Location:** `/home/vignesh/Downloads/Tradhox/ilovepdf_pages-to-jpg/stitch_tradhox_seller_marketplace_landing_page` +**Target Framework:** React + Bulma CSS +**Design System Name:** Artisan Heritage Marketplace + +--- + +## 1. Executive Summary + +This document captures the complete design architecture, design tokens, screen catalog, and implementation possibilities for the **Tradhox Seller Central & Marketplace** frontend exported from Google Stitch. + +The exported package includes: +- **1 Master Design System Specification** (`artisan_heritage_marketplace/DESIGN.md`) +- **36 High-Fidelity Screen Templates** (each equipped with `screen.png` and `code.html`) +- Pre-validated Bulma markup in reference screens (`tradhox_application_submitted_bulma_faithful`) + +--- + +## 2. Design System Tokens & Brand Guidelines + +### Brand Aesthetic: *Tactile Warm-Modern* +A culturally resonant, artisan-centric Indian commerce identity that blends classical heritage warmth with modern, fast-loading marketplace performance. + +### 2.1 Color Palette +| Token | Hex | Usage | +| :--- | :--- | :--- | +| **Primary (Artisan Wine)** | `#791B2C` / `#671B26` | Primary CTAs, active navigation items, brand accents, key badges | +| **Primary Dark / Hover** | `#52141E` / `#5A0118` | Button hover states, active press states | +| **Secondary (Terracotta)** | `#C25E3E` / `#9D4225` | Craft origin markers, secondary chips, regional highlights | +| **Tertiary / Success (Forest)** | `#15803D` / `#004A1E` | Verified credentials, GI (Geographical Indication) tags, order confirmations | +| **Canvas Base** | `#FAF8F5` / `#FCF9F8` | Warm natural sand background (no sterile bright glare) | +| **Card / Surface Alt** | `#F5F2EB` / `#FFFFFF` | Elevated modules, containers, filter rails | +| **Border / Divider** | `#E7E3DA` / `#E5E3DF` | Muted limestone hairline rules (1px) | +| **Text Primary** | `#1A1A1A` / `#1C1B1B` | High-contrast soot black for headlines & readability | +| **Text Secondary** | `#5A5550` / `#564243` | Earthen charcoal for metadata, subtitles, provenance | + +### 2.2 Typography +* **Font Family:** `Plus Jakarta Sans`, sans-serif (Google Fonts) +* **Scale:** + * `headline-xl`: 36px / 44px (bold) + * `headline-lg`: 26px / 32px (bold) + * `headline-md`: 20px / 26px (semi-bold) + * `headline-sm`: 17px / 22px (semi-bold) + * `body-lg`: 16px / 24px (regular) + * `body-md`: 14px / 20px (regular) + * `label-md`: 13px / 16px (semi-bold, uppercase tracking) + * `label-sm`: 11px / 14px (bold, uppercase tracking) + +### 2.3 Shapes, Elevation & Spacing +* **Corner Radii:** + * Form inputs & buttons: `12px` (`0.75rem`) + * Feature cards & containers: `16px` to `20px` + * Category chips & filter pills: `9999px` (full pill) +* **Hit Targets:** Minimum `44px` touch targets for mobile accessibility (WCAG compliant). +* **Elevation:** Physical tactile layering with `1px solid #E7E3DA` boundaries rather than heavy blurred drop shadows. + +--- + +## 3. Catalog of the 36 Exported Screens + +The exported screens are organized into 8 functional modules: + +### Module 1: Public Marketing & Landing Pages +1. **`tradhox_static_marketplace_landing_page`** + *Desktop marketplace landing page featuring hero lead capture, "Why Sell with Us" 10-card benefit grid, category discovery rail, artisan showcase, testimonials, and brand footer.* +2. **`tradhox_mobile_marketplace_landing_page`** + *Mobile-optimized version of the seller landing page with touch-friendly navigation, sticky bottom CTA, and single-column stacked layout.* +3. **`tradhox_how_it_works_wireframe_faithful`** + *4-step visual journey explaining seller registration, cataloging, dispatch, and rapid bank settlements.* +4. **`tradhox_pricing_page_wireframe_faithful`** + *Transparent fee breakdown, zero listing fees calculator, commission tiers by category, and shipping cost estimator.* +5. **`tradhox_grow_your_business_clean_complete`** + *Seller growth programs: ODOP initiatives, GI tag promotion, international shipping support, and marketing tools.* + +### Module 2: Authentication +6. **`tradhox_seller_login_email_password`** + *Clean email/password and mobile OTP authentication screen with remember-me, forgot password, and signup routing.* + +### Module 3: Seller Onboarding Wizard (7 Steps + Confirmation) +7. **`tradhox_step_1_create_your_seller_account`** — Basic account creation (Email, phone verification, password). +8. **`tradhox_step_2_business_gst_details`** — Business identity, legal entity type, and GSTIN validation. +9. **`tradhox_step_2_get_your_enrolment_id_no_gstin_options`** — Alternative non-GST flow via Govt. Enrolment ID for exempt artisans. +10. **`tradhox_step_3_pickup_address_responsive_aligned`** — Warehouse / artisan workshop pickup location and pin code serviceability check. +11. **`tradhox_step_4_bank_details_responsive_aligned`** — Bank account number, IFSC verification, and penny-drop confirmation. +12. **`tradhox_step_5_categories_responsive_aligned`** — Primary and secondary craft category selection (Handloom, Pottery, Woodcraft, etc.). +13. **`tradhox_step_6_products`** — Initial product listing preview / fast sample catalog addition. +14. **`tradhox_step_7_store_profile_responsive_aligned`** — Store name, artisan bio, craft lineage story, and workshop photos. +15. **`tradhox_application_submitted_bulma_faithful`** — Success confirmation screen with application tracking ID, next steps, and portal link *(pre-built with Bulma)*. + +### Module 4: Seller Central Supply & Inventory +16. **`tradhox_seller_supply_inventory_dashboard`** — Main central dashboard with sales metrics, active listings, pending orders, and inventory health alerts. +17. **`tradhox_catalog_inventory_template_aligned`** — Complete SKU table with stock quantity toggles, low-stock warnings, price edits, and filter options. +18. **`tradhox_bulk_upload_batch_management_simplified_clean`** — CSV/Excel template download, batch file upload, validation status, and error logs. + +### Module 5: Add Product Wizard (4 Steps) +19. **`tradhox_add_product_step_1_simplified_clean`** — Category, product title, craft technique, and artisan attribution. +20. **`tradhox_add_product_step_2_simplified_clean`** — High-res product images, video links, craft story, and detailed description. +21. **`tradhox_add_product_step_3_simplified_clean`** — Size/color variants, SKU generator, MRP, selling price, and stock counts. +22. **`tradhox_add_product_step_4_simplified_clean`** — Package dimensions, weight, HSN code, GST rate, and final preview before publish. + +### Module 6: Orders, Logistics & Dispatch +23. **`tradhox_orders_dispatch_simplified_clean`** — Order management pipeline: New, Ready to Ship, Dispatched, Delivered, and Cancelled. +24. **`tradhox_print_shipping_labels`** — Batch shipping label generator and manifest print dialog. +25. **`tradhox_print_shipping_label_single_4x6_view`** — Standard 4x6 thermal printer label view with barcodes and courier routing. +26. **`tradhox_courier_reschedule_simplified_clean`** — Logistics pickup reschedule modal with reason selection and slot picker. + +### Module 7: Finance & Payouts +27. **`tradhox_payouts_finance_simplified_clean`** — Settlement overview, next disbursement date, transaction ledger, TDS/TCS deductions, and invoice downloads. + +### Module 8: Storefront & Settings Suite +28. **`tradhox_storefront_profile_simplified_clean`** — Public seller storefront preview and customization (banners, artisan story). +29. **`tradhox_settings_simplified_clean`** — General seller account settings hub. +30. **`tradhox_settings_bank_settlements_simplified_clean`** — Bank accounts overview and payment frequency preferences. +31. **`tradhox_settings_update_bank_details`** — Secure form to update settlement account with OTP verification. +32. **`tradhox_settings_change_password`** — Account security & password change form. +33. **`tradhox_settings_notifications_alerts_simplified_clean`** — SMS, WhatsApp, and Email notification preferences. +34. **`tradhox_settings_pickup_logistics_simplified_clean`** — Default pickup addresses and courier partner preferences. +35. **`tradhox_settings_security_support_simplified_clean`** — 2FA security settings, login history, and support ticket creation. + +--- + +## 4. Technical Stack & Bulma Framework Mapping + +### 4.1 Recommended Technology Stack +* **Bundler & Runtime:** Vite + React (TypeScript or Modern JSX) +* **CSS Framework:** `bulma` (v0.9.4 / v1.0.x) +* **Icons:** `@fortawesome/fontawesome-free` or `react-icons` +* **Typography:** `@fontsource/plus-jakarta-sans` +* **Routing:** `react-router-dom` (v6+) + +### 4.2 Bulma Component Mapping +| Wireframe Element | Bulma Primitive / Component | Customization Notes | +| :--- | :--- | :--- | +| **Grid / Layout** | `.columns`, `.column.is-x` | Multi-column responsive layout with mobile breakpoints | +| **Header / Navigation** | `.navbar`, `.navbar-brand`, `.navbar-menu` | Sticky top navigation with brand wine CTA | +| **Containers & Cards** | `.card`, `.card-content`, `.box` | Bordered with `#E7E3DA`, no heavy shadow | +| **Buttons** | `.button.is-primary`, `.is-outlined` | Styled with `var(--trad-maroon)` and 12px / pill radius | +| **Tags / Badges** | `.tag.is-rounded`, `.tag.is-success` | GI tag, ODOP badges, category chips | +| **Forms & Inputs** | `.field`, `.control`, `.input`, `.select` | 44-48px height, sand background on focus | +| **Wizard Progress** | `.steps` or custom timeline component | Step progress indicator across 7 onboarding steps | +| **Tabs & Sub-nav** | `.tabs.is-boxed`, `.tabs.is-toggle` | Order status filters & settings sections | +| **Data Tables** | `.table.is-fullwidth.is-hoverable` | Inventory SKUs, orders, and payout ledgers | +| **Modals / Sheets** | `.modal`, `.modal-card` | Courier reschedule, label preview, filter drawers | + +--- + +## 5. Implementation Possibilities & Architecture + +### Option 1: Complete Integrated Seller Central Platform *(Recommended)* +Build the full application as a cohesive Single Page Application (SPA) with three distinct zones: +1. **Public Marketing Site:** + - `/` — Landing Page (Hero, Benefits, ODOP Showcase, FAQs, Footer) + - `/how-it-works` — How It Works + - `/pricing` — Transparent Pricing & Calculator + - `/why-sell` — Grow Your Business +2. **Authentication & Onboarding:** + - `/login` — Seller Login + - `/onboarding` — Interactive 7-Step Registration Wizard with step persistence and submission screen +3. **Seller Central Portal (Authenticated Layout with Sidebar):** + - `/dashboard` — Supply & Inventory Dashboard + - `/dashboard/inventory` — Catalog & SKU Management + - `/dashboard/inventory/bulk` — Bulk Upload + - `/dashboard/products/add` — 4-Step Add Product Wizard + - `/dashboard/orders` — Orders & Dispatch + 4x6 Label Print View + - `/dashboard/payouts` — Finance & Settlements + - `/dashboard/storefront` — Storefront Profile + - `/dashboard/settings/*` — Comprehensive Settings Hub + +### Option 2: Phased Delivery (Landing Page & Onboarding First) +* **Phase 1:** Build the Public Landing Page (`/`), Marketing Pages (`/how-it-works`, `/pricing`), Seller Login (`/login`), and the 7-Step Onboarding Flow (`/onboarding` ending in `Application Submitted`). +* **Phase 2:** Build out the protected Seller Dashboard (`/dashboard`), Order Processing, Inventory Management, and Settings. + +### Option 3: Public Marketing & Lead-Gen Landing Page Only +* Build exclusively the responsive public-facing landing page matching `tradhox_static_marketplace_landing_page` and `tradhox_mobile_marketplace_landing_page`. + +--- + +## 6. Next Steps + +1. Select preferred implementation scope (**Option 1**, **Option 2 Phase 1**, or **Option 3**). +2. Initialize the Vite + React + Bulma project in `/home/vignesh/github/sellercentral`. +3. Configure the custom Bulma theme variables (`--trad-maroon`, `--trad-bg`, Plus Jakarta Sans font). +4. Build shared components (`Header`, `Footer`, `Button`, `Card`, `InputField`). +5. Implement the page components according to Stitch screen wireframes. diff --git a/index.html b/index.html new file mode 100644 index 0000000..52e10c3 --- /dev/null +++ b/index.html @@ -0,0 +1,19 @@ + + + + + + + TRADHOX — Artisan Heritage Marketplace | Seller Central + + + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7e6737b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1928 @@ +{ + "name": "sellercentral", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "sellercentral", + "version": "1.0.0", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.7.2", + "bulma": "^1.0.4", + "lucide-react": "^0.475.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-router-dom": "^6.28.0" + }, + "devDependencies": { + "@types/node": "^22.10.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^4.3.4", + "typescript": "~5.7.2", + "vite": "^6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz", + "integrity": "sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==", + "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)", + "engines": { + "node": ">=6" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@remix-run/router": { + "version": "1.23.4", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.4.tgz", + "integrity": "sha512-q7j5geK7xs3UJSdm9/iytUNclBnLmYx1EnSeCFXHPeutdqgIMeFeHtUZgS3EhlKxdBEAu8OwtJCwmLrEzpSs7Q==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.3.tgz", + "integrity": "sha512-w3Jnvi1ocaVm/c7yVPpfB98XeSRBMyzp6njL5MVVbGyXjpmUkN+s6Hp4t0PqhGCCaI1ZHMKXt/w0lA1RCaLVcw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.3.tgz", + "integrity": "sha512-uI/ESiaIbbRYAEhzy8PCUWDp1hB0bjAqM06mW9flOoNO4Q8DQpeoREhBR5Hegfl+wpXiguyJv6XSPzEN7OxyHQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.3.tgz", + "integrity": "sha512-oxhrd1jmXLwWZ83eQYDXxuqRdkqkzrjR3JobKeuUyfdNZo11FuQIvqEOZhyIT7OBHxXoGslDDjN0cQcM6T0TqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.3.tgz", + "integrity": "sha512-7/YiIMghVE8DrxKvNdorAaJVdriOFgOIpdStnPx8ppx5zfTwC3jBCSEAIzB7JD5404m65THl6H93UTTVUvypmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.3.tgz", + "integrity": "sha512-GXFZRRoMAytaI5z6N3Zhfw0WL18Q0M8r95D5hlC4GqE/lGk8pbSJNUBoOWDfbm6dTciqHj2nU87tI5f6XhQiOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.3.tgz", + "integrity": "sha512-77W+8X3ddYgPxUpB8nZFQs2Mq+wc4HVlcSRtApXLjYBcnPMkttrSnU8VwKQjeWYhMsITHFs5cWBQ8vz1Q+5RHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.3.tgz", + "integrity": "sha512-FVkwK+iUC+mq+GipVK46rRVticfAPtvPUNlqlGXUDxdVk/UGjQiiiUVPUrEXdSpU2ufU0XxLGyTqDtBidDOVmg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.3.tgz", + "integrity": "sha512-+aGU1t3398yQOVj1Bz8o3e+KtswxAPvO+mtxtNdfXYMkXIHu7XhhkCD7/DEH9q8tF8uhDnMWvfpUKI8y1sZJsg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.3.tgz", + "integrity": "sha512-cR0kjpRXR2KJ2oQK8E2KTPtphs+b9hZ8IhTZubNryt/RsqgdOZBQ2Zq0q5UedtiIi0rs3jVhJh55RE1ZHUVGUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.3.tgz", + "integrity": "sha512-y1RYi4Q3/9ByVWSSt9kX2ustE0B7kFYbJ6zZdVZVyqopZs3yhCTwRfrjIX4vezUJInma/Gs6BOFDJg7yZmJ0IQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.3.tgz", + "integrity": "sha512-DNhEA5viIj3Z5bZLE4z4oV8N5ozWqDwyt7T6KG7VdLDJ0nW+rNOYlphBl4/3HQkK75qipPLsVOfStHHOwN9WSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.3.tgz", + "integrity": "sha512-17gQCqrIpXBX2Cmi9/TygnVOqGbzsba/iaqcYSL8FY7lNugg+7AiYNs5c5nKWD+NRQha36Sa0CqkJqH4XVHwnQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.3.tgz", + "integrity": "sha512-6LwVnZRIyINpdku/yOcI8Tm9YqLmhHK5emmlOOnW9tO0SYEm1FmKPcsSAGp0NBlqR2P04xaND4jvN6sTHqhq8A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.3.tgz", + "integrity": "sha512-xMUqkTXlEUtI/p5AAukMwBRr1enU3efsTeF+bskeFfk8t1C9rcC8sLREcZXmTfAXEbvRdJVSonVJez3TMlbR3w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.3.tgz", + "integrity": "sha512-S3E94co9F9WRRqEaUoQZ38K1gCz6KiM+nL7/3ijq7fDGF3OznjS5TasgYITlvl27GQKtu4lOAOsr5MFwkijvOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.3.tgz", + "integrity": "sha512-1QtRDwG42x5BJI3s9mxu5rEjDnfbSnk20HQ9/ylTAYnSwYwxMVb+Vgu34wzzTQ7ogqBybebgQNUDAvZVQ38DbA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.3.tgz", + "integrity": "sha512-BQhejF6ZXOpxbngiNTP12GCGQeaDVL2QXGeBVViKIYzFHM5RKxTxwUMB1fr1BeNFphFMpnRqC5QSXFSa4z6UQw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.3.tgz", + "integrity": "sha512-SXagRwnI2Wlwlitllu59UK/nGVbD1CKPcNqDplHwIC4BqJcpXFjD32d1R/RbuISa95HdQrZM3/7v4bKiowFaLA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.3.tgz", + "integrity": "sha512-2IPozoEALRCziGqE8O9KMK60PMu5TS1huv4fwoeCexj+WjmcwFtX9CTOVbfXCUqcELAubEwRFPYlzb/WvwY2HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.3.tgz", + "integrity": "sha512-AoxqosUHT9IX54hFn2TiN6A7d6ZKTtE6pd2bqWtqkkNJ6HJGaU6FRouGX8L1O7R/ZwsnCnpQrHzb4pDEx+UHRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.3.tgz", + "integrity": "sha512-d+CaftKgmkFBzCwezMqqy1d0QNNYugqLCMcYVQWBy5SS2YfeMP8Q8ripkgx9O8IyBXXLHrJ+aaCV4U96usv6Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.3.tgz", + "integrity": "sha512-xXlDF6nR1eOuXbdDy5Hl5fmtY7teUDevF/k0O7IPoZe4Tpmdv+lgdE5JRsnhQtt37ql9P0VF2kAN9a0OCZdo+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.3.tgz", + "integrity": "sha512-YtXAgLN+JP7Ay6qG3eWhc7IHMQPzLc8r3uvhAvlJIoCz/4Q32+Bl9Fmnywidh8v1GOIMmymjovfqY9ETAtysvA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.3.tgz", + "integrity": "sha512-WuWtSJRNo549vzcfZyEgfqb6zeSgn1F+UE5kQ+BCjzz0W4MGCjntUHkZVc1VRuAM7+ULaSyhiPxD1spyewFvkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.3.tgz", + "integrity": "sha512-+lIKX7O0+IGe7WuhATaAMMeT7B76vfhXH/l9wLQL+nvyhbw2ohYCKIdWL56JfDu75CWt5oKRP4QFH/jkMtBquA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.2.tgz", + "integrity": "sha512-xlvWf4Vs9n1PEVYwP1n4vvG07M6y8WgvJ2t0vbrWTmijsIHp1cS+uJ2kMIRdY3nHZK0nCYKrPeD171+SzF4/zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.23", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.23.tgz", + "integrity": "sha512-le521dGVfxM7yRX0EikCoSz+rOK+hHzdDt/E7mG1jOJB/6WAAUuwVroLwaB7ApaUsz5Q0kFlDXLSA9MheUIfRQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz", + "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.20", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.420", + "node-releases": "^2.0.54", + "update-browserslist-db": "^1.3.2" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bulma": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bulma/-/bulma-1.0.4.tgz", + "integrity": "sha512-Ffb6YGXDiZYX3cqvSbHWqQ8+LkX6tVoTcZuVB3lm93sbAVXlO0D6QlOTMnV6g18gILpAXqkG2z9hf9z4hCjz2g==", + "license": "MIT" + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.427.tgz", + "integrity": "sha512-n14zb3FdsChZ2BNobqNHAJMcP3ifFv4paox2LvCrfVAQcqGiSURgbJl+PfMpHVCNFkStnNc+RRVtPBTVW5PDgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.475.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.475.0.tgz", + "integrity": "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz", + "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.0" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.30.6", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.6.tgz", + "integrity": "sha512-5HfK7k5im7LTOB0EqCQmfvy4C13G92Ssj1VTmouTK3AJvyjKTnFuCV0vcMAD/JS+JC4DvDIBRrlAeJIFjh5VWg==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.6", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.6.tgz", + "integrity": "sha512-0RHKZz7wwffvkU+2MFVT2NnjK44ssLEV+m0CAJaS2Ksmorrwj7WxH00jO0SOCW26/tINUnJHToXblDs33I38YQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.4", + "react-router": "6.30.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/rollup": { + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.3.tgz", + "integrity": "sha512-1i2XreiAoMMXuPGD6Msj2xWrMMkHojNRKivInxGQcg7/1KuPuYlfUutLyh4drnOxUTHX9cHI4wFoat8D/NKaBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.63.3", + "@rollup/rollup-android-arm64": "4.63.3", + "@rollup/rollup-darwin-arm64": "4.63.3", + "@rollup/rollup-darwin-x64": "4.63.3", + "@rollup/rollup-freebsd-arm64": "4.63.3", + "@rollup/rollup-freebsd-x64": "4.63.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.3", + "@rollup/rollup-linux-arm-musleabihf": "4.63.3", + "@rollup/rollup-linux-arm64-gnu": "4.63.3", + "@rollup/rollup-linux-arm64-musl": "4.63.3", + "@rollup/rollup-linux-loong64-gnu": "4.63.3", + "@rollup/rollup-linux-loong64-musl": "4.63.3", + "@rollup/rollup-linux-ppc64-gnu": "4.63.3", + "@rollup/rollup-linux-ppc64-musl": "4.63.3", + "@rollup/rollup-linux-riscv64-gnu": "4.63.3", + "@rollup/rollup-linux-riscv64-musl": "4.63.3", + "@rollup/rollup-linux-s390x-gnu": "4.63.3", + "@rollup/rollup-linux-x64-gnu": "4.63.3", + "@rollup/rollup-linux-x64-musl": "4.63.3", + "@rollup/rollup-openbsd-x64": "4.63.3", + "@rollup/rollup-openharmony-arm64": "4.63.3", + "@rollup/rollup-win32-arm64-msvc": "4.63.3", + "@rollup/rollup-win32-ia32-msvc": "4.63.3", + "@rollup/rollup-win32-x64-gnu": "4.63.3", + "@rollup/rollup-win32-x64-msvc": "4.63.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..81e4808 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "sellercentral", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@fortawesome/fontawesome-free": "^6.7.2", + "bulma": "^1.0.4", + "lucide-react": "^0.475.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-router-dom": "^6.28.0" + }, + "devDependencies": { + "@types/node": "^22.10.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^4.3.4", + "typescript": "~5.7.2", + "vite": "^6.0.0" + } +} diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..539639d --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,2 @@ +RewriteEngine On +RewriteRule ^api/(.*) http://16.113.57.127:8080/api/$1 [P,L] diff --git a/public/artisan_banner.jpg b/public/artisan_banner.jpg new file mode 100644 index 0000000..392efe3 Binary files /dev/null and b/public/artisan_banner.jpg differ diff --git a/public/artisan_weaving.jpg b/public/artisan_weaving.jpg new file mode 100644 index 0000000..51d17f0 Binary files /dev/null and b/public/artisan_weaving.jpg differ diff --git a/public/brass_figurine.jpg b/public/brass_figurine.jpg new file mode 100644 index 0000000..5647118 Binary files /dev/null and b/public/brass_figurine.jpg differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/about-hero.jpg b/public/images/about-hero.jpg new file mode 100644 index 0000000..f359d70 Binary files /dev/null and b/public/images/about-hero.jpg differ diff --git a/public/images/avatars/artisan-1.jpg b/public/images/avatars/artisan-1.jpg new file mode 100644 index 0000000..e96b679 Binary files /dev/null and b/public/images/avatars/artisan-1.jpg differ diff --git a/public/images/avatars/artisan-2.jpg b/public/images/avatars/artisan-2.jpg new file mode 100644 index 0000000..977660e Binary files /dev/null and b/public/images/avatars/artisan-2.jpg differ diff --git a/public/images/avatars/artisan-3.jpg b/public/images/avatars/artisan-3.jpg new file mode 100644 index 0000000..57060bd Binary files /dev/null and b/public/images/avatars/artisan-3.jpg differ diff --git a/public/images/avatars/artisan-4.jpg b/public/images/avatars/artisan-4.jpg new file mode 100644 index 0000000..aac4f9c Binary files /dev/null and b/public/images/avatars/artisan-4.jpg differ diff --git a/public/images/avatars/seller-main.jpg b/public/images/avatars/seller-main.jpg new file mode 100644 index 0000000..d12d4f0 Binary files /dev/null and b/public/images/avatars/seller-main.jpg differ diff --git a/public/images/clusters/jaipur-pottery.png b/public/images/clusters/jaipur-pottery.png new file mode 100644 index 0000000..9f7da92 Binary files /dev/null and b/public/images/clusters/jaipur-pottery.png differ diff --git a/public/images/clusters/moradabad-brass.png b/public/images/clusters/moradabad-brass.png new file mode 100644 index 0000000..e45be44 Binary files /dev/null and b/public/images/clusters/moradabad-brass.png differ diff --git a/public/images/clusters/sustainable-jute.png b/public/images/clusters/sustainable-jute.png new file mode 100644 index 0000000..649c968 Binary files /dev/null and b/public/images/clusters/sustainable-jute.png differ diff --git a/public/images/how-it-works/artisan-banner.png b/public/images/how-it-works/artisan-banner.png new file mode 100644 index 0000000..48a1d46 Binary files /dev/null and b/public/images/how-it-works/artisan-banner.png differ diff --git a/public/images/landing/benefit-1.jpg b/public/images/landing/benefit-1.jpg new file mode 100644 index 0000000..5e4b52b Binary files /dev/null and b/public/images/landing/benefit-1.jpg differ diff --git a/public/images/landing/benefit-10.jpg b/public/images/landing/benefit-10.jpg new file mode 100644 index 0000000..c2f944b Binary files /dev/null and b/public/images/landing/benefit-10.jpg differ diff --git a/public/images/landing/benefit-2.jpg b/public/images/landing/benefit-2.jpg new file mode 100644 index 0000000..2f8ee60 Binary files /dev/null and b/public/images/landing/benefit-2.jpg differ diff --git a/public/images/landing/benefit-3.jpg b/public/images/landing/benefit-3.jpg new file mode 100644 index 0000000..43d1b22 Binary files /dev/null and b/public/images/landing/benefit-3.jpg differ diff --git a/public/images/landing/benefit-4.jpg b/public/images/landing/benefit-4.jpg new file mode 100644 index 0000000..a6f5935 Binary files /dev/null and b/public/images/landing/benefit-4.jpg differ diff --git a/public/images/landing/benefit-5.jpg b/public/images/landing/benefit-5.jpg new file mode 100644 index 0000000..5e3bed7 Binary files /dev/null and b/public/images/landing/benefit-5.jpg differ diff --git a/public/images/landing/benefit-6.jpg b/public/images/landing/benefit-6.jpg new file mode 100644 index 0000000..200f0cf Binary files /dev/null and b/public/images/landing/benefit-6.jpg differ diff --git a/public/images/landing/benefit-7.jpg b/public/images/landing/benefit-7.jpg new file mode 100644 index 0000000..eaf2b04 Binary files /dev/null and b/public/images/landing/benefit-7.jpg differ diff --git a/public/images/landing/benefit-8.jpg b/public/images/landing/benefit-8.jpg new file mode 100644 index 0000000..2a66a62 Binary files /dev/null and b/public/images/landing/benefit-8.jpg differ diff --git a/public/images/landing/benefit-9.jpg b/public/images/landing/benefit-9.jpg new file mode 100644 index 0000000..a1be026 Binary files /dev/null and b/public/images/landing/benefit-9.jpg differ diff --git a/public/images/landing/cat-gi.jpg b/public/images/landing/cat-gi.jpg new file mode 100644 index 0000000..b9ac1f7 Binary files /dev/null and b/public/images/landing/cat-gi.jpg differ diff --git a/public/images/landing/cat-odop.jpg b/public/images/landing/cat-odop.jpg new file mode 100644 index 0000000..f0b155e Binary files /dev/null and b/public/images/landing/cat-odop.jpg differ diff --git a/public/images/landing/cat-sustainable.jpg b/public/images/landing/cat-sustainable.jpg new file mode 100644 index 0000000..96ba774 Binary files /dev/null and b/public/images/landing/cat-sustainable.jpg differ diff --git a/public/images/landing/hero-showcase.jpg b/public/images/landing/hero-showcase.jpg new file mode 100644 index 0000000..797c0af Binary files /dev/null and b/public/images/landing/hero-showcase.jpg differ diff --git a/public/images/landing/tradhox-logo.png b/public/images/landing/tradhox-logo.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/landing/tradhox-logo.png differ diff --git a/public/images/landing/tradhox-wordmark.png b/public/images/landing/tradhox-wordmark.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/landing/tradhox-wordmark.png differ diff --git a/public/images/login-potter.jpg b/public/images/login-potter.jpg new file mode 100644 index 0000000..6234517 Binary files /dev/null and b/public/images/login-potter.jpg differ diff --git a/public/images/pricing/fast-settlement.png b/public/images/pricing/fast-settlement.png new file mode 100644 index 0000000..d375bac Binary files /dev/null and b/public/images/pricing/fast-settlement.png differ diff --git a/public/images/pricing/no-penalty-craft.png b/public/images/pricing/no-penalty-craft.png new file mode 100644 index 0000000..e0c0d0d Binary files /dev/null and b/public/images/pricing/no-penalty-craft.png differ diff --git a/public/images/pricing/no-reg-artisan.png b/public/images/pricing/no-reg-artisan.png new file mode 100644 index 0000000..65e3162 Binary files /dev/null and b/public/images/pricing/no-reg-artisan.png differ diff --git a/public/images/pricing/transparent-weaver.png b/public/images/pricing/transparent-weaver.png new file mode 100644 index 0000000..445ef02 Binary files /dev/null and b/public/images/pricing/transparent-weaver.png differ diff --git a/public/images/pricing/zero-listing-coin.png b/public/images/pricing/zero-listing-coin.png new file mode 100644 index 0000000..e503f1f Binary files /dev/null and b/public/images/pricing/zero-listing-coin.png differ diff --git a/public/images/signup-weaver.jpg b/public/images/signup-weaver.jpg new file mode 100644 index 0000000..b2a76e7 Binary files /dev/null and b/public/images/signup-weaver.jpg differ diff --git a/public/images/stitch/img_03b5a0bdb596.png b/public/images/stitch/img_03b5a0bdb596.png new file mode 100644 index 0000000..43d1b22 Binary files /dev/null and b/public/images/stitch/img_03b5a0bdb596.png differ diff --git a/public/images/stitch/img_05aed8fd374b.png b/public/images/stitch/img_05aed8fd374b.png new file mode 100644 index 0000000..ff5c11e Binary files /dev/null and b/public/images/stitch/img_05aed8fd374b.png differ diff --git a/public/images/stitch/img_09021a0c4ab9.png b/public/images/stitch/img_09021a0c4ab9.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_09021a0c4ab9.png differ diff --git a/public/images/stitch/img_0929ca6cc3c7.png b/public/images/stitch/img_0929ca6cc3c7.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_0929ca6cc3c7.png differ diff --git a/public/images/stitch/img_0a9d40298a52.png b/public/images/stitch/img_0a9d40298a52.png new file mode 100644 index 0000000..f0b155e Binary files /dev/null and b/public/images/stitch/img_0a9d40298a52.png differ diff --git a/public/images/stitch/img_0c03a6f0eec7.png b/public/images/stitch/img_0c03a6f0eec7.png new file mode 100644 index 0000000..4fa2ef5 Binary files /dev/null and b/public/images/stitch/img_0c03a6f0eec7.png differ diff --git a/public/images/stitch/img_0d5370f0aadb.png b/public/images/stitch/img_0d5370f0aadb.png new file mode 100644 index 0000000..036b074 Binary files /dev/null and b/public/images/stitch/img_0d5370f0aadb.png differ diff --git a/public/images/stitch/img_0e9a0d7b5dc0.png b/public/images/stitch/img_0e9a0d7b5dc0.png new file mode 100644 index 0000000..9aecc4c Binary files /dev/null and b/public/images/stitch/img_0e9a0d7b5dc0.png differ diff --git a/public/images/stitch/img_1011af60f90a.png b/public/images/stitch/img_1011af60f90a.png new file mode 100644 index 0000000..2c9ca55 Binary files /dev/null and b/public/images/stitch/img_1011af60f90a.png differ diff --git a/public/images/stitch/img_112d7c20d9aa.png b/public/images/stitch/img_112d7c20d9aa.png new file mode 100644 index 0000000..81ba4ad Binary files /dev/null and b/public/images/stitch/img_112d7c20d9aa.png differ diff --git a/public/images/stitch/img_12f3b9e82223.png b/public/images/stitch/img_12f3b9e82223.png new file mode 100644 index 0000000..9d4a563 Binary files /dev/null and b/public/images/stitch/img_12f3b9e82223.png differ diff --git a/public/images/stitch/img_138cd29356a4.png b/public/images/stitch/img_138cd29356a4.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_138cd29356a4.png differ diff --git a/public/images/stitch/img_1428439f1445.png b/public/images/stitch/img_1428439f1445.png new file mode 100644 index 0000000..eaf2b04 Binary files /dev/null and b/public/images/stitch/img_1428439f1445.png differ diff --git a/public/images/stitch/img_173b76479c8e.png b/public/images/stitch/img_173b76479c8e.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_173b76479c8e.png differ diff --git a/public/images/stitch/img_215e8686cde9.png b/public/images/stitch/img_215e8686cde9.png new file mode 100644 index 0000000..8f69ffa Binary files /dev/null and b/public/images/stitch/img_215e8686cde9.png differ diff --git a/public/images/stitch/img_2517584a0ed7.png b/public/images/stitch/img_2517584a0ed7.png new file mode 100644 index 0000000..1f1fb88 Binary files /dev/null and b/public/images/stitch/img_2517584a0ed7.png differ diff --git a/public/images/stitch/img_287e74cb44d5.png b/public/images/stitch/img_287e74cb44d5.png new file mode 100644 index 0000000..dd9bd8b Binary files /dev/null and b/public/images/stitch/img_287e74cb44d5.png differ diff --git a/public/images/stitch/img_37d955bdd47b.png b/public/images/stitch/img_37d955bdd47b.png new file mode 100644 index 0000000..5e4b52b Binary files /dev/null and b/public/images/stitch/img_37d955bdd47b.png differ diff --git a/public/images/stitch/img_3c0e8d94f8e8.png b/public/images/stitch/img_3c0e8d94f8e8.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_3c0e8d94f8e8.png differ diff --git a/public/images/stitch/img_3c97fd45eead.png b/public/images/stitch/img_3c97fd45eead.png new file mode 100644 index 0000000..ca85276 Binary files /dev/null and b/public/images/stitch/img_3c97fd45eead.png differ diff --git a/public/images/stitch/img_3d25f971daf6.png b/public/images/stitch/img_3d25f971daf6.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_3d25f971daf6.png differ diff --git a/public/images/stitch/img_43127add3722.png b/public/images/stitch/img_43127add3722.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_43127add3722.png differ diff --git a/public/images/stitch/img_454d4313c9b1.png b/public/images/stitch/img_454d4313c9b1.png new file mode 100644 index 0000000..961e05f Binary files /dev/null and b/public/images/stitch/img_454d4313c9b1.png differ diff --git a/public/images/stitch/img_51c5fd46d9b5.png b/public/images/stitch/img_51c5fd46d9b5.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_51c5fd46d9b5.png differ diff --git a/public/images/stitch/img_52e6fd075744.png b/public/images/stitch/img_52e6fd075744.png new file mode 100644 index 0000000..b669772 Binary files /dev/null and b/public/images/stitch/img_52e6fd075744.png differ diff --git a/public/images/stitch/img_55c0057de84e.png b/public/images/stitch/img_55c0057de84e.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_55c0057de84e.png differ diff --git a/public/images/stitch/img_56efb7217a42.png b/public/images/stitch/img_56efb7217a42.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_56efb7217a42.png differ diff --git a/public/images/stitch/img_5b95c45a35cf.png b/public/images/stitch/img_5b95c45a35cf.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_5b95c45a35cf.png differ diff --git a/public/images/stitch/img_6760dfad8b98.png b/public/images/stitch/img_6760dfad8b98.png new file mode 100644 index 0000000..6da2f08 Binary files /dev/null and b/public/images/stitch/img_6760dfad8b98.png differ diff --git a/public/images/stitch/img_6779029b62d3.png b/public/images/stitch/img_6779029b62d3.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_6779029b62d3.png differ diff --git a/public/images/stitch/img_6a4f533a3dbc.png b/public/images/stitch/img_6a4f533a3dbc.png new file mode 100644 index 0000000..7945264 Binary files /dev/null and b/public/images/stitch/img_6a4f533a3dbc.png differ diff --git a/public/images/stitch/img_7426395cd1e1.png b/public/images/stitch/img_7426395cd1e1.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_7426395cd1e1.png differ diff --git a/public/images/stitch/img_782daacb30d1.png b/public/images/stitch/img_782daacb30d1.png new file mode 100644 index 0000000..c2f944b Binary files /dev/null and b/public/images/stitch/img_782daacb30d1.png differ diff --git a/public/images/stitch/img_7ab727f079b3.png b/public/images/stitch/img_7ab727f079b3.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_7ab727f079b3.png differ diff --git a/public/images/stitch/img_7dabd052d9a2.png b/public/images/stitch/img_7dabd052d9a2.png new file mode 100644 index 0000000..70d197e Binary files /dev/null and b/public/images/stitch/img_7dabd052d9a2.png differ diff --git a/public/images/stitch/img_831cb4c49812.png b/public/images/stitch/img_831cb4c49812.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_831cb4c49812.png differ diff --git a/public/images/stitch/img_83aa6e562076.png b/public/images/stitch/img_83aa6e562076.png new file mode 100644 index 0000000..8f5955f Binary files /dev/null and b/public/images/stitch/img_83aa6e562076.png differ diff --git a/public/images/stitch/img_8602f3f03ea2.png b/public/images/stitch/img_8602f3f03ea2.png new file mode 100644 index 0000000..5c52f99 Binary files /dev/null and b/public/images/stitch/img_8602f3f03ea2.png differ diff --git a/public/images/stitch/img_8bded52c38ea.png b/public/images/stitch/img_8bded52c38ea.png new file mode 100644 index 0000000..d436ea1 Binary files /dev/null and b/public/images/stitch/img_8bded52c38ea.png differ diff --git a/public/images/stitch/img_92afa506dc06.png b/public/images/stitch/img_92afa506dc06.png new file mode 100644 index 0000000..2fa8b6d Binary files /dev/null and b/public/images/stitch/img_92afa506dc06.png differ diff --git a/public/images/stitch/img_932b8c0608bf.png b/public/images/stitch/img_932b8c0608bf.png new file mode 100644 index 0000000..b9ac1f7 Binary files /dev/null and b/public/images/stitch/img_932b8c0608bf.png differ diff --git a/public/images/stitch/img_954b76bbb433.png b/public/images/stitch/img_954b76bbb433.png new file mode 100644 index 0000000..1d8a114 Binary files /dev/null and b/public/images/stitch/img_954b76bbb433.png differ diff --git a/public/images/stitch/img_98abd351bb0a.png b/public/images/stitch/img_98abd351bb0a.png new file mode 100644 index 0000000..7367288 Binary files /dev/null and b/public/images/stitch/img_98abd351bb0a.png differ diff --git a/public/images/stitch/img_a322cb64c837.png b/public/images/stitch/img_a322cb64c837.png new file mode 100644 index 0000000..72afa08 Binary files /dev/null and b/public/images/stitch/img_a322cb64c837.png differ diff --git a/public/images/stitch/img_a330f7d32159.png b/public/images/stitch/img_a330f7d32159.png new file mode 100644 index 0000000..fdd320e Binary files /dev/null and b/public/images/stitch/img_a330f7d32159.png differ diff --git a/public/images/stitch/img_a5b150b331fe.png b/public/images/stitch/img_a5b150b331fe.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_a5b150b331fe.png differ diff --git a/public/images/stitch/img_a873b2a3c1fd.png b/public/images/stitch/img_a873b2a3c1fd.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_a873b2a3c1fd.png differ diff --git a/public/images/stitch/img_b1949065a601.png b/public/images/stitch/img_b1949065a601.png new file mode 100644 index 0000000..a819848 Binary files /dev/null and b/public/images/stitch/img_b1949065a601.png differ diff --git a/public/images/stitch/img_b1c559398083.png b/public/images/stitch/img_b1c559398083.png new file mode 100644 index 0000000..5e3bed7 Binary files /dev/null and b/public/images/stitch/img_b1c559398083.png differ diff --git a/public/images/stitch/img_b6a7259c9847.png b/public/images/stitch/img_b6a7259c9847.png new file mode 100644 index 0000000..fe6c765 Binary files /dev/null and b/public/images/stitch/img_b6a7259c9847.png differ diff --git a/public/images/stitch/img_baeef1b99136.png b/public/images/stitch/img_baeef1b99136.png new file mode 100644 index 0000000..c8a3fba Binary files /dev/null and b/public/images/stitch/img_baeef1b99136.png differ diff --git a/public/images/stitch/img_c390b10ca9d6.png b/public/images/stitch/img_c390b10ca9d6.png new file mode 100644 index 0000000..67ffa61 Binary files /dev/null and b/public/images/stitch/img_c390b10ca9d6.png differ diff --git a/public/images/stitch/img_c44858b5bdc9.png b/public/images/stitch/img_c44858b5bdc9.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_c44858b5bdc9.png differ diff --git a/public/images/stitch/img_c6e2705fd095.png b/public/images/stitch/img_c6e2705fd095.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_c6e2705fd095.png differ diff --git a/public/images/stitch/img_c756d414d59e.png b/public/images/stitch/img_c756d414d59e.png new file mode 100644 index 0000000..2c67f3d Binary files /dev/null and b/public/images/stitch/img_c756d414d59e.png differ diff --git a/public/images/stitch/img_ccdc45d7eb58.png b/public/images/stitch/img_ccdc45d7eb58.png new file mode 100644 index 0000000..b5f0a7c Binary files /dev/null and b/public/images/stitch/img_ccdc45d7eb58.png differ diff --git a/public/images/stitch/img_d5066e945c17.png b/public/images/stitch/img_d5066e945c17.png new file mode 100644 index 0000000..2a66a62 Binary files /dev/null and b/public/images/stitch/img_d5066e945c17.png differ diff --git a/public/images/stitch/img_dadae66165bf.png b/public/images/stitch/img_dadae66165bf.png new file mode 100644 index 0000000..7848626 Binary files /dev/null and b/public/images/stitch/img_dadae66165bf.png differ diff --git a/public/images/stitch/img_e06514ddea16.png b/public/images/stitch/img_e06514ddea16.png new file mode 100644 index 0000000..a8092a2 Binary files /dev/null and b/public/images/stitch/img_e06514ddea16.png differ diff --git a/public/images/stitch/img_e257ebf6fe69.png b/public/images/stitch/img_e257ebf6fe69.png new file mode 100644 index 0000000..1478a12 Binary files /dev/null and b/public/images/stitch/img_e257ebf6fe69.png differ diff --git a/public/images/stitch/img_e3e0fb6614b8.png b/public/images/stitch/img_e3e0fb6614b8.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_e3e0fb6614b8.png differ diff --git a/public/images/stitch/img_e42d9e9bf78f.png b/public/images/stitch/img_e42d9e9bf78f.png new file mode 100644 index 0000000..fb45751 Binary files /dev/null and b/public/images/stitch/img_e42d9e9bf78f.png differ diff --git a/public/images/stitch/img_e4f3e4b2ed54.png b/public/images/stitch/img_e4f3e4b2ed54.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_e4f3e4b2ed54.png differ diff --git a/public/images/stitch/img_e6421a756a41.png b/public/images/stitch/img_e6421a756a41.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_e6421a756a41.png differ diff --git a/public/images/stitch/img_e7d9a5a40a66.png b/public/images/stitch/img_e7d9a5a40a66.png new file mode 100644 index 0000000..2f8ee60 Binary files /dev/null and b/public/images/stitch/img_e7d9a5a40a66.png differ diff --git a/public/images/stitch/img_e81f08e7b993.png b/public/images/stitch/img_e81f08e7b993.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_e81f08e7b993.png differ diff --git a/public/images/stitch/img_e87efdbcd4b2.png b/public/images/stitch/img_e87efdbcd4b2.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_e87efdbcd4b2.png differ diff --git a/public/images/stitch/img_ea7d88035bc6.png b/public/images/stitch/img_ea7d88035bc6.png new file mode 100644 index 0000000..a907c36 Binary files /dev/null and b/public/images/stitch/img_ea7d88035bc6.png differ diff --git a/public/images/stitch/img_f1a53cb7d42d.png b/public/images/stitch/img_f1a53cb7d42d.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_f1a53cb7d42d.png differ diff --git a/public/images/stitch/img_f1c861d85d30.png b/public/images/stitch/img_f1c861d85d30.png new file mode 100644 index 0000000..2ef09e2 Binary files /dev/null and b/public/images/stitch/img_f1c861d85d30.png differ diff --git a/public/images/stitch/img_f42362817ba0.png b/public/images/stitch/img_f42362817ba0.png new file mode 100644 index 0000000..cc5c230 Binary files /dev/null and b/public/images/stitch/img_f42362817ba0.png differ diff --git a/public/images/stitch/img_f74d269de418.png b/public/images/stitch/img_f74d269de418.png new file mode 100644 index 0000000..4a1fadf Binary files /dev/null and b/public/images/stitch/img_f74d269de418.png differ diff --git a/public/images/stitch/img_fc08e112a162.png b/public/images/stitch/img_fc08e112a162.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_fc08e112a162.png differ diff --git a/public/images/stitch/img_fcd7155bbf33.png b/public/images/stitch/img_fcd7155bbf33.png new file mode 100644 index 0000000..a58ca3b Binary files /dev/null and b/public/images/stitch/img_fcd7155bbf33.png differ diff --git a/public/images/stitch/url_map.json b/public/images/stitch/url_map.json new file mode 100644 index 0000000..d6916ba --- /dev/null +++ b/public/images/stitch/url_map.json @@ -0,0 +1,97 @@ +{ + "https://lh3.googleusercontent.com/aida-public/AB6AXuA-8XunEcrKgg8BaQprySnGPuRn3G0zZV2a2m_pXQ83s9XgE0MtcuY57wo0dVe9QZd6DXs3SzVI3iY9ZdlkOks8rIhYM--iy1r3GTslIT_xTCI-VIagf0r_UK0lbbLL_PU-rFMx6K8blo5Y_fONJiw8zzRGp8VRCO8EQQkU3E9zp25cS08c5h5TqTmnE4vkhGnsDXuhjXX0L2ZUQw1vKOmh9zqfDCfiWeONlejLbSS-47WsF88RQM2-wg": "/images/stitch/img_8602f3f03ea2.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuA2u7rnBwWBaJwG6P3XA8R0LM735ILpgoaKELgbkzyMVxjGzEpIq_wo5nk-HtCVzI5q7pJxc9Dm4vaCjNm3FDOaaGTYeKktKeGWHLvhGAhB4mP4_NoOt09KhSmGEgFna3Y272DnGirN5v8I-PyeRqpOiOFD7Caic-Jt9AUzWhD0F-Mlr-A4TOVHeDqy5KqIEnxhiLfK-ckD4Y0kr-mtFoIixZrjF3rWwLYxs1i9NMRpv0MtLAsNY3U_6Q": "/images/stitch/img_ccdc45d7eb58.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuA6NJlepK74w50dtoWw6GICpIhFxmMM74V0HUtECUPZDW7e8BFSXzEH8U1s_XOV-kJLJLdhq-qWstUmQTsIwICO0YU_q83Xod4ejU9BDACXMPGKH0f_YstEQq9GaAbwp8l1WHWciMBEO986DqeGANaqlD7W4wWBgx5eMHNup4bwSFssl_rOiRv-74hnX2DMAgDBVi6oWxwVaC_qhEYLbvlesMf9Wk3kd6QGG3mYwBn3zJUO0HxJZiJ1YTT3_9w85n6u3JQ": "/images/stitch/img_c6e2705fd095.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuA98-SvEqtP6UtoDBzrKrzw4S35r5AuBzuUWjwuSHPdcT-l-8Nsrqu9qRkVgOqjqWgR5715_ZjK-xNU7vAFYoDhpipnD-3PZMYMdQah8YtdvJ20Pi7ceil01C0lfapd6i3c8JU2QuXnObblMdFrL_Q-tkzOJzNsXcImXJe7_lfyXYreXqbkOVWwfDMRReNKV4JGNrPOP_zkud1nSSNrXTr30c8dMovwbH-bT1-czPubJPGc2idgz568sQ": "/images/stitch/img_baeef1b99136.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuA9Srjc4RKzhCcyhzxxXWpynyCVn1xR3seZagzRjAsliOxJnuqbKq2u3sOhexjvP8Gm8joYA9GldY9kjkqsCQu3IB3P6HClP8o9YBYjpaUZIW0Yoqm9kOyRtuWz135swVvd3P99na_5o3kV3PP3Ho_nQSapA9bXfBJUoYW1Gs_HCg7DpSyr5QUaaMG_-iSwTU_eefUHJg4-Mhcm3_mvAA-5BTIEC1zDum9ZHkhSmC_7KwlNlak2GBENmQ": "/images/stitch/img_ea7d88035bc6.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAD0lBe3FAwT5Vg-4FjnbVJJRejQJ32uvrJ3tkMVQl875-knOEJAHBcAfbMEAgJBgdXdDq58yJg6Nk6VGOl_1cMnZmwT8yWBr8fazp0aGyKTeH-2i4f3vUlbAahAgh3ZIPkeT4wgaRPDaBk39axs4vTzmi1cQ2ge0-3ifaD4v9roQQSbKMaV91VGsF14JaatVU-943nEQ-_e-Ogx8Lbkl_3qrJnocBbAzuZ3fsUHLkX9vbpjQ-GU53o6iz9-lQo8QKPyks": "/images/stitch/img_e4f3e4b2ed54.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAD4y_xhZ0cKbHp8C3m5uLpnck1pMslSodQ7ittAUCmzMmPqp7mbuRNP2GcUsHcXKi0nJKG7QIxxSCzEOPlFkRmiE1ywJPz57d7EtgO7X1TBdY1qOKsyfkI4YerHSqeyinaOUSVb4JvOF9RNoRV9ysTKvVPHipWC3Vtkf1rw2oIJ2bCrLaL0uIXE3KGeutUZQ2qJbYX113xkIpox1gx_vaPdatXk7ZPdgjsoB6_djQWZnyHUrI8_c1sFRyyLQgJCr0Wtnc": "/images/stitch/img_e3e0fb6614b8.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAFra3BEgggb-u_VVQRIMSHMwyGoNNuWUgnmBh5S291ehEJMpc99rUAZit8QRqGRKvwQapenzMG4_-_zcVC70H6fEZEgjn0yefk0Oa_4CI_NKOn7igqLk7KcNFMQeBcLVx3innfeiDetA1_KeSxtssjuThhPhQNWDxhVcqXor0cC8SnwOzabBGcGNKcMMdR2qttqUmAOrboBYuBQxu3OAfqiZMCWkBSv-V44IpQ_Nx3Is-3XMHxdWQf_Q": "/images/stitch/img_8bded52c38ea.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAFxad5g3AIizfdNYBG_7Z_2aYz-v_dQQuk3wTZQ524XfnlxbfFWRGBMYqW9jyy4mb3P9KL8cmHrXLPRm9sTDSd1PrjsBZ3-_T2KqQ68FcjI1tBSAjZy0MiHWc4e4IgGR1hsHrf7_8nEar3vvZnzep51Cjq1E_uJ2R0rswamViLP2GSFMUcNKM6bFmUotiPuReIdDYuCruaBWoxBGVOFQX2wKS6PfFElKFftoOKvI2YbroFAYAb6BoI5Q": "/images/stitch/img_dadae66165bf.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuANo8_bAG0iMoZG3WvhxcQu9pIXXs2oVKVdIUWKOEG1exsY06JzSqY956I8QTXcweFyljfE7hIydZ-GR2XPs6q6fw-JG8XDNp7hXCgpuF7Sp7MeCa_iHWC_IAS333BzLEFYTlwCRShzEmOoU9ZhfxsIVacFwKkLkXKijVnRUPmxQCz_sHOj8rykGpbGRKmd_TaAZJbBaXvRsybZGQcGs8q8rzRtwfKwPTRatNaIwgEVynNw_JXOhA3OnxgcbG6SRs-3J1A": "/images/stitch/img_3c0e8d94f8e8.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAOVNOlWZ3SArxgQcvEoGSif_5i6VHVepz1bTtZMJBfA5X2_ubr3NthC8hbhZ31yFQTsFHIsnsMpdxIIWkS00hoCTWL-UV9kvfRLCMXCYfeUp4asldznxvRAwWSNhKcdWeUMQ7qFPwakEiCG3-bj5uM5nYQlO8LUO4C93XnDe2A0hlZ2rEDomTBB33dl0x1fvuwPWPgkSuqm_SjDQIacmYy0gK-_4DunKoTdP0OaZfmKkFDfDw0JoU2Yg": "/images/stitch/img_98abd351bb0a.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAPOSa01mM6m6PH8UMGaRtF0Gq1MsHN7iiK0SJFjRQ4yGIq3QmGp0wzEDP8f5K0XajROYtpq5JalMg6_pY700WSAnW3YDZ6pqSJ5ZvpN75OZye3FuOlBvEFpKZ-TK7UN-NQd5SbkKiMDNV4g-AKKq4Qscq7rUJCPM678yxQkiQy6xonOiMIqxAQN4Vam_3NOs5gxKrl7gwuljxJVO3wCbC_VRipFLqBFlymUPTTKoq2vKt3TypIDSCFWg": "/images/stitch/img_a330f7d32159.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAQKBz8Ge9kDfLqCyLdEU_pmqpugVfNQ4c0r_jBwouGAZA-simyR0UNsDy4AKQYnmHEX9u9b7ybu5RJbgs2eYQ0V8il31xFW4-ctV0m9DE60x6AGZzwFPHiz7aAQfC628eG1oVk9iuVhIZEhEOHt3CZbd2lmY7BVmsPCAxdF3Lp5f9GAntjoB1wSZmxjivyLxQc-1DtLR-0c95jrLFymsrYMU5Rwa8JCxJk9s4_J_CkaFURcfkqK6-nEQllfXr_mxLLLL8": "/images/stitch/img_fc08e112a162.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAUaVprp9MI-8NfgR-ruX4sgsQOQOiMBrbAbnFmZgViVbwumtF0KTsiWEyIehWNQWnank_z4ST4bwfPgzdIBSslPWLjBMPmAOlYdHOWNUWB1RqRT40CVOADX8wt-9leNyN4SUpJ3qfWtcUXwd1zFsvXsVmKVg6c-duuTaSsnwSnZVPBezsCANv4nLEWW6oIP4DQrXf_9ZgipthKCUg1hdJvE1eyv-EcxADCBAQ3_wpJYGMJfHiVeBSA6Q": "/images/stitch/img_e06514ddea16.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAez9fCRVksMom6MDRqVGtZ7VU7VxNCTQa21pYmnlGBxnqDqT3bD2BcSA1pX5netbQD9LD5kVBstn9P3CQLhZ_yOQg4jx1q7ywf-2QOcR8OKjhHxt4JvuW0WMCkU9MJFZTPKCvm_3wFBoNCqVyeoG_Xn1sid2DgWjWEhyq0HseVmjEv3xNyZEo2rNZ4icf0cxg-B1tDRFqmVsfUQosM2s7cz2xejvpLMBK2osyT6oj6AlbDRlyH_dzxa0bX4elaETtyulk": "/images/stitch/img_173b76479c8e.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAiU5X_YKfU75cl02YesUVKKqqztsDQt2mh9g0Os-d1s6Alf70bS3jRNx3InEJ22MU8hErbOXS74e-q4hemaif0UUvm0ZbOciJETdDNz4aWWh_504mqUgsikxyo6RlOmgh2xUV2b36V6HclytgDK0ZPeatZRlFzghHJn6wF3hYTkpn50pHP3M9epIvqda-ikS0utt6jhhKcmHUT-xCQSgMS7xUmFdDKCa28lY9BOzz-m16AJPhdJJvehA": "/images/stitch/img_1011af60f90a.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAql9saFNhbrvlval2Snm9aS8N3sYo1N-k6wE4z2g5de5CEvPOBZTV5jvwLjG5tlttTqhQdj_XSEMpmPEJsX6qjppT2sUexhbByBuXXVWuBvR-XTBmdiZh9CVeQ4qm3bLqmmafrj5sIBiaqh-FtKDC85iPfd7_Mb7IG_W9Ygwo2HQzRssgSm6eV7yx3qaaXOKWab40IczA_maicDfvmnj-r10X-AG4idjqG-2F2N4fTJdERDlXc_PZ0RA": "/images/stitch/img_954b76bbb433.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAsWywDg2k7gRhFLvYkQ3iQs6fZd-5KmKnq1tgtMdq6ohWwZ8ornAlNoVtRON1zMJyG9xsZV0FgSA9YBwNq6rLbBO_E5yDkGgwfTvHb9FI8d7UGeAVSyBox6AthYR9WfEfJySFSdpWL6V8HjpbyGHCdkCrzZSQJ1cFuY471sCKdgrwKdfKhTmpUV0U9FOZ3UQ3fGysAUiRq_qXvowhAbo9RsPxF5bmrBQ49pYkqFsI8Ba3zHZX-K96SlA": "/images/stitch/img_2517584a0ed7.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuAx5pSFE05c9FbPuJE5YrN2--qeCxTFMFugHblquc6f49YV7BSDoAl16qy5mE548WxEyvTOyH5KLrB-fmHS1uquNJ2LasZtj0demmB1umpBaHBOItHfKhQLYrQI14kHng3IFLRI1GBCKWBH82ZwVjZ-7elA3CxYwMi9hLA0QKe0dmSicpyPO96Y-p-riGC-I_BfGiCph8960ctREEMil3ATeOFS2eHnboAHerXzhk8FxT6__fKJIPmC5Q": "/images/stitch/img_112d7c20d9aa.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuB5Uii5euJyvxalQI6GdK8zUqd1mw_SPSiJCv5Dp7aBbjgjiP-10pgmoIlwN4zwVhZkMCS9sYlKToBICIBHITsNlziYcdoKa8K-P-Wel5QtdCAfPhplrGMbhf1wa8kHCkM7aRtELo8Ci0YeEHSE2gfdynlc7VS2PNMBm3mPUamXyPsBnKiRmHSStGGs19Akegw2YKHO3m4iILiMoRfuKRhQvQgAOd1saBJ5SPX3LN464LrqW8LEIKoKK9Dl_vCiyLN3eqA": "/images/stitch/img_e81f08e7b993.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuB5gKnicSaYoGMVOkiWlJ7rr7xKfbq1r9cGhhoODHWs3fUUrY_ItYgws6ux1u7nzGD9IHEoPiYIs-oGguqjmsuULC5c1tri49eUsYi5BC_hF9qwgluc9Mfvivkl-jayxHUtq-FTfRdimxBY7ULyY0Ue58yh38DRokCdw4wAhDZIzMU3fFHlNP2nOcj4lOLYdEPe8LcdV04QRteRgYiJ1l4rJ-9c7erBSCzYGCknGwFIqj4OY6Yeru_EVw": "/images/stitch/img_c390b10ca9d6.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBBRNMtQUImpLiolmEJm5JFdcNQ6uIeSBcgsnIN_Q6rfx5wZ1rvBVYBzIUMjs4olY35yxX7piEO2BOva5fMuFwk2Mw4EaeqT6h6OJ_d-Q1e1euLcmZPl-96i0qyiLCXqXvGP4LodOYPrLableAwU94nKtoLj19e4fCO7mPMqqXmbGtxi5VM_E0icUSKSkcnX6zYDBKIxRAIykf6syKkyEpM2KCUXqeW3cjbtToSJm7OWFkc0Ts8yySA4w": "/images/stitch/img_0d5370f0aadb.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBE6s17Nyu4FoqLoBSunDFtjrgLyrYNgMrx6TGZ0fakEw9BPxdTsWuxlHQoktVEG8Sa-qMJM3mv-sFBzc1S5BBAnZ4X4eXitdJosH1VavY-IgCqRjbkJ98SD7EK0U-S0_OUMpCsmi_32aUCNvm3TC3JzvYKf6BlILhHZ2ekN0R0jNtNwaW3dGzPYLHi6cjwOc7iBVfaD_oWO-d4isjCwc5rIlhJUo_BUGSCc2k7KLMhskpdU_MNiXCiEBX_tgZEbqDH48A": "/images/stitch/img_56efb7217a42.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBFMO7X6_-XzgKHg_CaRyj19NSuMz1wcED_hdNlf22gb-7xl1ICjRNp6IenNr2O7OidS8CY_sTwU0slcZvx-M5zKvotjWIrrYE1PfioLTkxIZa7s1AOOv3iHFmQoUdIkWnEAe0nDVF2G0gbKhzKOe83Or8_vB5vOltLc862minyxNDOBKd7R8javhyKx3VO7C7ekZWSMjPUNoN4pH4vQbehBrpk8zDzpnSGxqDWU2Jk4LwtSBmPwqBhOg": "/images/stitch/img_f42362817ba0.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBPJaV18dH1Yd2O10ql7WM8gD9paozsaEz6ev8AX6ZXKwXxEBd9pX3IcMsDGbG9s2o9Xs3NuN1jU3X9kJiD5WYGoNsuRUsdYq6Q-xZ4ZcApYaqC71mOsJl55kivnAdHUtTmlrlu_-mKewBsjC-CEQaQXNLNuzxQID3l9xHgHvZ2zM6_lM_cKF6tfnB8SMbQZhBnAXLqJm6EwB18UqPn9nrloEUjsTNGZdOyBMdEK3qsWNEdlaVeW9AzBSueOFHrkxvmzJY": "/images/stitch/img_138cd29356a4.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBpyANE-OEX8ky54rHFrBx3wMp7yKXpIISFEYn_q5lrWHRCv7jTCoLEMhmUDva_b5RLx3iJ5F_6C3BVjz3hR9e_X921LPqqE7yzp9zQbQS5mpHGN3Kdg1WEEaKwfvbMHSDaSa6pJ21_KDi4ddnodQPGBo7rd5ikrLggQfCOaTadKYRhSmA0c1M1Wq_mGjePDWNgWaGOqG8_haKf-0vu6YjX32KIZGWMvLMiWIckVJhjj6nbI5oHFpjJ1zkky6E69IklW3s": "/images/stitch/img_f1a53cb7d42d.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBu5tzALIBn6eOaYAog6iPHV35I64LNacnFpy3rK6uwANrhpESsRxtmoRYsB5G_wHCWTA3bC3nxW58ATUlXIoKbIl48GAK0i_QKoLDLu7GWYgd60REgsEVMf5h-7H9IW9440DrFUYeZbUqUHm5S2yRqiTY2aPWv7jJYay4_3MvBAZAivkrrZod40S7fmXDiVCV1IvmyQVmZakEoqddNGxQfD2SLW1wyl5Wf5fhosgWBdJlo8J0miEiygw": "/images/stitch/img_6a4f533a3dbc.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBvbmy9p7QVt4_Q1tdGCkCI3RSd7INBE_Sy8Xj0EyFuS-HFg6AE8_ryAlDB7mOpZgR2_J3BjeRUtPR7CnlPMY0fy9aCz7-JfcOLE62U2k7bMW0ntOGVsrmPoGFXju6le9_HHYPhAGR4Yy7G_UslIJNtVA6geavw-xBg5FvF9VvtAJxKFRfWAQQxv0h-pQUIHl5ItKSCvIhAXVTz7hAx1p3rirBUnm50R668SASZyFZZ3lUuW5eHVRSQxA": "/images/stitch/img_0c03a6f0eec7.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuC0mCspDwKwCpIaj8gMBPOrEdX_0zma6-FxlEVG_fdAL9paZCMycPxoMFZrnO_pzRuFp6nJZNOpEvsMZPcdbihIJj5-o30kV9EXAGZeFrAgVFIx4BZ41oWt_gEZQIuRgfR69SsnuxWLUgFe-NikNvF6TV1pMgqErYLfA0tYklHz6G98qT7rv6MWy3YvpAD9fav0NNFXaq_M0slXFrvNDURp0cYp-A-pvgVSTHbSnvVu-FhYylD9aDH3uLcyqMPs6zx_lCk": "/images/stitch/img_c44858b5bdc9.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuC3XWSgFm01uzxgbaPp_H3N5z3u8w-mT7AN9i10C8pT-zS-NXSLT-1-IKr4Ot9NAZUHZ7CMKlOR5Jwmc6BQ2d0MQZ7rEulbaBvOs9u6WO2jduWXSrdz6j692SzMx-yNM_Kja8o9vcu8upsBHf2aLH2pLPbe2eVTZRJB8seuhdMfNtRWPAEaIv9M2R76JjOnoAmeN_3AuXkYWzH_-JA7bQX2ybs5fEGBHu6_Pe5hhDBpCBq6KtQbc3mh92AoaSVuG304smk": "/images/stitch/img_fcd7155bbf33.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuC8WW15W_8-qkxeWZtG6ov4K7WCN7DeMyOK5cOwsqYoG2Arie6mbOZfwkerRv8fXamFErrQ6c4jB5pnUa3NZSwEdrTH9ektjfPUiBro4KbZdwJbMfq6YkQ72ZdBv5UyovMAGSq_P8p8abXJqLpAKP3aAlFNNNw7PwmgE3zrznyrpUa0q8XacoF8a4nWS37zNTv6bZK_2AsnLEk5MS9SoLcRysVde2dXMaOu06Xh4lLxEx1WG6SBrt_Yl3n_N9QO5LsErOM": "/images/stitch/img_7ab727f079b3.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuC8iKx6ufU2X3yAYUgQ15PKcCYl80UorlT-06bv5hoh73hwS-bYgCL1Nufg3KcHQjPLiPkDiSfQ9cnf6pCy5pE5iGIO-T8BjAxw6u9hc-Qfr-VSgBSYakpQzDl4Mruo2_C-8QYt7pFysor0lrLKwhOUPBvvgZBs3PLeqnqKRajPxqDvetLyBkHqzXfAHcFhaC6kp6MWnhR6HziK397UrErbSpDiHuos8LJBQlWix1V5tzdxAe6Nq71JBOMVWOPeF6uT5P4": "/images/stitch/img_831cb4c49812.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCG_6a9PH7eYoWa8a6oONXjrRfjpIub6M379Kd1QNodO0hHkflo_Kht95roYTTNfkqrfEQmMMHE4tEXXiP8yP5y9DJ2QO5wRNXwvoluoSFuJju6sh6gi3YZorsp04lC8C6t_YI8jxCWkpJxLbEAAv41ps_pf82q6JdRRh-3vA1nyHeu1TT3WAInvqD1VfyBfn8WyTLNUeja0FSq9k_lYE15_6lGO44ihf3FsnbTiQZsXIY4m4K255Cxq5Cmso0k_meGeGw": "/images/stitch/img_6779029b62d3.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCI9MmowcbgOTZXT8RmHVw4ZSDp8vokB2zpaF7E3DQ6mZdY-vGrpLndKiiGxTq0RVDZ2NMRbVFLdkT8p49eF40BeDU90e3qRhVXw_GAvtXukI5u_Td4HxPQSlbEURqavIK2qM91xu0Ohi2AsyW1aPHSjut0y0qSXYglp0c6ZEd-N3XJQVu936a4WyUTVww9x_hYqYf_pQpdmaCnC5sPtPLlT4opW1HNEER2r6oLRLEeCY5N17R4UKfL4a7j5QSFcB98rQQ": "/images/stitch/img_0929ca6cc3c7.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCNKKKg-9yIQxEKYJne1PkERgqRge2aOZIvUJ_8kFPHuQ7xUYHAAse_-UmP79hH1nMd1ltjOkCWrn8zcvjA5sJExfuf1k2ZIDZfeLhfRaqCoW_fletVQI-kKeYxd6iPIDSThCfhrSnBoPpNvfChoSYForgnuVhtVRDqU5p0m_Jty_Paa1Inr2KHfFnL5EJ2J2IUseAcfp3oo4V8862EyHzXs5y3wtebN4br2jHGsf1bwTsOurmYHWmBvg": "/images/stitch/img_6760dfad8b98.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCOB-cXJsgFCXVp_h0gbzuXbtpNxskscjvncwqYqrgT6Ghbc0ZPnpgC2zoO_nPDSO-rtwyBAwPO2oF4fy8XD14A__ku531H9UDrT-6BT1NqW0ClRXy2t_5QshTN4AboF08zWXd1L9qGeIvCSJB0PuCs1dpWjnllOjibyERzDB2FsHusklAfuED6tyLDKOAlDzKZeZlJro_3l5pNBKJYFlyYBTODo27azP0UnLr3qYVhYn6K5yCYcaM3UA": "/images/stitch/img_215e8686cde9.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCOJm-fnxVou4bdQOiRg5YDM2JRK55IxV4_dcN5iM8w-JGf44BszF-_jtUKvopg0KN5bXwnn-fm4RBR4ZwFIC1gPnqn2ZDEtOsTQQtyKA0CA8BoRa7onaxOdhdlBoMDmYp7zaeZO7kKUfZgYdIgz9L6NXZckztCniZQdbgrW7H6-rnAaS3Tq3aVO2Funus9i0E52DRATbAr6VifjxlPQ8Hi2aQgcflKHXgIRfDULA-Lvf54q6hVIPIsdxDJSagts3qNiYU": "/images/stitch/img_09021a0c4ab9.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCPoSH853omL7qLoLJmlH6PR-VseK18pP3t8KjGl8uzjSDDsSmZOaNHNWEbpHLxKJrGWDSdNIhdpInWQe3zWNYBtn-aK5KISZx-5mtLiELUQ49nBvojfd15k6d5Kv2HF43KRYXAOPzPt7sDBDGY8sB0NrEU6g9-n4jycuLWnjwoSPci_cZ1qIPlA07rmNbfYm0wQINCi10ggQ4EtNXCF_-CcWHyRtrrbZSBNOclNmDJi3cbyjRVTnetOw": "/images/stitch/img_83aa6e562076.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCR4DDKxYUQ6NvtSo973bvsSjR-s8lETXuz2mEAjiOHFDqByT0uZu_gUe0Vbc9bDxapMQf9a67bJN1ugJeKdr3-PbyEgARdt8L_C5U2I1GG-gR0Xud8Y_YR-Xr1UyAfyaCNMW8sifCi2ohihAghOmAwxzpAO-2YZRDP8ez6E2syRDOIc5w7UwhPBVklImimjbEPuDae7-t6uOaNfUr_AiqfpUu0MPzK43r5v5XL2GTsP7ZuyoqqTg4aMA": "/images/stitch/img_92afa506dc06.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCSrON0oJdfdQQBxmfoE9-SJgAuFlpQ2vbFNJKyk41XLdtSJLx906Azb5YMD2evhzBZGKP4OgJ9M0xAGh5qR2GQ32T1FR0s26H-g8Wfwa7xaxPqROygKTcWGExCbwa3i0PeG62d7uS2XIpChXgcpQ_K8SnQNKRpAE6MYIoCxYzQ0wVOvTg5fe50M64KSLF72yXFhp1VdDqdO3mWQdUy2U09eCaNWRsq7BSzBYzW5_b7ftJeDFkUlAqI7A": "/images/stitch/img_12f3b9e82223.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCWrrFDPDwCjrFDxE0LGNWRpCnfEcAkaH1C57qNE3YHdjM33r0Euq3CpFQl9N5Bi1smcXaVeschGzFoRTDGpGtt1HvXcDxSzJ6r8T08Q05toGWlNY-R2gfvRfFS0KgkXC-O-rBrZ9l_Emu6DdKnCpYusYAC4Xbh3tUfsfto0Q2V80EXZogU57SrUkKWS0wHiL-7q-bbW_7TSzM_vLFGRhMnhe-LZjmNDNnWOc6eoWUUB55cd5k39KG2cA": "/images/stitch/img_454d4313c9b1.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCbPQOfKaCm1Nco2pJ-Gl75PUUw-vVCFeo6XPlRJgjiTQ2jP17I4cKwsY08ATdo7iXmNHOAx9K8MgwUf75OHwsqDCW745FVD82Fks5MP-MN2d8G9JiRu1wc8uVm15p6YuwAQxRsah-fsl4-Vfig-JfkFxIVMbYO6k2y2B7kSNP--oTLQ4cf_nDnGiWzd1KVrzY5Kj0IKT9WF-EyC1aq0BCvGgo61yq5fpmKbOtzwajlAAqsn0fymGssa-6-F1N_guUZt4o": "/images/stitch/img_e6421a756a41.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCmbwcyAJlTxTVuoAwMizrFz6wP7EIH4y_Ban-wxHrVLXy9Z9UYMOGnh7mmXvqrNDY9aHuL4nyJwj9BqR6khGkocUVuPMFBnhoBL0Z9qz4swezsDBk_yktUOejZikWp1lWgwym2l8GO0UvXmMm6lQ_TDBsndO15LFLB4P6B89eRzoRIENNwwLqMEerFoJMeLo5kWFJpL2TE_kBod6bf1r70uiCj6R9S6DsUhEEyzddOGHElkHtDnn--EoNhtlGU9lZeLi0": "/images/stitch/img_51c5fd46d9b5.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCn1UDP241EMRn4XYwh1oXvQNCfKC7QDXvWzJQMn35A0b2sk7OSz4XYkOUuwVxdBRaAK_Cx98v90Jmnot-lyaQKVhEJ8kceTp4MjpPQf31XXMtAq6edA5M4mSubrFcAKL0Uo09v9dxn_Hr_6mkpdsefgW3Hk1dhK11PjMUPT-14nbK5dBLlcaMMuCgImSmYzRFZlmv8gNnR88w92t2CrkKgigJcB3hbTxCvahAH7NnNjaeUs3kegPUFVQ": "/images/stitch/img_c756d414d59e.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCqoFCFdMvPA8As-hh-7H1h4Lv9VHjQ0u4aMd99BlOoqihxnaUWxL4ri9KCzSKKW2B5eBNiRO8H8MJUY-AaImzqCTfaroajnXmdZZp299rGS0mvnwd8_ntDmdKfenHHHPpthXRhbuGsjowmY7ZnRLmNIx397imBHyY6awtiIBtbk3r2qQr3YSztqOQZen389cAycOZzbv0-BWUxr20YYwZsh-RFuWZQp7cJ5QBw0j3mhxCxTuJYSUkxdxV9viR1s4OVfpA": "/images/stitch/img_e87efdbcd4b2.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCr9ztBpDzMduPZ-5l5v-X6c8BHBLI0jf1M_QO-wfNY-tmqRv1nxabO2qI3TnrGpmI1juWHeYz-Eqt4BZ3xc0erMLFESEsCIYqDf7v1ytuDe3WoyJzLQvMgPaZChXg564-0xf6Ic_ikqc56vjbTtkeadQDkV1DkEPpoisbFh-YZ-0uvhB7phhpMTQ3KEGBSzi-VOMG4ek2PU5nfxXTohi0djHX7g0sR94iIUhwCMMwU8sOe9gcfCnM2hg": "/images/stitch/img_0e9a0d7b5dc0.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCrLtpgEU784jrGg-V4vi-nQ0BUg0jGZm65sgsVeePprTjfLUE2XFLJMIWvBcsJJ8qTldJIArKZKqlAio2bapn3CeCa_T8RPXa67UKN_hORK0F2MC8e2sddr9z5UQ27ktsqOGNexD78TpWBYayDY9SneTzz42dstr4vvJZNyrl95AaTrwe2f8XXxfdEv5MVPj-6lG4u_ZRc0srmdAUrLAXc-upV6Uga20w5b2DOtOWl6r5U0EjMmYUyQQ": "/images/stitch/img_e257ebf6fe69.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCrOd-78CDRNrMeRnfgSjpsR3GX_NlRdudMiAeJJa_d9ZPN808hFhFB6iP1CVeCwDIv9bsi03YElz5lW2VA1G9767y6x7TkDOv3C7tzQzo0EfpDKFVzM6UiNI1ATgjoVjLys3xc4l16rvNI8Xf2GaQ7NpL6EbgrwYxo9PWjnZ-avOPUrZgNvBE1SES47vGbOxfrTw7f7-YkPVP_cLb_-VZYfgkwGw2vdJ_i3Rjlmoc3QwmeTz-Q-SNk119l5YYh-YIXktA": "/images/stitch/img_7426395cd1e1.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCwSplV10AdXjVbLwXyfk9aZ0KpOHFTKEyKq7AoSq9ArkxRPJ8mxcXZMOV-TxribPrejZUjNrFNz7xP6MLEhafj321ZU5gjwcqpzcRLyP8rrpIYMUg4lmIx-e7tNu4z0BRtJkIZoLqqyt9bb_T6gfzo5pnKtDJnS_TP9f6oztyL3Z-l0SGfhlEMhcjB-tXYaDKBAp6ctNAlpvTUQVRbbmFkLBYDQQKgZIl3bIpcLZ4MSDrHLXdjoEx1Nw": "/images/stitch/img_b6a7259c9847.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuCwg0ZYPELpj9x5eH6JXLqxj4s9SKMukPyFQ5PUoKvN0F3k66LUU8xN-chahau7xFv8fIAn_1x2DIa6AdlM9wReoXv2Yp-RbFAkIop3V-_qb-tF7aP2NXWmmLZ7wO06I8Pd5rWqzFCrqER1z61O5t854X9mzSC36TC9M1N8_6Xaf4YvP7mplatU0e1p7UXRG4Ll_zb8y0w0-0vQ_VsKXI5x88ErjcdoclkG6q56uxIi8Ugf8x7Yqurwnw": "/images/stitch/img_287e74cb44d5.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuD-Yhetg9A4FIOwDkXLv7KfpIe80HTcseDfxs8niYyUYmQSN2vRGPl77IxiiOPXRJ2YnS7JFnQ4qx5HU6CKN5Naln2ZzcwIMbomkXVkC-IIT4riVNp9t2fskm0b-Z8Yu2Iy3ZG9ULonihQFP0q-UJL9iAV6jRii66EljTUbUUNKHjFCrO7sZAvrThtPth07dAqO3ZWiatubz5A9xd4ndARpZhDDT-UQ-R3oD3-ufeQN8nZqTVSe33rJgrZqe3Wsiuo_msM": "/images/stitch/img_43127add3722.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuD1EDWmP1pLs_VXSD5zDQ7fK7PUt0I6QsfB0FCvnWi5FIXooJN5bTPXS-BJ2LYIFMgJQ_FSmO_quTKZmiTbXolI7qaaguwn5ixD2MPNm2yhzxcakFuglJZEefuCG-m2EgV1THbR3e7tsO1_7wUY8QzDtsfWjO9uk3TFaRZNhS58jHeIkjE54IbueoIYc1t6ZhAp2nYASPcLUhZ54ifCKgWNByJ_dp9x6NlBb_CjbkT5URfQPDNXbamxcA": "/images/stitch/img_05aed8fd374b.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuD1QBzvvUhzz-c1Cp3tbF20zcCIttPqUu41vJv86Bc2Atu0s0hHdjgsF-01Het4pjT5iv7BNQGS5U_-1P7tTEBZMqWf7dgvPWiTFlDUWZ0Klt3sEgVwqV05P85yaqsyg9z2POtzDAEZbSLd4hL-BeoftTwuSGMqmc05lbmXIcax-_BDpY-3QsE63_Hg72tBQadyCiF6FVd7eXreoWULzoUV3gBgHu9f3NlFT4flO9JXcGY2c7IGhkpX3Kb-j05wPFHLveQ": "/images/stitch/img_3d25f971daf6.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuD3VG70tNJ3k3HS8Jc9FX0ICsSqXI4zHRo0HVyz4yRD311NmDgZcPBsYCdMXTz__gL02vUAdYfac8Fql2i8zX-6vgw-SfMdj68fHP4Dxop4MshGqDUu20r-0y9wt3h9m1Ptcx68HiQItTpjLlWdWOzd4w-upjp6-oeYAO3pT80HtIVD8j9s7WcIMJG4wnmerzYRKfDqakraWp6DVacMVuK_Y3D6MGOk7w2t9WFsaI1Dc1bl_DQ-g8nvEQ": "/images/stitch/img_b1949065a601.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuD9f5WyJvsroIufQ6_FjUZIKsSs9lh3bjV4QpYJV4dqsCwYlwH9lqVJscow5reqJc07je4sVBeeUWL3ECj8hiBhdZqF9zE_5jfvpG-zToo1RksWLCi1S2NnUIkySGa52YjOxBxPsueOKOrz4ffRGw3z-SJVYIrZfhJxkF_a2gZuLjl573RIEqGksMG6FsRVPaaH4CWX8Je6ZhwTCgm61m-mT4JszRqs0QKIjc6PFv7Rd4pmdAWnd8P8K7a_A0rDAX_pdvY": "/images/stitch/img_55c0057de84e.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDGZcp2HCKyVabtyeDKIOivZZxNhIKn3Pfwzf3ikrHwRqJuQt0vVg43NxAp-kCa78ZUuhjbP1kLw1MmvoNnEquH2HL-neKTSK0g-mSVecWheeWvtDTEA0ajW-foZYs3JElgdZ4nRO1ZaleGeEh2eytqk--Begep7t-dBhObELmEEe3kz8jJI5Cxg_36xXEcdvrN5PwMPiuQlFH6GA-8kCCRcR_FwWF2qXy_VjsaqplpjLA--1Kt7suJziTrimfHjA6WIxg": "/images/stitch/img_a5b150b331fe.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDMewO021h3okswDWMN2yuHQeWv8NHZ07Qnh4NZaGyxfduMXtXaDqaL9uUoIcyQb6Ve9aCrbQvTJG9ZHvrY80PtcRd_qXjrD6tMHnp7rMVi1AQbKudKrTQAw7mskrd-78pM-sjvwf3soUWkBiwcwd4f9SY-yhDeAY6FrhbL2lemLuiIikpHstrMF9fSWXwPBGXxkeKQV0CGyESpxXDF39SHwYR6LZaIjr9tkUyhYM_xyjCVjpiMPV-iQTcvo_rxjbDYmoY": "/images/stitch/img_5b95c45a35cf.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDSDadkM2VdhJp7PhbVsqYhCqtka8GKUnqonpEOJ071uhzEhbz0zgjAsB7dFzVAafCEkybfwjtYdn7MAhXVBPir12FFJ4CL8_Qa5IKTpOaQ-VpD2qr_i44MAmLMweqXGBB7HUzqPd4vykJsSRY3KrbT6fu-iWqwmgbyM8W4GzJFoeDzZkheE8EIaZWGg-RkSkZD5DwOD1t1pW7e3ddAYsOpt1-pymxWrDXuwuCgfNiSAE9XETAJeL0BFQ": "/images/stitch/img_f1c861d85d30.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDXwRciC1XRpMhKHn47QHAQypqXqrhAQvQYb32Pn0cYVKENE0_Wy8Gc-J_1X1LfMMGcRBXI9sGbUVt1KKKqgOyfE2xpm2BGsZuTnt6fEIjOxQHIzhzm3-CrniyDA8MNGTNqXdZTq64AoJtnIoG7J-g6LfAjkTMmFoWpkxDCYRj5jGNEPXQ_KJMNha3bGP64uRKiu1WYoYDKkLbfdehv5BrwArlCk4fl4rfRqpyARqHd9KwgEnO87-AruA": "/images/stitch/img_e42d9e9bf78f.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDaHAEMsNQHXTPB8UaVMZde-VTuDX4PNHOfQ0Frui11ti6wha7Ax9Qt33P46THoEETBjkGl2AmsO5uE8dvS6YvtYhiS07eIHSCTSADDfvClMMjp8guk-DEk4UFpQk1YVCr3ImHdJiITe33KwG3WgRzKq5_kiqLW9LIoGFPnHyEpYVwVRtIQ8Gn4VqGD76LBWxSVffx2rmLlXC13G1VpL_rkUjcY_mX0viQl0Tx2jZFL2sFDlg0AFc4Udw": "/images/stitch/img_f74d269de418.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDnjK6DjT_wY7NvOCUfzL-mWcHkC-izp-0JMgM_VYiMu22XMoeAHZZRJXjlk4C6QeVR7_LT5UrLIx-D9YU2tHwVqqPy1dHE4WFptxj3scy2S8Vk4Z1OdpKzPO2Qi29SYhZ7EDXYD9qfdh54Eu3fSn4UAa6pAEpeVAbu-lTMojgDBgLyqTTD2Wj3nRiX0tkqdJq5Hf7G5h2qxt893JEdKYcI_5aRDujxfzcstC-oVhmxcCCsDHYmytLZAQ": "/images/stitch/img_a322cb64c837.png", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDwfYp_4uI8ZlOprJCdewpEY8issKAqIdKFIiwP13G6zLthP9FmrvCVhP54NNwsOoL_IZ2Xq1t3B3moIkR3C5ksGs-srGQd6GfYbKIe02mMkAPkM1YyYT9x7LJQuxFshYAcELCB5C1bW1n2DCIhr0q0AuhYuSyHWK0sZ2_3-qEquwpeiaBUXYWoqmXxnHuKpYoVOAyCR7xcXn00S0fC40qlPAAJN-3VbtjjAz_dQEuW0YDZxVWZMAwDhlWDygxfoWI4trc": "/images/stitch/img_a873b2a3c1fd.png", + "https://lh3.googleusercontent.com/aida/AEtjO1U3H6k2f-mrg_dGAWPNBz9V4PZlIovXCPcBUaJBDfu7q2b0lU7Ts86dWJhsc08Qph7bGJ3chpNDYjEu8th7KMI5qqemYa4u7MixLdZKaUNFLNw_DwouWvy5Jzx0snsyQT657NGvVeQqjWGLvDC4ZHe3xk3QcCa2o3Gv318l-Rov5tty9cesDJTURMiBQgF7nHmdMsbLy-IYjD_UOW0ZUvbhM4PUIwaCRNo000Z-D313FaQC7Ir0sveO8K7E": "/images/stitch/img_c5f13faac91a.png", + "https://lh3.googleusercontent.com/aida/AEtjO1U7pfgMTsS8Tp1SLwW1-AnnuBMWJQdOTg2I8hN5rifgIjSJdDMGwUKuHUksgQ4VZ0iXE2N78TZW6gVaYyCvya0qR31zptRMOG8sywp-y3JHImcZ1JiWdzAelpCuhql-9rWFGOLOiLLh6f7HAppJgVl6_ZBx79yORi0BlmoGEYsDoHm_gB0qerMp-p9YzAY2icht5Jol1Lalf-GT-8c-C4Naht8Rjr2fM8gFWz-rDjJSMj2e8kjeQFqPGcUS": "/images/stitch/img_3c97fd45eead.png", + "https://lh3.googleusercontent.com/aida/AEtjO1UOrz_DLAzA1wa--McVBiQfvfzonnyeMxgYluNqrMU2Rtod7yPGZgE4N4-BxCXLIrppafLr98IMEQnkMl9reaMoVSYW_cLfUFY89ewB_cc4VTGtf8FywPCrzHToX59Dp0dlsgZn4ouUBNPpWJvaxXEH_YhPnChyAG0aapom_yBnKbZTeDwkTF6HTr0WeJM2-AFWSgo4F-QnrDAxAI43NGRovv2H3pdSgdqE9xvxJ2Qus794XIjbwvXjHFg": "/images/stitch/img_03b5a0bdb596.png", + "https://lh3.googleusercontent.com/aida/AEtjO1UPAO8PxIjNTYVqMEf-zNkPcd3jG7zUk39T9J6ukynQ2rND6TyHPsNdUY1mG4CYdizj_3XH7DFIKua2FbGOvi1HIkqFRHJFAqlzHxUBIkkhGlEFcTy2YEr4INWGgR5dyj0ucSN1z9PubLxXZ2TTi0JkEOz4EPFhUsIUlerjnwD4SBMx1CFKtYFPub1dJtjugA9JbT3r_7s310ezVeIFK4JNoRDaiiQSO1au8lhY638Cdh5lL3l3YYYIzUt_": "/images/stitch/img_e7d9a5a40a66.png", + "https://lh3.googleusercontent.com/aida/AEtjO1USkqEV1bpBmw_CDYJGm-dOXZD4UzJHDnPd3mvt0A1F0Mut10RjQ4nXVJahSzeKSEhjUk2CTwdqc_oCqVwqIUrRAdEjGRLk0SxvOkxR4fz67fMXWicezpwyHvLweuMVxmPjhvFhnv2mdGDTxHjQa6EmL9Q12U0spvZzJ1N8oV-15YezbbXxcgyYT2CqPpjon922ZXs4LnslFbzL1xrNEI9RgnjtiC6XkQf0eEyAiajMSl23Lw_LMS1Qb4s": "/images/stitch/img_264a7e0ef5cb.png", + "https://lh3.googleusercontent.com/aida/AEtjO1UVInXENvvdXOlcIHvt0IViqzUI7-1jn8yE2pjDUwUGbqBgJ9jW_oGljC44F18mW2QvMZVXB3pVTHLH93B9ImkNtb_uwZLs4tmf60NQ-izPs0g2ZQ3jcSQA4eyz3G8yd0cDB9wSA1tiiYt1_oUyF-dUxR5LbAVRhT0xhzLPcaYj8CaA1b8cRi7de7ibSF48SdpSCt_MVBkmj60DdGXaMfoNFtMlk-zPOE8sVnkqk921EuNK5K1e3Q45xFAJ": "/images/stitch/img_54885986efaa.png", + "https://lh3.googleusercontent.com/aida/AEtjO1UfoegmfY7xFt5sH8IvJvoXV_mSOFjRI7h9ifjEn_QjRMz6q8I9lxQdlDCfhryC7R9tPDuDFBOjAMPlPA0CR2uoLmjh2PybRLVAhgfnWxxC8QFrVSzjfA1LM9xQQxX3ZFSJv-Cvt8BvYhyecZRWnRnqHzdlk3gbFjH6yeLiMS49fPsGdEXx90CFkMDE7NPxYYN1KCMm3Rk8Gyk_AgMa4naaUylXuCJFV8ukmtr-j-6LbXzKanspdNBM-Jhm": "/images/stitch/img_938b845859af.png", + "https://lh3.googleusercontent.com/aida/AEtjO1Us4i59cPvUfB_43-qA8mq_i97_DVXdhZdWKS0g-JnEpzX0sxmgko8qmBFoj3IdtIglYUFKpkVYmMGfqE0-fMB11KfLvIYNrf5X97MxaEK2Pt9yIuNyS-Q9Dvsdu12klL4NAmBEevkaerbl0_eFgBYhzNIbwulEkg6GzeUt248pqyoDuAjp4zI6eqeXRAs9Pc0CwapdYLcrqQFutcskynxczbBEBTx6H9UqMFvUwccSXAJ3BU_HPw9UhziI": "/images/stitch/img_ebaa2e8703fd.png", + "https://lh3.googleusercontent.com/aida/AEtjO1VNBxUwyG_5nuv2R43EaNNkCIy97WPvfeWr52XQFEbM4654gmi_L8o2sYtkFXtdpCTkzTHi0BGR9KVaWQK9TT2RgLhDOjMxDHzDEvXhbFnlNOsi021aeQahAjztn10XqGlAzX8AlMPxS_qghA5poIb05LQyxicb-pBLU1XQgdtO7irfo3uyjFb6LWR8dBAw8d0cO5t26NJ3Eru8cv6F0QvxJyaymAIiFSUJuIeAs1q7NsLwyKtytwJjpRxc": "/images/stitch/img_b1c559398083.png", + "https://lh3.googleusercontent.com/aida/AEtjO1VRFbmZFz5inU4Dkq7mHWoDZ-jdPBlM4t1DiWUXyYfLBlCmStyXzMIafztiyMPLFiW-OXkyFSZx2RtgjOrRd22NcgrMy1MWN-cR1nZPFJV_tSRIPQ1SjLbMTdUz1BQfstKomcuectFbh_VGpVLuEBDioBzQw2C7feRHLKSRLNhx0fKKJHZaWZHBzxNGRDC17j2ZBu0NS9V8ZJa3d9XZuWgfoigAVQVMd4-EpfgmwtM5fdJdJR6wjnc11RK2": "/images/stitch/img_6f761c98abdc.png", + "https://lh3.googleusercontent.com/aida/AEtjO1VRLS6v3mJsb0KJtP7YIi04XkrTCYX4Osjwsy_7CCdzcmh3U2OXvJhmRiFtANEIdEej5klPGQwVxrgvBQDT7C6woUwKtITaAIO9IxNULwjEM3h5pLVQTbr4mrn2sW_Q4rN-PFfS48TrshMiBXVYiw0CxgrcRcV_PyhXBTkHVjy4vN5t8iWYaWdJMixP2CWXzPfDqGEAXALawsxOvnygpFwqq9enL3ob_wOorUfNMkSeXo2tQvIQCOrN2H5e": "/images/stitch/img_52e6fd075744.png", + "https://lh3.googleusercontent.com/aida/AEtjO1Va9Xh5zQu7gBGylnB9w5XLkEdVcPdmCP2yt_OjW5LnOsJ8Fnosi09FB1IEnIpJWDDd8g4P-6x-S-4mv2N7b7Fx5phoYayI2kYAo6uWE4VDARJp_UHZqJGH9MqMsYr3CsYCT81CpbthO0UrgZRGbEWv2uj74x0y1n9t-3Vtf9HqQ_ykT5N2F0T7a9IT8WCkrVhQ3xRbuGfdvhL1szf2uKy2dZWSqPG7c3FGP95o2-BHOoNwEyA5XgsaUtI": "/images/stitch/img_932b8c0608bf.png", + "https://lh3.googleusercontent.com/aida/AEtjO1ViKRIFHGoqMqsSxaF0Nhb835Mu5_wle-yZBGw9bNLj0KTGs2Qt52x9kSweU2mZ7d2wVabCBbnw6lA66LVRKUbzpXWe1knUNrOSlYWTUwiRlea5-gOTzPqUUHUTOfTQUqZqbuDnUAT8rJJFSbqQC-NYJ2viy22v8CM__KLZ8Y3OI8WdbSnXNmac5gjJeb4giiSpW1Z58SI8uXAWmH1G1uPXVDJPkwZMhXj82O4cZaFzAdYMbB6M4yn6dDNY": "/images/stitch/img_ab77ee8fa815.png", + "https://lh3.googleusercontent.com/aida/AEtjO1VjXSfUx0m9YVZchboY0ty2-MStjIUy2sFQtNna4RFiWeBszWa-gljEgMmhTN22UcGOp0Kl2-VRpZV0-m-zeGYaLlz1xKYBABb3KZWbGYSMf2PB1qUyH8hsxLo0mZ-NKhxFuiAeMuizeAtWLLV570yis0kju9HmMJMwy3w9aiWQJaH60BJvj4wZjrqnXqPJH5hRjSOoGFgCYajeUrjnlCRgTQaiHHuPcb1HeOlA3C-puk0rfTVLgacAUmrA": "/images/stitch/img_3b3a571f5765.png", + "https://lh3.googleusercontent.com/aida/AEtjO1W4cLNonISVtv2-fK0I05BGPjr8AyZw54PpV3XmfwVHajwcz5cayJ93oWXtcAqdalY_vJinCui74wOJODZLq_onRyPuEQsdet9hJdFzXpfLKye-doNycw0qfRXkq6rCwCvxeCyiL-NKNmVD04z_aM_zadC9NbnU2HOwxpf7pAvZSbuiac3MVeLLoPbUPr3ZdDUFX8ZzKc2rmi0M3Olgurth3mqyqFv1yWOfUJRc4gyIYRzoTFrh185rZXrW": "/images/stitch/img_7dabd052d9a2.png", + "https://lh3.googleusercontent.com/aida/AEtjO1W4dWp7DigIZ4HIHIiZF23gEe3Bp0QuItGO6-mQ3c0K0twdB3rY3-EEa_DuLCh56DCXFNiaIWFWF5g08vGrlWbGDBOGflDIVM92Vd0Uzq_wicDO8kfbwCeLzNrPAfk56aOb4Q1k7FrEyCHqFs8vUwPg5vgQjtOVx6C8QxjQWxENesdbVl5yLfZZ0w47GqC-6-rR7zJkxqe1WZer1oAiqifVtUf99Qeo-jNqWRCVqqak57pWpd_HgBmvgeDT": "/images/stitch/img_f419dd056adb.png", + "https://lh3.googleusercontent.com/aida/AEtjO1W8gc57Gsj3g1uiLJfv5qmSaiKkrpPYnHWNAWlRekroZI92hxTPvgqsCijtENb0tBi6sdpMofYngiJC3Hh3Q4Fpx4QeNq65x3VrwiNEwjezcn3IamxPcVfcruwBfSMSZLgVJqCdvVswOV8KzzMe2QX_d5o29pq0LmScXfnFRCbYcWntILGWyCmWlT-rh87aLYUm5gpQei_wPsUle6qF8pPsLLJ3tcjJSvxLOIM2P_nODUYenoFsbvCYFk8H": "/images/stitch/img_29e9ff0ae66a.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WCBEa67jjZo4rgrYhPsgAnGo24gN_q2atF6reF8Fg1iue27pmxsVz68u1alcOZgskFASZv6kY6jsfuCUeUOjNgF_Y_THW4DvgdbSrkjtqdpBg-KJyErk8r5cJO1kkS5rmub-RftJycf5KSq7MoaPb-1273WhiEyzfWzQx1BmQhHsEjPHNgiswWFR4A36zDp8Waeuwf51mwJ7ZbSCkIwHidlylynESLsIYXxTAulRaJ4_XALOjygXGjc5ms": "/images/stitch/img_d5066e945c17.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WEK0eMvMklTcz9QKq47v4gVW3mtRdVyDBegL6L49qkwFYKHRG598srQVeJD0q8Ih3e9Zu2-beprICszveys9ssD_hRLaDyT4i6fllXUiV2Us3To-k32yea-pufgncXMk8e5_5YSU7wpar54dZ4M1Its82JCU4U5d8_7uFgiC-k0as8W8_GWVCLMO2wDQ0R87ZU-sz9pE5eE2iilcaF8wTdSDDiK_QjxRAjgURYQBbVVDV_cNx7tWiWoU3S5H9NR63vLCpHFh2B-MI": "/images/stitch/img_67fa6f12510f.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WFzFE9Vn3tlYY8_8qsocvdzATsNpYOXU-CYnshIUZY_URXBTK7IuzgSAl5no9kZhQzWdpYH8NuqQLqvD911VGMQ5OlXHTPk7YdzHbBSwXx4prFdqPQmY31-4jS_GciVtxiya_mfjg7iGx0RP6nXbGe7H45d_5fWbclQ7g73329U8gGw8omzNtRRTPfHxlE7d5xA20lSuoafHdSWT-ZVLofpg-It401kU_Va00Uat97mRd8VGlN_k2QsQqP": "/images/stitch/img_df06793004ab.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WOWKYx8X9DkGTIqfN0fHKFs0uEFlZAIUdAT2qBiZcrWXmwIuXDQCscmiKDwrBrY7-q2tOU533gEKYLKZnecBiovxy4lS-y4fWghm2Xb8ZZoEV0w_HTe5m4ZUQ2byhHnIpNgwOXQtPgQCrRaNF-jWcQj7eztMcM_9ppxVrojKqG9hdeRrVAxxc7tP4oKs1vaihhgIzHIRJVc-F81xZxmVI17ks6-CYewt_gUzkdcxHD1ZOG5NpHOtitTtdk": "/images/stitch/img_2f12dd688766.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WPVdOk5X6Avw5GWPdG78wF_t4EcOUxG3KQmbW7BvS0YDPBqisJQHmxi3n68wULi5OQI-NeMBYzSn8BqqRnp9wUhRO-DP1UTPZd3y3Y_F5YsiWbrC1CqNxrRxUKndZmcamGHvx0Ma7HR_19IJzDfu20NxQTtaxIEZeCDuVnEubgef0JIXvzPBqmVac0b3VQwTMCL1y4C-S3Z6TIbdovLSO-ZcVnsiSU9xwB29OY__3GhugzWm_p6FPBhTY": "/images/stitch/img_04301dd3a6d8.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WPtqPD3iyVFInZwYhuPSi-_iS1At8lk7gLqbYLADwdSktW7ZG6Z4B23pCipO8jcgCxo5iTo1fZQbY5meWybaRC0CdhOikuRe4BHe9N6qNuj2M4FxLAzdki0aJhi2yDMW20A7fzZpNnvz9YErKPiM3TDV8CGxQxYHyuAptuxV1XYEOqiQEXwC02SzD5QZMDNmqI2OwCVUgkb0V1gLWHfXhRHCoUR_Fvrjj_sVjDs0vj5MUXpJf5B4U2GBM": "/images/stitch/img_451b5aaa82d4.png", + "https://lh3.googleusercontent.com/aida/AEtjO1Wk4MvBn3siWVQawUVSLmPWauSTu1Od3PALvax6BeP6zkzlpl2bIePB7lUjLiPp3bmzfscl-T5bfwQ2oZ36vE-CmIL-VBEf15GCvO40T4uCfS_DfTgckaJo39JWzTVF-sTGCDAPEDoBVfucBRoSjF-fWfpZwis8dMnwidDxKeeyhoMdkb7-_QsbAko46hOeCxiGMH-g1m_089AaPyH6pRiMUYvoWyUk7klWFu7ldcg9ZCzBDM6B-qmsutqPNZpRVyo6dMRY3FUtn_E": "/images/stitch/img_9c6d47f965bc.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WmmVY7hfwiKaIXrgjcygfXENcjuI_05yBay2xqX3ARiHD-xCqmDTIEjqH2NklLjYPEwufro-HezbjGSIBE8eXu2QhGYSztDIHgFA3B4kbOoy0WKjcxXGOb6-1IK4HxvuSBz1SkJYYXPhDZaBqPz9l7vdfIGaCHjugUol3fRbxFZZXzlRAAhV-ZrxUAEaK-SWFKC9fhoSf5qXHCsKiF79K3BywArI19--FYy457tk5omxc6x2H4zFyPYdU": "/images/stitch/img_6edc46b9defa.png", + "https://lh3.googleusercontent.com/aida/AEtjO1WuuJqYwj1l3iJzxKdGwg4xQ5ImcdtFtV0pkoGE_lOnQXp7WOXLsBbxy6u8b61uA6qnG5uYOciKDHhZADvskAJonp-0GzVPk3d-hpiG9qTqjZEqhFhArPYmDUDd6JkWit8cVjKZ7UnLNHGMQhpmnIKBgzKCEWpSFeDDbu-_BkQHfkpRZnIKXdmyO0TDkelzX5ijlF59Xb_6CXkde3GcKCpvmr1WWkoew3MeRtvf2iIF1R0qughCHmwC4IA": "/images/stitch/img_b0117f252218.png", + "https://lh3.googleusercontent.com/aida/AEtjO1XEBJpL5nlq3TaIxP2-fpqIxK6NcvSdohg9d8nlqfVgcgTHfw9v-00gTZVjY9MFTSeCyBiXlGBmZYQb8qKTMrqaZTr6ZZGUlXFt7P82SSQ3S0_cRqqV-eq-ycF7AeQ-4iLaioMk-96pe1owhs-CiL0vNuZxlPpYojAZDpN_SecB2wIIIpJucdz1MkzEP4eOtrNCxysbZgMS3CjxNVA-eurtdTCWtL1gksTJwTHRH4lSFUYxhzkeh5AS4K7V": "/images/stitch/img_0a9d40298a52.png", + "https://lh3.googleusercontent.com/aida/AEtjO1XFDXklkNFIvFYUcOZxh_GBrKP6yPxfSkGPwMn7Z7nFcFNrYX3U72dMqtZo8nxqgUGLs7OK32RFlR_jF4Ru9RqQkfldZlswjHyJNV-egrKBu_zhpIM0Q4-Z22u009Acuy5YSVRBJuM35Bbs1uxvpHcmZ5V7zphMwfvYBvMYByuLD6pdgHN_tRqohT85zsWIRXaa6kGV6rzqVxzvXlhf0oSJMKZLodmR0jpPdF-zxladdNGbxfFXfwqHv1Mj": "/images/stitch/img_3954a805f916.png", + "https://lh3.googleusercontent.com/aida/AEtjO1X_fafXgbE4bmyEEHdrSbTcSwOcSyveMdZXMk9YHFqksS2YHWC8t1kbHLgS_vPupjLU0HD9z4tHoWrhcC2Av3eLZ71qGzhopQrsr-3qF1eH8XoFsKRGh14xBtWX8jyfS6NCyxFWKp19Zf3_Zu_x9PGy3V852mcoLbmJAbKCocAE16okryjAybCSBprCqjMTnWfaKo7jqCZsczZPJ6fnn6zH-v3YP91ZdVHZkcH6cp9t7DBR2wvPztvsXbIO": "/images/stitch/img_366351cfc49e.png", + "https://lh3.googleusercontent.com/aida/AEtjO1XgITep_68EK-h57l_AK4fsXilYamv2wK2m462smqR95dwL2ick1kqLotVJqOWtq6lO2Q3whycVNbIKRhmWEYk9qgq8b1KHDElZHwbJEm_lDrq9jiaW3j6Vh1vHGikKRMtOCZ4ZyBAksE2_5MCWfO6rY1njWuVeiZBdw-s6pt7Bz2m3oBW-fqJSjpa_dtHiiRQ1ACO-rklXx-dfaJ913WryJscp_aIECQHtzWR3oOojvmxnPl96JhX1D3jN": "/images/stitch/img_37d955bdd47b.png", + "https://lh3.googleusercontent.com/aida/AEtjO1XkiDY1BQ5HxTr1KLhikOBK2Xow23wwj_nTwvovcJ2JofyvPOAIXVc6S89_k7zgrrXvvZIH1y8dMjUA-HbW7KEQ_49YxaIWjIPnvemiKguA3sTCI38gDXavg1MoxQbLvP9IOp_v5FPF84Pq8vkHCfLzg4HEjrQzjq3Z4qMMZvmo11vT9shTPikb15Q8vq_YP6yI-e5y4YEDqYK9CqjiLD6ASA6-_tUhSiywPzQws5ecARNxeHBQCHi0_fk": "/images/stitch/img_782daacb30d1.png", + "https://lh3.googleusercontent.com/aida/AEtjO1Xt2Qax6pmCaYCnOHukjQf4RPS8VnZRi2fK3FL2EbTWdqeHPyt-Uw3nSHmoqELaNlz0DLWnhzcT2sZg67G87PSoIkwLdL9U5WVdgKYV59N1pGBQP44SpHWr-L6OSwDGDS_hUVeLT_x7-mfDGCfjeXLNisqjyTXuiS1JVRWQX3hUQirsI0z4zMRAk-mDXw2dDD4cqB7MdiE2P_SUG7bWdr5XtTpmpOuRPtyMYNpIcoI32N7SjNC5aYXd24E": "/images/stitch/img_1428439f1445.png", + "https://lh3.googleusercontent.com/aida/AEtjO1XvO_s_Qd5f85kHINqFoyjmSiLE2V08gVCTS61D4pj7X_O0AYPKxBP6CtqrcpSUDsoYxMmXWlGs6YfCO2Ugruqu1iQ7DFMvi5vEGG81sT7t_Iwzh3YCqrRANOfPiqmmbAeB-z1YyqM9-YhyFhxifFrI0RcHiQl8KSib8fCQUzasfMVZZXaf9457PpVOA6ZNyLY0mgA_3sgIw0dFbJeLpt5bTTdrBxOUn_o3xU2ohMLh5PyD6aiNm11ZOYFD": "/images/stitch/img_414190e7bc63.png" +} \ No newline at end of file diff --git a/public/images/stitch_screens/image.png_1.png b/public/images/stitch_screens/image.png_1.png new file mode 100644 index 0000000..0a41a02 Binary files /dev/null and b/public/images/stitch_screens/image.png_1.png differ diff --git a/public/images/stitch_screens/image.png_2.png b/public/images/stitch_screens/image.png_2.png new file mode 100644 index 0000000..f481cd9 Binary files /dev/null and b/public/images/stitch_screens/image.png_2.png differ diff --git a/public/images/stitch_screens/tradhox_add_product_step_1_simplified_clean.png b/public/images/stitch_screens/tradhox_add_product_step_1_simplified_clean.png new file mode 100644 index 0000000..b6cb88d Binary files /dev/null and b/public/images/stitch_screens/tradhox_add_product_step_1_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_add_product_step_2_simplified_clean.png b/public/images/stitch_screens/tradhox_add_product_step_2_simplified_clean.png new file mode 100644 index 0000000..910294a Binary files /dev/null and b/public/images/stitch_screens/tradhox_add_product_step_2_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_add_product_step_3_simplified_clean.png b/public/images/stitch_screens/tradhox_add_product_step_3_simplified_clean.png new file mode 100644 index 0000000..792c7d8 Binary files /dev/null and b/public/images/stitch_screens/tradhox_add_product_step_3_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_add_product_step_4_simplified_clean.png b/public/images/stitch_screens/tradhox_add_product_step_4_simplified_clean.png new file mode 100644 index 0000000..241ce44 Binary files /dev/null and b/public/images/stitch_screens/tradhox_add_product_step_4_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_application_submitted_bulma_faithful.png b/public/images/stitch_screens/tradhox_application_submitted_bulma_faithful.png new file mode 100644 index 0000000..2bfca96 Binary files /dev/null and b/public/images/stitch_screens/tradhox_application_submitted_bulma_faithful.png differ diff --git a/public/images/stitch_screens/tradhox_bulk_upload_batch_management_simplified_clean.png b/public/images/stitch_screens/tradhox_bulk_upload_batch_management_simplified_clean.png new file mode 100644 index 0000000..8b3b70d Binary files /dev/null and b/public/images/stitch_screens/tradhox_bulk_upload_batch_management_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_catalog_inventory_template_aligned.png b/public/images/stitch_screens/tradhox_catalog_inventory_template_aligned.png new file mode 100644 index 0000000..34e6a0f Binary files /dev/null and b/public/images/stitch_screens/tradhox_catalog_inventory_template_aligned.png differ diff --git a/public/images/stitch_screens/tradhox_courier_reschedule_simplified_clean.png b/public/images/stitch_screens/tradhox_courier_reschedule_simplified_clean.png new file mode 100644 index 0000000..f27f3b4 Binary files /dev/null and b/public/images/stitch_screens/tradhox_courier_reschedule_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_grow_your_business_clean_complete.png b/public/images/stitch_screens/tradhox_grow_your_business_clean_complete.png new file mode 100644 index 0000000..c08c61a Binary files /dev/null and b/public/images/stitch_screens/tradhox_grow_your_business_clean_complete.png differ diff --git a/public/images/stitch_screens/tradhox_how_it_works_wireframe_faithful.png b/public/images/stitch_screens/tradhox_how_it_works_wireframe_faithful.png new file mode 100644 index 0000000..b47af3c Binary files /dev/null and b/public/images/stitch_screens/tradhox_how_it_works_wireframe_faithful.png differ diff --git a/public/images/stitch_screens/tradhox_mobile_marketplace_landing_page.png b/public/images/stitch_screens/tradhox_mobile_marketplace_landing_page.png new file mode 100644 index 0000000..6bd24f4 Binary files /dev/null and b/public/images/stitch_screens/tradhox_mobile_marketplace_landing_page.png differ diff --git a/public/images/stitch_screens/tradhox_orders_dispatch_simplified_clean.png b/public/images/stitch_screens/tradhox_orders_dispatch_simplified_clean.png new file mode 100644 index 0000000..af47983 Binary files /dev/null and b/public/images/stitch_screens/tradhox_orders_dispatch_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_payouts_finance_simplified_clean.png b/public/images/stitch_screens/tradhox_payouts_finance_simplified_clean.png new file mode 100644 index 0000000..b33436f Binary files /dev/null and b/public/images/stitch_screens/tradhox_payouts_finance_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_pricing_page_wireframe_faithful.png b/public/images/stitch_screens/tradhox_pricing_page_wireframe_faithful.png new file mode 100644 index 0000000..ef96c36 Binary files /dev/null and b/public/images/stitch_screens/tradhox_pricing_page_wireframe_faithful.png differ diff --git a/public/images/stitch_screens/tradhox_print_shipping_label_single_4x6_view.png b/public/images/stitch_screens/tradhox_print_shipping_label_single_4x6_view.png new file mode 100644 index 0000000..0067437 Binary files /dev/null and b/public/images/stitch_screens/tradhox_print_shipping_label_single_4x6_view.png differ diff --git a/public/images/stitch_screens/tradhox_print_shipping_labels.png b/public/images/stitch_screens/tradhox_print_shipping_labels.png new file mode 100644 index 0000000..7030755 Binary files /dev/null and b/public/images/stitch_screens/tradhox_print_shipping_labels.png differ diff --git a/public/images/stitch_screens/tradhox_seller_login_email_password.png b/public/images/stitch_screens/tradhox_seller_login_email_password.png new file mode 100644 index 0000000..8188284 Binary files /dev/null and b/public/images/stitch_screens/tradhox_seller_login_email_password.png differ diff --git a/public/images/stitch_screens/tradhox_seller_supply_inventory_dashboard.png b/public/images/stitch_screens/tradhox_seller_supply_inventory_dashboard.png new file mode 100644 index 0000000..9a58a75 Binary files /dev/null and b/public/images/stitch_screens/tradhox_seller_supply_inventory_dashboard.png differ diff --git a/public/images/stitch_screens/tradhox_settings_bank_settlements_simplified_clean.png b/public/images/stitch_screens/tradhox_settings_bank_settlements_simplified_clean.png new file mode 100644 index 0000000..f7ae605 Binary files /dev/null and b/public/images/stitch_screens/tradhox_settings_bank_settlements_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_settings_change_password.png b/public/images/stitch_screens/tradhox_settings_change_password.png new file mode 100644 index 0000000..4d9bdc2 Binary files /dev/null and b/public/images/stitch_screens/tradhox_settings_change_password.png differ diff --git a/public/images/stitch_screens/tradhox_settings_notifications_alerts_simplified_clean.png b/public/images/stitch_screens/tradhox_settings_notifications_alerts_simplified_clean.png new file mode 100644 index 0000000..ab3b1e9 Binary files /dev/null and b/public/images/stitch_screens/tradhox_settings_notifications_alerts_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_settings_pickup_logistics_simplified_clean.png b/public/images/stitch_screens/tradhox_settings_pickup_logistics_simplified_clean.png new file mode 100644 index 0000000..2ba5a83 Binary files /dev/null and b/public/images/stitch_screens/tradhox_settings_pickup_logistics_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_settings_security_support_simplified_clean.png b/public/images/stitch_screens/tradhox_settings_security_support_simplified_clean.png new file mode 100644 index 0000000..65ba92c Binary files /dev/null and b/public/images/stitch_screens/tradhox_settings_security_support_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_settings_simplified_clean.png b/public/images/stitch_screens/tradhox_settings_simplified_clean.png new file mode 100644 index 0000000..595804d Binary files /dev/null and b/public/images/stitch_screens/tradhox_settings_simplified_clean.png differ diff --git a/public/images/stitch_screens/tradhox_settings_update_bank_details.png b/public/images/stitch_screens/tradhox_settings_update_bank_details.png new file mode 100644 index 0000000..2a358f7 Binary files /dev/null and b/public/images/stitch_screens/tradhox_settings_update_bank_details.png differ diff --git a/public/images/stitch_screens/tradhox_static_marketplace_landing_page.png b/public/images/stitch_screens/tradhox_static_marketplace_landing_page.png new file mode 100644 index 0000000..cda0592 Binary files /dev/null and b/public/images/stitch_screens/tradhox_static_marketplace_landing_page.png differ diff --git a/public/images/stitch_screens/tradhox_step_1_create_your_seller_account.png b/public/images/stitch_screens/tradhox_step_1_create_your_seller_account.png new file mode 100644 index 0000000..5248ed2 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_1_create_your_seller_account.png differ diff --git a/public/images/stitch_screens/tradhox_step_2_business_gst_details.png b/public/images/stitch_screens/tradhox_step_2_business_gst_details.png new file mode 100644 index 0000000..f5ecd73 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_2_business_gst_details.png differ diff --git a/public/images/stitch_screens/tradhox_step_2_get_your_enrolment_id_no_gstin_options.png b/public/images/stitch_screens/tradhox_step_2_get_your_enrolment_id_no_gstin_options.png new file mode 100644 index 0000000..04118c2 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_2_get_your_enrolment_id_no_gstin_options.png differ diff --git a/public/images/stitch_screens/tradhox_step_3_pickup_address_responsive_aligned.png b/public/images/stitch_screens/tradhox_step_3_pickup_address_responsive_aligned.png new file mode 100644 index 0000000..666e248 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_3_pickup_address_responsive_aligned.png differ diff --git a/public/images/stitch_screens/tradhox_step_4_bank_details_responsive_aligned.png b/public/images/stitch_screens/tradhox_step_4_bank_details_responsive_aligned.png new file mode 100644 index 0000000..81c0047 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_4_bank_details_responsive_aligned.png differ diff --git a/public/images/stitch_screens/tradhox_step_5_categories_responsive_aligned.png b/public/images/stitch_screens/tradhox_step_5_categories_responsive_aligned.png new file mode 100644 index 0000000..0f092c6 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_5_categories_responsive_aligned.png differ diff --git a/public/images/stitch_screens/tradhox_step_6_products.png b/public/images/stitch_screens/tradhox_step_6_products.png new file mode 100644 index 0000000..3a7c340 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_6_products.png differ diff --git a/public/images/stitch_screens/tradhox_step_7_store_profile_responsive_aligned.png b/public/images/stitch_screens/tradhox_step_7_store_profile_responsive_aligned.png new file mode 100644 index 0000000..df3bb51 Binary files /dev/null and b/public/images/stitch_screens/tradhox_step_7_store_profile_responsive_aligned.png differ diff --git a/public/images/stitch_screens/tradhox_storefront_profile_simplified_clean.png b/public/images/stitch_screens/tradhox_storefront_profile_simplified_clean.png new file mode 100644 index 0000000..b57aa50 Binary files /dev/null and b/public/images/stitch_screens/tradhox_storefront_profile_simplified_clean.png differ diff --git a/public/images/tradhox-app-icon.png b/public/images/tradhox-app-icon.png new file mode 100644 index 0000000..24a49e8 Binary files /dev/null and b/public/images/tradhox-app-icon.png differ diff --git a/public/kanchipuram_silk.jpg b/public/kanchipuram_silk.jpg new file mode 100644 index 0000000..60545de Binary files /dev/null and b/public/kanchipuram_silk.jpg differ diff --git a/public/terracotta_vases.jpg b/public/terracotta_vases.jpg new file mode 100644 index 0000000..e920cc9 Binary files /dev/null and b/public/terracotta_vases.jpg differ diff --git a/public/wooden_carving.jpg b/public/wooden_carving.jpg new file mode 100644 index 0000000..30ba81b Binary files /dev/null and b/public/wooden_carving.jpg differ diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..e110e81 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; +import { SellerProvider } from './context/SellerContext'; + +// Layouts +import { PublicLayout } from './components/layout/PublicLayout'; +import { DashboardLayout } from './components/layout/DashboardLayout'; + +// Public Pages +import { LandingPage } from './pages/LandingPage'; +import { HowItWorksPage } from './pages/HowItWorksPage'; +import { PricingPage } from './pages/PricingPage'; +import { GrowBusinessPage } from './pages/GrowBusinessPage'; +import { LoginPage } from './pages/LoginPage'; +import { OnboardingPage } from './pages/OnboardingPage'; + +// Authenticated Seller Central Pages +import { OverviewPage } from './pages/dashboard/OverviewPage'; +import { InventoryPage } from './pages/dashboard/InventoryPage'; +import { BulkUploadPage } from './pages/dashboard/BulkUploadPage'; +import { AddProductPage } from './pages/dashboard/AddProductPage'; +import { OrdersPage } from './pages/dashboard/OrdersPage'; +import { PayoutsPage } from './pages/dashboard/PayoutsPage'; +import { StorefrontPage } from './pages/dashboard/StorefrontPage'; +import { SettingsPage } from './pages/dashboard/SettingsPage'; + +export const App: React.FC = () => { + return ( + + + + {/* Public Marketing & Informational Zone */} + }> + } /> + } /> + } /> + } /> + } /> + } /> + + + {/* Authenticated Seller Central Portal */} + }> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + {/* Catch-all fallback */} + } /> + + + + ); +}; + +export default App; diff --git a/src/components/layout/DashboardLayout.tsx b/src/components/layout/DashboardLayout.tsx new file mode 100644 index 0000000..1b3c740 --- /dev/null +++ b/src/components/layout/DashboardLayout.tsx @@ -0,0 +1,206 @@ +import React, { useState } from 'react'; +import { Link, Outlet, useLocation, useNavigate } from 'react-router-dom'; +import { useSeller } from '../../context/SellerContext'; +import { + LayoutDashboard, + Package, + UploadCloud, + PlusCircle, + ShoppingBag, + Banknote, + Store, + Settings, + LogOut, + Menu, + X, + Bell, + Search, + ExternalLink +} from 'lucide-react'; + +export const DashboardLayout: React.FC = () => { + const [sidebarOpen, setSidebarOpen] = useState(false); + const location = useLocation(); + const navigate = useNavigate(); + const { user, logout } = useSeller(); + + const navItems = [ + { name: 'Dashboard Overview', path: '/dashboard', icon: }, + { name: 'Catalog & Inventory', path: '/dashboard/inventory', icon: }, + { name: 'Bulk Upload', path: '/dashboard/inventory/bulk', icon: }, + { name: 'Add New Craft', path: '/dashboard/products/add', icon: }, + { name: 'Orders & Dispatch', path: '/dashboard/orders', icon: }, + { name: 'Payouts & Finance', path: '/dashboard/payouts', icon: }, + { name: 'Storefront Profile', path: '/dashboard/storefront', icon: }, + { name: 'Settings Hub', path: '/dashboard/settings', icon: }, + ]; + + const handleLogout = () => { + logout(); + navigate('/login'); + }; + + return ( +
+ {/* Top Header Bar */} +
+
+
+ + + + TRADHOX + TRADHOX + SELLER CENTRAL + +
+ +
+ + + Add Craft Item + + + + View Marketplace + + + +
+ + +
+ + {/* User Profile Pill */} +
+ {user?.name { + (e.target as HTMLImageElement).src = '/images/avatars/artisan-1.jpg'; + }} + /> +
+
{user?.storeName || 'Artisan Guild'}
+
Verified Master Seller
+
+ +
+
+
+
+ + {/* Body Area with Sidebar and Main View */} +
+ {/* Responsive Sidebar */} + + + {/* Backdrop overlay for mobile sidebar */} + {sidebarOpen && ( +
setSidebarOpen(false)} + style={{ + position: 'fixed', + inset: 0, + backgroundColor: 'rgba(0,0,0,0.3)', + zIndex: 15 + }} + className="is-hidden-desktop" + >
+ )} + + {/* Main Content Area */} +
+
+ +
+
+
+ + +
+ ); +}; diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx new file mode 100644 index 0000000..5f4ff6c --- /dev/null +++ b/src/components/layout/Footer.tsx @@ -0,0 +1,93 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +export const Footer: React.FC = () => { + return ( + + ); +}; diff --git a/src/components/layout/Navbar.tsx b/src/components/layout/Navbar.tsx new file mode 100644 index 0000000..b701604 --- /dev/null +++ b/src/components/layout/Navbar.tsx @@ -0,0 +1,114 @@ +import React, { useState } from 'react'; +import { Link, useLocation } from 'react-router-dom'; +import { useSeller } from '../../context/SellerContext'; +import { Menu, X, ArrowRight, UserCheck } from 'lucide-react'; + +export const Navbar: React.FC = () => { + const [isMenuOpen, setIsMenuOpen] = useState(false); + const location = useLocation(); + const { user } = useSeller(); + + const navLinks = [ + { name: 'How it works', path: '/how-it-works' }, + { name: 'Pricing', path: '/pricing' }, + { name: 'Grow your business', path: '/why-sell' }, + ]; + + const closeMenu = () => setIsMenuOpen(false); + + return ( +
+
+
+ {/* Brand Logo */} + +
+ TRADHOX Logo { + // Fallback to text brand badge if image not loaded + (e.target as HTMLElement).style.display = 'none'; + }} + /> + + TRADHOX + + + SELLER CENTRAL + +
+ + + {/* Mobile hamburger button */} + +
+ + {/* Desktop and Mobile Collapsible Menu */} +
+
+ {navLinks.map((link) => ( + + {link.name} + + ))} + + {user && ( + + Seller Dashboard + + )} +
+ +
+
+ {user ? ( + + + {user.storeName} + + ) : ( + + Login + + )} + + + Become a Seller + + +
+
+
+
+
+ ); +}; diff --git a/src/components/layout/PublicLayout.tsx b/src/components/layout/PublicLayout.tsx new file mode 100644 index 0000000..006fdf8 --- /dev/null +++ b/src/components/layout/PublicLayout.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { Outlet } from 'react-router-dom'; +import { Navbar } from './Navbar'; +import { Footer } from './Footer'; + +export const PublicLayout: React.FC = () => { + return ( +
+ +
+ +
+
+
+ ); +}; diff --git a/src/context/SellerContext.tsx b/src/context/SellerContext.tsx new file mode 100644 index 0000000..861bcd9 --- /dev/null +++ b/src/context/SellerContext.tsx @@ -0,0 +1,393 @@ +import React, { createContext, useContext, useState, useEffect } from 'react'; +import { UserProfile, OnboardingData, InventoryItem, OrderItem, PayoutTransaction } from '../types/seller'; + +interface SellerContextType { + // Authentication + user: UserProfile | null; + login: (emailOrPhone: string) => void; + logout: () => void; + + // Onboarding + onboarding: OnboardingData; + updateOnboarding: (data: Partial) => void; + onboardingStep: number; + setOnboardingStep: (step: number) => void; + isApplicationSubmitted: boolean; + applicationReferenceId: string; + submitApplication: () => void; + + // Inventory + inventory: InventoryItem[]; + updateStock: (id: string, newStock: number) => void; + addProduct: (product: Omit) => void; + deleteProduct: (id: string) => void; + + // Orders + orders: OrderItem[]; + updateOrderStatus: (orderId: string, status: OrderItem['status']) => void; + reschedulePickup: (orderId: string, slot: string, reason: string) => void; + + // Payouts + payouts: PayoutTransaction[]; + walletBalance: number; + nextPayoutDate: string; +} + +const defaultOnboarding: OnboardingData = { + fullName: 'Raghavendra Sharma', + email: 'raghavendra.crafts@gmail.com', + phone: '9845012345', + isOtpVerified: true, + taxMode: 'gstin', + gstin: '07AAAAA0000A1Z5', + enrolmentId: '', + legalEntityName: 'Heritage Weaves & Crafts Pvt Ltd', + tradeName: 'Raghavendra Artisan Guild', + exemptionReason: '', + addressLine1: '42, Shilpkala Marg, Sanganer Craft Cluster', + addressLine2: 'Near Old Weaver Colony', + city: 'Jaipur', + state: 'Rajasthan', + pincode: '302029', + isServiceable: true, + accountHolderName: 'Heritage Weaves Crafts', + accountNumber: '50200049281928', + ifscCode: 'HDFC0001234', + bankName: 'HDFC Bank, Sanganer Branch', + isBankVerified: true, + categories: ['Handloom & Textiles', 'Handmade Pottery & Ceramics', 'Brass & Metal Craft'], + sampleProductTitle: 'Traditional Handwoven Kanchipuram Pure Silk Zari Saree', + sampleProductCategory: 'Handloom & Textiles', + samplePrice: 8500, + sampleStock: 15, + sampleImages: ['/kanchipuram_silk.jpg'], + storeName: 'Raghavendra Artisan Guild', + craftLineageYears: 28, + artisanBio: 'Third-generation master weaver preserving timeless pit-loom jacquard techniques passed down through 120 years of family tradition in Kanchipuram and Sanganer.', + workshopLocation: 'Sanganer, Jaipur, Rajasthan', + artisanAvatar: '/images/avatars/artisan-1.jpg' +}; + +const initialInventory: InventoryItem[] = [ + { + id: 'inv-1', + sku: 'TRAD-KAN-001', + title: 'Pure Mulberry Silk Kanchipuram Saree (GI Certified)', + category: 'Handloom & Textiles', + craftTechnique: 'Pit Loom Jacquard Weave', + giTagged: true, + price: 12500, + mrp: 16000, + stock: 14, + status: 'active', + image: '/kanchipuram_silk.jpg', + salesCount: 88 + }, + { + id: 'inv-2', + sku: 'TRAD-TER-042', + title: 'Terracotta Natural Earthen Water Carafe & Goblet Set', + category: 'Pottery & Ceramics', + craftTechnique: 'Hand-thrown Terracotta Burnishing', + giTagged: false, + price: 1850, + mrp: 2400, + stock: 4, + status: 'low_stock', + image: '/terracotta_vases.jpg', + salesCount: 142 + }, + { + id: 'inv-3', + sku: 'TRAD-BRA-108', + title: 'Hand-carved Moradabad Brass Dancing Peacock Diya', + category: 'Brass & Metal Craft', + craftTechnique: 'Lost-wax Brass Casting & Engraving', + giTagged: true, + price: 3450, + mrp: 4500, + stock: 22, + status: 'active', + image: '/brass_figurine.jpg', + salesCount: 64 + }, + { + id: 'inv-4', + sku: 'TRAD-WOO-019', + title: 'Saharanpur Sheesham Wood Carved Keepsake Trunk', + category: 'Woodcraft', + craftTechnique: 'Traditional Jali Carving', + giTagged: false, + price: 4200, + mrp: 5600, + stock: 0, + status: 'out_of_stock', + image: '/wooden_carving.jpg', + salesCount: 39 + } +]; + +const initialOrders: OrderItem[] = [ + { + id: 'ord-101', + orderNumber: 'TRD-2026-9041', + date: '14 Sep 2026, 14:30', + customerName: 'Ananya Deshmukh', + customerCity: 'Mumbai', + customerState: 'Maharashtra', + productTitle: 'Pure Mulberry Silk Kanchipuram Saree (GI Certified)', + quantity: 1, + amount: 12500, + status: 'new', + courierPartner: 'Delhivery Surface', + awbNumber: 'DLV-9823412091', + pickupSlot: 'Tomorrow, 10:00 AM - 01:00 PM' + }, + { + id: 'ord-102', + orderNumber: 'TRD-2026-9038', + date: '14 Sep 2026, 11:15', + customerName: 'Vikramaditya Rao', + customerCity: 'Bengaluru', + customerState: 'Karnataka', + productTitle: 'Hand-carved Moradabad Brass Dancing Peacock Diya', + quantity: 2, + amount: 6900, + status: 'ready_to_ship', + courierPartner: 'BlueDart Express', + awbNumber: 'BDT-5519283741', + pickupSlot: 'Today, 03:00 PM - 06:00 PM' + }, + { + id: 'ord-103', + orderNumber: 'TRD-2026-8994', + date: '13 Sep 2026, 18:45', + customerName: 'Meenakshi Iyer', + customerCity: 'Chennai', + customerState: 'Tamil Nadu', + productTitle: 'Terracotta Natural Earthen Water Carafe Set', + quantity: 1, + amount: 1850, + status: 'dispatched', + courierPartner: 'Ekart Logistics', + awbNumber: 'EKT-4491029384', + deliveryDate: '16 Sep 2026' + }, + { + id: 'ord-104', + orderNumber: 'TRD-2026-8871', + date: '11 Sep 2026, 09:20', + customerName: 'Rajesh Mukherjee', + customerCity: 'Kolkata', + customerState: 'West Bengal', + productTitle: 'Hand-carved Moradabad Brass Dancing Peacock Diya', + quantity: 1, + amount: 3450, + status: 'delivered', + courierPartner: 'Delhivery Express', + awbNumber: 'DLV-8719283019', + deliveryDate: '13 Sep 2026' + } +]; + +const initialPayouts: PayoutTransaction[] = [ + { + id: 'pay-001', + payoutDate: '12 Sep 2026', + referenceId: 'UTR-HDFC-9918230192', + orderCount: 14, + grossAmount: 48600, + deductions: { + commission: 2430, // 5% + tds: 486, // 1% + tcs: 486, // 1% + shipping: 3200 + }, + netSettlement: 41998, + status: 'settled', + bankAccountLast4: '1928' + }, + { + id: 'pay-002', + payoutDate: '05 Sep 2026', + referenceId: 'UTR-HDFC-8827391028', + orderCount: 9, + grossAmount: 31200, + deductions: { + commission: 1560, + tds: 312, + tcs: 312, + shipping: 2100 + }, + netSettlement: 26916, + status: 'settled', + bankAccountLast4: '1928' + } +]; + +const SellerContext = createContext(undefined); + +export const SellerProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [user, setUser] = useState(() => { + const saved = localStorage.getItem('tradhox_user'); + return saved ? JSON.parse(saved) : { + id: 'seller-001', + name: 'Raghavendra Sharma', + email: 'raghavendra.crafts@gmail.com', + phone: '+91 9845012345', + role: 'Master Craftsman & Registered Seller', + avatar: '/images/avatars/seller-main.jpg', + storeName: 'Raghavendra Artisan Guild' + }; + }); + + const [onboarding, setOnboarding] = useState(() => { + const saved = localStorage.getItem('tradhox_onboarding'); + return saved ? JSON.parse(saved) : defaultOnboarding; + }); + + const [onboardingStep, setOnboardingStep] = useState(() => { + const saved = localStorage.getItem('tradhox_onboarding_step'); + return saved ? parseInt(saved, 10) : 1; + }); + + const [isApplicationSubmitted, setIsApplicationSubmitted] = useState(() => { + return localStorage.getItem('tradhox_app_submitted') === 'true'; + }); + + const [applicationReferenceId] = useState('TRD-REG-2026-894021'); + + const [inventory, setInventory] = useState(() => { + const saved = localStorage.getItem('tradhox_inventory'); + return saved ? JSON.parse(saved) : initialInventory; + }); + + const [orders, setOrders] = useState(() => { + const saved = localStorage.getItem('tradhox_orders'); + return saved ? JSON.parse(saved) : initialOrders; + }); + + const [payouts] = useState(initialPayouts); + const [walletBalance] = useState(24850); + const [nextPayoutDate] = useState('18 Sep 2026 (Friday)'); + + useEffect(() => { + localStorage.setItem('tradhox_onboarding', JSON.stringify(onboarding)); + }, [onboarding]); + + useEffect(() => { + localStorage.setItem('tradhox_onboarding_step', onboardingStep.toString()); + }, [onboardingStep]); + + useEffect(() => { + localStorage.setItem('tradhox_inventory', JSON.stringify(inventory)); + }, [inventory]); + + useEffect(() => { + localStorage.setItem('tradhox_orders', JSON.stringify(orders)); + }, [orders]); + + const updateOnboarding = (data: Partial) => { + setOnboarding(prev => ({ ...prev, ...data })); + }; + + const submitApplication = () => { + setIsApplicationSubmitted(true); + localStorage.setItem('tradhox_app_submitted', 'true'); + }; + + const login = (emailOrPhone: string) => { + const newUser: UserProfile = { + id: 'seller-001', + name: onboarding.fullName || 'Raghavendra Sharma', + email: emailOrPhone.includes('@') ? emailOrPhone : onboarding.email, + phone: emailOrPhone.includes('@') ? onboarding.phone : emailOrPhone, + role: 'Master Craftsman & Registered Seller', + avatar: '/images/avatars/seller-main.jpg', + storeName: onboarding.storeName || 'Raghavendra Artisan Guild' + }; + setUser(newUser); + localStorage.setItem('tradhox_user', JSON.stringify(newUser)); + }; + + const logout = () => { + setUser(null); + localStorage.removeItem('tradhox_user'); + }; + + const updateStock = (id: string, newStock: number) => { + setInventory(prev => + prev.map(item => + item.id === id + ? { + ...item, + stock: Math.max(0, newStock), + status: newStock === 0 ? 'out_of_stock' : newStock < 5 ? 'low_stock' : 'active' + } + : item + ) + ); + }; + + const addProduct = (product: Omit) => { + const newItem: InventoryItem = { + ...product, + id: `inv-${Date.now()}`, + salesCount: 0 + }; + setInventory(prev => [newItem, ...prev]); + }; + + const deleteProduct = (id: string) => { + setInventory(prev => prev.filter(item => item.id !== id)); + }; + + const updateOrderStatus = (orderId: string, status: OrderItem['status']) => { + setOrders(prev => + prev.map(ord => (ord.id === orderId ? { ...ord, status } : ord)) + ); + }; + + const reschedulePickup = (orderId: string, slot: string, _reason: string) => { + setOrders(prev => + prev.map(ord => (ord.id === orderId ? { ...ord, pickupSlot: slot } : ord)) + ); + }; + + return ( + + {children} + + ); +}; + +export const useSeller = () => { + const ctx = useContext(SellerContext); + if (!ctx) { + throw new Error('useSeller must be used within a SellerProvider'); + } + return ctx; +}; diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..15d0852 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +// Bulma CSS Framework +import 'bulma/css/bulma.min.css'; + +// FontAwesome Icons +import '@fortawesome/fontawesome-free/css/all.min.css'; + +// Tradhox Design System & Bulma Customizations +import './styles/variables.css'; +import './styles/custom-bulma.css'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + +); diff --git a/src/pages/GrowBusinessPage.tsx b/src/pages/GrowBusinessPage.tsx new file mode 100644 index 0000000..9731cc4 --- /dev/null +++ b/src/pages/GrowBusinessPage.tsx @@ -0,0 +1,147 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { + Megaphone, + LineChart, + UserCheck, + Warehouse, + ArrowRight, + Sparkles, + Award +} from 'lucide-react'; + +export const GrowBusinessPage: React.FC = () => { + const initiatives = [ + { + title: 'Advertising', + short: 'Boost your handmade listings through curated spotlights, cultural holiday showcases, and organic discovery priority.', + detail: 'Expand beyond local bazaars with high-visibility sponsored placements. Your handcrafted items are showcased in seasonal festive edits (Diwali, Pongal, Durga Puja) and regional artisan spotlights to attract conscious heritage collectors.', + icon: + }, + { + title: 'Analytics', + short: 'Track real-time craft demand, customer views, regional buyer interest, and seasonal catalog trends effortlessly.', + detail: 'Gain complete visibility into your craft shop’s performance with real-time dashboards. Identify which motifs and colorways sell best, monitor customer reviews, and project upcoming raw material orders with reliable inventory forecasts.', + icon: + }, + { + title: 'Account management', + short: 'Receive 1-on-1 guidance from regional marketplace managers to optimize catalog photos, storytelling, and compliance.', + detail: 'Partner with a dedicated craft category specialist who understands handcraft techniques and cultural heritage. Get direct advisory on pricing strategy, GI tag documentation, GST classification, and international packing standards.', + icon: + }, + { + title: 'Storage & fulfillment', + short: 'Leverage safe regional warehousing, automated pick & pack, and seamless doorstep logistics to 15,000+ pincodes.', + detail: 'Protect delicate pottery, handlooms, and lacquerware with climate-controlled regional warehouses. Our fulfillment centers handle quality inspection, moisture-proof boxing, and expedited dispatch so you can focus entirely on your craft.', + icon: + } + ]; + + return ( +
+ {/* Header Banner */} +
+
+ + + + SELLER GROWTH & EMPOWERMENT + + +

+ Scale Your Authentic Artisan Brand With Tradhox +

+ +

+ Unlock tailored marketing campaigns, comprehensive analytics, dedicated maker account mentorship, and streamlined logistics to expand your handmade reach across India and global markets. +

+
+
+ + {/* Early Maker Onboarding Spotlight */} +
+
+
+
+
+ PIONEER GUILD BATCH +

Early Maker Onboarding

+

+ “Be among the first heritage artisan clusters and master makers to launch on Tradhox. Get priority catalog placement and zero commission during festival quarters.” +

+
+
+ + Join Early Maker Cohort + + +
+
+
+
+
+ + {/* Specialized Growth Initiatives */} +
+
+
+

+ PROGRAMS FOR SELLERS +

+
+

+ Specialized Growth Initiatives +

+
+ +
+ {initiatives.map((init, idx) => ( +
+
+
+
+ {init.icon} +
+

{init.title}

+

+ {init.short} +

+

+ {init.detail} +

+
+
+
+ ))} +
+
+
+ + {/* Final CTA */} +
+
+

+ Ready to Expand Your Craft Beyond Borders? +

+

+ Partner with Tradhox to share your regional legacy with millions of discerning craft enthusiasts. +

+ + Become a seller + + +
+
+
+ ); +}; diff --git a/src/pages/HowItWorksPage.tsx b/src/pages/HowItWorksPage.tsx new file mode 100644 index 0000000..3bdbc7c --- /dev/null +++ b/src/pages/HowItWorksPage.tsx @@ -0,0 +1,199 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { + PackagePlus, + BookOpen, + BellRing, + Truck, + Banknote, + TrendingUp, + Check, + HelpCircle, + ArrowRight +} from 'lucide-react'; + +export const HowItWorksPage: React.FC = () => { + const steps = [ + { + num: '01', + title: 'Add your products', + desc: 'Upload high-resolution craft photos from your smartphone or camera. Assign dimensions, available stock, material purity, and your selling price.', + icon: + }, + { + num: '02', + title: "Share your craft's story", + desc: 'Buyers cherish what makes your work rare. Create an artisan bio, document the generational lineage of your technique, and attach GI tag credentials.', + icon: + }, + { + num: '03', + title: 'Receive customer orders', + desc: 'Get instant SMS and dashboard notifications whenever an admirer purchases your artwork. Review customer requirements, courier pickup windows, and invoice details.', + icon: + }, + { + num: '04', + title: 'Pack & ship with Tradhox support', + desc: 'Never stress over parcel counters or couriers. We provide sturdy craft-protective packaging guidelines, while our nationwide logistics partners collect directly from your door.', + icon: + }, + { + num: '05', + title: 'Get paid on schedule', + desc: 'Timely payouts right to your bank account with zero hidden fees. Track sales numbers, view transparent margin statements, and download GST receipts effortlessly.', + icon: + }, + { + num: '06', + title: 'Grow with dedicated seller tools', + desc: 'Access seasonal craft trend reports, participate in festive ODOP campaigns, and expand your handmade catalog with zero listing penalty.', + icon: + } + ]; + + const faqs = [ + { + q: 'Is it really free to register and list products?', + a: 'Registration and listing on Tradhox is completely free of charge. There are no monthly listing subscriptions or upfront cataloging charges. We only deduct a minimal service commission upon successful delivery.' + }, + { + q: 'How does doorstep courier pickup work?', + a: 'Our verified logistics partners (Delhivery, BlueDart, Ekart) come directly to your home workshop or craft studio at your scheduled pickup slot. You simply print the auto-generated shipping label and hand over the parcel.' + }, + { + q: 'When and how do I receive payments?', + a: 'Payouts are directly credited via NEFT/RTGS to your verified bank account within 7 business days following confirmed delivery with 100% deduction transparency.' + }, + { + q: 'What if I do not have a GSTIN number?', + a: 'Artisans exempt from mandatory GST registration under Government rules (annual turnover under ₹20 Lakhs) can easily onboard using an Enrolment ID generated from the GST portal.' + } + ]; + + return ( +
+ {/* Header Banner */} +
+
+ + + + EMPOWERING INDIAN ARTISANS + + +

+ How it works — The Seller Journey +

+ +
+ + Zero Listing Fees + + • + + 7-Day Direct Payouts + + • + + 15,000+ Pin Codes Pickup + +
+
+
+ + {/* The 6-Step Journey */} +
+
+
+

+ THE 6-STEP JOURNEY +

+
+

+ From artisan workshop to nationwide doorstep delivery +

+
+ +
+ {steps.map((st) => ( +
+
+
+
+
+ {st.icon} +
+ + {st.num} + +
+

{st.title}

+

+ {st.desc} +

+
+
+
+ ))} +
+
+
+ + {/* Common Questions FAQ */} +
+
+
+

+ Common questions from artisans & sellers +

+

+ Everything you need to know about partnering with TRADHOX. +

+
+ +
+ {faqs.map((f, i) => ( +
+
+

+ + {f.q} +

+

+ {f.a} +

+
+
+ ))} +
+
+
+ + {/* Final CTA */} +
+
+

+ Ready to start selling your authentic creations? +

+

+ Join thousands of master weavers, potters, and sculptors reaching appreciative customers nationwide. +

+ + Register as a seller + + +
+
+
+ ); +}; diff --git a/src/pages/LandingPage.tsx b/src/pages/LandingPage.tsx new file mode 100644 index 0000000..fb0ef27 --- /dev/null +++ b/src/pages/LandingPage.tsx @@ -0,0 +1,456 @@ +import React, { useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { ArrowRight, Check } from 'lucide-react'; +import { useSeller } from '../context/SellerContext'; + +export const LandingPage: React.FC = () => { + const [mobileNumber, setMobileNumber] = useState(''); + const navigate = useNavigate(); + const { updateOnboarding } = useSeller(); + + const handleStartSelling = (e: React.FormEvent) => { + e.preventDefault(); + if (mobileNumber.trim()) { + updateOnboarding({ phone: mobileNumber.replace(/\D/g, '') }); + } + navigate('/onboarding'); + }; + + const benefitCards = [ + { + title: 'Zero listing fees', + img: '/images/landing/benefit-1.jpg', + icon: ( + + + + ) + }, + { + title: 'Simple onboarding', + img: '/images/landing/benefit-2.jpg', + icon: ( + + + + ) + }, + { + title: 'Fair & transparent', + img: '/images/landing/benefit-3.jpg', + icon: ( + + + + ) + }, + { + title: "Showcase your craft's story", + img: '/images/landing/benefit-4.jpg', + icon: ( + + + + ) + }, + { + title: 'Build your brand with us', + img: '/images/landing/benefit-5.jpg', + icon: ( + + + + ) + }, + { + title: 'Product FF by Tradhox', + img: '/images/landing/benefit-6.jpg', + icon: ( + + + + ) + }, + { + title: '15,000+ pincode delivery', + img: '/images/landing/benefit-7.jpg', + icon: ( + + + + + ) + }, + { + title: 'Mobile app support', + img: '/images/landing/benefit-8.jpg', + icon: ( + + + + ) + }, + { + title: 'Listing & pricing support', + img: '/images/landing/benefit-9.jpg', + icon: ( + + + + ) + }, + { + title: 'Eco-aligned ecosystem', + img: '/images/landing/benefit-10.jpg', + icon: ( + + + + ) + } + ]; + + const journeySteps = [ + { + num: '1', + title: '1. Create', + desc: 'Craft your unique handmade creations with traditional skill, sustainable materials, and artisan pride.' + }, + { + num: '2', + title: '2. List', + desc: 'Upload photos, specifications & set fair pricing with our zero listing fee support and catalog assistance.' + }, + { + num: '3', + title: '3. Tell your story', + desc: 'Showcase the artisan heritage, technique and cultural narrative behind each craft to connect with buyers.' + }, + { + num: '4', + title: '4. Order', + desc: 'Receive confirmed domestic and international orders seamlessly through your seller portal with instant alerts.' + }, + { + num: '5', + title: '5. Shipment', + desc: 'Doorstep courier pickup across 15,000+ pincodes with eco-friendly protective packaging and live tracking.' + }, + { + num: '6', + title: '6. Payment', + desc: 'Direct bank payout with 100% transparency, timely settlement cycles within 7 days, and zero hidden deductions.' + } + ]; + + return ( +
+ {/* 1. HeroSection */} +
+
+
+ {/* Hero Left Column */} +
+
+ + India's Premier Artisan & Handcrafted Marketplace +
+ +

+ Sell Authentic Handcrafted Products Across India & Worldwide +

+ +

+ Empowering artisans, ODOP clusters, and regional creators with transparent pricing, comprehensive logistics, and zero upfront platform charges. +

+ + {/* Lead Generation Form */} +
+
+
+ +91 +
+
+ setMobileNumber(e.target.value)} + style={{ borderRadius: '9999px', background: 'transparent' }} + /> +
+
+ +
+
+
+ + {/* Trust Indicators */} +
+ + Zero listing fees + + • + Fair & transparent + • + Pan-India delivery +
+
+ + {/* Hero Right Column: Montage Image */} +
+
+
+ Comprehensive collective montage showcase of authentic Indian handcrafted artisan products { + (e.target as HTMLImageElement).src = '/artisan_banner.jpg'; + }} + /> +
+ + {/* Top-Right Badge */} +
+ + AUTHENTIC HANDCRAFTS +
+ + {/* Bottom Collective Overlay */} +
+
+
+
TRADHOX Collective
+
From Village Roots to Global Shelves
+
+
+
100%
+
Authentic
+
+
+
+
+
+
+
+
+
+ + {/* 2. WhySellWithUsSection: "A Marketplace Designed Solely For Maker Success" (10 Cards) */} +
+
+
+

+ WHY SELL WITH US +

+
+

+ A Marketplace Designed Solely For Maker Success +

+
+ +
+ {benefitCards.map((card, idx) => ( +
+
+
+ {card.title} { + (e.target as HTMLImageElement).src = '/images/landing/hero-showcase.jpg'; + }} + /> +
+ {card.icon} +
+
+
+ + {card.title} + +
+
+
+ ))} +
+
+
+ + {/* 3. HowItWorksSection: "How It Works: The 6-Step Journey" */} +
+
+
+

+ SELLER JOURNEY +

+
+

+ How It Works: The 6-Step Journey +

+

+ A straightforward, transparent roadmap designed to onboard regional makers and deliver products seamlessly worldwide. +

+
+ +
+ {journeySteps.map((step, idx) => ( +
+
+
+ {step.num} +
+

{step.title}

+

+ {step.desc} +

+
+
+ ))} +
+
+
+ + {/* 4. CategoryShowcaseSection: "Featured Seller Categories" (3 Boxes) */} +
+
+
+
+

+ Featured Seller Categories +

+

+ Specialized spotlights for authentic regional heritage products across India. +

+
+ +
+ {/* Box 1: GI-tagged products */} +
+
+
+
+ Authentic Indian GI-tagged crafts showcase flatlay + + GI Authenticated + +
+
+

GI-tagged products

+

+ Protected geographical indication crafts preserving verified regional legacy and genuine master traditions. +

+
+
+
+ Verified Heritage Crafts + 100% Authentic +
+
+
+ + {/* Box 2: ODOP products */} +
+
+
+
+ High-resolution authentic product flatlay representing India's One District One Product specialties + + ODOP Regional Hub + +
+
+

ODOP products

+

+ Indigenous district-level specialties bringing distinctive indigenous crafts from local villages to direct markets. +

+
+
+
+ Districts Active + 760+ Districts +
+
+
+ + {/* Box 3: Sustainable products */} +
+
+
+
+ High-resolution commercial flatlay of sustainable eco-friendly handcrafted lifestyle products + + Eco-Conscious + +
+
+

Sustainable products

+

+ Eco-friendly, chemical-free creations crafted with natural fibers, terracotta, bamboo, and circular materials. +

+
+
+
+ Eco Clusters + 1,850+ Clusters +
+
+
+
+
+
+ + {/* 5. FinalCallToAction: "Ready to take your craft to the world?" */} +
+
+

+ Ready to take your craft to the world? +

+

+ Join thousands of authentic makers reaching nationwide and global customers with zero hassle. +

+ + Register as a seller + +
+
+
+ ); +}; diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx new file mode 100644 index 0000000..d8510b5 --- /dev/null +++ b/src/pages/LoginPage.tsx @@ -0,0 +1,201 @@ +import React, { useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { useSeller } from '../context/SellerContext'; +import { Mail, Lock, Phone, ArrowRight, UserCheck } from 'lucide-react'; + +export const LoginPage: React.FC = () => { + const [loginMethod, setLoginMethod] = useState<'email' | 'phone'>('email'); + const [email, setEmail] = useState('raghavendra.crafts@gmail.com'); + const [password, setPassword] = useState('password123'); + const [phone, setPhone] = useState('9845012345'); + const [otp, setOtp] = useState(''); + const [otpSent, setOtpSent] = useState(false); + const [rememberMe, setRememberMe] = useState(true); + + const { login } = useSeller(); + const navigate = useNavigate(); + + const handleEmailSubmit = (e: React.FormEvent) => { + e.preventDefault(); + login(email); + navigate('/dashboard'); + }; + + const handlePhoneSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (!otpSent) { + setOtpSent(true); + setOtp('4829'); // Simulated OTP + } else { + login(phone); + navigate('/dashboard'); + } + }; + + const handleQuickDemoLogin = () => { + login('raghavendra.crafts@gmail.com'); + navigate('/dashboard'); + }; + + return ( +
+
+
+
+ {/* Login Card */} +
+
+ +
+ TRADHOX + TRADHOX +
+ +

Seller Central Login

+

Manage your craft catalog, orders, and settlements

+
+ + {/* Toggle Tabs */} + + + {loginMethod === 'email' ? ( +
+
+ +
+ setEmail(e.target.value)} + /> + + + +
+
+ + + +
+ +
+ + +
+ ) : ( +
+
+ +
+

+ +91 +

+
+ setPhone(e.target.value)} + /> + + + +
+
+
+ + {otpSent && ( +
+ +
+ setOtp(e.target.value)} + /> +
+
+ )} + + +
+ )} + + {/* Quick Demo Login Option */} +
+ +
+ +
+ New master artisan or cluster coordinator?{' '} + + Register here + +
+
+
+
+
+
+ ); +}; diff --git a/src/pages/OnboardingPage.tsx b/src/pages/OnboardingPage.tsx new file mode 100644 index 0000000..3c9e4cc --- /dev/null +++ b/src/pages/OnboardingPage.tsx @@ -0,0 +1,927 @@ +import React from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useSeller } from '../context/SellerContext'; +import { + Check, + ArrowRight, + ArrowLeft, + Building2, + MapPin, + Sparkles, + ShieldCheck, + UploadCloud, + CheckCircle2, + AlertCircle, + Lock, + RotateCcw, + Headphones +} from 'lucide-react'; + +export const OnboardingPage: React.FC = () => { + const { + onboarding, + updateOnboarding, + onboardingStep, + setOnboardingStep, + isApplicationSubmitted, + submitApplication, + login + } = useSeller(); + + const navigate = useNavigate(); + + const stepLabels = [ + 'Account', + 'GST & Tax', + 'Pickup Address', + 'Bank Account', + 'Categories', + 'Sample Craft', + 'Store Profile' + ]; + + const craftCategoryOptions = [ + 'Handloom & Textiles', + 'Handmade Pottery & Ceramics', + 'Brass & Metal Craft', + 'Woodcraft & Carvings', + 'Jute & Eco-Fibers', + 'Zari & Embroidery', + 'Stone & Marble Sculpting', + 'Tribal & Folk Art' + ]; + + const handleNext = () => { + if (onboardingStep < 7) { + setOnboardingStep(onboardingStep + 1); + window.scrollTo({ top: 0, behavior: 'smooth' }); + } else { + submitApplication(); + } + }; + + const handleBack = () => { + if (onboardingStep > 1) { + setOnboardingStep(onboardingStep - 1); + window.scrollTo({ top: 0, behavior: 'smooth' }); + } + }; + + const toggleCategory = (cat: string) => { + const exists = onboarding.categories.includes(cat); + if (exists) { + updateOnboarding({ categories: onboarding.categories.filter(c => c !== cat) }); + } else { + updateOnboarding({ categories: [...onboarding.categories, cat] }); + } + }; + + const handleEnterDashboard = () => { + login(onboarding.email || 'raghavendra.crafts@gmail.com'); + navigate('/dashboard'); + }; + + /* ---------------------------------------------------- + EXACT Bulma-faithful Confirmation Screen + (tradhox_application_submitted_bulma_faithful) + ---------------------------------------------------- */ + if (isApplicationSubmitted) { + return ( +
+
+
+
+ {/* Check Circle */} +
+
+ +
+

+ Application submitted! +

+

+ Thanks for registering · we're reviewing your details +

+
+ + {/* Info Summary Box */} +
+
+
+
+ Maker's ID +
+
+ TRDX-284719 +
+
+
+
+ Estimated Review Time +
+
+ 24–48 hours +
+
+
+
+ + {/* What Happens Next Timeline */} +
+

+ What happens next +

+
+ {/* Step 1 */} +
+
+ 1 +
+
+
+ We verify your documents +
+
+ GST, PAN & bank details are checked by our team +
+
+
+ + {/* Step 2 */} +
+
+ 2 +
+
+
+ You'll get an approval email +
+
+ sent to your registered email & SMS to your mobile +
+
+
+ + {/* Step 3 */} +
+
+ 3 +
+
+
+ Your storefront goes live +
+
+ start receiving orders once approved +
+
+
+
+
+ + {/* While You Wait Box */} +
+
+ While you wait +
+
+ add more products & explore seller resources from your dashboard +
+
+ + {/* Action Buttons */} +
+ + + +
+ + +
+
+
+ + {/* Trust Badges Strip (Faithful to Stitch) */} +
+
+
+
+
+
+ +
+ Secure & encrypted +
+
+ +
+
+
+ +
+ Track status anytime in dashboard +
+
+ +
+
+
+ +
+ Dedicated onboarding support +
+
+
+
+
+
+ ); + } + + /* ---------------------------------------------------- + Render Onboarding Wizard (Steps 1 to 7) + ---------------------------------------------------- */ + return ( +
+
+ {/* Wizard Header */} +
+ Seller Registration Wizard +

Setup Your Artisan Workshop

+

Step {onboardingStep} of 7: {stepLabels[onboardingStep - 1]}

+
+ + {/* Responsive Step Progress Bar */} +
+
+ {stepLabels.map((lbl, idx) => { + const stepNum = idx + 1; + const isDone = stepNum < onboardingStep; + const isActive = stepNum === onboardingStep; + + return ( +
+
stepNum <= onboardingStep && setOnboardingStep(stepNum)} + className="is-flex is-align-items-center" + style={{ cursor: stepNum <= onboardingStep ? 'pointer' : 'default' }} + > +
+ {isDone ? : stepNum} +
+ + {lbl} + +
+ {idx !== stepLabels.length - 1 && ( +
+ )} +
+ ); + })} +
+
+ + {/* Step Content Container */} +
+
+
+ + {/* STEP 1: Account Creation */} + {onboardingStep === 1 && ( +
+

Step 1: Create Your Seller Account

+

Basic contact information for order alerts and dashboard login

+ +
+ +
+ updateOnboarding({ fullName: e.target.value })} + /> +
+
+ +
+
+
+ +
+ updateOnboarding({ email: e.target.value })} + /> +
+
+
+
+
+ +
+

+91

+
+ updateOnboarding({ phone: e.target.value })} + /> +
+
+
+
+
+ +
+ + + Mobile number pre-verified via simulated OTP (4829) + +
+
+ )} + + {/* STEP 2: Business & GST / Enrolment ID */} + {onboardingStep === 2 && ( +
+

Step 2: Business Identity & Tax Details

+

+ Comply with Indian marketplace regulations. Traditional artisans exempt from GST can use a Government Enrolment ID. +

+ + {/* Mode Selector Toggle */} + + + {onboarding.taxMode === 'gstin' ? ( +
+
+ +
+ updateOnboarding({ gstin: e.target.value.toUpperCase() })} + /> +
+

✓ Verified with GST Portal: Active & Registered

+
+ +
+ +
+ updateOnboarding({ legalEntityName: e.target.value })} + /> +
+
+
+ ) : ( +
+
+
+ +
+ GST Exemption for Traditional Artisans: As per Govt. notification for e-commerce, artisans with annual turnover under ₹20 Lakhs can sell intra-state using an Enrolment ID generated from the GST portal without taking full GST registration. +
+
+
+ +
+ +
+ updateOnboarding({ enrolmentId: e.target.value })} + /> +
+
+ +
+ +
+
+ +
+
+
+
+ )} + +
+ +
+ updateOnboarding({ tradeName: e.target.value })} + /> +
+
+
+ )} + + {/* STEP 3: Pickup Address */} + {onboardingStep === 3 && ( +
+

Step 3: Workshop Pickup Address

+

+ Our logistics courier partners will arrive at this location to collect your packaged orders. +

+ +
+ +
+ updateOnboarding({ addressLine1: e.target.value })} + /> +
+
+ +
+ +
+ updateOnboarding({ addressLine2: e.target.value })} + /> +
+
+ +
+
+
+ +
+ updateOnboarding({ pincode: e.target.value })} + /> +
+
+
+
+
+ +
+ updateOnboarding({ city: e.target.value })} + /> +
+
+
+
+
+ +
+ updateOnboarding({ state: e.target.value })} + /> +
+
+
+
+ +
+ + + Serviceable PIN Code: Delhivery, Ekart, and BlueDart pickup available. + +
+
+ )} + + {/* STEP 4: Bank Details */} + {onboardingStep === 4 && ( +
+

Step 4: Bank Details for Direct Payouts

+

+ Weekly order settlements are deposited directly into this account via NEFT/RTGS. +

+ +
+ +
+ updateOnboarding({ accountHolderName: e.target.value })} + /> +
+
+ +
+
+
+ +
+ updateOnboarding({ accountNumber: e.target.value })} + /> +
+
+
+ +
+
+ +
+ updateOnboarding({ ifscCode: e.target.value.toUpperCase() })} + /> +
+
+
+
+ +
+ +
+ updateOnboarding({ bankName: e.target.value })} + /> +
+
+ +
+ +
+ Penny-Drop Verified: ₹1.00 test deposit confirmed successfully. +
+
+
+ )} + + {/* STEP 5: Categories Selection */} + {onboardingStep === 5 && ( +
+

Step 5: Craft Disciplines & Categories

+

+ Select all traditional craft forms practiced in your workshop. +

+ +
+ {craftCategoryOptions.map((cat, idx) => { + const selected = onboarding.categories.includes(cat); + return ( +
+
toggleCategory(cat)} + className="card p-4 is-clickable" + style={{ + borderRadius: '14px', + border: selected ? '2px solid var(--trad-maroon)' : '1px solid var(--trad-border)', + background: selected ? 'rgba(103, 27, 38, 0.04)' : '#ffffff', + transition: 'all 0.15s ease' + }} + > +
+ {cat} +
+ {selected && } +
+
+
+
+ ); + })} +
+
+ )} + + {/* STEP 6: Sample Product Preview */} + {onboardingStep === 6 && ( +
+

Step 6: Add Your First Sample Craft

+

+ Set up your first listing to preview how it appears to customers on the marketplace. +

+ +
+ +
+ updateOnboarding({ sampleProductTitle: e.target.value })} + /> +
+
+ +
+
+
+ +
+ updateOnboarding({ samplePrice: Number(e.target.value) })} + /> +
+
+
+
+
+ +
+ updateOnboarding({ sampleStock: Number(e.target.value) })} + /> +
+
+
+
+ +
+ +
+ +
Primary Photo Attached: kanchipuram_silk.jpg
+
High-resolution authentic workshop weave image uploaded.
+
+
+
+ )} + + {/* STEP 7: Store Profile & Craft Lineage */} + {onboardingStep === 7 && ( +
+

Step 7: Store Profile & Craft Lineage

+

+ Share your artisan story, craft traditions, and workshop location to connect with heritage lovers. +

+ +
+ +
+ updateOnboarding({ storeName: e.target.value })} + /> +
+
+ +
+ +
+ updateOnboarding({ craftLineageYears: Number(e.target.value) })} + /> +
+
+ +
+ +
+ +
+
+
+ )} + + {/* Navigation Controls */} +
+ {onboardingStep > 1 ? ( + + ) : ( +
+ )} + + +
+ +
+
+
+
+
+ ); +}; diff --git a/src/pages/PricingPage.tsx b/src/pages/PricingPage.tsx new file mode 100644 index 0000000..3be17f2 --- /dev/null +++ b/src/pages/PricingPage.tsx @@ -0,0 +1,290 @@ +import React, { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { + Calculator, + Check, + HelpCircle, + ArrowRight, + ChevronDown, + ShieldCheck, + TrendingUp, + Clock +} from 'lucide-react'; + +export const PricingPage: React.FC = () => { + const [sellingPrice, setSellingPrice] = useState(3500); + const [selectedCategory, setSelectedCategory] = useState('Handloom'); + + const categories = [ + { name: 'Handloom & Textiles', rate: 0.05, label: '5%' }, + { name: 'Pottery & Ceramics', rate: 0.06, label: '6%' }, + { name: 'Brass & Metal Craft', rate: 0.07, label: '7%' }, + { name: 'Woodcraft & Carvings', rate: 0.07, label: '7%' }, + { name: 'Jute & Natural Fibers', rate: 0.05, label: '5%' } + ]; + + const currentRate = categories.find(c => c.name === selectedCategory)?.rate || 0.05; + const platformFee = Math.round(sellingPrice * currentRate); + const gstOnFee = Math.round(platformFee * 0.18); + const tdsTcs = Math.round(sellingPrice * 0.02); + const netEarnings = Math.max(0, sellingPrice - platformFee - gstOnFee - tdsTcs); + + const pricingPillars = [ + { + title: 'No registration fee', + desc: 'Start your digital seller journey completely free. We provide seamless Aadhaar and artisan cluster onboarding without subscription fees.', + img: '/images/pricing/no-reg-artisan.png' + }, + { + title: 'No listing fee', + desc: 'Publish your full catalog of authentic handmade creations with zero upfront slot or cataloging charges. All verified artisans list for free.', + img: '/images/pricing/zero-listing-coin.png' + }, + { + title: 'No hidden payments', + desc: 'Every rupee earned on your verified craft is safeguarded. We guarantee zero hidden deductions, ambiguous closing fees, or surprise monthly maintenance charges.', + img: '/images/pricing/transparent-weaver.png' + }, + { + title: 'Fast settlement', + desc: 'Receive accelerated disbursements directly into your registered bank account as soon as your craft reaches the customer, backed by direct NEFT transfers.', + img: '/images/pricing/fast-settlement.png' + }, + { + title: 'No penalty', + desc: 'A maker-first community that supports craftsmanship rather than imposing arbitrary SLAs or algorithmic penalty deductions for handmade lead times.', + img: '/images/pricing/no-penalty-craft.png' + } + ]; + + const aeoFaqs = [ + { + q: "What is Tradhox's AEO (Authorised Economic Operator) framework, and how does it benefit sellers?", + a: "Tradhox coordinates with Indian Customs under the AEO programme to facilitate accelerated green-channel export clearances, simplified paperwork, and minimal inspection delays for GI-certified regional artisans." + }, + { + q: "Are there any extra fees or registration charges for AEO certification & international shipping?", + a: "None. International shipping documentation and export clearance enablement are integrated natively into our standard maker commission structure with zero surcharge." + }, + { + q: "What documents (IEC, GSTIN, Aadhaar) are required to onboard as an AEO-supported maker?", + a: "Artisans simply provide their valid Aadhaar, bank passbook, and either their GSTIN or Government Enrolment ID. If exporting internationally, our guild desk assists with free IEC linkage." + } + ]; + + return ( +
+ {/* Header Banner */} +
+
+ + + + CLEAR & PREDICTABLE COSTS + + +

+ Transparent Pricing Built Solely for Maker Prosperity +

+ +

+ Empowering traditional artisans, GI-tagged clusters, and direct creators across India with 100% transparent fee structures, predictable payouts, and no upfront charges. +

+
+
+ + {/* 5 Core Pillars Grid */} +
+
+
+ {pricingPillars.map((p, idx) => ( +
+
+
+
+ {p.title} +
+

{p.title}

+

{p.desc}

+
+
+
+ ))} +
+ + {/* Interactive Calculator Box */} +
+
+
+
+ +

Interactive Take-Home Calculator

+
+

+ Simulate your net earnings per order with transparent deductions. +

+ +
+ +
+ +
+
+ +
+ + setSellingPrice(Number(e.target.value))} + style={{ accentColor: 'var(--trad-maroon)' }} + /> +
+
+ +
+
+
+ Gross Customer Price: + ₹{sellingPrice.toLocaleString()} +
+
+ Tradhox Service Fee ({Math.round(currentRate * 100)}%): + - ₹{platformFee.toLocaleString()} +
+
+ GST on Service Fee (18%): + - ₹{gstOnFee.toLocaleString()} +
+
+ Statutory Taxes (TDS + TCS 2%): + - ₹{tdsTcs.toLocaleString()} +
+
+
+ Net Bank Settlement + ₹{netEarnings.toLocaleString()} +
+ + {Math.round((netEarnings / sellingPrice) * 100)}% Take-Home + +
+
+
+
+
+
+
+ + {/* Reliable Settlements Without Delays */} +
+
+
+

+ PAYMENT CYCLE +

+
+

+ Reliable Settlements Without Delays +

+

+ Experience predictable, fully automated payouts directly credited to your registered bank account. Monitor every transaction live in your seller panel. +

+
+ +
+
+
+
+ +

Settled a set number of days after delivery

+
+

+ All delivered orders are verified and settled into your weekly settlement batch with complete breakdown receipts. +

+
+
+ +
+
+
+ +

Tracked in your seller panel until it lands

+
+

+ Direct NEFT/IMPS transfers backed by end-to-end reconciliation and real-time SMS/WhatsApp dispatch alerts. +

+
+
+
+
+
+ + {/* AEO, Customs & Seller Pricing Questions */} +
+
+
+

+ FREQUENTLY ASKED · AEO & EXPORT COMPLIANCE +

+
+

+ AEO, Customs & Seller Pricing Questions +

+

+ Clear, transparent answers regarding Authorised Economic Operator (AEO) status, zero hidden fees, global export facilitation, and compliance. +

+
+ +
+ {aeoFaqs.map((f, i) => ( +
+
+

+ {f.q} +

+

+ {f.a} +

+
+
+ ))} +
+
+
+ + {/* Final CTA */} +
+
+

+ Ready to start selling your authentic creations? +

+

+ Join thousands of authentic makers reaching nationwide and global customers with zero hassle. +

+ + Register as a seller + + +
+
+
+ ); +}; diff --git a/src/pages/dashboard/AddProductPage.tsx b/src/pages/dashboard/AddProductPage.tsx new file mode 100644 index 0000000..fd78e50 --- /dev/null +++ b/src/pages/dashboard/AddProductPage.tsx @@ -0,0 +1,431 @@ +import React, { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useSeller } from '../../context/SellerContext'; +import { + ArrowRight, + ArrowLeft, + Check, + UploadCloud, + Sparkles, + Award, + Eye, + Layers, + Box +} from 'lucide-react'; + +export const AddProductPage: React.FC = () => { + const [step, setStep] = useState(1); + const { addProduct } = useSeller(); + const navigate = useNavigate(); + + // Form State + const [title, setTitle] = useState(''); + const [category, setCategory] = useState('Handloom & Textiles'); + const [craftTechnique, setCraftTechnique] = useState('Pit Loom Jacquard Handweaving'); + const [giTagged, setGiTagged] = useState(true); + const [originRegion, setOriginRegion] = useState('Kanchipuram, Tamil Nadu'); + const [story, setStory] = useState('Crafted using pure zari threads and mulberry silk, taking over 18 days of continuous handloom dedication.'); + const [image, setImage] = useState('/kanchipuram_silk.jpg'); + const [sku, setSku] = useState('TRAD-CRAFT-099'); + const [price, setPrice] = useState(6500); + const [mrp, setMrp] = useState(8900); + const [stock, setStock] = useState(12); + const [lengthCm, setLengthCm] = useState(35); + const [widthCm, setWidthCm] = useState(25); + const [heightCm, setHeightCm] = useState(8); + const [weightKg, setWeightKg] = useState(1.2); + const [hsnCode, setHSNCode] = useState('50072010'); + const [gstRate, setGSTRate] = useState(5); + + const stepTitles = [ + 'Category & Technique', + 'Media & Craft Story', + 'Variants & Pricing', + 'Dimensions & Publish' + ]; + + const handleFinish = (e: React.FormEvent) => { + e.preventDefault(); + addProduct({ + sku: sku || `TRAD-${Date.now().toString().slice(-4)}`, + title: title || 'Authentic Handcrafted Artisan Item', + category, + craftTechnique, + giTagged, + price: Number(price), + mrp: Number(mrp), + stock: Number(stock), + status: Number(stock) === 0 ? 'out_of_stock' : Number(stock) < 5 ? 'low_stock' : 'active', + image: image || '/kanchipuram_silk.jpg' + }); + navigate('/dashboard/inventory'); + }; + + return ( +
+
+

Add New Handcrafted Item

+

+ Step {step} of 4: {stepTitles[step - 1]} +

+
+ + {/* 4-Step Indicator */} +
+
+ {stepTitles.map((st, idx) => { + const num = idx + 1; + const isDone = num < step; + const isActive = num === step; + + return ( +
+
num <= step && setStep(num)} + > +
+ {isDone ? : num} +
+ + {st} + +
+ {idx !== stepTitles.length - 1 && ( +
+ )} +
+ ); + })} +
+
+ +
+ {/* Form Column */} +
+
+ {/* Step 1: Category & Craft Title */} + {step === 1 && ( +
+

1. Craft Category & Attribution

+ +
+ +
+
+ +
+
+
+ +
+ +
+ setTitle(e.target.value)} + /> +
+
+ +
+ +
+ setCraftTechnique(e.target.value)} + /> +
+
+ +
+ +
+ setOriginRegion(e.target.value)} + /> +
+
+ +
+ +
+
+ )} + + {/* Step 2: Media & Craft Story */} + {step === 2 && ( +
+

2. High-Res Photos & Artisan Story

+ +
+ +
+ {['/kanchipuram_silk.jpg', '/terracotta_vases.jpg', '/brass_figurine.jpg', '/wooden_carving.jpg'].map((imgUrl) => ( +
+
setImage(imgUrl)} + className="card is-clickable p-1" + style={{ + border: image === imgUrl ? '2px solid var(--trad-maroon)' : '1px solid var(--trad-border)', + borderRadius: '10px' + }} + > + Sample +
+
+ ))} +
+
+ +
+ +
+ +
+

This story will be highlighted on your public storefront and product detail page.

+
+
+ )} + + {/* Step 3: Variants & Pricing */} + {step === 3 && ( +
+

3. Inventory, Variants & Pricing

+ +
+ +
+ setSku(e.target.value)} + /> +
+
+ +
+
+
+ +
+ setPrice(Number(e.target.value))} + /> +
+
+
+ +
+
+ +
+ setMrp(Number(e.target.value))} + /> +
+
+
+
+ +
+ +
+ setStock(Number(e.target.value))} + /> +
+
+
+ )} + + {/* Step 4: Package Dimensions & Tax */} + {step === 4 && ( +
+

4. Package Dimensions & GST Classification

+ +
+
+
+ + setLengthCm(Number(e.target.value))} /> +
+
+
+
+ + setWidthCm(Number(e.target.value))} /> +
+
+
+
+ + setHeightCm(Number(e.target.value))} /> +
+
+
+ +
+
+
+ + setWeightKg(Number(e.target.value))} /> +
+
+
+
+ + setHSNCode(e.target.value)} /> +
+
+
+ +
+ +
+ +
+
+
+ )} + + {/* Stepper Navigation Buttons */} +
+ {step > 1 ? ( + + ) : ( +
+ )} + + {step < 4 ? ( + + ) : ( + + )} +
+
+
+ + {/* Live Card Preview Column */} +
+
+
+ +

Live Marketplace Card Preview

+
+ +
+
+ {title + {giTagged && ( + + GI Certified + + )} +
+ +
+
{originRegion}
+

+ {title || 'Handcrafted Artisan Product Title'} +

+
+ + ₹{price.toLocaleString()} + + + ₹{mrp.toLocaleString()} + + + {Math.round(((mrp - price) / mrp) * 100)}% OFF + +
+
+ "{story}" +
+
+ SKU: {sku} + {stock} Units Available +
+
+
+
+
+
+
+ ); +}; diff --git a/src/pages/dashboard/BulkUploadPage.tsx b/src/pages/dashboard/BulkUploadPage.tsx new file mode 100644 index 0000000..ed63c39 --- /dev/null +++ b/src/pages/dashboard/BulkUploadPage.tsx @@ -0,0 +1,196 @@ +import React, { useState } from 'react'; +import { + UploadCloud, + FileSpreadsheet, + Download, + CheckCircle2, + AlertTriangle, + FileText +} from 'lucide-react'; + +export const BulkUploadPage: React.FC = () => { + const [isUploading, setIsUploading] = useState(false); + const [uploadSuccess, setUploadSuccess] = useState(false); + + const batches = [ + { + id: 'BATCH-2026-089', + fileName: 'Jaipur_Blue_Pottery_SKUs_v2.xlsx', + date: '12 Sep 2026, 16:40', + totalRows: 24, + successfulRows: 24, + failedRows: 0, + status: 'Completed' + }, + { + id: 'BATCH-2026-081', + fileName: 'Kanchipuram_Festive_Silk_Sarees.csv', + date: '04 Sep 2026, 11:15', + totalRows: 40, + successfulRows: 38, + failedRows: 2, + status: 'Partial Success' + } + ]; + + const handleSimulateUpload = () => { + setIsUploading(true); + setUploadSuccess(false); + setTimeout(() => { + setIsUploading(false); + setUploadSuccess(true); + }, 1200); + }; + + return ( +
+
+

Bulk Catalog & Batch Management

+

+ Add or update dozens of handcrafted SKUs at once using our official Excel or CSV spreadsheets. +

+
+ +
+ {/* Left: Drag and Drop Upload Zone */} +
+
+

Upload Batch File

+

+ Supported formats: .xlsx, .csv (Max file size: 15 MB) +

+ +
+ +
+ {isUploading ? 'Validating & Ingesting SKUs...' : 'Click to Browse or Drag File Here'} +
+

+ Columns are automatically verified for GST rates, craft origin, and HSN codes. +

+ +
+ + {uploadSuccess && ( +
+ + + Batch verified! 16 craft SKUs created successfully with zero errors. + +
+ )} +
+
+ + {/* Right: Template Download and Instructions */} +
+
+

Download Official Templates

+

+ Use our standardized format to avoid inventory rejection or incorrect GST classification. +

+ +
+
+ +
+
Craft_Master_Template.xlsx
+
Includes formula validations
+
+
+ +
+ +
+
+ +
+
Craft_Standard_Catalog.csv
+
Lightweight comma-separated format
+
+
+ +
+ +
+
Mandatory Fields in Spreadsheet:
+
    +
  • Unique SKU Code (e.g. TRAD-YOURNAME-001)
  • +
  • Product Title & Craft Technique
  • +
  • Selling Price (INR) & MRP
  • +
  • Package Dimensions (Length, Width, Height in cm, Weight in grams)
  • +
+
+
+
+
+ + {/* Batch Processing History Table */} +
+
+

Recent Batch History & Error Logs

+
+
+ + + + + + + + + + + + + {batches.map((b) => ( + + + + + + + + + ))} + +
Batch IDFile Name & Upload DateTotal SKUsSuccessfulErrorsStatus
{b.id} +
{b.fileName}
+
{b.date}
+
{b.totalRows}{b.successfulRows}{b.failedRows} + + {b.status} + +
+
+
+
+ ); +}; diff --git a/src/pages/dashboard/InventoryPage.tsx b/src/pages/dashboard/InventoryPage.tsx new file mode 100644 index 0000000..a5d7e74 --- /dev/null +++ b/src/pages/dashboard/InventoryPage.tsx @@ -0,0 +1,209 @@ +import React, { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { useSeller } from '../../context/SellerContext'; +import { + PlusCircle, + Search, + Filter, + Trash2, + UploadCloud, + Plus, + Minus, + Award, + AlertCircle +} from 'lucide-react'; + +export const InventoryPage: React.FC = () => { + const { inventory, updateStock, deleteProduct } = useSeller(); + const [searchTerm, setSearchTerm] = useState(''); + const [selectedCategory, setSelectedCategory] = useState('All'); + const [statusFilter, setStatusFilter] = useState('All'); + + const categories = ['All', 'Handloom & Textiles', 'Pottery & Ceramics', 'Brass & Metal Craft', 'Woodcraft']; + + const filteredInventory = inventory.filter((item) => { + const matchesSearch = item.title.toLowerCase().includes(searchTerm.toLowerCase()) || + item.sku.toLowerCase().includes(searchTerm.toLowerCase()); + const matchesCategory = selectedCategory === 'All' || item.category === selectedCategory; + const matchesStatus = statusFilter === 'All' || item.status === statusFilter; + return matchesSearch && matchesCategory && matchesStatus; + }); + + return ( +
+ {/* Top Header */} +
+
+

Catalog & Inventory Management

+

+ Manage your artisan SKUs, stock levels, and pricing across all craft disciplines. +

+
+
+ + + Bulk CSV Upload + + + + Add New Craft + +
+
+ + {/* Filter and Search Bar */} +
+
+
+
+ setSearchTerm(e.target.value)} + /> + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + {/* SKU Table */} +
+
+ + + + + + + + + + + + + + {filteredInventory.length > 0 ? ( + filteredInventory.map((item) => ( + + + + + + + + + + )) + ) : ( + + + + )} + +
ImageCraft Product & SKUCategory & GI TagPricingAvailable StockStatusActions
+ {item.title} { + (e.target as HTMLImageElement).src = '/images/landing/cat-gi.jpg'; + }} + /> + +
{item.title}
+
+ {item.sku} + • {item.craftTechnique} +
+
+
{item.category}
+ {item.giTagged && ( + + GI Certified + + )} +
+
+ ₹{item.price.toLocaleString()} +
+
+ MRP ₹{item.mrp.toLocaleString()} +
+
+ {/* Interactive Stock Quantity Adjuster */} +
+ + updateStock(item.id, Number(e.target.value))} + /> + +
+
+ + {item.status.replace('_', ' ').toUpperCase()} + + + +
+ +

No matching craft SKUs found.

+
+
+
+
+ ); +}; diff --git a/src/pages/dashboard/OrdersPage.tsx b/src/pages/dashboard/OrdersPage.tsx new file mode 100644 index 0000000..925d6f6 --- /dev/null +++ b/src/pages/dashboard/OrdersPage.tsx @@ -0,0 +1,292 @@ +import React, { useState } from 'react'; +import { useSeller } from '../../context/SellerContext'; +import { OrderItem } from '../../types/seller'; +import { + Printer, + Calendar, + Truck, + CheckCircle2, + Clock, + X, + AlertCircle, + Barcode, + PackageCheck +} from 'lucide-react'; + +export const OrdersPage: React.FC = () => { + const { orders, updateOrderStatus, reschedulePickup } = useSeller(); + const [activeTab, setActiveTab] = useState<'all' | OrderItem['status']>('all'); + + // Modals state + const [selectedOrderForLabel, setSelectedOrderForLabel] = useState(null); + const [rescheduleOrder, setRescheduleOrder] = useState(null); + const [newSlot, setNewSlot] = useState('Tomorrow, 10:00 AM - 01:00 PM'); + const [rescheduleReason, setRescheduleReason] = useState('Packaging / Quality Check in Progress'); + + const filteredOrders = activeTab === 'all' + ? orders + : orders.filter(o => o.status === activeTab); + + const tabs: Array<{ id: 'all' | OrderItem['status']; label: string }> = [ + { id: 'all', label: 'All Orders' }, + { id: 'new', label: 'New' }, + { id: 'ready_to_ship', label: 'Ready to Ship' }, + { id: 'dispatched', label: 'Dispatched' }, + { id: 'delivered', label: 'Delivered' } + ]; + + const handleConfirmReschedule = (e: React.FormEvent) => { + e.preventDefault(); + if (rescheduleOrder) { + reschedulePickup(rescheduleOrder.id, newSlot, rescheduleReason); + setRescheduleOrder(null); + alert(`Pickup rescheduled successfully for order ${rescheduleOrder.orderNumber}`); + } + }; + + const handlePrintAll = () => { + alert('Generating combined PDF batch shipping manifest for 2 ready orders.'); + }; + + return ( +
+ {/* Top Header */} +
+
+

Orders & Dispatch Pipeline

+

+ Track customer orders, manage doorstep courier collections, and print standard 4x6 shipping labels. +

+
+
+ +
+
+ + {/* Tabs */} + + + {/* Orders Table Card */} +
+
+ + + + + + + + + + + + + + {filteredOrders.map((ord) => ( + + + + + + + + + + ))} + +
Order DetailsConsignee / DestinationHandcrafted ItemAmountCourier Partner & SlotStatusActions
+
{ord.orderNumber}
+
{ord.date}
+
+
{ord.customerName}
+
{ord.customerCity}, {ord.customerState}
+
+
+ {ord.productTitle} +
+
Qty: {ord.quantity}
+
+
+ ₹{ord.amount.toLocaleString()} +
+
+
{ord.courierPartner}
+
AWB: {ord.awbNumber}
+ {ord.pickupSlot && ( +
+ Slot: {ord.pickupSlot} +
+ )} +
+ + {ord.status.replace('_', ' ').toUpperCase()} + + +
+ + + {ord.status !== 'delivered' && ord.status !== 'dispatched' && ( + + )} +
+
+
+
+ + {/* MODAL 1: 4x6 Thermal Shipping Label View (Faithful to Stitch) */} + {selectedOrderForLabel && ( +
+
setSelectedOrderForLabel(null)}>
+
+
+

+ Thermal 4x6 Shipping Label View +

+ +
+
+ {/* 4x6 Label Container */} +
+
+
+

TRADHOX EXPRESS

+ PREPAID AIR LOGISTICS +
+
+ DEL +
+
+ +
+
AWB: {selectedOrderForLabel.awbNumber}
+ {/* Barcode Simulation */} +
+ ||||||| | ||||| |||| || |||||| | ||||| |||| +
+
ORDER ID: {selectedOrderForLabel.orderNumber}
+
+ +
+
DELIVER TO:
+
{selectedOrderForLabel.customerName}
+
Flat 402, Heritage Residency, MG Road
+
{selectedOrderForLabel.customerCity}, {selectedOrderForLabel.customerState} - 400001
+
Phone: +91 98200 XXXXX
+
+ +
+
RETURN ADDRESS (SELLER GUILD):
+
Raghavendra Artisan Guild
+
42, Shilpkala Marg, Sanganer Craft Cluster
+
Jaipur, Rajasthan - 302029
+
+ +
+
+ Dead Wt: 1.20 Kg | Qty: {selectedOrderForLabel.quantity} +
+
+ GI TAG CRAFT +
+
+
+
+
+ + +
+
+
+ )} + + {/* MODAL 2: Courier Reschedule Modal (Faithful to Stitch) */} + {rescheduleOrder && ( +
+
setRescheduleOrder(null)}>
+
+
+

+ Reschedule Logistics Pickup +

+ +
+
+

+ Order {rescheduleOrder.orderNumber} ({rescheduleOrder.courierPartner}) +

+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+
+
+
+ )} +
+ ); +}; diff --git a/src/pages/dashboard/OverviewPage.tsx b/src/pages/dashboard/OverviewPage.tsx new file mode 100644 index 0000000..b8fa9ef --- /dev/null +++ b/src/pages/dashboard/OverviewPage.tsx @@ -0,0 +1,245 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { useSeller } from '../../context/SellerContext'; +import { + TrendingUp, + Package, + Clock, + Banknote, + ArrowRight, + PlusCircle, + Printer, + CheckCircle2, + Truck, + Award, + Sparkles +} from 'lucide-react'; + +export const OverviewPage: React.FC = () => { + const { user, inventory, orders, walletBalance, nextPayoutDate } = useSeller(); + + const pendingOrders = orders.filter(o => o.status === 'new' || o.status === 'ready_to_ship'); + const lowStockItems = inventory.filter(i => i.stock < 5); + + return ( +
+ {/* Top Welcome Header matching Stitch */} +
+
+
+
+ + Maker Central + + + GI Artisan Maker + + + TRDX-284719 • Verified + + + Heritage Seller Tier • 99.4% Fulfillment + +
+ +

+ Artisan & Earth Co. — Maker Hub +

+

+ Logged in as {user?.name || 'Raghavendra Sharma'} ({user?.storeName || 'Raghavendra Artisan Guild'}) +

+
+ +
+ + + Add Craft Item + + + + Batch Labels + +
+
+ + {/* Courier Dispatch Announcement Banner */} +
+ +
+ Daily Courier Slot: Tradhox Express van dispatch scheduled at 02:30 PM today for 14 boxed orders across 15,000+ pin codes. +
+
+
+ + {/* Metric Cards Grid matching Stitch */} +
+
+
+
+ Catalog Portfolio +
+ +
+
+
{inventory.length} Active SKUs
+
+ ↑ · 92% In-Stock +
+
+
+ +
+
+
+ Ready For Pickup +
+ +
+
+
{pendingOrders.length} Shipments
+
+ Slot reserved: 02:30 PM +
+
+
+ +
+
+
+ Disbursement Reserve +
+ +
+
+
+ ₹{walletBalance.toLocaleString()} +
+
+ Next payout: {nextPayoutDate} +
+
+
+ +
+
+
+ 30-Day Sales Volume +
+ +
+
+
₹1,48,650
+
+ ↑ 18.4% vs last month +
+
+
+
+ + {/* Pending Orders to Dispatch Section */} +
+
+
+
+
+

Pending Orders to Dispatch

+

Orders awaiting doorstep courier handover

+
+ + View All ({orders.length}) + + +
+ +
+ + + + + + + + + + + + {orders.slice(0, 3).map((ord) => ( + + + + + + + + ))} + +
Order #ConsigneeHandcrafted ItemGrossStatus
{ord.orderNumber} +
{ord.customerName}
+
{ord.customerCity}
+
+
+ {ord.productTitle} +
+
+ ₹{ord.amount.toLocaleString()} + + + {ord.status.replace('_', ' ').toUpperCase()} + +
+
+
+
+ + {/* Right Column: Inventory Health & Quick Tools */} +
+
+

Inventory Health

+ + {lowStockItems.length > 0 ? ( +
+ {lowStockItems.map((item) => ( +
+
+ {item.title} +
+
+ {item.title} +
+
+ Stock: {item.stock} left +
+
+
+ + Restock + +
+ ))} +
+ ) : ( +
+ All items stocked. +
+ )} + +
+

Maker Tools

+
+ + Bulk CSV Upload + + + Tax Ledgers + + + Public Storefront + +
+
+
+
+
+
+ ); +}; diff --git a/src/pages/dashboard/PayoutsPage.tsx b/src/pages/dashboard/PayoutsPage.tsx new file mode 100644 index 0000000..b9aef37 --- /dev/null +++ b/src/pages/dashboard/PayoutsPage.tsx @@ -0,0 +1,152 @@ +import React from 'react'; +import { useSeller } from '../../context/SellerContext'; +import { + Banknote, + Download, + Calendar, + ShieldCheck, + FileText, + TrendingUp, + CreditCard +} from 'lucide-react'; + +export const PayoutsPage: React.FC = () => { + const { payouts, walletBalance, nextPayoutDate } = useSeller(); + + const handleDownloadStatement = (refId: string) => { + alert(`Downloading Tax & Settlement Invoice PDF for ${refId}`); + }; + + return ( +
+
+

Finance, Ledgers & Settlements

+

+ View weekly direct bank deposits, deduction breakdowns, and download GST-compliant tax invoices. +

+
+ + {/* Overview Cards */} +
+
+
+
+ Next Disbursement +
+ +
+
+
+ ₹{walletBalance.toLocaleString()} +
+
+ Scheduled for transfer on {nextPayoutDate} +
+
+
+ +
+
+
+ Settlement Account +
+ +
+
+
HDFC Bank •••• 1928
+
+ + Penny-Drop Verified Account +
+
+
+ +
+
+
+ Statutory Deductions + Govt Regulated +
+
+
+ Platform Commission: + 5% - 7% +
+
+ Income Tax TDS (Sec 194-O): + 1.0% +
+
+ GST TCS: + 1.0% +
+
+
+
+
+ + {/* Historical Ledger Table */} +
+
+

Past Disbursements & Transaction Ledgers

+ +
+ +
+ + + + + + + + + + + + + + + {payouts.map((p) => ( + + + + + + + + + + + ))} + +
Disbursement Date & UTROrders SettledGross SalesPlatform CommissionGovt Taxes (TDS/TCS)Logistics SlabsNet Bank DepositStatement
+
{p.payoutDate}
+
{p.referenceId}
+
+ {p.orderCount} Orders + ₹{p.grossAmount.toLocaleString()}- ₹{p.deductions.commission.toLocaleString()} + - ₹{(p.deductions.tds + p.deductions.tcs).toLocaleString()} + - ₹{p.deductions.shipping.toLocaleString()} +
+ ₹{p.netSettlement.toLocaleString()} +
+
via NEFT to •••• {p.bankAccountLast4}
+
+ +
+
+
+
+ ); +}; diff --git a/src/pages/dashboard/SettingsPage.tsx b/src/pages/dashboard/SettingsPage.tsx new file mode 100644 index 0000000..f2f788b --- /dev/null +++ b/src/pages/dashboard/SettingsPage.tsx @@ -0,0 +1,376 @@ +import React, { useState } from 'react'; +import { useSeller } from '../../context/SellerContext'; +import { + CreditCard, + MapPin, + Lock, + Bell, + ShieldCheck, + Check, + Edit3, + Plus, + Phone, + Mail, + MessageSquare, + Key +} from 'lucide-react'; + +export const SettingsPage: React.FC = () => { + const { onboarding, updateOnboarding } = useSeller(); + const [activeTab, setActiveTab] = useState<'bank' | 'logistics' | 'security' | 'notifications'>('bank'); + + // Bank update modal + const [showBankModal, setShowBankModal] = useState(false); + const [bankAcc, setBankAcc] = useState(onboarding.accountNumber); + const [ifsc, setIfsc] = useState(onboarding.ifscCode); + const [bankName, setBankName] = useState(onboarding.bankName); + const [bankOtp, setBankOtp] = useState(''); + const [otpSent, setOtpSent] = useState(false); + + // Password state + const [currPassword, setCurrPassword] = useState(''); + const [newPassword, setNewPassword] = useState(''); + const [confirmPassword, setConfirmPassword] = useState(''); + const [passwordSuccess, setPasswordSuccess] = useState(false); + + // Notification state + const [notifyWhatsapp, setNotifyWhatsapp] = useState(true); + const [notifySms, setNotifySms] = useState(true); + const [notifyEmail, setNotifyEmail] = useState(true); + + const handleUpdateBank = (e: React.FormEvent) => { + e.preventDefault(); + if (!otpSent) { + setOtpSent(true); + setBankOtp('9041'); + } else { + updateOnboarding({ + accountNumber: bankAcc, + ifscCode: ifsc, + bankName + }); + setShowBankModal(false); + setOtpSent(false); + alert('Settlement bank account updated successfully after OTP verification.'); + } + }; + + const handlePasswordChange = (e: React.FormEvent) => { + e.preventDefault(); + if (newPassword !== confirmPassword) { + alert('New passwords do not match!'); + return; + } + setPasswordSuccess(true); + setTimeout(() => setPasswordSuccess(false), 2500); + setCurrPassword(''); + setNewPassword(''); + setConfirmPassword(''); + }; + + return ( +
+
+

Seller Account Settings

+

+ Manage settlement bank preferences, workshop pickup addresses, security keys, and instant notification alerts. +

+
+ + {/* Settings Navigation Tabs */} + + + {/* TAB 1: Bank & Settlements */} + {activeTab === 'bank' && ( +
+
+
+
+
+

Primary Settlement Bank Account

+

Used for all automated weekly NEFT disbursements

+
+ +
+ +
+
+ Account Holder: + {onboarding.accountHolderName} +
+
+ Account Number: + {onboarding.accountNumber} +
+
+ IFSC Code: + {onboarding.ifscCode} +
+
+ Bank & Branch: + {onboarding.bankName} +
+
+ +
+ + Verified for direct deposits via RBI Automated Clearing House (NACH / NEFT). +
+
+
+
+ )} + + {/* TAB 2: Pickup Logistics */} + {activeTab === 'logistics' && ( +
+
+
+
+
+

Workshop Pickup Address

+

Couriers will arrive here during scheduled pickup windows

+
+ Default Warehouse +
+ +
+
{onboarding.tradeName} Workshop
+
{onboarding.addressLine1}
+
{onboarding.addressLine2}
+
+ {onboarding.city}, {onboarding.state} - {onboarding.pincode} +
+
+ +
+ Logistics Partners Servicing this Hub: Delhivery Surface, Ekart Logistics, BlueDart Express. +
+
+
+
+ )} + + {/* TAB 3: Security & Password */} + {activeTab === 'security' && ( +
+
+
+

Change Account Password

+ +
+
+ + setCurrPassword(e.target.value)} + /> +
+ +
+ + setNewPassword(e.target.value)} + /> +
+ +
+ + setConfirmPassword(e.target.value)} + /> +
+ + {passwordSuccess && ( +
+ Password updated successfully! +
+ )} + + +
+
+
+
+ )} + + {/* TAB 4: Notifications */} + {activeTab === 'notifications' && ( +
+
+
+

Order & Payout Notification Channels

+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+
+ )} + + {/* Modal: Update Bank Account with OTP (Faithful to Stitch) */} + {showBankModal && ( +
+
setShowBankModal(false)}>
+
+
+

+ Update Bank Settlement Account +

+ +
+
+
+
+ + setBankAcc(e.target.value)} + /> +
+ +
+ + setIfsc(e.target.value.toUpperCase())} + /> +
+ +
+ + setBankName(e.target.value)} + /> +
+ + {otpSent && ( +
+ + setBankOtp(e.target.value)} + /> +
+ )} + +
+ + +
+
+
+
+
+ )} +
+ ); +}; diff --git a/src/pages/dashboard/StorefrontPage.tsx b/src/pages/dashboard/StorefrontPage.tsx new file mode 100644 index 0000000..4730523 --- /dev/null +++ b/src/pages/dashboard/StorefrontPage.tsx @@ -0,0 +1,212 @@ +import React, { useState } from 'react'; +import { useSeller } from '../../context/SellerContext'; +import { + Store, + Camera, + MapPin, + Award, + Share2, + Check, + Eye, + Sparkles +} from 'lucide-react'; + +export const StorefrontPage: React.FC = () => { + const { onboarding, updateOnboarding, inventory } = useSeller(); + const [storeName, setStoreName] = useState(onboarding.storeName || 'Raghavendra Artisan Guild'); + const [bio, setBio] = useState(onboarding.artisanBio || ''); + const [lineage, setLineage] = useState(onboarding.craftLineageYears || 28); + const [location, setLocation] = useState(onboarding.workshopLocation || 'Sanganer, Jaipur, Rajasthan'); + const [isSaved, setIsSaved] = useState(false); + + const handleSave = (e: React.FormEvent) => { + e.preventDefault(); + updateOnboarding({ + storeName, + artisanBio: bio, + craftLineageYears: Number(lineage), + workshopLocation: location + }); + setIsSaved(true); + setTimeout(() => setIsSaved(false), 2500); + }; + + return ( +
+
+
+

Public Storefront Customizer

+

+ Showcase your master craftsmanship, regional lineage, and story to buyers across India and worldwide. +

+
+
+ +
+
+ +
+ {/* Editor Form */} +
+
+

Edit Workshop Profile

+ +
+
+ +
+ setStoreName(e.target.value)} + /> +
+
+ +
+ +
+ setLineage(Number(e.target.value))} + /> +
+
+ +
+ +
+ setLocation(e.target.value)} + /> +
+
+ +
+ +
+ +
+
+ + +
+
+
+ + {/* Live Storefront Preview */} +
+
+ {/* Banner */} +
+ Workshop Banner { + (e.target as HTMLImageElement).src = '/images/landing/hero-showcase.jpg'; + }} + /> +
+
+ + {/* Profile Bar */} +
+
+
+ {storeName} +
+

{storeName}

+
+ + {location} + • + + {lineage} Years Heritage +
+
+
+ + + Certified Guild Seller + +
+ + {/* Bio */} +
+

+ "{bio}" +

+
+ + {/* Featured Products from Inventory */} +
+

+ Featured Masterpieces by this Guild ({inventory.length}) +

+
+ {inventory.slice(0, 3).map((item) => ( +
+
+
+ {item.title} +
+
+
+ {item.title} +
+
+ ₹{item.price.toLocaleString()} +
+
+
+
+ ))} +
+
+ +
+
+
+
+
+ ); +}; diff --git a/src/styles/custom-bulma.css b/src/styles/custom-bulma.css new file mode 100644 index 0000000..f565ae1 --- /dev/null +++ b/src/styles/custom-bulma.css @@ -0,0 +1,281 @@ +@import './variables.css'; + +/* Base & Global Typography */ +html, body { + font-family: var(--trad-font-sans); + background-color: var(--trad-bg); + color: var(--trad-text-primary); + min-height: 100vh; + margin: 0; + padding: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Accessibility & Focus Visible */ +a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { + outline: 2px solid var(--trad-primary) !important; + outline-offset: 2px !important; +} + +/* Touch targets >= 44px on interactive controls */ +button, .button, .input, .select select, .pagination-previous, .pagination-next, .pagination-link { + min-height: 44px; +} + +/* Headings */ +h1, h2, h3, h4, h5, h6, .title { + font-family: var(--trad-font-sans); + color: var(--trad-text-primary); + letter-spacing: -0.015em; + font-weight: 700; +} + +/* Brand Buttons */ +.button.is-trad-primary { + background-color: var(--trad-primary); + color: #ffffff !important; + border-color: transparent; + border-radius: 9999px; + font-weight: 600; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(121, 27, 44, 0.2); +} +.button.is-trad-primary:hover, .button.is-trad-primary:focus { + background-color: var(--trad-primary-hover); + color: #ffffff !important; + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(121, 27, 44, 0.3); +} + +.button.is-trad-outlined { + background-color: transparent; + color: var(--trad-maroon) !important; + border: 1.5px solid var(--trad-maroon); + border-radius: 9999px; + font-weight: 600; + transition: all 0.2s ease; +} +.button.is-trad-outlined:hover { + background-color: var(--trad-maroon); + color: #ffffff !important; +} + +.button.is-trad-navy { + background-color: var(--trad-navy) !important; + color: #ffffff !important; + border-radius: 8px; + font-weight: 600; + border: none; +} +.button.is-trad-navy:hover { + opacity: 0.92; +} + +.button.is-trad-secondary { + background-color: var(--trad-terracotta); + color: #ffffff !important; + border-radius: 9999px; + font-weight: 600; + border: none; +} +.button.is-trad-secondary:hover { + background-color: var(--trad-secondary); +} + +/* Cards & Containers */ +.card, .trad-card { + background-color: var(--trad-surface-card); + border: 1px solid var(--trad-border); + border-radius: 16px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.02); + transition: all 0.2s ease; + overflow: hidden; +} +.card:hover, .trad-card:hover { + border-color: #d1cbc1; +} + +.trad-card-interactive:hover { + border-color: var(--trad-maroon); + box-shadow: 0 8px 24px -4px rgba(103, 27, 38, 0.12); + transform: translateY(-2px); +} + +/* Bulma Navbar Overrides */ +.navbar { + background-color: rgba(255, 255, 255, 0.96) !important; + backdrop-filter: blur(10px); + border-bottom: 1px solid var(--trad-border); + min-height: 4rem; +} +.navbar-item { + color: var(--trad-text-secondary) !important; + font-weight: 500; + font-size: 0.95rem; +} +.navbar-item:hover, .navbar-item.is-active { + color: var(--trad-maroon) !important; + background-color: transparent !important; +} + +/* Tags & Badges */ +.tag.is-gi-tag { + background-color: var(--trad-forest-light); + color: var(--trad-forest-dark); + font-weight: 600; + border-radius: 9999px; + border: 1px solid rgba(21, 128, 61, 0.2); +} +.tag.is-odop-tag { + background-color: #FEF3C7; + color: #92400E; + font-weight: 600; + border-radius: 9999px; + border: 1px solid rgba(146, 64, 14, 0.2); +} +.tag.is-trad-wine { + background-color: rgba(103, 27, 38, 0.08); + color: var(--trad-maroon); + font-weight: 600; + border-radius: 9999px; + border: 1px solid rgba(103, 27, 38, 0.15); +} + +/* Form Controls */ +.input, .textarea, .select select { + border: 1px solid var(--trad-border); + border-radius: 12px; + background-color: #ffffff; + color: var(--trad-text-primary); + font-size: 0.95rem; + box-shadow: none !important; +} +.input:focus, .textarea:focus, .select select:focus { + border-color: var(--trad-primary) !important; + box-shadow: 0 0 0 3px rgba(121, 27, 44, 0.1) !important; +} + +/* Horizontal Scroll Rails */ +.horizontal-rail { + display: flex; + overflow-x: auto; + scroll-snap-type: x mandatory; + -webkit-overflow-scrolling: touch; + gap: 1rem; + padding-bottom: 0.5rem; +} +.horizontal-rail::-webkit-scrollbar { + height: 6px; +} +.horizontal-rail::-webkit-scrollbar-thumb { + background: #d4cdc5; + border-radius: 10px; +} +.horizontal-rail > * { + scroll-snap-align: start; + flex-shrink: 0; +} + +/* Steps / Progress Flow */ +.trad-step-bar { + display: flex; + align-items: center; + justify-content: space-between; + position: relative; + margin-bottom: 2rem; +} +.trad-step-item { + display: flex; + flex-direction: column; + align-items: center; + position: relative; + z-index: 1; + text-align: center; +} +.trad-step-circle { + width: 38px; + height: 38px; + border-radius: 50%; + background-color: #ffffff; + border: 2px solid var(--trad-border); + color: var(--trad-text-secondary); + display: flex; + align-items: center; + justify-content: center; + font-weight: 700; + font-size: 0.85rem; + transition: all 0.2s ease; +} +.trad-step-item.is-active .trad-step-circle { + background-color: var(--trad-primary); + border-color: var(--trad-primary); + color: #ffffff; + box-shadow: 0 0 0 4px rgba(121, 27, 44, 0.15); +} +.trad-step-item.is-complete .trad-step-circle { + background-color: var(--trad-forest); + border-color: var(--trad-forest); + color: #ffffff; +} +.trad-step-label { + font-size: 0.75rem; + font-weight: 600; + margin-top: 0.5rem; + color: var(--trad-text-secondary); + max-width: 80px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.trad-step-item.is-active .trad-step-label { + color: var(--trad-primary); + font-weight: 700; +} + +/* Tables */ +.table.trad-table { + background-color: transparent; +} +.table.trad-table thead th { + color: var(--trad-text-secondary); + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.05em; + border-bottom: 2px solid var(--trad-border); + padding: 0.75rem 1rem; +} +.table.trad-table tbody td { + vertical-align: middle; + border-bottom: 1px solid var(--trad-border); + padding: 1rem; + font-size: 0.9rem; +} + +/* 4x6 Thermal Label Standard Styling */ +.thermal-label-container { + width: 384px; /* 4 inches at 96 dpi */ + min-height: 576px; /* 6 inches at 96 dpi */ + background: #ffffff; + border: 2px dashed #333; + padding: 16px; + margin: 0 auto; + font-family: monospace; + box-sizing: border-box; +} + +/* Responsive utilities */ +@media screen and (max-width: 768px) { + .trad-hide-mobile { + display: none !important; + } + .trad-stack-mobile { + flex-direction: column !important; + } + .trad-full-mobile { + width: 100% !important; + } + .trad-p-mobile { + padding: 1rem !important; + } +} diff --git a/src/styles/variables.css b/src/styles/variables.css new file mode 100644 index 0000000..dc3c253 --- /dev/null +++ b/src/styles/variables.css @@ -0,0 +1,40 @@ +:root { + /* Primary & Brand */ + --trad-maroon: #671B26; + --trad-primary: #791B2C; + --trad-primary-hover: #52141E; + --trad-primary-light: #FFDAD6; + + /* Secondary & Accents */ + --trad-terracotta: #C25E3E; + --trad-secondary: #9D4225; + --trad-secondary-light: #FFDBD0; + + /* Trust & Geographical Indication (GI) / Success */ + --trad-forest: #15803D; + --trad-forest-dark: #004A1E; + --trad-forest-light: #DCFCE7; + + /* Enterprise & Utilities */ + --trad-navy: #1B2667; + --trad-bronze: #675C1B; + + /* Tactile Canvas & Surfaces */ + --trad-bg: #FCF9F8; + --trad-canvas: #FAF8F5; + --trad-surface-card: #FFFFFF; + --trad-surface-alt: #F5F2EB; + --trad-surface-dim: #DCD9D9; + + /* Borders & Dividers */ + --trad-border: #E7E3DA; + --trad-border-light: #F0EDED; + + /* Typography Soot & Charcoal */ + --trad-text-primary: #1A1A1A; + --trad-text-secondary: #5A5550; + --trad-text-muted: #897172; + + /* Font Family */ + --trad-font-sans: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; +} diff --git a/src/types/seller.ts b/src/types/seller.ts new file mode 100644 index 0000000..5434b98 --- /dev/null +++ b/src/types/seller.ts @@ -0,0 +1,106 @@ +export interface UserProfile { + id: string; + name: string; + email: string; + phone: string; + role: string; + avatar: string; + storeName: string; +} + +export interface OnboardingData { + // Step 1: Account + fullName: string; + email: string; + phone: string; + isOtpVerified: boolean; + + // Step 2: GST / Enrolment ID + taxMode: 'gstin' | 'enrolment'; + gstin: string; + enrolmentId: string; + legalEntityName: string; + tradeName: string; + exemptionReason: string; + + // Step 3: Pickup Address + addressLine1: string; + addressLine2: string; + city: string; + state: string; + pincode: string; + isServiceable: boolean; + + // Step 4: Bank Details + accountHolderName: string; + accountNumber: string; + ifscCode: string; + bankName: string; + isBankVerified: boolean; + + // Step 5: Craft Categories + categories: string[]; + + // Step 6: Initial Product Sample + sampleProductTitle: string; + sampleProductCategory: string; + samplePrice: number; + sampleStock: number; + sampleImages: string[]; + + // Step 7: Store Profile & Lineage + storeName: string; + craftLineageYears: number; + artisanBio: string; + workshopLocation: string; + artisanAvatar: string; +} + +export interface InventoryItem { + id: string; + sku: string; + title: string; + category: string; + craftTechnique: string; + giTagged: boolean; + price: number; + mrp: number; + stock: number; + status: 'active' | 'low_stock' | 'out_of_stock'; + image: string; + salesCount: number; +} + +export interface OrderItem { + id: string; + orderNumber: string; + date: string; + customerName: string; + customerCity: string; + customerState: string; + productTitle: string; + quantity: number; + amount: number; + status: 'new' | 'ready_to_ship' | 'dispatched' | 'delivered' | 'cancelled'; + courierPartner: string; + awbNumber: string; + pickupSlot?: string; + deliveryDate?: string; +} + +export interface PayoutTransaction { + id: string; + payoutDate: string; + referenceId: string; + orderCount: number; + grossAmount: number; + deductions: { + commission: number; + tds: number; + tcs: number; + shipping: number; + }; + netSettlement: number; + status: 'settled' | 'processing' | 'scheduled'; + bankAccountLast4: string; +} diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..c9b9d1e --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": false, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..9f0d0fc --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": false, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..4e0bf6e --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import path from 'path' + +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + server: { + port: 3000, + host: true + } +})