Skip to content

Changelog

Platform — Houdini Frontend Migration & CI Pipeline (Current)

  • Migrated both admin and storefront apps to Houdini (houdini 1.5 + houdini-svelte 2.1) as the sole GraphQL client; every page's ops live in src/lib/houdini/<PageName>.ts and consume generated *Store classes from $houdini (Decided #119)
  • Deleted the hand-rolled $lib/api.ts (admin) and server-side gql() helper in $lib/server/api.ts (storefront); the storefront's $lib/server/api.ts now exposes only an apiHeaders() builder for the BFF forwarder
  • Page loaders standardized on +page.ts + load_<QueryName> (no more +page.server.ts for data loading); mutations use new <Op>Store().mutate(...); refetches use <QueryStore>.fetch() instead of invalidateAll()
  • BFF /api/graphql is a CSRF-guarded forwarder that attaches the JWT from the session cookie server-side — JWT never reaches the browser (Decided #88)
  • Added GitHub Actions CI (.github/workflows/check.yml) with five jobs — backend-lint (ruff), backend-resolver-check (AST guard against duplicate Strawberry resolvers), backend-tests (pytest against real PG 16 + Redis), admin-check (houdini generate + svelte-check, 0 errors), storefront-check (same)
  • Backend cleanup landed during the ruff sweep: 10 F821 fixes, 3 B904 raise ... from, 2 B905 zip(strict=True), a real B023 bug in schedules.py (closure captured last iteration), and 44 E741 renames

Phase 14 — Payment Lifecycle Rework

  • Reworked payment processing to support configurable capture modes (authorize-only vs auth+capture)
  • Added full payment lifecycle: authorize → capture → void → refund with per-transaction status and type tracking
  • Automatic void/refund on order cancellation and refund transitions via state machine side effects
  • Authorize.net FDS fraud filter detection: orders flagged as HeldForReview, admin fraud hold release
  • Added modifyOrder mutation for editing authorized orders with automatic reauthorization
  • Added adminCreateOrder mutation and admin UI for staff to create orders with saved card charging
  • Saved payment methods now support B2B location scoping (location_id)
  • Admin payments page now includes capture mode configuration (Authorize Only / Authorize + Capture)
  • Added PaymentTransaction.type field (authorization, capture, charge, void, refund)
  • Added Order.fraud_status and Order.fraud_details fields
  • Updated order detail page with fraud hold banner, transaction actions (capture, void), and release button
  • Added admin Create Order page with account/channel selection, line items, saved cards, and capture mode

Phase 13 — Core Geocoding Service

  • Added geographic data model (GeoUnion, Country, Region, County, City) with ISO standards
  • Implemented IP geolocation, address geocoding, and address validation strategies
  • Enriched RequestContext with IP and geo data
  • Added admin UI for managing geographic data and geocoding settings

Phase 12 — Tax Architecture Rework

  • Rebuilt tax calculation engine using geographic data models
  • Added support for granular sales tax, excise tax, and compound tax
  • Tax jurisdiction lookup by ISO region, county, and city
  • Added admin Tax management page

Phase 11 — Documentation System

  • Added MkDocs Material documentation site with developer, usage, and operations guides
  • Added in-admin contextual help system (HelpDrawer + HelpTooltip components)
  • Added structured, translatable help JSON files for all admin routes
  • Added Cursor rule to enforce documentation updates alongside code changes
  • Added GraphQL schema introspection script for auto-generated API reference

Phase 10 — Multi-Currency & Checkout Pipeline

  • Implemented multi-currency support: channel-level supported currencies, exchange rates, currency-aware price resolution
  • Added dual-amount orders (transacted + base currency)
  • Wired end-to-end checkout pipeline: promotions → shipping → tax → payment → order creation
  • Integrated promotion engine with cart-level coupon application and per-line discount allocation
  • Added cart pessimistic locking via SELECT FOR UPDATE during checkout
  • Added Redpanda event publishing for order.created, order.status_changed, inventory.adjusted
  • Added dedicated event consumer service in Docker Compose

Phase 9 — Internationalization & Channel Commerce Mode

  • Implemented channel-based commerce modes: B2B, B2C, hybrid
  • Added multi-language support with JSONB translations on products, categories, brands, and CMS pages
  • Added locale resolution middleware (X-Locale header, cookie, Accept-Language)
  • Added LanguageSwitcher and CurrencySwitcher storefront components
  • Implemented channel-scoped extension activation via ChannelExtension model

Phase 8 — Payment & Shipping Extensions

  • Built Authorize.Net CIM extension (PaymentProcessStrategy)
  • Built gift card extension with virtual/physical cards, partial redemption, bulk generation
  • Added UPS shipping rate extension
  • Replaced inline SVG/emoji icons with Lucide icons across storefront and admin
  • Added shipping carrier icon components (UPS, USPS, FedEx, OnTrac, freight)
  • Added payment card brand icons (Visa, Mastercard, Amex, Discover)

Phase 7 — Testing & Production Prep

  • Set up pytest with real PostgreSQL test database
  • Added test fixtures: event_bus, strategy_resolver, request contexts
  • Wrote test suites for strategy resolver, pricing, cart/order flow, GraphQL API, RBAC, events, extensions
  • Created production-ready multi-stage Dockerfiles
  • Added CMS policy pages: contact, shipping, return, privacy, terms
  • Fixed accessibility warnings in storefront and admin layouts

Phase 6 — Admin Panel & Dashboard

  • Built 20+ admin routes: orders, products, customers, pricing, promotions, inventory, shipping, tax, CMS, settings
  • Implemented command palette (Cmd+K) with fuzzy search
  • Added Customer 360 view
  • Built collapsible sidebar navigation with Lucide icons

Phase 5 — Core Commerce Modules

  • Implemented all 14 strategy ABCs with default implementations
  • Built promotion engine with condition/action pattern and CartIndex
  • Built fulfillment module with by_order and by_box modes
  • Built RMA module with line-level approval
  • Built store credit, gift card, and net terms modules
  • Built reporting and audit modules

Phase 4 — Pricing & Inventory

  • Implemented five-level pricing hierarchy
  • Built price list management with scheduling and volume tiers
  • Built inventory module with warehouses, stock levels, and reservations
  • Implemented backorder support

Phase 3 — Orders & Cart

  • Built configurable order state machine
  • Implemented cart with per-location support and session-based guest carts
  • Built checkout mutation with initial pipeline
  • Fixed SQLAlchemy identity map caching issues

Phase 2 — Auth & Accounts

  • Implemented BFF authentication pattern with httpOnly session cookies
  • Built B2B account hierarchy: Account → Location → Employee → Address
  • Implemented RBAC with role-based permissions
  • Built customer group system

Phase 1 — Products & Catalog

  • Built product module with variants, categories, and brands
  • Implemented Meilisearch integration for full-text search
  • Built catalog visibility rules engine

Phase 0 — Foundation

  • Scaffolded monorepo: backend, admin, storefront, migrator
  • Set up Docker Compose with PostgreSQL, Redis, Redpanda, Temporal, Meilisearch, MinIO
  • Created FastAPI application factory with Strawberry GraphQL
  • Created SvelteKit admin and storefront shells
  • Set up Alembic migrations with initial schema
  • Established Forge methodology artifacts: constitution, conventions, reconciliation