HWG AI · interface direction

Layout system

The rules every screen follows. Two small decisions per screen, from two short lists — not one layout applied everywhere, and not twenty-nine separate ideas.

The two layers

Layer 1

Page skeleton

How the screen divides. One column, two panes, three panes, a prompt that owns the page. Chosen once per screen, from what the work actually needs.

Layer 2

Content treatment

How a list of things looks inside that skeleton. Cards, rows, a dense table, flat sections. Chosen once per kind of content, then never varied again.

Cards and dense tables are not alternatives to split panes. They sit inside one. Separating the two decisions is what makes mixing safe: the skeleton can change screen to screen while every list in the product still looks identical.

Layer 1 · Page skeletons

Pick one per screen, from what the work on that screen actually is. Three of these eight carry almost the whole product; the rest are here so you can see what was ruled out and why.

Single column

Navigation, then one scrolling body. Nothing competes for attention.

Stripe · settings pages
Two-pane

A list on the left, the selected thing on the right. You never lose your place.

Gmail · Linear · Figma
Three-pane

A filter, a list, a detail. Earns its width only when the filter is used constantly.

Slack · Outlook · Front
Prompt-first

The input is the page. Results stack above it as they arrive.

ChatGPT · Jimeng · v0
Form + live preview

Controls left, the thing being made on the right, updating as you type.

Buffer · Canva · Hootsuite
Canvas

Floating panels over a workspace. Powerful, and a steep first ten minutes.

Figma · Miro · n8n
Board

Columns you drag between. Only right when things really move through stages.

Trello · Notion · sales pipelines
Calendar

A time grid. The expected second view of anything that schedules posts.

Buffer · Later · Hootsuite

In use: single column, prompt-first, form + live preview, and three-pane on Inbox alone. Four shapes across the whole product.

Held back: calendar is the obvious second view for Publish once scheduling exists. Board needs real stages on leads before it means anything. Canvas is a different product.

Layer 2 · Content treatments

Treatment is chosen once per kind of content and then never varied — that single rule is what lets the skeleton change from screen to screen without the product coming apart.

Cards

Few items, each one a thing you act on, each with a mark of its own.

Divided rows

A list you scan top to bottom. One hairline between, no boxes, no corners.

Dense table

Many items, compared field by field. Columns line up so the odd one out is obvious.

Flat sections

Forms and settings. A heading, a hairline, the fields. No container at all.

Bento

Tiles of different weight, one glance. Earns its place once, on the dashboard.

Contact sheet

A generated result is recognised by looking, so it gets a thumbnail, never a row of text about it.

How to choose, in one line each

Cardsunder about a dozen, each with its own logo. Rowsa list you read down, any length. Tablewhen people compare two items field by field. Sectionsanything you fill in rather than browse. Bentoonce per product, on the summary screen.

The rules that hold it together

Personality does not come from the skeleton. It comes from the parts that never change. Break these and it falls apart however few layouts you use.

01Navigation in the same place, same width, every screen.
02Same page header everywhere: title, one line of explanation, main action on the right.
03One treatment per kind of content, forever. A conversation row looks the same wherever it appears.
04Panes always divide the same way: 300px list on the left, one hairline, no shadow between them.
05One scrolling area per pane. Never a scroll inside a scroll.
06A card means a discrete object you can act on. The moment it is only a container, it becomes a flat section.
07Density belongs to the content, not the page. A table is tight on every screen it appears on.
08One accent colour, one spacing scale, one typeface. No exceptions per screen.
09Any list that can keep growing is paged. Fifteen rows, the count of the whole set, the pager History already uses, and a rows-per-page control beside it. A list runs unbroken only when something real caps it — one day, or a top five.New

Every screen

ScreenSkeletonTreatment
Home pageMarketing — its own patternChangedSee below
DashboardSingle columnBento, then divided rows
CalendarCalendar grid + day paneDivided rows
Create CenterPrompt-firstDivided rows
Create · Image, Video, Audio, ArticleForm + live previewFlat sections
InboxThree-paneDivided rows
Channel connectionsSingle columnCards, then dense table
PublishForm + live previewFlat sections
Insights · OverviewSingle columnBento, then dense table
Insights · PostsSingle columnDense tableNew
HistorySingle columnContact sheet
Lead generationSingle columnDense table
Lead settingsSingle columnFlat sections

Templates, Canvases, Replica, Brand Profile, Knowledge, Media Library and Tutorials are not drawn yet — each is a single column with the treatment its content asks for.

The home page is its own thingNew

The marketing page sits outside the product rules above, and now has rules of its own. They apply to that page only — nothing inside the platform follows them.

01Every section is a centred header with everything beneath it. A short gold rule, a heading, one line, then the content. Nothing sits beside a header.
02One accent, everywhere. The gold is the platform's accent as well, so a screenshot on the marketing page matches the product it shows.
03Four golds, sampled from the logo. Deep bronze carries text, mid gold carries headings and borders, the logo gold fills, the pale wash tints. Never the bright golds on text.
04Bento cards show, they do not list. Centred text, one ghost button, then a real screen cropped at the card's bottom edge.
05Claims about the business are placeholders until measured. Reply time and customer quotes stay marked for replacement rather than invented.
06The comparison is against doing it by hand, never a named competitor — that would commit us to claims about someone else's product.

Type and logo

TypefaceInter, for headlines, body and small interface text alike. ChineseNoto Sans SC, which sits beside Inter without a visible change of character. Logo on darkthe reversed file, never a white plate behind the transparent one.

The four kinds of nothing

An empty screen is not one state, it is four, and they must not look alike. Showing the wrong one makes people do the wrong thing — create a duplicate, re-run a job, or decide the product is broken.

1 · Nothing yet

A new account. Nothing is wrong — there has simply never been anything here. Keeps the space, names what belongs there, offers the one action that fills it.

2 · No match

There is plenty of data. The search or the filter excluded all of it. Shows what was excluded and how many exist.

3 · Could not load

The request failed. Looks wrong on purpose — a failure drawn as emptiness gets fixed by making a second one.

4 · Not yet, here

One tile has no data while the rest of the page is full. Same size, no button, so the page does not jump as data lands.

01The box never collapses. A page with no data is the same shape as a page with data.
02Never show nothing. Blank space reads as broken, and people reload instead of acting.
03Never show a zero you cannot defend. “0 reached” is a claim about the world. “No figures yet” is the truth.
04One action, and it is the one that fills the space. Never three buttons on an empty panel.
05Loading is not empty. A grey skeleton while it is in flight; the message only once you know there is nothing.
06Say what will appear, not that it is missing. “Posts you schedule show here” beats “No data”.
07Blocked by setup is its own case. If nothing can exist until a channel is connected, send them there instead of apologising.
08Count what you do have. “72 records, none of them this” tells someone their data is safe.
09A blocked state adds the way out, it never removes it. The notice at the top explains; the section that fixes it stays where it always sits, in its unset state. Lead settings keeps Tool download in place, reading “Not installed”.New
← All screens