Skip to main content

Architecture

A one-page tour of the moving parts. Source of truth lives in STRATEGY_v3.md (private internal repo) — this page is the publishable summary.

Runtimes

  • Cloudflare Workers — public-facing routes at api.hygoshop.com. Stateless, horizontally autoscaled, deployed via Wrangler.
  • Cloudflare Pages — three projects: hygoshop-com (marketing, this site), hygoshop-docs (these docs), hygoshop-status (uptime page).
  • Postgres — canonical relational store. Cloudflare-Tunneled droplet for production; Neon as the provider-portable fallback.
  • Hyperdrive — connection pool + read cache in front of Postgres so Workers don't hold idle connections.
  • R2 — object storage for binary content (generated images, label PDFs, attachment uploads).
  • Cloudflare Queues — async batch ingest, AI re-score jobs, notification fan-out.
  • KV — short-TTL cache for auth introspection, feature-flag reads.

Application packages

  • @hygoshop/canonical — canonical type contracts (Tenant, Listing, Order, OperatorTask, ...). Every other package imports types from here. No package imports another's internals.
  • @hygoshop/workflow-runtime — pause / resume / claim / fail mechanics for long-running workflows that may hand off to a human operator.
  • @hygoshop/workflows — concrete workflow definitions: launch product, recover abandoned cart, predict reorder, agent-readiness remediation.
  • @hygoshop/router — picks an adapter implementation per-tenant by tier × cost × health × explicit override.

Adapters

Every external service is wrapped in an adapter package. Adapters implement category interfaces:

  • CommerceAdapter — Shopify, WooCommerce, BigCommerce, Amazon SP-API
  • SocialAdapter — Ayrshare (covers Instagram, TikTok, YouTube, Facebook, X, LinkedIn, Pinterest, ...)
  • LlmAdapter — Anthropic Claude, OpenAI, OpenRouter, local
  • ImageGenAdapter — Replicate, OpenAI Images, ...
  • PaymentsAdapter — Stripe + Stripe Connect
  • ShippingAdapter — EasyPost, ShipStation
  • TaxAdapter — TaxJar, Avalara
  • EmailAdapter — Resend, Postmark, SendGrid
  • WorkflowAdapter — internal workflow-runtime (always present)

No vendor SDK is imported outside its adapter package. This keeps the contract surface narrow and lets us add or swap providers without rewrites.

Storefront

Medusa 2.x runs as the storefront-side application layer. The Medusa app lives in apps/medusa/ and is owned by tenants who choose Medusa for their headless commerce front. The shared @hygoshop/canonical package is the contract between Medusa and Hygoshop's worker-side services.

Multi-tenant boundaries

Every persisted row carries a tenant_id. Workers enforce tenant scoping at the route layer; Postgres row-level security gives a defense-in-depth check. Cross-tenant reads are explicitly rejected.

Observability

OpenTelemetry traces ship to a central collector. Worker invocations, queue jobs, and adapter calls all emit spans tagged with tenant_id so per-tenant performance + error patterns are inspectable.

What lives where

ConcernLocation
Canonical typespackages/canonical/
Worker route handlersapps/worker/
Adapter packagespackages/adapter-*/
Workflowspackages/workflows/
Marketing siteweb_contents/site-template/ (sibling repo)
Docs (this site)apps/docs/
Status pageapps/status/
Internal Medusa appapps/medusa/