Cross-tenant superuser permissions — an RBAC design pattern
global_role_tier=superuser pattern: two dimensions, audit log on every tenant switch, RLS as last defense, MFA + auto-expire + 4h break-glass.
Product updates, field lessons, and technology deep dives from the Netorigo team.
global_role_tier=superuser pattern: two dimensions, audit log on every tenant switch, RLS as last defense, MFA + auto-expire + 4h break-glass.
Six modules (catalog, sales, inventory, finance, logistics, travelium), one admin, one tenant, 13 storefronts — with a concrete booking flow.
One product, 10 attributes, same SKU across 8 storefronts, opt-in override table for presentation, Draft→Active rolling release of 80 SKUs in a day.
5 shared order states, module-specific sub-states, order_events bus + outbox — connecting Finance + Logistics + Travelium from a 7th module's perspective.
One analytics_events table, one X-Storefront-Domain header, 13 storefronts' per-domain conversion via a single SQL GROUP BY.
Finance → Logistics exactly-once: outbox table, idempotency key, exp_backoff retry, consumer-side processed_events. 18 months, zero duplicates.
5,000 SKUs in 7 minutes, idempotent SKU dedup, dry-run preview - and why we removed inline image upload from the importer.
Three vendors (forum + help center + Slack) cost ~€18k/year per tenant. The Community module collapses all three into one tenant-aware, in-house surface.
Four migration patterns from the legacy ERP to the modular stack: full cutover, parallel run, strangler-fig, API-only. When each wins.
14,200 invoices a month, 99.94% first-attempt success, three error categories and an exponential backoff up to 24 hours.
Four warehouses, 18,400 SKUs, stock view in 280ms. Why we kept the available field deliberately optimistic.
How one backend serves six storefronts via Host-header resolution, plus the cache leak we caught early.
Three years and eight WMS projects later, here are the four real evaluation criteria and the one almost everyone ignores.
One tenant = one brand kit in S3 with live preview - plus the CDN cache-busting bug we never want to learn twice.
Why no Reddit clone for Community? B2B audiences want identity-verified, curated, contracts-aware surfaces, not anonymous viral forums.
Thin REST layer in front of the legacy PHP/Drupal ERP — 6 endpoint groups, API key, rate limit, idempotency, CP1250 transcoding.
1,800 monthly transactions, four currencies, 11-second reconciliation versus 38 minutes by hand, and the December 2025 zero-rate bug.
From 62 to 89 picked lines per hour. NFC login, scan debouncing, weight verification - and the bug that nearly killed us last spring.
Two recommenders, two roles: the statistical brings speed, the LLM brings meaning. The hybrid moved AOV by 7.8%.
150 hours saved per year, zero NAV penalties across 18 months, and one reverse-charge VAT edge case almost every implementation misses.
14 default roles, 184 permission keys, tristate matrix, delegate-only mode - and why super_admin stays out of the UI on purpose.
KB is tenant-admin editable; the auto-FAQ ships LLM proposals weekly from 3 sources. Eval gate: <30% edit rate. Security + pricing excluded.
Of the legacy ERP's 40 workflow templates, 37 port cleanly to the modern Flows engine. Three stay put — and we know why.
90-day rolling forecast, four chart views, a mandatory Hungarian cash journal, and a webhook fix for off-cycle salary advances.
Six carriers, six webhook shapes, six label formats. The Foxpost parcel-locker API is the one thing nobody else does well.
1,247 quotes, 34% PO conversion, 8-day median. The quote-first cart is not a sales-team replacement — it is a multiplier.
Six carriers, six webhook shapes, one dashboard, and the one feature we would remove if we could start over.
Who, what, when, before-after diff, request-id - plus the webhook infection that generated 14k spurious audit rows in 11 minutes.
Spam + policy + tone classifiers in sub-500ms, auto-allow >0.85, auto-flag <0.6, human queue in between. Target: 92% auto, 8% human, 0 false-allows.
Sztv. 8-year retention, 4 mandatory dimensions, master-data + permission gaps in the legacy, 5+3 year hot-cold tier in the modern stack.
92% auto-match rate across four banks, Unicredit-specific extractor pushing 71 to 88%, 20-30 bookkeeper hours saved per month.
From 91.4% to 98.7% stock accuracy in 9 weeks. ABC categorisation, variance thresholds, and why the warehouse team hated it for 3 weeks.
Why Vercel for Storefront edge cache — framework alignment, on-demand revalidation, 94% PDP hit rate. CloudFront stays as backup.
71,000 sessions, three checkout configurations, mixed wins at 51.1%, and the surprise sits with the 65+ cohort.
Tablet does almost everything, phone does 5 specific actions - and why we pulled drag-and-drop reordering on mobile after two months of UAT.
Not badges-for-volume but peer-marked Helpful Answer + 3 monthly thank-you tokens. No streak counters, level-ups, daily-login bonuses. B2B isn't consumer.
14 steps, 12 automated, 2 deliberately manual. Monthly close 28 → 6 hours at a 50-person tenant. We name the two manual steps.
65A plus 1065 plus A60 ANYK export with Zod validation, two human-edited fields, and the four-hour March 2026 schema scramble.
Self-service portal, pre-paid label, receiving inspection, refund/exchange. The hardest part is the cross-warehouse return: which warehouse keeps the unit?
Per-locale URLs, locale-specific canonical, sitemap-per-locale, plus the 12,000-URL Google Search Console lesson on pagination.
4 MCP tools for catalog, preview-confirm rule, AI as audit actor - 73% session share, edit time dropped 4.2 min to 1.6 min.
Default-private profiles, per-post opt-in for cross-company visibility. Separate GDPR consent for community. 5 fields stored, 7 deliberately omitted.
Ownership map across 4 modules, 15s/60s/instant consistency windows, nightly scrubber with 11 checks, 0.1% drift alert.
84 active projects, two minutes per month billing (down from six hours), a five-state audit-friendly state machine, NAV pipeline wired in.
On-time rate, exception rate, damage claim, COD-settlement lag. An alert one March morning paused a carrier for 6 days while they fixed a depot.
12 months, 14 experiments: 6 winners (boring fundamentals), 3 killed (magic solutions). 2.1% to 3.6% conversion.
1,247 quotes, 34% conversion to PO, 8-day median cycle, and the 3.8% hidden conversion we had to put back on the scoreboard.
8 weeks, 12 people, 4,200 BOMs, one rollback, and the training lesson we already know but keep forgetting to apply.