Sonar
Multi-tenant SaaS
One operation, no matter how many storefronts sit underneath it.
Small e-commerce businesses run on whatever platform they started with, and every report has to be rebuilt for each provider. Sonar normalizes orders, products, carts, and customers into its own model, then runs dashboards, campaigns, and automations on top of that model instead of someone else's API.
Stack
front-end
Next.js 02 framework Next.js A modular monolith: one deploy, domains that stay apart in the code. nextjs.org React 03 interface React Dashboards, inbox and the automation canvas. react.dev Tailwind CSS 04 styling Tailwind CSS Semantic color tokens only, no numeric palette scale. tailwindcss.com shadcn/ui 05 design system shadcn/ui The component base under every workspace screen. ui.shadcn.com
back-end
data
integrations
Stripe 11 payments Stripe Billing and module access for each plan. stripe.com Resend 12 email Resend Campaigns and transactional email, with delivery tracking. resend.com WooCommerce 13 integration WooCommerce The first adapter, and the one that proved the boundary was worth it. woocommerce.com Shopify 14 integration Shopify The second provider, with the same contract and no features rewritten. shopify.dev
01 sync
Provider adapters
Each storefront connects through an adapter that speaks its dialect. Provider details never leak past that boundary.
- Background sync with retries
- Credentials encrypted at rest
02 model
Normalized commerce
Orders, products, inventory, and carts are stored locally in one shape. Every feature reads from that model, never directly from the provider.
- Local model is the source
- A tenant is a business, not a site
03 operation one dashboard
Dashboards and automations
Automations are built from two primitives, trigger and action, so a new capability becomes a node type instead of a new engine.
- Condition, delay and join as actions
- Abandoned cart sweep on a schedule