A public log of what we've shipped over the past year. Written for customers and prospects, not engineers — so it leaves the internals out. Dates reflect when the work landed in the main branch.
This quarter
May 2026
Multi-language support (English and 简体中文) — Menus, the sign-out flow, the settings page, and the Business Settings modal now switch between English and Simplified Chinese from a toggle in the header. The choice is saved to each user's account, so the App stays in their language across devices and browsers. More screens will be translated in follow-up updates.
May 2026
Pick where you land after sign-in — Settings has a new Landing Page dropdown — Customers, Orders, Products, Stores, Routes, or Map. Each user gets their own preference, so an Account Owner can land on Stores while a rep lands on their Route. The choice follows you across devices.
May 2026
Account page retired; admin tools faster and more reliable — The standalone Account page is gone. Profile, route, and team management now run from inside the App, with account changes processed on our servers instead of round-tripping through a separate page. Removes a class of mid-task auth interruptions that admins had been seeing on the dispatch and team screens.
May 2026
Integration pages renamed and tidied — Eight integration screens dropped the leftover "Test" wording (Shopify, WooCommerce, Square, QuickBooks, Mailchimp, Brevo, Authorize.net, Google Calendar). The Shopify integration page no longer asks for a private-app token — the standard OAuth connection covers it, and the manual entry was a source of misconfiguration.
May 2026
Login email locked in Business Settings — Your login email is now read-only in the Business Settings modal. The field still displays so you know which email is on file, but a stray edit can no longer change your own sign-in identifier.
May 2026
Cash and promo-code orders show as paid — A Mark as Paid action records cash payments against an order. Orders that close out entirely on a promo code (the discount covers the full amount) now mark themselves paid on use, so they no longer sit in the unpaid view.
May 2026
Nav drawer reorganized — Manage Routes, Assign Stores, and Team are grouped under a single Admin section in the navigation drawer, and Admin sits at the bottom. Reps see a less cluttered menu; admins still have everything one section away.
May 2026
Map opens faster on Android — The map used to wait for a fresh GPS fix before drawing anything; on Android that wait often timed out and the map appeared blank. It now opens immediately using the last-known location and re-centers when a new fix arrives.
May 2026
Shopify app returns you to the integration page — Removing and re-adding the App from your Shopify admin used to drop you on the default home view; you now land back on the Shopify Integration page where the workflow continues.
May 2026
Route logs and time-and-mileage — When a rep starts a route, the App records the GPS path, the moments they tapped "On my way", "Arrived", and "Mark Complete" at each stop, and the total distance driven. A new admin "Route Logs" page replays each route on a map with the visit timeline alongside it — so you can see exactly where reps went, how long they spent, and what they reported.
May 2026
Photos during visits — Reps can take a photo from the visit screen and attach it to the current visit with an optional caption. Photos are stored privately to your business — only authenticated users can view them. Each store's details now has a Photos view with the image, rep, route, caption, and time taken.
May 2026
Structured visit actions — Beyond the freeform visit report, reps can now log structured actions during a stop: inventory check, damaged or returned product, kiosk status, email signup, free-form note. Each action type has its own field set, configurable per business from Settings → Customize Visit Actions.
May 2026
Visit history per store — A "Visit History" view on any store, showing every recorded visit with the rep, on-the-way / arrived / departed timestamps, dwell time, and outcome.
May 2026
Battery savings on the rep App — GPS now only tracks while a route is in progress. Outside of an active route the App doesn't poll location at all, so the phone isn't being drained between routes.
May 2026
Offline-tolerant visit writes — Visit lifecycle, visit reports, visit actions, and route updates all queue locally and sync once the rep is back on network. Reps don't lose work in dead-cell areas mid-route.
May 2026
Android typing fix — Resolved a long-standing bug on Android Chrome where typing into form fields could cause the cursor to jump to the start of the field, producing reversed text. Affected every form across the App.
April 2026
A customer-facing marketplace — A separate, installable App where your customers and affiliates can place orders, check out with a credit card or a payment link, see their order history, and bookmark your store on their phone. Per-business branding — your logo goes on their home screen.
April 2026
Marketplace order form polish — Browsable product list (so customers don't have to know the SKU), promo code input with live discount preview, Google address autocomplete on shipping fields, native share button into whatever messaging or social App the customer has installed. Affiliates land on a tailored form (no B2B prefill they don't need). A support form is built in for customers to reach you without leaving the App.
April 2026
Affiliate & referral program — Shareable referral links, per-customer affiliate tracking, commission history, and a store-credit system that issues discount codes on demand. Native share from mobile and desktop into whichever App the user has installed — social, messaging, SMS, email. Affiliates see a read-only order history. Store owners get a notification when an affiliate places an order.
April 2026
Discount engine — Code-based and trigger-based discounts. Target by product, by customer, or by affiliate. Mobile-friendly admin tables. The affiliate credit system plugs into the same engine.
April 2026
B2B wholesale flow — One customer account can have many retail stores attached to it. Orders auto-create the customer in Shopify and QuickBooks if they don't exist yet. Tax is captured on every order so the destination system can reconcile without guessing.
April 2026
Per-customer wholesale rules — From any B2B customer's store details, set a per-customer wholesale discount and choose which products that customer can see. Defaults are the marketplace-wide settings; each B2B record can override.
April 2026
B2B order history with attribution — Every order for a B2B customer is viewable from the customer record, with the rep, the date, the channel (admin entry, marketplace, vendor sync), and the source preserved across re-imports — Shopify and WooCommerce attributions stay correct after a refresh.
April 2026
QuickBooks — Connect your QuickBooks account, import customers and invoices, auto-create invoices on B2B orders, deliver hosted payment links. Connections stay active automatically so they don't quietly drop.
April 2026
Square stays connected — Square access tokens expire after 30 days; the App now refreshes them automatically on a daily schedule, so connections don't quietly drop and you don't have to re-authorize on a Monday morning.
April 2026
Branded transactional emails — Order confirmations, payment links, and reminder messages now carry your logo, keyed to your business. Stays consistent with your branding on the App and on the marketplace.
April 2026
Reminder and calendar polish — Edit the rep's phone directly from the reminder form. SMS / Email checkboxes auto-disable when those channels aren't configured. Timezone handling fixed for recurring → one-time conversions. Calendar bug fixed where today's events disappeared on click.
April 2026
Mobile App install polish — Extensive work on App install and update across iOS and Android: per-business icons keyed to each business, cache refresh when a new build ships, install screenshots in the prompt, persistence improvements so reps stay signed in between uses. Tested end-to-end on iOS Safari and Chrome on Android.
April 2026
Order form refinements — Tax is captured on every order form and recorded on the order, so the destination system (Shopify, WooCommerce, QuickBooks) can reconcile. Products imported from a store in a different region keep their source currency instead of being flattened to the business default.
March–April 2026
Credit-card processing, end to end — Square Web Payments and Authorize.net Accept.js for direct charges — card details tokenized in the browser, never touching our servers. Square, WooCommerce, and QuickBooks for hosted payment links, emailed to the customer with a "Complete Payment" button. Every transaction is recorded. A failed charge doesn't destroy the order.
March–April 2026
Navigation and UI — Desktop navigation rebuilt into four collapsible sections instead of one long list. Mobile menu rebuilt so settings, account, and logout are actually reachable on an iPhone. Manage Routes page restyled to match the rest of the App.
March 2026
Notifications — "On my way" and "Running late (+10 / +15 / +30 min)" buttons from the route runner. In-App alerts via websocket. Store-level opt-in for SMS and email. Reminder CRUD with a separate scheduler worker, and Google Calendar sync on reminders.
March 2026
Infrastructure — API, scheduler, payments, and marketplace now run as separate Node processes. Easier to scale one without the others, and a restart on one doesn't affect the rest.
February 2026
Google Calendar — Visits push to the calendar. Calendar events pull back as visits. Gmail can be used as your notification sender.
February 2026
Mailchimp, deeper — Contact import, list import, and opt-in / unsubscribe status tied directly to each D2C customer record. When someone subscribes in Mailchimp, your reps see it on the customer. When a customer opts in from an order form, it flows the other way. Mandrill wired into the notification dispatcher, so transactional emails (order confirmations, payment links, reminders) can go through your Mailchimp account.
February 2026
Brevo — Same shape as Mailchimp — contact import, list import, transactional, opt-in linkage — but Brevo-backed. Often a less expensive alternative with newer technology underneath. Useful for teams who never used Mailchimp, or who want a clean path off it. Because both integrations write to the same base tables, moving from one to the other is a connection change rather than a data migration.
February 2026
Dynamic forms — Forms across the App read directly from your database schema. When we add a column to a table, the form picks it up without a front-end change — less code to maintain, fewer places for things to drift out of sync.
January–April 2026
Under the hood — Core rebuilt so orders, products, and customers live in our tables in a single canonical shape, tagged with the vendor they came from (Shopify, WooCommerce, Square, or native). The UI reads one view regardless of source. Cross-vendor customer identity — if the same email shows up in Shopify and Mailchimp, we link the two records and your reps see one person, not two. Migration tooling with snapshots, dry runs, and per-tenant execution. WooCommerce webhook resilience and a six-hour health check.
Earlier in the year
January 2026
Square integration — Customer and product import, order sync, inventory counts. First tested with Mila Earth. Square is now one of our three order-destination integrations (alongside Shopify and WooCommerce) and also one of our payment processors.
January 2026
WooCommerce integration — Brought up to parity with the Shopify integration — customers, products, orders, inventory, webhooks. Tagging system extended from Mailchimp to WooCommerce so the same email across both is one unified customer. QR-code payment setup supported.
January 2026
Cross-vendor tagging and identity — The beginnings of the identity-linking system: one email across Mailchimp, Shopify, WooCommerce, and Square becomes one identity with tags attached. This is the foundation for the deeper Mailchimp work we shipped in Q1.
January 2026
Webhook architecture — Moved to one queue per vendor instead of one queue for everything — easier to track usage, diagnose vendor-specific problems, and avoid cross-vendor bugs. Webhooks carry both the vendor identifier and the bid so the consumer knows exactly where a message came from.
August 2025
Google Traffic and advanced routing — Toggle for traffic-aware route ordering. Google Maps polylines overlaid on the admin route management view. Service time per stop factored into the plan.
July–August 2025
Waze, Apple Maps, and Google Maps as driving options — Route stops and route starts can open in any of the three. User preference saved in settings. No more copy-pasting addresses into a separate App.
July 2025
Shopify integration — The first deep vendor integration. Customer, product, order, and inventory import. Address geocoding on import. Webhook creation via GraphQL. Custom Shopify App flow for setup.
July 2025
App branding per business — Upload your own logo during account setup. Per-business App icons on iOS and Android home screens. Color and theme customization keyed to your account, saved at sign-up so branding appears from the first page you see.
July 2025
Form modernization — Moved form components to the ElementInternals API — fixes a long-standing gap between web components and HTML forms. Single-customer form rewritten on the new foundation. Browser-autofill suppression for fields that shouldn't be autofilled.
July 2025
Tailwind removal — Removed Tailwind from all EJS templates and Lit components, moved styles to component-local CSS. Smaller bundle, clearer ownership, fewer places for styling to drift out of sync.
May–June 2025
Google Places prospecting — Search Google Places to find new leads near a point or along a route. Search by keyword and by business type (e.g. "vape shops within 5 km"). Save selected places as prospects in your customer table. Mobile toggle between map view and results list.
May 2025
Store table redesign — Static maps replaced dynamic ones in store rows — faster to load, cheaper to render, better on mobile. Directions button per stop. Info modals rewritten. Paging so long lists stay usable on phones.
May 2025
Modal UX overhaul — Swipe-to-dismiss on mobile. Click-outside-to-close. Flicker on the pick-map eliminated. Fonts made readable in daylight — the dreaded
font-light pass removed across the App.April–May 2025
Stay-signed-in and shared-browser hygiene — Reps stay signed in across the work week instead of getting kicked back to the sign-in page mid-route. When a user signs out, their local data is cleared — so when a different user signs in on the same browser (common in shared-vehicle and shared-device setups), they don't inherit the previous user's view.
April 2025
Route planning UI — Route edit forms cleaned up. Timezone per user set by IANA name (e.g.
America/Edmonton) rather than numeric offset, so daylight-saving transitions are handled correctly. AccountOwner and Dispatch roles can edit every rep's routes. Date math in the route modal. Dispatch can be assigned routing-only access.April 2025
Static map component — Reusable static-map component used across admin route views, store details, and the route picker. Polyline rendering with right-fit zoom. Way cheaper than dynamic maps for views where the user just needs to see the shape.
Thanks
To Mila Earth and Bob The Dog for running on this every day and telling us, quickly, when something wasn't good enough. To the Google Maps team, Shopify, WooCommerce, Square, QuickBooks, Mailchimp, Brevo, Authorize.net, and Twilio for the APIs and the docs we built on top of. And to every rep, dispatcher, and founder who told us what the App was doing wrong — we listened.