agentsclimarketplace

Canvas app screen layout

Skill Genb2nu/Relay/skills/canvas-app-screen-layout

Six standard screen layout archetypes for Canvas Apps with exact zone dimensions, responsive formulas, and ASCII zone diagrams. Stylist references this when assigning layouts to screens. forge-canvas references this when positioning controls.From its SKILL.md

Install
npx -y skills add Genb2nu/Relay --skill canvas-app-screen-layout

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

15.2 KB, as published. Nobody here has run it

Canvas App Screen Layout Archetypes

Use these archetypes when designing Canvas App screen layouts. Each defines named zones with exact pixel positions. Stylist selects the archetype per screen; forge-canvas positions controls within the zones.


1. Dashboard

Best for: KPI monitoring, overview screens, executive summaries Orientation: Landscape (1366 x 768 minimum)

┌─────────────────────────────────────────────────────────────┐
│ Header Bar (0, 0) — 1366 x 56                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐                          │
│  │ KPI │ │ KPI │ │ KPI │ │ KPI │  ← KPI Row (16,72) 1334w │
│  │ Card│ │ Card│ │ Card│ │ Card│    Height: 120            │
│  └─────┘ └─────┘ └─────┘ └─────┘                          │
│                                                             │
│  ┌──────────────────────┐ ┌──────────────────────┐         │
│  │                      │ │                      │         │
│  │   Chart / Grid       │ │   Chart / Grid       │         │
│  │   Left Panel         │ │   Right Panel        │         │
│  │   (16,208) 653x544   │ │   (685,208) 665x544  │         │
│  │                      │ │                      │         │
│  └──────────────────────┘ └──────────────────────┘         │
└─────────────────────────────────────────────────────────────┘

Zone dimensions:

ZoneXYWidthHeightFormula
Header00App.Width56—
KPI Row1672App.Width - 32120Per card: (App.Width - 32 - 48) / 4
Left Panel16208(App.Width - 48) / 2App.Height - 224—
Right Panel(App.Width/2) + 8208(App.Width - 48) / 2App.Height - 224—

2. Master-Detail

Best for: Record browsing, case management, list + form views Orientation: Landscape (1366 x 768 minimum)

┌─────────────────────────────────────────────────────────────┐
│ Header Bar (0, 0) — 1366 x 56                               │
├───────────────┬─────────────────────────────────────────────┤
│               │                                             │
│  List Panel   │   Detail Panel                              │
│  (0, 56)      │   (400, 56)                                 │
│  400 x 712    │   966 x 712                                 │
│               │                                             │
│  ┌─────────┐  │   ┌─────────────────────────────────────┐   │
│  │ Search  │  │   │ Record Header                       │   │
│  ├─────────┤  │   ├─────────────────────────────────────┤   │
│  │ Gallery │  │   │                                     │   │
│  │ (rows)  │  │   │  Form Fields / Tabs                 │   │
│  │         │  │   │                                     │   │
│  │         │  │   │                                     │   │
│  └─────────┘  │   └─────────────────────────────────────┘   │
└───────────────┴─────────────────────────────────────────────┘

Zone dimensions:

ZoneXYWidthHeightFormula
Header00App.Width56—
List Panel056400App.Height - 56—
Search Box167236844—
Gallery0132400App.Height - 132—
Detail Panel40056App.Width - 400App.Height - 56—

3. Form-Focused

Best for: Data entry, submissions, wizard steps Orientation: Either (works landscape or portrait)

┌─────────────────────────────────────────────────────────────┐
│ Header Bar (0, 0) — 1366 x 56                               │
├─────────────────────────────────────────────────────────────┤
│ Progress / Steps (0, 56) — 1366 x 48 (optional)            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│         ┌─────────────────────────────┐                     │
│         │                             │                     │
│         │  Form Card                  │                     │
│         │  Center-aligned             │                     │
│         │  (App.Width-600)/2, 120     │                     │
│         │  600 x varies              │                     │
│         │                             │                     │
│         │  [Fields...]                │                     │
│         │                             │                     │
│         │  ┌──────┐  ┌──────┐        │                     │
│         │  │Cancel│  │Submit│        │                     │
│         │  └──────┘  └──────┘        │                     │
│         └─────────────────────────────┘                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Zone dimensions:

ZoneXYWidthHeightFormula
Header00App.Width56—
Steps056App.Width48Optional
Form Card(App.Width - 600) / 2120600dynamicCenter-aligned
Button RowForm.X + Form.Width - 260Form.Y + Form.Height + 1626044Right-aligned in card

4. Mobile-First

Best for: Field workers, quick approvals, phone-optimized Orientation: Portrait (640 x 1136)

┌─────────────────────────┐
│ Header (0,0) 640x56     │
├─────────────────────────┤
│                         │
│  Content Area           │
│  (0, 56)                │
│  640 x 1020             │
│                         │
│  ┌───────────────────┐  │
│  │ Card              │  │
│  └───────────────────┘  │
│  ┌───────────────────┐  │
│  │ Card              │  │
│  └───────────────────┘  │
│                         │
├─────────────────────────┤
│ Tab Bar (0,1076) 640x60 │
│  [🏠] [📋] [👤] [⚙️]    │
└─────────────────────────┘

Zone dimensions:

ZoneXYWidthHeightFormula
Header00App.Width56—
Content056App.WidthApp.Height - 116Between header and tab bar
Tab Bar0App.Height - 60App.Width60Anchored to bottom
Tab Buttonindex * (App.Width / tabCount)App.Height - 60App.Width / tabCount60Even distribution

5. Pill Nav Enterprise

Best for: Internal admin tools, multi-section apps with heavy content Orientation: Landscape (1366 x 768 minimum)

┌─────────────────────────────────────────────────────────────┐
│ Header Bar (0, 0) — 1366 x 56                               │
├──────┬──────────────────────────────────────────────────────┤
│      │ Search + Actions (86, 56) — 1280 x 48               │
│ Pill ├──────────────────────────────────────────────────────┤
│ Nav  │                                                      │
│      │  Content Area (86, 104)                              │
│  70  │  1264 x 648                                          │
│  x   │                                                      │
│ 712  │  ┌───────┐ ┌───────┐ ┌───────┐                      │
│      │  │ Tile  │ │ Tile  │ │ Tile  │  ← Summary tiles     │
│[icon]│  └───────┘ └───────┘ └───────┘                      │
│[icon]│                                                      │
│[icon]│  ┌─────────────────────────────────────────────┐     │
│[icon]│  │ Data Table / Gallery                        │     │
│[icon]│  │                                             │     │
│      │  └─────────────────────────────────────────────┘     │
└──────┴──────────────────────────────────────────────────────┘

Zone dimensions:

ZoneXYWidthHeightFormula
Header00App.Width56—
Pill Nav05670App.Height - 56Fixed left
Pill Icon856 + (index * 70)5454Per icon
Search Bar8656App.Width - 10248—
Content86104App.Width - 102App.Height - 120—
Summary Tiles86120(App.Width - 134) / 31003 tiles, 16px gap
Data Table86236App.Width - 102App.Height - 252Below tiles

6. Tab Navigation

Best for: Multi-section categorized apps, settings screens Orientation: Either

┌─────────────────────────────────────────────────────────────┐
│ Header Bar (0, 0) — 1366 x 56                               │
├─────────────────────────────────────────────────────────────┤
│ Tab Strip (0, 56) — 1366 x 48                               │
│  [Tab A]  [Tab B]  [Tab C]  [Tab D]                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Tab Content Area (16, 120)                                 │
│  1334 x 632                                                 │
│                                                             │
│  (content varies per tab)                                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Zone dimensions:

ZoneXYWidthHeightFormula
Header00App.Width56—
Tab Strip056App.Width48—
Tab Buttonindex * tabWidth56App.Width / tabCount48Even
Active Indicatortab.X100tab.Width4Underline bar
Content16120App.Width - 32App.Height - 136—

Responsive Width Formulas

Use these formulas when controls need to adapt to different app widths:

// Full width with margin
Width: App.Width - (2 * SpaceXL)

// Half width (two-column layout)
Width: (App.Width - (3 * SpaceMD)) / 2

// Third width (three-column)
Width: (App.Width - (4 * SpaceMD)) / 3

// Gallery row full width
Width: Parent.Width

// Centered card
X: (App.Width - CardWidth) / 2

// Right-aligned button
X: Parent.Width - ButtonWidth - SpaceMD

Standard Improvements Checklist

Every screen should include these UX patterns (remind forge-canvas if missing):

PatternWhenControl
Empty gallery stateGallery items count = 0Label: "No records found" centered in gallery
Loading indicatorWhile data is loadingSpinner or "Loading..." label with Visible=IsLoading
Status badgeAny record with status fieldPill-shaped label with status colour
Error bannerAfter failed submit/saveRed banner at top with error message
ConfirmationAfter destructive actionDialog or overlay: "Are you sure?"
Disabled stateWhen form is incompleteSubmit button DisplayMode=If(formValid, Edit, Disabled)

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.