Multi-Tenant UX Redesign — Non-Technical User Research¶
Project: Forma3D.Connect
Version: 1.0
Date: February 24, 2026
Status: Research
Executive Summary¶
As Forma3D.Connect moves toward multi-tenancy, the UI must serve non-technical small business owners — not just developer-operators. The current screens expose raw technical details (UUIDs, webhook URLs, build numbers, event payloads) that are meaningful to engineers but confusing or intimidating to merchants running a 3D print shop.
This document audits every screen, identifies "programmer-facing" patterns, and proposes a redesign direction inspired by Shopify Polaris, modern SaaS dashboard best practices, and the principle that dashboards should be decision interfaces, not reporting surfaces.
Core Design Principles (from research)¶
| Principle | Source | Application |
|---|---|---|
| Progressive disclosure | Shopify Polaris | Show simple first, reveal complexity on demand |
| Plain language | Polaris — 7th-grade reading level | Replace jargon with terms merchants use |
| 5-second rule | SaaS UX best practices | Key insight visible within 5 seconds |
| Role-based views | Multi-tenant SaaS patterns | Admin sees system details; tenant sees their business |
| Decision-first | Groto SaaS UX research | Start with "what should I do?" not raw data |
Table of Contents¶
- Screen-by-Screen Audit
- Terminology Mapping
- Proposed Mockups
- Role-Based View Strategy
- Navigation Redesign
- Implementation Priority
- References
1. Screen-by-Screen Audit¶
1.1 Dashboard¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| System Health card | Shows "Database: Connected", "Uptime: 7h 19m", "Gateway: 20260224090225" — meaningless to merchants | High |
| "Gateway" build number | Raw build timestamp, no user value | High |
| "Active Print Jobs" stat | Links to ?hasActivePrintJobs=true — exposes query param logic |
Low |
| Welcome card | "Shopify Integration / SimplyPrint Sync / Real-time Tracking" are feature badges, not user benefits | Medium |
| Chart titles | "Orders by Status", "Print Jobs by Status" — functional but cold | Low |
What's good:
- Stat cards with deltas ("+1 from yesterday") — great for decision-making
- Donut charts with center totals
- Recent orders list with status badges
1.2 Orders List¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| UUID shown under order number | ada7c123..., 3de5b04... — no user value |
High |
| ALL-CAPS statuses | PROCESSING, COMPLETED, CANCELLED — reads like error codes |
Medium |
| "Items" column | Shows 1 item(s) — the (s) is programmer pluralization |
Low |
| Progress bar | Good concept but no label explaining what it tracks | Medium |
| No visual priority | Failed orders look the same as completed ones at a glance | High |
What's good:
- Search bar
- Status filter dropdown
- Pagination
1.3 Order Detail¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| "SP: 19e5b6e3-80ca-44e1-b6e9-35465fed84ef" | Raw SimplyPrint job UUID in the Print Jobs section | Critical |
| "SKU: NOSKU-15545035882688" | Auto-generated SKU is ugly and meaningless | Medium |
| "SpeedBoatRace_Bambu Pla Basic(A1)-white.gcode" | Raw technical filename shown as print job title | High |
| "Forma3D-R2D2" | Printer identifier jargon | Low |
| "Qty: 1 — PENDING" | Status as raw text, no visual indicator | Medium |
| "Download Label" / "Regenerate" | Good actions, but "Regenerate" is unclear — regenerate what? | Medium |
What's good:
- Card-based layout with clear sections
- Customer info prominently displayed
- Tracking link is clickable
- "View Activity Logs" link for cross-referencing
1.4 Product Mappings — List¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| "TYPE" column showing "Parts" | Unclear — what else could it be? | Medium |
| SKU as monospace code | GF-100x100-IP-NOMAG looks like a code snippet, not a product reference |
Low |
| Column "PARTS" | "1 part(s)" — programmer pluralization again | Low |
| "Product Mappings" title | "Mapping" is integration jargon — merchants think "products" | High |
What's good:
- Clean table layout
- Edit/delete actions
- Search functionality
- "+ Add Mapping" CTA
1.5 Product Mappings — Edit Form¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| "SimplyPrint File ID" | Raw UUID 7c529074b1b935186462307ef44bda3403837496a13cf... |
Critical |
| "Shopify Product ID" | Exposes system identifier | High |
| "Shopify Variant ID" | Optional but still jargon | High |
| "Parts to Print" heading | Technical framing — merchants think "which files to print" | Medium |
| "File Name" | GF-100x100-IP-NOMAG_plate1.3mf — raw filename |
Low |
| "Quantity Per Product" | Clear, but positioned oddly | Low |
What's good:
- "Browse" button for file selection
- Section-based card layout
- "Select from Shopify" button
1.6 Activity Logs¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| Entire page | This is essentially a developer console — raw event streams | Critical |
Event types like simplyprint_state, enterprise_event |
Internal system names | Critical |
| Raw timestamps | ISO-format-like timestamps in columns | High |
| Orange "API" badges | "API" is a developer concept | High |
| Payload preview in table | Shows JSON-like content | Critical |
| No human-readable descriptions | No sentence like "Print job completed for Order #1031" | Critical |
What's good:
- Filtering capabilities (type, date range, status)
- Pagination
- Timestamp ordering
1.7 Settings — Main¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| "Service Versions" table | Build numbers 20260224190203, semantic versions, uptimes |
Critical |
| "API URL" | https://staging-connect-api... — internal infrastructure |
Critical |
| Connection Status | "WebSocket: Connected", "API Server: Connected", "Database: Connected" | High |
| "Developer Tools" section | Should be hidden for non-admin tenants | Critical |
| "Audit Logs" link | Different from Activity Logs — confusing | Medium |
| "Frontend Version (server/client)" | Build numbers visible | High |
| "Environment: staging" | Internal environment label | High |
What's good:
- Theme toggle (Light/Dark/System)
- Notification preferences
- PWA install option
- Session management
1.8 Settings — Integrations¶
Current state:

| Element | Problem | Severity |
|---|---|---|
| "Company ID: 48864" | SimplyPrint internal ID — no user value | High |
| "Webhook Active" / "No Secret" badges | Webhook is a developer concept | Critical |
| "Webhook secret verification is disabled" | Security warning in developer jargon | Critical |
| Raw Webhook URL | https://staging-connect-api.forma3d.be/webhooks/sendcloud |
Critical |
| "Configure in Sendcloud dashboard" instruction | Requires technical setup | High |
What's good:
- Connected/Disconnected status
- "Connect Shopify Store" flow with clear steps
- Default shipping settings
- Last verified date
2. Terminology Mapping¶
Replace programmer terms with merchant-friendly language:
| Current (Technical) | Proposed (Merchant) | Context |
|---|---|---|
| Product Mapping | Products / Product Setup | Navigation, page titles |
| SKU | Product Code | Tables, forms |
| SimplyPrint File ID | Print File | Forms |
| Parts to Print | Print Files | Form sections |
| Quantity Per Product | Copies per Order | Forms |
| Activity Logs | Activity / History | Navigation |
| Webhook | Automatic Updates | Settings |
| API URL | — (hide entirely) | Settings |
| Gateway | System | Dashboard |
| Build Number | — (hide for tenants) | Settings |
| Company ID | — (hide for tenants) | Settings |
| Uptime | — (replace with "Last checked: 2 min ago") | Dashboard |
| Database: Connected | — (roll into single "All Systems Normal") | Dashboard |
| PROCESSING | Processing | Status badges |
| COMPLETED | Completed | Status badges |
| CANCELLED | Cancelled | Status badges |
(s) pluralization |
Proper pluralization: "1 part" / "3 parts" | Tables |
3. Proposed Mockups¶
3.1 Dashboard — Merchant View¶
Replace System Health with a simple status indicator. Lead with actionable information.
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ Good morning, Jan ● All systems normal │
│ Here's what's happening with your print farm today. │
│ │
├──────────┬──────────┬──────────┬──────────────────────────────────────┤
│ │ │ │ │
│ 🟡 0 │ 🔵 4 │ 🟢 4 │ ⚠ 3 Need Your Attention │
│ Waiting │ In │ Printing │ 2 failed prints, 1 delayed │
│ │ Progress │ Now │ → Review Issues │
│ │ │ │ │
├──────────┴──────────┴──────────┴──────────────────────────────────────┤
│ │
│ What's printing │ Recent Orders │
│ ──────────────── │ ────────────── │
│ │ │
│ ● Colored Benchy │ #1032 · Jan Wielemans │
│ Printer: Bambu A1 │ Colored Benchy (White) │
│ ████████████░░░ 78% │ ● Processing │
│ Est. 45 min remaining │ │
│ │ #1031 · Jan Wielemans │
│ ● GridFlock Plate │ Colored Benchy (White) │
│ Printer: Bambu A1 #2 │ ✓ Completed · Shipped │
│ Queued │ │
│ │ #1030 · Jan Wielemans │
│ │ Benchy │
│ │ ● Processing │
│ │ │
├────────────────────────────────┴──────────────────────────────────────┤
│ │
│ This Week │ Order Trend — Last 30 Days │
│ ────────── │ ───────────────────────── │
│ Revenue: €22 │ │
│ Orders: 5 │ [sparkline chart] │
│ Shipped: 3 │ │
│ │ │
└────────────────────────────────┴──────────────────────────────────────┘
Key changes:
- Personal greeting replaces cold "Dashboard" title
- "All systems normal" replaces System Health card (single green dot instead of 4 technical metrics)
- "Need Your Attention" card is action-oriented ("Review Issues" link) instead of passive stat
- "What's printing" shows printer-friendly progress with time estimates
- Revenue/orders summary replaces analytics jargon
- No build numbers, no uptime, no gateway version
3.2 Orders List — Merchant View¶
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ Orders [All Statuses ▾] │
│ Track and manage your customer orders │
│ │
│ 🔍 Search by order number or customer... │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ ⚠ 3 orders need attention — 2 failed prints, 1 missing mapping │
│ → View issues │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ ORDER DATE CUSTOMER STATUS PRINT │
│ ───── ──── ──────── ────── ───── │
│ │
│ #1032 Feb 23, 2026 Jan Wielemans ● Processing ░░░░ │
│ 1 item 9:06 AM ⚠ 1 issue │
│ │
│ #1031 Feb 21, 2026 Jan Wielemans ✓ Completed ████ │
│ 1 item 9:19 AM 📦 Shipped │
│ │
│ #1030 Feb 20, 2026 Jan Wielemans ● Processing ██░░ │
│ 2 items 3:42 PM │
│ │
│ #1029 Feb 18, 2026 Jan Wielemans ● Processing ░░░░ │
│ 1 item 1:42 PM │
│ │
│ #1027 Feb 18, 2026 Jan Wielemans ✗ Failed ░░░░ │
│ 1 item 1:28 PM ⚠ 1 issue │
│ │
│ #1026 Feb 18, 2026 Jan Wielemans — Cancelled │
│ 2 items 8:52 AM │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ ‹ Previous 1 2 Next › Showing 1–25 of 29 │
└──────────────────────────────────────────────────────────────────────┘
Key changes:
- No UUIDs visible anywhere
- Statuses use sentence case with icon indicators (●, ✓, ✗, —)
- Alert banner at the top surfaces issues proactively
- "PRINT" column shows a simple progress bar
- Shipping status shown inline ("📦 Shipped") instead of separate column
- Issue badges ("⚠ 1 issue") replace technical error counts
3.3 Order Detail — Merchant View¶
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ ← Back to Orders │
│ │
│ Order #1031 ✓ Completed │
│ Feb 21, 2026 at 9:19 AM │
│ │
├─────────────────────────────────┬────────────────────────────────────┤
│ │ │
│ Customer │ What to Do │
│ ───────── │ ────────── │
│ Jan Wielemans │ ✓ All items printed │
│ jan.wielemans@devgem.be │ ✓ Shipping label created │
│ │ ✓ Package shipped │
│ 📦 Home Delivery │ │
│ Floraliënlaan 519 │ │
│ Antwerpen, 2610 │ Total: €3.00 │
│ Belgium │ │
│ │ │
├─────────────────────────────────┼────────────────────────────────────┤
│ │ │
│ Items Ordered │ Shipping │
│ ────────────── │ ──────── │
│ │ │
│ 🎨 Colored Benchy │ Status: 📦 In Transit │
│ White · Qty: 1 │ Carrier: Sendcloud │
│ │ Method: Unstamped letter │
│ │ Tracking: SCCWF3PD62WG → │
│ │ │
│ │ ↓ Download Label │
│ │ ↻ Create New Label │
│ │ ✕ Cancel Shipment │
│ │ │
├─────────────────────────────────┴────────────────────────────────────┤
│ │ │
│ Printing Progress │ │
│ ───────────────── │ │
│ │ │
│ ✓ Colored Benchy — White │ │
│ Printer: Bambu A1 │ │
│ ✓ Completed │ │
│ │ │
│ │ │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ View full activity log → │ │
│ │ │
└─────────────────────────────────┴────────────────────────────────────┘
Key changes:
- No UUIDs, no
SP: 19e5b...identifiers anywhere - "Actions" replaced with "What to Do" — a checklist of the fulfillment flow
- Print job shows product name + color instead of raw
.gcodefilename - Printer shown by friendly name only
- "Regenerate" renamed to "Create New Label" (clear action)
- Technical SKU hidden (available via expanding "Item details" if needed)
3.4 Products — List (renamed from "Product Mappings")¶
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ Products [+ Add Product] │
│ Your Shopify products and their print files │
│ │
│ 🔍 Search products... │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ PRODUCT PRODUCT NAME PRINT FILES ACTIONS │
│ CODE │
│ ─────── ──────────── ─────────── ─────── │
│ │
│ BENCHY Benchy 1 file ✎ 🗑 │
│ │
│ BENCHY-GREY Colored Benchy 1 file ✎ 🗑 │
│ Grey variant │
│ │
│ BENCHY-WHITE Colored Benchy 1 file ✎ 🗑 │
│ White variant │
│ │
│ GF-100x100- GridFlock 100x100mm 1 file ✎ 🗑 │
│ IP-NOMAG Auto-generated by │
│ GridFlock pipeline │
│ │
│ PAPERCLIP Paperclip 1 file ✎ 🗑 │
│ Less-than-a-minute │
│ test model │
│ │
└──────────────────────────────────────────────────────────────────────┘
Key changes:
- Renamed from "Product Mappings" to "Products"
- "SKU" → "Product Code"
- "TYPE" column removed (no user value)
- "PARTS" → "PRINT FILES" with "1 file" / "3 files" (proper pluralization)
- Subtitle shows description/variant info
- "Use existing" option removed from top-level (moved into add flow)
3.5 Products — Edit Form (renamed from "Edit Product Mapping")¶
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ ← Back to Products │
│ │
│ Edit Product │
│ Connect a Shopify product to its 3D print files │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ Product Details │
│ ─────────────── │
│ │
│ Shopify Product [Select from Shopify ▾] │
│ ┌────────────────────────────────────────────┐ │
│ │ GridFlock 100x100mm (IP) │ │
│ │ GF-100x100-IP-NOMAG │ ← auto-filled │
│ └────────────────────────────────────────────┘ │
│ │
│ Description (optional) │
│ ┌────────────────────────────────────────────┐ │
│ │ Auto-generated by GridFlock pipeline... │ │
│ └────────────────────────────────────────────┘ │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ Print Files [+ Add File] │
│ Which 3D files should be printed for this product? │
│ ─────────────────────────────────────────────────── │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 📄 File 1 [🗑] │ │
│ │ │ │
│ │ Name: Plate 1 │ │
│ │ File: GF-100x100-IP-NOMAG_plate1.3mf │ │
│ │ [Browse Print Files...] │ │
│ │ Copies: [1] │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ [Cancel] [Save Product] │
│ │
└──────────────────────────────────────────────────────────────────────┘
Key changes:
- Title: "Edit Product" instead of "Edit Product Mapping"
- "Shopify Product" replaces separate "Shopify Product ID" and "Shopify Variant ID" fields — single dropdown selector
- Raw SimplyPrint File ID replaced with a file browser — UUID hidden entirely
- "Parts to Print" → "Print Files" with natural question "Which 3D files should be printed?"
- "Quantity Per Product" → "Copies" (single word, obvious meaning)
- "Update Mapping" → "Save Product"
- SKU and Variant ID are auto-derived, not exposed as separate form fields
3.6 Activity — Merchant View (renamed from "Activity Logs")¶
The current screen is a raw developer event log. For tenants, replace with a human-readable timeline.
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ Activity [Export CSV] │
│ What's been happening in your account │
│ │
│ 🔍 Search... [All Types ▾] [Last 7 Days ▾] │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ Today │
│ ───── │
│ │
│ 9:06 AM 📦 New order received │
│ Order #1032 — Colored Benchy (White) — €3.00 │
│ Customer: Jan Wielemans │
│ │
│ 9:06 AM 🖨 Print job started │
│ Colored Benchy sent to Bambu A1 │
│ Order #1032 │
│ │
│ Yesterday │
│ ───────── │
│ │
│ 2:15 PM ✓ Print job completed │
│ Colored Benchy finished on Bambu A1 │
│ Order #1031 │
│ │
│ 2:16 PM 📮 Shipping label created │
│ Sendcloud — Unstamped letter │
│ Tracking: SCCWF3PD62WG │
│ Order #1031 │
│ │
│ 2:20 PM 🚚 Package shipped │
│ In transit via Sendcloud │
│ Order #1031 │
│ │
│ Feb 20 │
│ ────── │
│ │
│ 1:42 PM ⚠ Print job failed │
│ Benchy failed on Bambu A1 — filament runout │
│ Order #1027 │
│ → Retry Print │
│ │
│ 1:28 PM ✗ Order marked as failed │
│ Could not complete printing for Order #1027 │
│ → View Order │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ ‹ Previous 1 2 3 Next › │
└──────────────────────────────────────────────────────────────────────┘
Key changes:
- Completely replaces the raw event table with a human-readable timeline
- Each event is a plain-English sentence with context
- Grouped by day with relative labels ("Today", "Yesterday")
- Icons replace colored "API" / "WARN" badges
- Failed events include actionable links ("→ Retry Print")
- No event types, no JSON payloads, no raw timestamps
- Filters simplified to "All Types" (Orders / Printing / Shipping) and date range
3.7 Settings — Merchant View¶
Split settings into two views: Tenant Settings (what merchants see) and Admin Panel (what platform operators see, hidden from tenants).
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ Settings │
│ Manage your account and preferences │
│ │
├──────────────────────────────────┬───────────────────────────────────┤
│ │ │
│ Appearance │ Account │
│ ────────── │ ─────── │
│ │ │
│ Theme: [☀ Light] [🌙 Dark] │ Name: Jan Wielemans │
│ [💻 System] │ Email: jan@devgem.be │
│ │ Role: Owner │
│ │ │
│ │ [Sign Out] │
│ │ │
├──────────────────────────────────┼───────────────────────────────────┤
│ │ │
│ Notifications │ Connected Services │
│ ───────────── │ ────────────────── │
│ │ │
│ Push Notifications [On] [Off] │ 🛒 Shopify │
│ │ forma3d-dev.myshopify.com │
│ □ Order updates │ ● Connected │
│ ☑ Print completions │ [Manage →] │
│ ☑ Shipping updates │ │
│ ☑ Issues & alerts │ 🖨 SimplyPrint │
│ │ ● Connected │
│ │ [Manage →] │
│ │ │
│ │ 📦 Sendcloud │
│ │ ● Connected │
│ │ [Manage →] │
│ │ │
├──────────────────────────────────┼───────────────────────────────────┤
│ │ │
│ Install App │ Shipping Defaults │
│ ─────────── │ ───────────────── │
│ │ │
│ 📱 Install as app on your │ Default Method: │
│ device for quick access │ [Unstamped letter ▾] │
│ [Install] │ │
│ │ Default Address: │
│ │ [DevGem — Floraliënlaan 519 ▾] │
│ │ │
│ │ [Save Defaults] │
│ │ │
└──────────────────────────────────┴───────────────────────────────────┘
What's removed for tenants:
- System Health / Connection Status (WebSocket, API, Database)
- Service Versions table
- API URL
- Frontend/Gateway version numbers
- Environment label
- Developer Tools section
- Audit Logs (admin-only)
- Webhook URLs and secrets
- Company IDs
3.8 Integrations — Merchant View (via "Manage →" from Settings)¶
Proposed mockup:

ASCII wireframe
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ ← Settings │
│ │
│ Shopify Connection │
│ Manage your Shopify store connection │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ 🛒 forma3d-dev.myshopify.com │
│ Connected since Feb 12, 2026 ● Active │
│ │
│ Orders are automatically imported from this store. │
│ Products are synced for use in your product setup. │
│ │
│ [Disconnect Store] │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ Connect Another Store │
│ ───────────────────── │
│ │
│ 1. Click "Connect Shopify Store" and enter your store domain │
│ 2. You'll be redirected to Shopify to authorize the connection │
│ 3. After authorization, orders will automatically sync │
│ │
│ [🔗 Connect Shopify Store] │
│ │
└──────────────────────────────────────────────────────────────────────┘
Key changes:
- Each integration gets its own page (accessed via "Manage →")
- No webhook URLs, no Company IDs, no API URLs
- Plain-English description of what the connection does
- Simple connected/disconnected status
- "How it works" instructions remain (already good)
4. Role-Based View Strategy¶
Multi-tenancy requires separating what different roles see:
┌──────────────────┬─────────────────────────┬──────────────────────────┐
│ Feature │ Tenant (Merchant) │ Platform Admin │
├──────────────────┼─────────────────────────┼──────────────────────────┤
│ Dashboard │ Business metrics only │ + System Health full │
│ Orders │ Their orders only │ All orders, all tenants │
│ Products │ Their products only │ All mappings │
│ Activity │ Timeline view │ + Raw event log toggle │
│ Settings │ Preferences only │ + Developer Tools │
│ Integrations │ Connected/Disconnect │ + Webhook config │
│ Service Versions │ Hidden │ Full version table │
│ API Docs │ Hidden │ Swagger link │
│ Audit Logs │ Hidden │ Full audit trail │
│ User Management │ Hidden │ CRUD users │
│ Navigation │ 4 items │ 6+ items │
└──────────────────┴─────────────────────────┴──────────────────────────┘
Tenant navigation (4 items):¶
┌──────────────────┐
│ FORMA 3D │
│ │
│ 🏠 Home │
│ 📦 Orders │
│ 🖨 Products │
│ ⚙ Settings │
│ │
│ │
│ │
│ │
│ │
│ Jan W. │
│ Owner │
└──────────────────┘
Platform admin navigation (current + admin):¶
┌──────────────────┐
│ FORMA 3D │
│ │
│ 🏠 Dashboard │
│ 📦 Orders │
│ 🖨 Products │
│ 📋 Activity │
│ ⚙ Settings │
│ ─────────────── │
│ 🔧 Admin │
│ → Users │
│ → Audit Log │
│ → Dev Tools │
│ │
│ Jan W. │
│ Admin │
└──────────────────┘
5. Navigation Redesign¶
Current → Proposed¶
| Current | Proposed (Tenant) | Rationale |
|---|---|---|
| Dashboard | Home | Warmer, less technical |
| Orders | Orders | Already good |
| Product Mappings | Products | "Mapping" is integration jargon |
| Activity Logs | Activity | "Logs" implies raw text output |
| Settings | Settings | Already good |
Additional simplifications:¶
- Sidebar footer: Remove "Frontend Version 20260223205520" — no tenant value
- "Connected" indicator: Keep but simplify to just a green dot (no label)
- Header bar: Remove "Live" badge text, keep green dot only
6. Implementation Priority¶
Prioritized by impact on non-technical user perception:
| Priority | Change | Effort | Impact |
|---|---|---|---|
| P0 | Hide UUIDs from all tenant-facing views | Small | Critical |
| P0 | Rename "Product Mappings" → "Products" in nav + all pages | Small | High |
| P0 | Hide System Health, Service Versions, API URL for tenant role | Medium | Critical |
| P0 | Hide Developer Tools, Audit Logs for tenant role | Small | Critical |
| P1 | Sentence-case all status badges (PROCESSING → Processing) | Small | Medium |
| P1 | Hide webhook URLs and Company IDs for tenant role | Small | High |
| P1 | Replace "Activity Logs" raw event table with timeline view | Large | Critical |
| P1 | Rename "Activity Logs" → "Activity" in navigation | Small | Medium |
| P1 | Replace .gcode filenames in Print Jobs with product names |
Medium | High |
| P2 | Personal greeting on dashboard ("Good morning, Jan") | Small | Medium |
| P2 | Simplify Product edit form (hide raw IDs behind browse UX) | Medium | High |
| P2 | Consolidate Settings page for tenant view | Medium | High |
| P2 | Fix (s) pluralization across all views |
Small | Low |
| P3 | Separate navigation for tenant vs admin roles | Medium | High |
| P3 | "What to Do" checklist on order detail | Medium | Medium |
| P3 | Progress bar with time estimates on printing status | Medium | Medium |
7. References¶
Research Sources¶
- SaaS Dashboard Design: 27 Best Practices That Convert Users (2026)
- SaaS UX Best Practices: How to Design Dashboards Users Actually Understand
- Why Your SaaS Dashboard Is Overwhelming Users
- Design Intuitive SaaS Dashboards
- Shopify Polaris — Experience Values
- Shopify Polaris — Content Fundamentals
- Multi-Tenant eCommerce for Print Success
Assets¶
Current screenshots — assets/current-screens/:
| File | Screen |
|---|---|
current-dashboard.png |
Dashboard |
current-orders.png |
Orders list |
current-order-detail.png |
Order detail |
current-mappings-list.png |
Product Mappings list |
current-mapping-edit.png |
Product Mapping edit form |
current-activity-logs.png |
Activity Logs |
current-settings.png |
Settings |
current-integrations.png |
Settings > Integrations |
Proposed mockups — assets/mockups/:
| File | Screen |
|---|---|
mockup-dashboard-merchant.png |
Dashboard — Merchant view |
mockup-orders-list-merchant.png |
Orders — Merchant view |
mockup-order-detail-merchant.png |
Order Detail — Merchant view |
mockup-products-list-merchant.png |
Products list — Merchant view |
mockup-product-edit-merchant.png |
Product edit form — Merchant view |
mockup-activity-merchant.png |
Activity timeline — Merchant view |
mockup-settings-merchant.png |
Settings — Merchant view |
mockup-integration-merchant.png |
Integration detail — Merchant view |