Skip to content
Robnu
Live

The platform is the product.

Robnu's foundation is multi-tenant from day one — Org → Seller → SellerUser → MarketplaceAccount with generic FK targets and per-marketplace satellites. AWS S3 with per-seller KMS aliases. AWS SQS + BullMQ hybrid queueing. Postgres RLS as defense in depth. Every other Robnu surface — Process, Reconciliation, Claims, RobnuAI — sits on this.

Free during early access · Forever free under 25 orders/day
app.robnu.com/platform/rls-defenseTenant isolation · defense in depthapp layer + Postgres RLS on seller_idSeller ASeller BSeller CRLS · app.current_seller_id = $Aenforcedcross-tenant blocked
TL;DR
  • Seller is the tenant root. SellerUser is a teammate. MarketplaceAccount is a connection. Multi-account is free.
  • AWS S3 with SSE-KMS using per-seller KMS aliases when AWS_S3_PER_SELLER_KMS=true.
  • AWS SQS FIFO + Standard for marketplace dispatch; BullMQ for cron-style sweeps.
  • Postgres RLS on seller_id is enforced via withSellerScope — defense in depth, always on.

The five surfaces of the platform.

Adapter registry

Adding a marketplace doesn't ripple through the schema.

The generic MarketplaceAccount parent means every leaf table — orders, shipments, returns, payouts, schedules, listings — FKs to the same place regardless of marketplace. New marketplaces ship as a new Marketplace row + a new satellite table + an adapter implementation in the registry. Zero changes to leaf tables.

  • · AJIO is live; Meesho, Amazon, Flipkart adapters are scaffolded.
  • · Adapter contract: syncOrders, syncReturns, syncPayouts, pushInventory, fullProcessing.
  • · Registry dispatch is by Marketplace.code, not class identity.
app.robnu.com/platform/marketplace-registryMarketplace adapter registryservices/marketplace/registry.ts — dispatch by Marketplace.codeRegistrysyncOrders · pushInventoryAJIOliveMEESHOscaffoldedAMAZON_INscaffoldedFLIPKARTscaffoldedsatellite tables · ajio_account_details · meesho_account_details · amazon_account_details · flipkart_account_details
FAQ

Honest answers about the foundation.

Two reasons. First, sellers asking 'is this safe' deserve a real answer instead of a 'we take security seriously' page. Second, partners and integrators asking 'how does this scale' need the architectural shape, not a brochure.

Seller is the unit of business — the tenant root. SellerUser is each human teammate with an RBAC role (OWNER | ADMIN | OPERATOR | FINANCE | VIEWER). MarketplaceAccount is each connection — multi-account is free; one seller can have N AJIO accounts and M Meesho accounts on the same plan.

Each marketplace has different identifiers and credential shapes. The generic MarketplaceAccount table is the FK target for everything (orders, shipments, returns, payouts, schedules, listings). 1:1 satellite tables (ajio_account_details, meesho_account_details, amazon_account_details, flipkart_account_details) carry the marketplace-specific fields with strong typing.

BullMQ is great at cron-style sweeps inside Node. AWS SQS is great at durable, observable, per-account FIFO dispatch with DLQ semantics. The hybrid uses each for what it does best — see /platform/queues for the layout.

Application-layer scope assumes every code path remembers to filter by seller_id. RLS makes the database refuse to return cross-tenant rows even if a code path forgets. Defense in depth, not redundancy.

The platform is what makes everything else possible.

Read each surface in detail, then start using the product that sits on top.

build 547000c1ac5d3ea9cb039864711ed788f9948b69 · 2026-06-12T02:03:58+05:30