Skip to content

Release v0.1.0 - #64

Merged
roncodes merged 161 commits into
mainfrom
release/v0.1.0
Oct 16, 2026
Merged

roncodes merged 161 commits into
mainfrom
release/v0.1.0

Conversation

@roncodes

@roncodes roncodes commented Oct 6, 2026

Copy link
Copy Markdown
Member

Release v0.1.0

Release branch for the Network edition (marketplace) and the extensibility work. Cut from main; merging it tags v0.1.0 through the release workflow (#55).

Included via #54 (feature/marketplace-edition → release/v0.1.0)

On this branch

  • Version bumped to 0.1.0

Before merging

  • Merge feat: restore marketplace edition #54 into this branch
  • Device testing on iOS and Android: single-store and Network edition flows, cart and checkout, login, push notifications
  • Web build smoke test

roncodes and others added 30 commits August 11, 2026 23:33
- Read runtime app config for Tamagui custom colors via src/env.ts
- Web MMKV shim: stable defaults, cross-hook sync, raw string storage
- Web device id is generated once and reused
- Use browser confirm for cart replacement on web
- Guard StoreCategory deep links and boot splash on missing config
- Return to the calling screen after location permission is granted
- Replace undefined palette tokens with defined theme tokens
- Pass missing env keys to the web build and derive __DEV__ from mode
- Fix storage setters dropping values and CI .env overwrites
- Add TrueVegan themes to the web CSS theme-name fix
- Move Network edition screens to src/screens/network (NetworkHome, NetworkSearch,
  NetworkMap, NetworkCategory, NetworkStore, NetworkProduct) and rename routes/tabs
- Move marketplace-runtime to src/network/network-runtime; storefront mode is now 'network'
- Rename MarketplaceStoreCard to NetworkStoreCard and the i18n namespace to Network
- Declare Network deep-link paths once (stores/:storeId, stores/:storeId/products/:productId,
  stores/:storeId/categories/:categoryId, categories/:categoryId, search, map)
- Pin persisted storage scope values with a test so renames cannot orphan data
- Replace lint/typecheck:marketplace with lint/typecheck:strict and update CI and README
- Remove unused placeholder NetworkHomeScreen, ConfigContext, empty TabBar and
  ProductBookingPanel, and the stale canAddProductToCart helper
The device was only registered at login, and only if a push token had
already been received. Tokens that arrived later (e.g. after granting the
Android 13+ notification permission) or rotated were never registered, so
those customers got no push notifications. Register whenever the token or
the customer changes, and unregister the token on logout so the next
customer on the device does not receive the previous customer's pushes.
- Stable screen ids with typed params for overridable screens
- Lazy default screens, compiled-in overrides and declarative variants
- screenSlot(id) components used by navigators instead of screen imports
- Error boundaries fall back to the default screen, then a load-error view
- Preload initial screens during boot to avoid a loading frame
- storefront.extensions.ts as the brand override entry point
- Network store/product shells render the store.home/product.detail slots
- ESLint rule and test enforcing the navigator import boundary
- Registry, fallback and type tests; docs/extensibility.md
- Register i18n translations lazily instead of at LanguageContext import time;
  reading storefront config during module initialization crashed web boot through
  the utils -> use-storefront -> LanguageContext -> utils cycle
- Fix Platform import typo in AddNewLocationScreen that threw at module load
- Versioned, zod-validated branding schema (colors, appearance, components,
  assets, boot, navigation, screen variants) with per-value fallback
- Layered resolution: defaults < legacy env keys < storefront.brand.ts < dev preview
- Legacy APP_THEME, CUSTOM_COLORS*, STORE_HEADER_*, PRODUCT_CARD_STYLE and
  navigator env keys mapped into branding; existing profiles resolve unchanged
- Themes generated from presets with exact parity to the previous themes, plus
  Tamagui interaction keys (hover/press/focus, placeholder, color1-12)
- WCAG contrast checks; enforced for preview sources, reported for build sources
- BrandingProvider owns the color scheme (system/light/dark, migrated from the
  old key, follows device changes) and registers runtime themes via addTheme
  when resolved colors differ from the compiled theme
- useAppTheme/ThemeContext/getTheme become shims over one shared state
- config/default.js presentation keys and screen variant selection read branding
- Dev-only local branding preview; docs/branding.md
- QPayPaymentSheet: import Platform
- DriverMarker: import haversine from utils/math
- StoreRating: fix nRatingChange typo
- TabSwitch: import LayoutChangeEvent type
- use-customer: import isResource (utils) and storage get
- use-fleetbase-data: depend on fleetbase instead of undefined storefront
- use-oauth.web: Apple Sign-In is native-only, report unsupported
- use-stripe-checkout.web: stub native Stripe functions to return an error
- StoreNavigator/TestNavigator: fix focued typo in tabBarLabelStyle
- CircleExpandInterpolator: take width/height from layouts.screen
- CartItemScreen: drop unused getCartItem import (cart comes from useCart)
- App.tsx: import Platform
- ConfigContext: use imported storefrontConfig (useAuth doesn't provide it)
- AddNewLocationScreen: fix Platfrom import typo
- EditLocationCoordScreen, LocationPickerScreen: import toast
- SaveLocationScreen: define theme and loading state; gate button on save in progress
- StripeCustomerScreen.web: drop native-only CustomerSheet usage
- DriverMarker: declare event refs after useEventBuffer (TDZ fix)
fix: stabilize network edition runtime, web shims, and theming config
refactor: rename Marketplace application concepts to Network
feat: add typed screen registry with compiled-in overrides
feat: add typed branding system with generated themes
fix: keep the push device token registered for the signed-in customer
fix: resolve TS2304 missing-name runtime bugs
Fix undefined-name runtime bugs flagged by tsc (TS2304)
- Register uk.json in localize.js and the default AVAILABLE_LOCALES
- Add Ukrainian strings for the Network and ScreenSlot keys and common.goBack
- Add the two Mongolian keys missing from mn.json
- Test that every locale has the same keys as en.json and is registered
… private repo links

The Cart tab tap after the order screen failed intermittently on Android, costing the
checkout screenshot. The README and flow README linked the private showcase repo, a 404
for readers of this public one.
…lt phone country; boot logo from brand/, every map uses the configured map type, language list follows AVAILABLE_LOCALES
97900d1 stopped initialising the Facebook SDK without FACEBOOK_APP_ID, but clearSessionData
still called LoginManager.logOut() on every sign-in. On Android that throws 'The SDK has not
been initialized' and the app crashed right after the verification code.
Meta's login API keeps changing and the option goes unused. Removes the sign-in button, the
OAuth provider, the session sign-out, react-native-fbsdk-next (package, yarn.lock, pods),
the SDK start-up in AppDelegate, the manifest and Info.plist keys, the FACEBOOK_* env and
the CI secrets that wrote them. A store's Facebook page link on its info screen stays.
…e's connectivity

Whether a truck takes orders is decided in Storefront by the truck's status
(active or inactive). The API's truck online now reports exactly that. The
app fell back to vehicle.online, and the store map read vehicle.online
directly, so a truck whose driver app or telematics device was offline could
not be ordered from. Both now read only the truck's own online.
fix(trucks): a truck is live by its Storefront status, not its vehicle's connectivity
…in place of checkout

Every image is one the release capture publishes to fleetbase.io. The checkout screenshot
is left out until it shows a deliverable address (and Android gets past checkout).
Storefront nests product and catalog categories up to three levels
(Drinks › Coffee › Cold brew); each category carries its parent.

- Store page: top-level categories are the tabs; each section loads its
  products once (the API rolls up the subcategories' products, replacing one
  query per category) and shows them in headings by subcategory, with chips to
  jump to a subcategory. A link to any category opens its heading.
- Category list: top-level rows with their subcategories as pills; a pill
  opens that subcategory on the store page.
- Search chips list top-level categories only.
- Truck menus: tabs by top-level menu category, subcategory headings inside;
  the trucks map's category tiles are top-level only; truck search also
  matches the top-level category.

Against an API without parents every category is at the top, as before.
feat(categories): nested store and menu categories
…s offers, Offers tab and configurable Network tabs

The shop home (network.home variant shop) shows the main store's categories in a grid,
live offers, the customer's active orders with a link to their history, the products they
order most, bookable services from partner shops and the partner shops. The main store is
the member tagged with navigation.network.mainStoreTag. A category opens on its own screen:
its products and those under it, subcategory chips, and the offers aimed at it, with offer
badges on products and category tiles. navigation.network.tabs sets the Network's tabs,
including the new Offers tab.
…story link, and All opens every category as a grid
…re placed and a small timeline of their steps
…e tag, trucks view and tab overrides; order line test expects productId
…tive order cards follow their order live

The note is saved on the checkout (PUT checkouts/notes) shortly after typing and as the
customer goes to pay, so QPay orders, created by QPay's callback, keep it (storefront v0.4.27).
Active order cards reload when an order's channel reports a change, when the app comes back
and every 45 seconds while an order is active, so steps move on and finished orders leave.
@roncodes
roncodes merged commit 95f117a into main Oct 16, 2026
6 checks passed
@roncodes
roncodes deleted the release/v0.1.0 branch October 16, 2026 12:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants