- Logical Name: BOPIS ("Buy Online, Pick Up In Store").
- Business Purpose: This repository contains the HotWax BOPIS application used by store teams to manage buy-online-pickup-in-store and ship-to-store fulfillment. It provides a store-ops UI for finding pickup orders, creating picklists, packing/handing over shipments, and sending customer pickup notifications against an OMS backend.【F:src/services/OrderService.ts†L1-L378】
-
Core domains/business rules:
- Order pickup and ship-to-store fulfillment (pickup orders, packed/completed shipments, shipment status transitions).【F:src/services/OrderService.ts†L7-L246】
- Picklist creation and printing; packing slips and shipping labels for outbound handover flows.【F:src/services/OrderService.ts†L73-L227】
- Order item rejection/cancel flows and pickup notifications to customers.【F:src/services/OrderService.ts†L66-L205】
- Inventory visibility for pickup/shipping and store availability lookup.【F:src/services/StockService.ts†L1-L22】【F:src/services/UtilService.ts†L146-L217】
- Product search and component lookups for store associates.【F:src/services/ProductService.ts†L1-L48】
- User authentication, profile, permissions, and store-level configuration settings.【F:src/services/UserService.ts†L1-L190】【F:src/services/UtilService.ts†L46-L108】
-
Core business workflows implemented in this component:
- Retrieve pickup/ship-to-store orders, view shipment state, and progress shipments through pack/ship/handover events via OMS APIs.【F:src/services/OrderService.ts†L7-L246】
- Generate and print picklists and packing materials required for fulfillment execution in-store.【F:src/services/OrderService.ts†L73-L227】
- Trigger customer notifications when orders are scheduled for pickup or handed over.【F:src/services/OrderService.ts†L145-L205】
- Check shipping inventory and view facility-level availability for rerouting or substitution decisions.【F:src/services/StockService.ts†L1-L24】
-
Tech Stack:
- Vue 3 + Vue Router + Vuex for SPA UI state and routing.【F:package.json†L21-L39】
- Ionic Vue + Capacitor for cross-platform (web/iOS/Android) delivery.【F:package.json†L15-L18】
- HotWax OMS API SDK (
@hotwax/oms-api) for OMS integration along with HotWax UI components.【F:package.json†L20-L21】 - Firebase for hosting/notifications support.【F:package.json†L28-L28】
-
Dependency Map (App repo):
- HotWax OMS APIs for order, shipment, inventory, and configuration operations (e.g.,
oms/orders/pickup,poorti/shipments,poorti/getInventoryAvailableByFacility,storeLookup).【F:src/services/OrderService.ts†L7-L246】【F:src/services/StockService.ts†L1-L24】【F:src/services/UtilService.ts†L199-L217】 - HotWax admin APIs for user/profile and enumeration/configuration data (e.g.,
admin/user/profile,admin/enumGroups).【F:src/services/UserService.ts†L15-L69】【F:src/services/UtilService.ts†L6-L44】 - Shopify integration for access token generation when linking to Shopify storefronts.【F:src/services/ShopifyService.ts†L1-L12】
- HotWax OMS APIs for order, shipment, inventory, and configuration operations (e.g.,
-
Run locally:
- Install dependencies:
npm install - Start the dev server:
ionic serve.
- Install dependencies:
-
Environment variables/configuration:
VUE_APP_BASE_URLpoints to the HotWax OMS instance the app should connect to.VUE_APP_LOGIN_URLdefines the login portal for authentication.VUE_APP_VIEW_SIZE, locale settings, and product/order identification settings tune list sizes and lookup behavior.- Firebase configuration (
VUE_APP_FIREBASE_CONFIG,VUE_APP_FIREBASE_VAPID_KEY) enables notifications/hosting integration. - Product store setting enums (
VUE_APP_PRODUCT_STORE_SETTING_ENUMS) define feature toggles for fulfillment behavior (e.g., picklist/packing slip printing).【F:.env.example†L1-L17】
Ionic CLI - If you don't have the ionic CLI installed refer official documentation for the installation instructions.
- Download the app from release page and extract it.
- Go to the app directory.
- Run following command to download dependencies
npm i - Create a
.envfile by taking reference from the.env.exampleand set theVUE_APP_BASE_URLto the instance you want to connect the app. - To run the app in browser use the command:
ionic serve
- Open a Terminal window
- Clone app using the command:
git clone https://github.com/hotwax/bopis.git <repository-name> - Go to the directory using command:
cd <repository-name> - Run following command to download dependencies
npm i - Create a
.envfile by taking reference from the.env.exampleand change theVUE_APP_BASE_URLto the instance you want to connect the app. - To run the app in browser use the command:
ionic serve
We are using firebase hosting for the Bopis app deployment Here are the steps to deploy app on firebase hosting
- Firebase Cli should be installed
- Firebase project should be created
- You should have access to firebase project
-
Update the DEV instance url at .env.production file
-
Build the application using following command
ionic build -
Login into firebase
firebase login -
Run following command to deploy to firebase hosting
firebase deploy --only hosting:sm-dev
As there is a bug in Ionic cli due to which we cannot pass flag variables for commands (See #4669). To build application in different modes we need to use vue-cli-service to build and then use the built app using capacitor copy command further.
Follow following instructions:
-
Manually build the application using vue-cli-service: npx vue-cli-service build --mode=sandbox
-
Copy web assets to the native project without building the app: ionic capacitor copy ios --no-build
-
Open the Android Studio / XCode project: ionic capacitor open android
ionic capacitor open ios
- Fork the repository and clone it locally from the
mainbranch. Before starting your work make sure it's up to date with currentmainbranch. - Pick an issue from here. Write in the issue comment that you want to pick it, if you can't assign yourself. Please stay assigned to one issue at a time to not block others.
- Create a branch for your edits. Use the following branch naming conventions: bopis/issue-number.
- Please add issue number to your commit message.
- Propose a Pull Request to
mainbranch containing issue number and issue title. - Use Pull Request template (it's automatically added to each PR) and fill as much fields as possible to describe your solution.
- Reference any relevant issues or other information in your PR.
- Wait for review and adjust your PR according to it.
- Congrats! Your PR should now be merged in!
If you can't handle some parts of the issue then please ask for help in the comment. If you have any problems during the implementation of some complex issue, feel free to implement just a part of it.
Always define the type of issue:
- Bug report
- Feature request
While writing issues, please be as specific as possible. All requests regarding support with implementation or application setup should be sent to.
You may find some useful resources for improving the UI / UX of the app here.
If you have any questions or ideas feel free to join our Discord channel.
Bopis app is completely free and released under the Apache v2.0 License. Check LICENSE for more details.
