All projects

2026

Satr Easy Store: Multi-Tenant E-Commerce Platform

A platform where merchants create and run their own online store: a Rust microservices backend, a React merchant dashboard and a config-driven storefront engine.

RustAxumPostgreSQLMeilisearchReactAstroTypeScriptTanStack QueryDocker

Overview

Satr Easy Store lets a merchant sign up, create a store, connect a custom domain, design the storefront and sell products, all on shared infrastructure. It is made of three parts that I built together: the backend services, the merchant dashboard and the storefront engine.

Shoppers get store-scoped accounts separate from merchant accounts, so a customer token from one store is rejected by every other store. Stock is reserved atomically at checkout, and every order follows a fixed lifecycle that restores inventory on cancellation or refund.

Components

Backend (ecommerce-platform)

A Cargo workspace of Rust/Axum services (gateway, auth, store, catalog, orders, notifications) on PostgreSQL, Meilisearch and pict-rs, with a rate-limited TLS gateway as the only public entry point.

Merchant dashboard (ecommerce-platform-frontend)

React 19, Vite, shadcn/ui and TanStack Query with feature-based architecture: stores, domains, products and variants, orders, themes, navigation and a layout studio.

Storefront engine (storefront-astro)

A server-rendered Astro storefront that renders each store from a versioned JSON config language, with generated Open Graph, JSON-LD, sitemap and robots files per store.

What I built

  • Built Satr Easy Store end to end: Rust/Axum microservices, a React merchant dashboard and an Astro storefront.
  • Designed a catalog with variants, inventory tracking, Meilisearch search and async CSV bulk import and export.
  • Built an order engine with server-side pricing, atomic stock reservation and a validated status state machine.
  • Built a config-driven storefront and layout studio with themes, saved layouts and per-store SEO.

Design and architecture

  • Route namespaces: /api/v1 for public JSON, /in/v1 for service-to-service calls that are never published, and /store for rendered storefront HTML.
  • Response standard: every JSON endpoint returns the same status / data / meta / error envelope, documented per service.
  • Orders: price and stock are always looked up server-side from the catalog, items are reserved atomically, and a failed reservation rolls the whole order back.
  • Order lifecycle: pending, confirmed, processing, shipped, delivered, with cancelled and refunded as terminal states that restore inventory idempotently.
  • Catalog: variant generation from option sets, per-variant stock with low-stock thresholds, store-scoped tags and attributes, and CSV import as an asynchronous job with status polling.
  • Storefront config: a JSON Schema validates versioned page configs made of ordered sections with content and style kept apart, plus theme tokens for colors, typography and spacing.
  • Custom domains: DNS ownership verified with real CNAME and TXT lookups.