DEV Community

Cover image for Stop Designing Screens First: Start with Use Case, Tables & Layout
Neeta Jadhav
Neeta Jadhav

Posted on

Stop Designing Screens First: Start with Use Case, Tables & Layout

In my previous post, I explained why a container-first approach is the best way to avoid broken layouts and endless rework.
(Link:Why Manual Alignment is Killing Your Power Apps Productivity)

Now it’s time to use that approach in a real example.

In this series, we’ll build a real Inventory Management Canvas App with Dataverse — step by step.

By the end, you’ll have a real asset:
✅ a reusable responsive app shell
✅ a clean Dataverse data model
✅ working modules (Products → Transactions → Reports)

We’ll build it like a solution architect:

  • Start with a clear use case
  • Create only the minimum Dataverse tables
  • Build a reusable layout shell (side nav, header, content, footer)
  • Grow feature-by-feature without breaking the UI

Series Roadmap

Use Case: Inventory Management App

Problem
In many teams, inventory is maintained using paper registers or multiple versions of spreadsheets. Over time, it becomes difficult to know the latest stock, track stock movement, or avoid duplicate product entries.

Solution
Build a Power Apps Canvas App (with Dataverse) to manage products and stock movements in one place.

Dataverse setup

I started with the Dataverse data model to keep the app stable as it grows. With tables and columns defined upfront, the UI (forms, galleries, filters) won’t keep changing later.

Dataverse tables created

Products (master table)

Purpose: Store product master data for the inventory system.

Columns

  • Product Name (Required)
  • SKU (Required, Unique)
  • Category (Lookup → Categories)
  • Unit (Required: pcs/box/kg/liter)
  • Reorder Level (Default set via business rule: 0)
  • Is Active (Default: Yes)

Data quality

  • Alternate key: SKU (prevents duplicate products)
  • Business rules (Reorder Level)
    • Reorder Level can’t be negative
    • If Reorder Level is blank, set it to 0

Products Table

Alternate key

Business rules

Business rule_Default0

Business rule_non negative

Categories (support table)

Purpose: Keep product grouping clean and consistent.

Columns

  • Category Name (Required)
  • Is Active (Default: Yes)

Data quality

  • Alternate key: Category Name (prevents duplicate categories)

Categories table

Alternate key


Quick summary

  • Products stores the product master (SKU, unit, reorder level) with validation for clean data.
  • Categories keeps grouping consistent and avoids duplicates.

Create the Canvas App (from the Solution)

Now that the Dataverse tables are ready, the next step is to create the Canvas app inside the same solution.

  1. Go to Solutions → open your solution (Inventory Management)
  2. Click + New → select AppCanvas app
  3. Give it a name like: Inventory Management App
  4. Choose Tablet layout (recommended for business apps)

This keeps everything (tables + app) in one solution, so it’s easier to manage and move between environments.

Canvas App creation


App Settings (Make it Responsive)

Before adding any UI, turn on the responsive settings. This is important because once controls are placed, changing layout later can cause rework.

Go to Settings → Display and set:

  • App layout: Responsive
  • Lock aspect ratio: Off
  • Lock orientation: Off

Responsive settings


Build the Layout Shell (Container-first)

Instead of starting with screens and placing controls manually, we build a reusable shell first.

This shell will stay the same for every module (Products / Transactions / Reports).

Step 1: Add the Root container

Insert → Layout → Container (Vertical)

Rename it to: RootVerticalContainer

Set:

  • Width: Parent.Width
  • Height: Parent.Height
  • Padding: 0
  • Gap: 0

This root container controls the full screen layout.


Step 2: Split into Header, Body, Footer

Inside RootVerticalContainer, add 3 containers:

HeaderContainer (Horizontal)

  • Height: 60
  • Flexible height: Off
  • Padding: 8

BodyContainer (Horizontal)

  • Flexible height: On ✅ (Body automatically takes remaining space)

FooterContainer (Horizontal)

  • Height: 40
  • Flexible height: Off
  • Padding: 8

Step 3: Split Body into Navbar + Content

Inside BodyContainer, add two containers:

NavbarContainer (Vertical)

  • Width: 240
  • Flexible width: Off

ContentContainer (Vertical)

  • Flexible width: On ✅
  • Padding: 16

At this point, your app has a clean responsive structure:

  • Header (top)
  • Side nav + Content (middle)
  • Footer (bottom)

And you can now build modules without breaking layout.

The final layout


Quick Summary (Part 1)

✅ Use case defined
✅ Dataverse tables created(Products,Categories)
✅ Responsive canvas app created
✅ Reusable layout shell ready


Next in Part 2, we’ll build a reusable Navigation Bar component with a clean side menu (Dashboard, Products, Transactions, Reports) using icons and labels, plus an active highlight state. Then we’ll wire it to switch the content area smoothly so the UI stays responsive and never breaks.

Top comments (1)

Collapse
 
balagmadhu profile image
Bala Madhusoodhanan

Well written article

If you have a good Datamodel in place , i would also recommend learn.microsoft.com/en-us/power-ap...