Build standard · issue one

A web portal, surface by surface

PERKS GROUP LTD specifies and builds web portals. This is the standard the work is done to: the surfaces a portal is made of, the order they are settled in, and what each one has to hold before the next can be drawn.

Registered name
PERKS GROUP LTD
Company number
17428298
D-U-N-S
235115368
Registered office
Unit 1 Universal Shipyard, Sarisbury Green, Southampton SO31 7ZN
Jurisdiction
England and Wales
Incorporated
30th August 2026
SIC
63120 · web portals
Correspondence
members@perksgroupuk.buzz

Eleven surfaces, and the order they are specified in

Level 0 · one click in

A portal is a short list of surfaces, each holding a different record, in a fixed order. The directory is first; everything else is a view of it or a gate in front of it.

The order is the build order too: these tiles are a sequence, not a menu.

  1. Directoryentry recordL0
  2. Taxonomycategory treeL1
  3. Searchderived indexL1
  4. Listingsfield listL1
  5. Accountsrole gridL0
  6. Moderationthree queuesL2
  7. AccessibilitycommitmentsL1
  8. Change windowsbackup setL1
  9. The unitreview wallL0
  10. Data heldretentionL2
  11. This sheetspecification orderL0

Indent is not decoration: it is the click count, drawn

Level 0 · one click in

Read the step

Flush left means a reader arrives from the home page; one step in means the surface hangs off a flush-left one; two steps in, off that.

So the indent is arithmetic as well as shape: two steps in is three clicks, and three is the budget.

The same thing, drawn
The eleven surfaces drawn at their indent depth Directory Taxonomy Slugs and addresses Search Listings Moderation Accounts Change windows flush left — one click from home one step in — two clicks two steps in — three clicks two steps in — three clicks flush left — one click from home
Every box here is a page of the standard.

The directory is the spine the other surfaces hang off

Level 0 · one click in

An identifier is identity. A slug is an address. One is never allowed to do the other’s work.

An entry is the record of one listed thing, created once. Eight fields are fixed before another surface is drawn: identifier, registered name, display name, slug, category, post town, outward postcode, state.

An identifier is never reissued: tree, index and record all point at it. A slug may change, and the old one stays in the register pointing at the new.

Single writer. One account holds an entry. Everyone else proposes, and a proposal lands in a queue as one.

Four roles, and the grid that settles what each may change

Level 0 · one click in

Readerno account at all
Nothing. A published listing is readable without signing in.
no row is written
Holderone entry, exactly
Its one entry, and the listing drawn from it.
entry row, revision queue
Moderatorqueue-facing
A listing’s state and the reason code on the move. Never the copy it judges.
moderation record
Stewardtree and register
The category tree and the slug register. No other role may.
slug register, record

An account record holds an identifier, one address, one role, the entry it holds if any, and two stamps. A role change is itself a row.

Categories, and the depth budget that caps them

Level 1 · two clicks, via the directory

Breadth adds and depth multiplies, and that asymmetry decides the shape of a tree. Twelve more siblings is twelve more rows on a page; one more level under twelve categories, six children each, is several hundred nodes.

Every category sheet carries a three-click budget; the panel does that arithmetic before a level is agreed.

Taxonomy depth planner

Rows on the first page.
Across the tree, not the widest branch.
One level is one click.
Breadth adds a row; depth multiplies the tree BREADTH — ADDS A ROW one screenful, still one click deep DEPTH — MULTIPLIES IT one parent, six children, and the band below is what the third level costs in rows the planner opposite does this sum for whatever numbers you put into it
Breadth is a row. Depth is a band.

Slugs, reserved words, and the collisions a list hides

Level 2 · three clicks, via a category

Lossy on purpose

Slugging throws things away by design: capitals fold, accents come off, an ampersand expands, every other mark becomes a separator. That is what makes an address typable, and what makes two names collide.

Surfaces own words too, so a category may not take one. The panel names what it removed from each line, then flags what collided.

Slug and collision checker

Two pairs here land on one address; one line asks for a reserved word.

Decided once, written down. Every collision ends in a slug-register row: rename, qualify, or merge.

A listing’s five states, and the three queues that move it

Level 1 · two clicks, via the directory

A listing is a view of an entry written for a reader, not a second copy. Its state is the only field a non-holder can move.

  1. 1DraftThe holder writes. Nothing public, nothing queued.Holder
  2. 2SubmittedIt joins the submissions queue, in arrival order.Holder → queue
  3. 3PublishedAccepted by a moderator with a reason code, and only now indexed.Moderator
  4. 4RevisionAn edit opens a row beside the live one, which does not move.Revisions queue
  5. 5WithdrawnPulled by the holder, or removed on a report. The row stays.Reports queue

Each queue has its own order rule: a report against live copy cannot sit behind a fortnight of drafts. No row is edited or deleted — a correction is a new row naming the one it corrects.

Windows, drills, and the wall the sheets are pinned to

Level 0 · one click in

Changes go into a named window, so nobody meets a surface halfway through being replaced.

The backup set is the directory table, the category tree, the slug register, the moderation record and the account roles. A drill puts it on an empty instance and walks a reader’s route.

The sheets live on a wall in the unit at Sarisbury Green, one surface to a sheet, and nothing is signed off while its sheet is off the wall.