Skip to content

Sample: a fictional installation company, drawn up by the Appwinst Fit check.

Brandbook · Voorbeeld Installatietechniek
Theme

Brandbook Customer portal and Office

See for yourself where your order stands. Without a phone call.

How the Customer portal and Office of Voorbeeld Installatietechniek look and sound. Once the Build brief is signed, this document applies to everything the users see.

Version 1.6 · November 2026

1

The brand

What the apps do, what they replace and what they promise. The rest of this brandbook follows from this.

See for yourself where your order stands.

The promise in one line. The status, the work order and the invoice, without a phone call.

Who we are Given

Voorbeeld Installatietechniek installs and maintains heat pumps and ventilation for companies and schools in Twente.

What the portal does Proposal

In the Customer portal, customers see for themselves where their order stands.

With the work orders, the invoice and the documents. And with a question about the order, if anything is unclear.

What it replaces: the phone call Given

Today customers phone the office. They ask where their order stands, or want a work order or invoice again. That is about 40 phone calls a day.

An office employee then looks up the order file in Exact Online, and sends it by e-mail or WhatsApp.

How it works

  1. Sign in. The customer requests a sign-in link with their e-mail address. No password is needed.
  2. Orders. They see the orders of their relation, each with one status.
  3. Order. They open an order, with its work orders, invoice and documents.
  4. Question. They ask a question about the order. The question sits with that order.
  5. Answer. An office employee answers in Office. The customer gets an e-mail with a link to the order.
  6. Maintenance. The customer chooses a time for the yearly maintenance. Not in this Build

The six steps are those of the Build request, in that order, in the words of the specification. Step 6 is the Bookings add-on (BUITEN-003).

What the apps promise Proposal

Who uses the apps

Customer

A contact at a company or school that Voorbeeld Installatietechniek works for: about 1,200 people. They come rarely, and then with one question. Where does my order stand? Where is the work order or the invoice? They often arrive from an e-mail, on their phone.

They want the status at a glance, the order file itself, and a question that does not get lost.

Office employee

About five colleagues at the office, at a large screen. They answer customers' questions, with the order beside them.

They want the oldest question at the top and everything they need to answer on one screen. And fewer phone calls about what the customer can see for themselves.

Administrator

One person who decides who may get in. They invite colleagues to Office. They block a customer's access, and restore it when needed.

Who sees what, and who decides what

  1. Customer. An e-mail address someone signs in with. It belongs to one or more contacts in Exact Online.
  2. Relation. The company or school, with the relation code from Exact Online and at least one order.
  3. Orders. The orders of that relation. Each order has one status, and a planned date while it is still to come.
  4. Order files and questions. With each order, the work orders, the invoice, the documents and the conversation.

3

Colour

Blue and yellow are given. Blue carries the brand and every action. Yellow is an accent and never text on white. The other colours are a proposal, each with one task.

BlueGiven

#0B5394 · RGB 11 83 148
--vi-blauw, --vi-actie (light)

The brand, every action, links and the app bar.

YellowGiven

#F2A900 · RGB 242 169 0
--vi-geel, --vi-focus (dark)

Accent: the stripe below the bar, the counter and the labels New and New answer. Never text, and never a shape on white.

InkProposal

#1B2430 · RGB 27 36 48
--vi-inkt, --vi-inkt-vast

All text in light, and text on yellow.

White and MistProposal

#FFFFFF · #F3F6FA (243 246 250) · #E6ECF3 (230 236 243)
--vi-kaart, --vi-pagina, --vi-kaart-hover

Cards and fields on a light page, and hover.

NightProposal

#0F1720 (15 23 32) · #172230 (23 34 48) · #213045 (33 48 69)
--vi-pagina, --vi-kaart, --vi-kaart-hover (dark)

Page, cards and hover in dark.

Deep blue and Ice blueProposal

#083D6E (8 61 110) · #7DB3E8 (125 179 232) · #A5CBF0 (165 203 240)
--vi-actie-hover (light), --vi-actie and --vi-actie-hover (dark)

Hover in light; actions and links in dark. Derived from Blue.

GreenProposal

#1B7A3A (27 122 58) · dark #5CC98A (92 201 138)
--vi-goed

Completed, Can sign in, Answered and success. Always with an icon and text.

RedProposal

#B3261E (179 38 30) · dark #FF8A80 (255 138 128)
--vi-fout

Errors, Blocked and Block.

OchreProposal

#8A5A00 (138 90 0) · dark #F2C14E (242 193 78)
--vi-wacht

Partly delivered, Open and attention. The text form of Yellow.

How much of each

Light and dark side by side

The same order row and buttons in both themes. In dark an action turns Ice blue; the app bar stays blue.

Which colours carry text

Every pair that carries text reaches 4.5 : 1 (WCAG 2.2, 1.4.3). A shape that means something reaches 3 : 1 (1.4.11). Colour never stands alone: a status always has a word and a shape.

ExampleForeground on backgroundContrastPasses (WCAG 2.2)Use
AaPairInk #1B2430 on White #FFFFFFContrast15.65 : 1PassesText (1.4.3)UseAll text on a card
AaPairInk on Mist #F3F6FAContrast14.44 : 1PassesTextUseText on the app page
AaPairInk on Mist-2 #E6ECF3Contrast13.16 : 1PassesTextUseCard on hover, own message
AaPairSoft #4F5B69 on White / Mist / Mist-2Contrast6.92 · 6.39 · 5.82 : 1PassesTextUseDate, hint, order number, Cancelled, Closed
AaPairBlue #0B5394 on White / Mist / Mist-2Contrast7.84 · 7.23 · 6.59 : 1PassesTextUseLink, secondary button, In progress and Planned, focus ring
AaPairWhite on BlueContrast7.84 : 1PassesTextUsePrimary button, app bar (both themes)
AaPairWhite on Deep blue #083D6EContrast11.04 : 1PassesTextUsePrimary button on hover
AaPairDeep blue on Mist-2Contrast9.28 : 1PassesTextUseSecondary and text button on hover
AaPairWhite on Bar hover #2A6BA2Contrast5.64 : 1PassesTextUseMenu item on hover in the bar
AaPairInk on Yellow #F2A900Contrast7.79 : 1PassesTextUseLabel New, counter (both themes)
PairYellow on BlueContrast3.90 : 1PassesShape (1.4.11); no ordinary textUseStripe, current tab and focus ring in the bar
PairYellow on WhiteContrast2.01 : 1PassesNoUseNever: no text, no shape, no focus ring on white
AaPairGreen #1B7A3A on White / Mist / Mist-2Contrast5.40 · 4.98 · 4.54 : 1PassesTextUseCompleted, Can sign in, Answered
AaPairRed #B3261E on White / Mist / Mist-2Contrast6.54 · 6.03 · 5.50 : 1PassesTextUseError message, Blocked, danger secondary
AaPairWhite on Red; White on #8C1D17Contrast6.54 · 9.12 : 1PassesTextUseDanger button, and on hover
AaPairOchre #8A5A00 on White / Mist / Soft yellow #FDF3D6Contrast5.93 · 5.47 · 5.35 : 1PassesTextUsePartly delivered and Open, warning
PairStrong border #6B7785 on White / MistContrast4.56 · 4.21 : 1PassesShapeUseBorder of a field and of a frame that means something
AaPairOff #6B7785 on Mist-2Contrast3.84 : 1PassesExempt (disabled)UseDisabled button and field; never for anything you must read
AaPairInk-d #E8EEF5 on Night / Night-2 / Night-3Contrast15.45 · 13.75 · 11.43 : 1PassesTextUseAll text in dark
AaPairSoft-d #A9B6C6 on Night / Night-2 / Night-3Contrast8.76 · 7.79 · 6.48 : 1PassesTextUseSecondary text, Cancelled and Closed in dark
AaPairIce blue #7DB3E8 on Night / Night-2 / Night-3Contrast8.15 · 7.25 · 6.03 : 1PassesTextUseLink, secondary button, In progress and Planned in dark
AaPairNight on Ice blue; on #A5CBF0Contrast8.15 · 10.66 : 1PassesTextUsePrimary button in dark, and on hover
AaPair#A5CBF0 on Night-3Contrast7.88 : 1PassesTextUseSecondary button on hover in dark
PairYellow on Night / Night-2Contrast8.98 · 7.99 : 1PassesShapeUseFocus ring in dark
AaPairGreen-d #5CC98A on Night / Night-2 / Night-3Contrast8.74 · 7.78 · 6.47 : 1PassesTextUseGreen statuses in dark
AaPairRed-d #FF8A80 on Night / Night-2 / Night-3Contrast7.90 · 7.03 · 5.85 : 1PassesTextUseErrors in dark
AaPairNight on Red-d; on #FFB0A8Contrast7.90 · 10.33 : 1PassesTextUseDanger button in dark, and on hover
AaPairOchre-d #F2C14E on Night-2 / Soft yellow-d #2B2410Contrast9.57 · 9.18 : 1PassesTextUsePartly delivered and Open in dark
PairStrong border-d #7D8B9C on Night / Night-2Contrast5.19 · 4.62 : 1PassesShapeUseField border in dark

The tokens

Every colour has a token with a fixed name, with one value for light and one for dark. The app uses only these tokens, never a loose colour code.

Token on :rootLightDarkTask
--vi-blauwLight#0B5394Dark#0B5394TaskBrand colour, logo
--vi-geelLight#F2A900Dark#F2A900TaskAccent
--vi-inkt-vastLight#1B2430Dark#1B2430TaskText on yellow
--vi-paginaLight#F3F6FADark#0F1720TaskBackground of an app page
--vi-kaartLight#FFFFFFDark#172230TaskCard, field, status label
--vi-kaart-hoverLight#E6ECF3Dark#213045TaskHover, own message
--vi-vlak, --vi-vlak-2, --vi-vlak-3Light#FFFFFF, #F3F6FA, #E6ECF3Dark#0F1720, #172230, #213045TaskPage and surfaces of this brandbook; skeleton
--vi-inktLight#1B2430Dark#E8EEF5TaskText
--vi-inkt-zachtLight#4F5B69Dark#A9B6C6TaskSecondary text, Cancelled, Closed
--vi-randLight#C9D3DFDark#2C3A4BTaskDivider (decorative)
--vi-rand-sterkLight#6B7785Dark#7D8B9CTaskField border, frame that means something
--vi-actie, --vi-actie-hoverLight#0B5394, #083D6EDark#7DB3E8, #A5CBF0TaskButton, active choice
--vi-op-actieLight#FFFFFFDark#0F1720TaskText on a button
--vi-linkLight#0B5394Dark#7DB3E8TaskLinks
--vi-focusLight#0B5394Dark#F2A900TaskFocus ring, 3 px
--vi-balk, --vi-balk-hover, --vi-op-balk, --vi-focus-balkLight#0B5394, #2A6BA2, #FFFFFF, #F2A900DarksameTaskApp bar
--vi-infoLight#0B5394Dark#7DB3E8TaskIn progress, Planned, info notice
--vi-goedLight#1B7A3ADark#5CC98ATaskCompleted, Can sign in, Answered, success
--vi-fout, --vi-fout-hover, --vi-op-foutLight#B3261E, #8C1D17, #FFFFFFDark#FF8A80, #FFB0A8, #0F1720TaskError, Blocked, block
--vi-wachtLight#8A5A00Dark#F2C14ETaskPartly delivered, Open, attention
--vi-geel-zachtLight#FDF3D6Dark#2B2410TaskLabel Proposal in this brandbook
--vi-uit-vlak, --vi-uit-inktLight#E6ECF3, #6B7785Dark#213045, #7D8B9CTaskDisabled

4

Typography

Proposal: Arimo instead of Arial

The quotes use Arial. Arial cannot be shipped freely in an app. Arimo has the same width per character and an open licence, so the text runs just the same. Two weights: Regular 400 and Bold 700.

Aa

Arimo Regular 400

Body text, fields, dates and hints.

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890 € % & @ ( ) ’ “ ” – · é ë ï

Aa

Arimo Bold 700

Headings, buttons, labels and statuses.

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890 € % & @ ( ) ’ “ ” – · é ë ï

The type ladder

Each step with a real line from the app. Body text is never smaller than 16 px; 14 px is only for labels, dates and hints.

Display40/48 px (2.5 rem); below 600 px 33/40 · −0.01 em · 700

See for yourself where your order stands.

Title33/40 px (2.0625 rem); below 600 px 28/36 · −0.01 em · 700

Heat pump, sports hall

Heading28/36 px (1.75 rem) · 700 · page title in the app

Orders

Subheading23/32 px (1.4375 rem) · 700

Questions about this order

Intro19/28 px (1.1875 rem) · 400; 700 as a section heading in the app

The orders of Basisschool De Wilg.

Text16/24 px (1 rem) · 400

After 12:00. The engineer arrives at 12:30 and is done around 16:00.

Small14/20 px (0.875 rem) · 400

Planned date: Fri 30 Oct 2026

Label14/20 px · +0.01 em · 700

E-mail address

Figures16/24 px · 400 · tabular-nums

Order 4093 · Invoice 2026-1187 · 184 kB · 09:14

SizeValue
SizeScaleValueModular, factor 1.2 from 16 px: 16 · 19 · 23 · 28 · 33 · 40 (rounded to whole px). Small (14) sits outside the factor, for legibility at 390 px.
SizeUnitValuerem, so text at 200 % grows as one whole (1.4.4); line heights in px on the 4 px grid.
SizeLine lengthValueAt most 68 characters.

Space and rhythm

Everything sits on an 8 px grid. Everything you touch is at least 44 × 44 px.

RuleSize
RuleRhythmSize8 px grid; 4 and 12 as half steps within a component. Every line height is a multiple of 4.
RuleWithin a componentSize4, 8 or 12
RuleBetween componentsSize8 (list), 16 (page at 390), 24 (page from 600)
RulePage marginSize16 at 390; 24 × 32 from 600
RuleTarget sizeSize--vi-doel 44 × 44 px for everything you touch (2.5.8 asks for 24)
RuleCornersSize--vi-hoek-1 4 · --vi-hoek-2 8 (button, field) · --vi-hoek-3 12 (card) · round (label)
RuleLinesSize1 border · 2 button border and field on error · 3 focus ring · 4 yellow stripe and current tab · 6 border left of a notice

Rules

Licence

PartValue
PartTypefaceValueArimo; metrically equal to Arial (same widths per character)
PartLicenceValueApache License 2.0
PartFilesValueTwo WOFF2 (400 and 700), embedded in this file; in the app from its own domain (BRAND-002)
PartFallbackValue"Arimo", Arial, "Liberation Sans", Helvetica, sans-serif

The licence belongs with the files: whoever ships Arimo ships the licence text with it.

5

Motion

In the Customer portal and in Office, something moves only when you do something yourself. Motion shows that it worked, and nothing else.

No big moving moment: customers come here for a status or a work order, and the fastest way there stands still.

The tokens

Every motion uses one of these tokens. They apply in both themes.

TokenValueWhat for
Token--vi-duur-feedbackValue100 msWhat forA button, row or link changes colour when you point at it.
Token--vi-duur-kleinValue150 msWhat forThe menu's arrow turns when the menu opens.
Token--vi-duur-binnenValue250 msWhat forSomething new appears: your question, an answer, or the notice after requesting a sign-in link.
Token--vi-curve-standaardValuecubic-bezier(.2, 0, 0, 1)What forWhat is already on screen and changes.
Token--vi-curve-binnenValuecubic-bezier(.05, .7, .1, 1)What forWhat comes in: quickly into view, calmly to a stop.
Token--vi-afstand-binnenValue8 pxWhat forHow far something new slides up as it appears.

What moves, and why

MomentWhat happensTokenWhyWith reduced motion
MomentSend question (Customer portal, order)What happensThe question appears in the conversation: it rises 8 px and becomes visible. Then it stands still. Once it is sent, the notice above it appears the same way.Token--vi-duur-binnen
--vi-curve-binnen
WhyYou see that your question has arrived, and where it is.With reduced motionThe question and the notice are there at once.
MomentSend answer (Office, question)What happensThe same: the answer appears below the question.Token--vi-duur-binnen
--vi-curve-binnen
WhyThe office employee sees that the answer has gone and that the customer gets an e-mail.With reduced motionThe answer is there at once.
MomentRequest sign-in link (Customer portal, Sign in)What happensThe notice after the request appears in place of the form.Token--vi-duur-binnen
--vi-curve-binnen
WhyThe form is gone because the request worked, not because something went wrong.With reduced motionThe notice is there at once.
MomentPointingWhat happensButtons, order rows, order files, links in the bar and table rows take their hover colour. When the mouse moves away, the colour is back at once.Token--vi-duur-feedback
--vi-curve-standaard
WhyYou see what you are about to choose.With reduced motionThe colour changes at once.
MomentOpen menuWhat happensThe arrow beside your name turns half a turn. The list is there at once.Token--vi-duur-klein
--vi-curve-standaard
WhyThe arrow shows that the menu is open.With reduced motionThe arrow is the other way round at once.
MomentTo a heading on the same pageWhat happensThe page scrolls to the heading, which comes into view below the bar.Tokenthe browserWhyYou see that you stay on the same page.With reduced motionThe page jumps to the heading.

What never moves

Nothing repeats and nothing blinks. Every motion is done within a second, so there is never anything to pause.

Sending a question, frame by frame

This is how a customer sees their question about an order arrive. The frames stand still. Open Play motion to see the motion.

1 · The question typed

Your question

About this order, at most 2,000 characters. You get an e-mail when there is an answer.

Do the classrooms need to be empty for the maintenance?

2 · Sending: the question enters the conversation

  1. Facilities contact

    Do the classrooms need to be empty for the maintenance?

    Sending…

3 · Sent: the notice is added

Your question has been sent

It is with the order. You get an e-mail when there is an answer.

  1. Facilities contactMon 26 Oct, 11:20Open

    Do the classrooms need to be empty for the maintenance?

Frame 3 is also what you see with reduced motion on, and without script. Then the order reloads and the notice and the question are there together.

Play motion

Your question has been sent

It is with the order. You get an e-mail when there is an answer.

  1. Facilities contactMon 26 Oct, 11:20Open

    Do the classrooms need to be empty for the maintenance?

The notice and the question rise 8 px and become visible in 250 ms. Close and open this block to see it again. With reduced motion turned on for your device, they are there at once.

The rules

6

Voice

Like our engineers talk: short and clear, no jargon. Businesslike, with a date and a next step.

The tone is given: "Businesslike" and "Like our engineers talk: short and clear, no jargon." The rules, pillars, examples and taglines below are a proposal that follows from it.

Six rules Proposal

  1. Short. At most 15 words per sentence. One message per sentence.
  2. Ordinary words. Say "ventilation with heat recovery", not "MVHR unit". No words from Exact Online in the Customer portal, such as sales order.
  3. Plain “you”. In both apps and in every e-mail. Never stiff or formal, and never switching to “the customer”.
  4. A date, not a vague word. "Planned date: Thu 12 Nov 2026", not "soon".
  5. End at the next step. A notice says what is the case, and what you can do now.
  6. A button says what it does. It starts with a verb: Send question, Block, Restore access.

Four pillars Proposal

See for yourself

Where your order stands, without a phone call.

One status

One word per order. Never two statuses at once, never an empty one.

With the order

Work order, invoice, documents and questions sit with the order they belong to.

In writing

Question and answer sit with the order. Nobody has to remember what was said.

How we say it Proposal

The rules also apply to an office employee who answers: a date or a fact, not a procedure.

Taglines Proposal

See for yourself where your order stands. Without a phone call.

The promise from the cover.

Our words

The words of the specification's Terms. One word per idea. A name always has a capital: Customer portal, Office, Exact Online, Voorbeeld Installatietechniek. Every other word is lower case in a sentence, and takes a capital only at the start of a heading, label, button or status: "Order 4093", but "open the order".

Words we do not use Proposal

7

Components

Every component of both apps, in every state a person can reach. The screens in Applications are built from these alone. The Theme button at the top switches every sample between light and dark.

Button

Both apps

One primary button per screen. The label says what happens, with a verb: Send question, Block. The red button is only for blocking.

Primary

Default

Hover

Focus

Pressed

Disabled

Busy

Secondary

Default

Hover

Focus

Disabled

Text

Default

Hover

Focus

Danger

Default

Hover

Secondary, in a table

Secondary, hover

Send question

The parts of the button

No.PartTypeSizeColourSpaceBehaviour
No.1PartSurface, border, focus ringType—Sizemin. 44 × 44; border 2; radius 8; ring 3, offset 2Colour--vi-actie; hover --vi-actie-hover; disabled --vi-uit-vlak; ring --vi-focusSpacepadding 8 × 18; 8 between buttonsBehaviourOne primary button per screen; ring only for the keyboard (:focus-visible); pressed: inner shadow 3
No.2PartIcon (optional)Type—Size20 × 20, stroke 2ColourcurrentColorSpace8 to the labelBehaviourWhen busy, the spinner replaces the icon; the label stays; aria-disabled, no second click
No.3PartLabelTypeArimo 700Size16/24Colour--vi-op-actie (primary), --vi-actie (secondary), --vi-link (text), --vi-op-fout / --vi-fout (danger)Space—BehaviourWraps onto more lines, never truncated; knop--vol at 390 in forms

Input field and text area

Both apps

The label is always above the field. An error sits below the field and says what is missing. The input stays.

Empty

The address where you get e-mail from us.

Hover

Focus

Filled in

Error: not filled in

Enter your e-mail address.

Error: not an e-mail address

This is not an e-mail address. Check that it has a dot and a domain.

Disabled

Text area

Empty

Your question

About this order, at most 2,000 characters. You get an e-mail when there is an answer.

Error: not filled in

Your question

Write your question first.

Error: too long

Your question
Will the engineer come before or after 12:00 on Friday? The gym is in use in the morning. …

Your question is too long: at most 2,000 characters. Your text is still there.

E-mail addressThe address where you get e-mail from us.This is not an e-mail address. Check that it has a dot and a domain.

The parts of a field

No.PartTypeSizeColourSpaceBehaviour
No.1PartLabelTypeArimo 700Size14/20Colour--vi-inktSpace4 belowBehaviourAlways visible, above the field; never a placeholder as the label
No.2PartHintTypeArimo 400Size14/20Colour--vi-inkt-zachtSpace4BehaviourLinked with aria-describedby
No.3PartInputTypeArimo 400Size16/24; min. height 44 (text area 120); border 1; radius 8Coloursurface --vi-kaart; border --vi-rand-sterk; hover --vi-inkt; focus ring 3 --vi-focusSpacepadding 9 × 12BehaviourCorrect type and autocomplete; 16 px prevents zooming on iOS. In the app the text area is a textarea; this brandbook draws it as a surface
No.4PartError messageTypeArimo 700 + icon 16Size14/20; input border 2Colour--vi-foutSpace4 aboveBehaviourBelow the field; aria-invalid and aria-describedby; after sending, not while typing; focus moves to the first field in error; the input stays

Sign in

Both apps

Customer portal: one field and one button, no password. After the request everyone sees the same message (SCH-011), with a field for the sign-in code for whoever opens the e-mail on another device. Office signs in with a passkey (SCH-040).

Without script, every state of the Customer portal is a new page from the server. The page title starts with what happened, so a screen reader reads that out first. A sign-in link and its code work for 10 minutes and once. Office sends no sign-in link: employees sign in with a passkey.

The route: in within 2 steps

Step 1 · Enter the address and send

Voorbeeld Installatietechniek

Sign in

Then · The same message for every address

With the field for the sign-in code below it, for whoever opens the e-mail on another device. See the state 2 · Link requested.

Step 2 · Tap Sign in in the e-mail

Sign in

The link opens Orders, or the page you had to sign in for, such as the order from an e-mail.

Signing in with a destination, after an expired session and after signing out

Sign in first, then the order

Voorbeeld Installatietechniek

Sign in

Sign in to see order 4093

The link in your e-mail takes you straight to that order.

Session expired

Voorbeeld Installatietechniek

Sign in

You were away for a while

Sign in again. You come back to the page you were on.

Signed out

Voorbeeld Installatietechniek

Sign in

You are signed out

Office: session expired

Office

Sign in

You were away for a while

Sign in again. You come back to the page you were on.

No passkey on this device? A passkey from your password manager works on all your devices. Otherwise, ask the administrator for a new invitation.

Customer portal: sign-in link and sign-in code

1 · E-mail address

Voorbeeld Installatietechniek

Sign in

Enter your e-mail address. You get a link that signs you straight in.

1 · Not filled in

Voorbeeld Installatietechniek

Sign in

Enter your e-mail address.

2 · Link requested

Voorbeeld Installatietechniek

Check your e-mail

Sign-in link requested

Does facilitair@dewilg-enschede.example have access? Then a sign-in link will be in that mailbox within a few minutes. On another device, enter the sign-in code from that e-mail here.


It is in the e-mail with the sign-in link.

2 · Sign-in code is wrong

Voorbeeld Installatietechniek

Check your e-mail

This sign-in code is wrong. Check that you copied it correctly.

Too many tries

Voorbeeld Installatietechniek

Sign in

Too many attempts

Request a new sign-in link. You can do so again at 10:15.

Link used or expired

Voorbeeld Installatietechniek

Sign in

This sign-in link no longer works

It has already been used, or is older than 10 minutes. Request a new one.

Link in another browser

Voorbeeld Installatietechniek

Sign in

Open the link in your own browser

This link only works in the browser you requested it in. Enter the sign-in code from the e-mail there.

Office: signing in with a passkey

Passkey

Office

Sign in

No passkey on this device? A passkey from your password manager works on all your devices. Otherwise, ask the administrator for a new invitation.

Cancelled or refused

Office

Sign in

Signing in did not work

Signing in was cancelled or refused. Try again.

No passkey on this device? A passkey from your password manager works on all your devices. Otherwise, ask the administrator for a new invitation.

Administrator, first sign-in

Office

Register a second passkey

Do it on another device. Only then do you continue.

Voorbeeld Installatietechniek

Sign in

Enter your e-mail address. You get a link that signs you straight in.

The parts of Sign in

No.PartTypeSizeColourSpaceBehaviour
No.1PartBrandTypeArimo 700Sizebrand mark 40; name 16/24Colourbrand mark fixed; name --vi-inktSpace12 between brand mark and nameBehaviourThe brand mark with its surface works in both themes. Customer portal: the company name; Office: the app name
No.2PartTitleTypeArimo 700Size28/36Colour--vi-inktSpace16 between blocksBehaviourh1 in the app
No.3PartExplanationTypeArimo 400Size16/24Colour--vi-inkt; help below the passkey button --vi-inkt-zachtSpace16BehaviourOne sentence
No.4PartFieldTypesee Input field; sign-in code 700, letter spacing 0.2 em, tabularSizesign-in code max. 12 remColour—Space16; a rule separates the message from the code fieldBehaviourE-mail: type e-mail, autocomplete e-mail. Sign-in code: type text, autocomplete one-time-code, pasting allowed; below the message after sending (SCH-011). Office has no field (SCH-040)
No.5PartButtonTypesee ButtonSizefull widthColourprimary; Sign in with code is secondarySpace—BehaviourCustomer portal: after sending, the same message for every address; no password. Office: one button with a key icon that asks for the passkey
No.—PartCardType—Sizemax. 26 rem; radius 12; border 1Colour--vi-kaart, --vi-randSpacepadding 24 (16 below 360)BehaviourCentred on the page

App bar and menu

Both apps

The app bar is blue in both themes. The Customer portal has no menu of pages. Office has Questions, with the number of open questions, and Customers.

Customer portal

Customer portal

Office: current, default

Office

Office: hover and focus

Menu open

Customer portal

Narrow, below 600 px

OfficeQuestions3

The parts of the app bar

No.PartTypeSizeColourSpaceBehaviour
No.1PartBrand mark, reversedType—Size32 × 32Colourroof white, core yellowSpace10 to the app nameBehaviourLink to the app's start screen
No.2PartApp nameTypeArimo 700Size16/24Colour--vi-op-balk on --vi-balk (7.84 : 1)Space—BehaviourCustomer portal or Office
No.3PartNavigation itemTypeArimo 400; current 700Sizeheight 44; current 4 yellow belowColourhover --vi-balk-hover; current --vi-geel (3.90 : 1); focus --vi-focus-balkSpacepadding 0 × 12; 4 between itemsBehaviouraria-current="page"; below 600 px a second row. The Customer portal has no navigation: one destination
No.4PartCounterTypeArimo 700, tabularSize24 high, min. 24 wideColour--vi-inkt-vast on --vi-geel (7.79 : 1)Space8 after the labelBehaviourNumber of open questions; for screen readers with a word added
No.5PartAccount menuTypeArimo 400Sizebutton 44 high; list 240 wideColourlist --vi-kaart, shadow --vi-schaduwSpace8 below the barBehaviourIn the app a details element, works without script; label hidden below 480 px, kept for screen readers. This brandbook draws the open state with the class menu--open
No.—PartBarType—Sizemin. 56 high; stripe 4Colour--vi-balk in both themes; stripe --vi-geelSpacepadding 6 × 8 × 6 × 12BehaviourNot fixed at the top: it scrolls with the page, so nothing covers a heading

Status label and state

Both apps

Every order has exactly one status from STAT-001, with a word and a shape of its own. The planned date is shown only with Planned, and with Partly delivered while it is still to come.

Status of an order (STAT-001)

In progress

In progress

Planned

Planned

Partly delivered

Partly delivered

Completed

Completed

Cancelled

Cancelled

Labels for a question and for access

Open

Open

Answered

Answered

Closed

Closed

Can sign in

Can sign in

Blocked

Blocked

State: status with planned date (STAT-002)

Planned, with date

PlannedPlanned date: Thu 12 Nov 2026

Partly delivered, date today or later

Partly deliveredPlanned date: Fri 30 Oct 2026

All others: without a date

In progress

Completed

Large, on the order

Partly deliveredPlanned date: Fri 30 Oct 2026

Partly deliveredPlanned date: Fri 30 Oct 2026

The parts of the state

No.PartTypeSizeColourSpaceBehaviour
No.1PartIconType—Size16 (large 20), stroke 2ColourcurrentColorSpace6 to the textBehaviourA shape of its own per status: circle with three dots (In progress), clock (Planned), half circle (Partly delivered), tick in a circle (Completed), struck through (Cancelled); speech bubble (Open), tick (Answered, Can sign in), speech bubble with a line (Closed), lock (Blocked). Never colour alone
No.2PartTextTypeArimo 700Size14/20 (large 16/24)ColourIn progress and Planned --vi-info; Partly delivered and Open --vi-wacht; Completed, Answered, Can sign in --vi-goed; Cancelled and Closed --vi-inkt-zacht; Blocked --vi-foutSpace—BehaviourExactly one status per order from STAT-001; an unknown value from Exact Online gives In progress; never empty, never two (STAT-003)
No.3PartLabelType—Sizeheight 28 (large 36); border 1; radius roundColourborder currentColor; surface --vi-kaartSpacepadding 3 × 12 × 3 × 8BehaviourNot a button: not clickable
No.4PartDateTypeArimo 400 (large 700)Size14/20 (large 16/24)Colour--vi-inktSpace12 after the label; wraps to a new lineBehaviourOnly with Planned, and with Partly delivered with a date of today or later (STAT-002); nowhere else. In the app a time element with datetime; short weekday, day, month, year

Order row

Customer portal

The whole row is one link to the order. The New answer label stays until a customer of the relation opens the order.

  • Order 4093New answerHeat pump, gymPartly deliveredFri 30 Oct 2026

The parts of an order row

No.PartTypeSizeColourSpaceBehaviour
No.1PartOrder numberTypeArimo 400, tabularSize14/20Colour--vi-inkt-zachtSpace8 to the labelBehaviourThe number from Exact Online
No.2PartNew answer labelTypeArimo 700 + icon 16Size14/20, radius roundColour--vi-inkt-vast on --vi-geelSpacepadding 2 × 8BehaviourUntil the customer opens the order (SCH-021)
No.3PartDescriptionTypeArimo 700Size16/24Colour--vi-inkt; cancelled --vi-inkt-zachtSpace4BehaviourUnderlined on hover; wraps, never truncated
No.4PartStateTypesee Status labelSize—Colour—Space8 aboveBehaviourDate only where STAT-002 says so
No.5PartArrowType—Size20Colour--vi-inkt-zachtSpace12 leftBehaviourDecorative (aria-hidden)
No.6PartCardType—Sizeborder 1; radius 12Colour--vi-kaart, --vi-rand; hover --vi-kaart-hover and border --vi-actie; focus ring 3Spacepadding 16; 8 between rowsBehaviourThe whole card is one link to the order

List: loading, no current orders, error

Both apps

Loading shows the shape of the list. With no current order, the list says so and how to reach Voorbeeld Installatietechniek; the earlier orders are below (SCH-024). Error is only for a fault on our side. When Exact Online cannot be reached, the last known state is shown, with its time (SCH-004).

Orders: groups, search, two relations, and Exact Online unreachable

A status always has a word and a shape of its own. The planned date is shown only while it is still to come: with Planned and with Partly delivered. In progress, Completed and Cancelled have no date.

Exact Online unreachable: the last known state

This is the state at 09:40

Newer data cannot be fetched right now, so this may be out of date. The app tries again every 5 minutes.

Current

No current orders, earlier ones below

Current

No current orders

A new order appears here once it is in our records. Questions? E-mail office@voorbeeld.example.

Earlier

Search, nothing found

By order number or description.

No order found for ‘classroom 9’

Search by the order number on your work order or invoice, or by a word from the description.

Customer with two relations

The choice is above the list. The list shows only the orders of the chosen relation. With one relation there is no choice.

Loading

Loading orders

No current orders

No current orders

A new order appears here once it is in our records. Questions? E-mail office@voorbeeld.example.

Error

The orders cannot be loaded right now

Something went wrong on our side. Try again in a few minutes.

Show more

Without script

Show more orders

No skeleton: the server sends the finished list. Show more orders is a link to the next page.

No current orders

A new order appears here once it is in our records. Questions? E-mail office@voorbeeld.example.

The parts of an empty state

No.PartTypeSizeColourBehaviour
No.1PartIconType—Size32 (small 24)Colour--vi-actieBehaviourDecorative
No.2PartHeadingTypeArimo 700Size19/28 (small 16/24)Colour--vi-inktBehaviourSays what is not there now
No.3PartTextTypeArimo 400Size16/24Colour--vi-inkt-zachtBehaviourSays when it will be there, and how to reach the installation company (SCH-024)
No.—PartSurfaceType—Sizeborder 1 dashed; radius 12; padding 24 (small 16)Colour--vi-kaart, --vi-rand-sterkBehaviourTakes the place of Current; Earlier stays below. A relation always has an order (SCH-020), so a list without any order does not exist. Loading: a skeleton in the shape of the cards, aria-busy on the list

Message

Both apps

A message sits at the top of the part it is about. The heading says what is going on, the text what you can do now. It does not disappear by itself.

Info

You are seeing the orders of Basisschool De Wilg

Does your e-mail address belong to more than one school or company? Then choose above the list.

Success

Your question has been sent

It is on the order. You get an e-mail when there is an answer.

Warning

This is the state at 09:40

Newer data cannot be fetched right now, so this may be out of date. The app tries again every 5 minutes.

Error

Your question was not sent

Your text is still there. Try again.

Your question has been sent

It is on the order. You get an e-mail when there is an answer.

The parts of a message

No.PartTypeSizeColourBehaviour
No.1PartSurface and borderType—Sizeborder 1, left 6; radius 8; padding 12 × 16Colour--vi-kaart; border --vi-info, --vi-goed, --vi-wacht or --vi-foutBehaviourAt the top of the part it is about. In the app a screen reader announces an info or success message politely and an error message at once; this brandbook is still and announces nothing
No.2PartIconType—Size24Colourcolour of the borderBehaviourShape per kind: i, tick, triangle, cross
No.3PartHeadingTypeArimo 700Size16/24Colour--vi-inktBehaviourWhat is going on
No.4PartText and actionsTypeArimo 400Size16/24; actions 8 aboveColour--vi-inktBehaviourWhat you can do; does not disappear by itself

Order: header and details

Both apps

At the top are the order number, the description and the status. Below them the order date. Office also shows the relation, the customer and the status changes.

Customer

Orders

Order 4093

Heat pump, gym

Partly deliveredPlanned date: Fri 30 Oct 2026

Ask a question about this order
  • Ordered onMon 5 Oct 2026

Customer with two relations

  • Ordered onMon 5 Oct 2026
  • RelationBasisschool De Wilg

Office employee

Order 4127

Ventilation maintenance, all classrooms

PlannedPlanned date: Thu 12 Nov 2026

  • RelationBasisschool De Wilg · 10482
  • Customerfacilitair@dewilg-enschede.example
  • Ordered onMon 19 Oct 2026

Status changes

  • Mon 26 Oct 2026, 07:00Status from In progress to Planned
  • Mon 26 Oct 2026, 07:00Planned date from — to Thu 12 Nov 2026
Orders

Order 4093

Heat pump, gym

Partly deliveredFri 30 Oct 2026

Ask a question about this order

  • Ordered onMon 5 Oct 2026

The parts of the order header

No.PartTypeSizeColourBehaviour
No.1PartBackTypeArimo 700 + arrow 20Size16/24, height 44Colour--vi-linkBehaviourTo the list, with the search term or choice it had
No.2PartOrder numberTypeArimo 400, tabularSize14/20Colour--vi-inkt-zachtBehaviour—
No.3PartTitleTypeArimo 700Size28/36 (in a panel 19/28)Colour--vi-inktBehaviourh1 in the app; the description from Exact Online
No.4PartState, largeTypesee Status labelSize36 highColour—BehaviourAbove all other details; date only per STAT-002
No.5PartLink to the questionTypeArimo 400Size16/24, height 44Colour--vi-link, underlinedBehaviourOnly on Mobile (below 600 px): jumps to the field for a question (SCH-030)
No.6PartDetailsTypeterm 400 14/20; value 400 16/24Sizecolumns min. 160; padding 16; radius 12Colourterm --vi-inkt-zacht; surface --vi-kaartBehaviourCustomer: the order date, and the relation when they belong to more than one relation. Office: relation, customer, order date, and below them the changes in Exact Online, newest first (SCH-061). In the app a list of term and value

Order file

Both apps

Work orders, invoice and documents are always there; a group without order files says so. An order file shows its subject and date. Each attachment has a row of its own, with file type and size, and opens in one step. If opening does not work right now, that attachment says so.

Order files

Default

Work orders1

Cannot be opened

  • work-order-4093-2.pdfCannot be opened right now. Try again later.

A group without order files

Documents0

No documents yet

Empty

Work orders

No work order yet

Invoice

No invoice yet

Documents

No documents yet

An order file appears here once it is on the order in our records.

Work orders1

  • Work order 4093-1Fri 23 Oct 2026

    • work-order-4093-1.pdfPDF · 184 kBOpen

Invoice

No invoice yet

The parts of an order file

No.PartTypeSizeColourBehaviour
No.1PartGroupTypeArimo 700; count 400Size16/24Colour--vi-inkt; count --vi-inkt-zachtBehaviourThree groups in this order: Work orders, Invoice, Documents. Every group is always there (SCH-031)
No.2PartSubject of the order fileTypeArimo 700Size16/24Colour--vi-inktBehaviourThe subject from Exact Online; wraps
No.3PartDate of the order fileTypeArimo 400Size14/20Colour--vi-inkt-zachtBehaviourBeside the subject; on a new line when it does not fit
No.4PartAttachmentTypename 400 16/24; kind and size 400 14/20Sizemin. 64 high; padding 8 × 12; radius 8; kind tile 40 × 48Colour--vi-pagina in the card --vi-kaart; hover --vi-kaart-hover, border --vi-actie; error --vi-fout 700BehaviourEach attachment its own row and one link; opens the attachment in one step. If it cannot be opened right now, the row says so and the rest stays usable (SCH-033)
No.5PartOpenTypeArimo 700Size14/20 + arrow 20Colour--vi-linkBehaviourBelow 360 px only the arrow; the word stays for screen readers
No.6PartEmpty groupTypeArimo 400Size16/24; border 1 dashed; radius 12; padding 12 × 16Colour--vi-inkt-zacht, --vi-rand-sterkBehaviourSays there is no order file yet

Questions on an order

Both apps

The conversation is on the order, oldest first, each message with its time. An answer shows Voorbeeld Installatietechniek in the Customer portal and the office employee in Office (VRG-001, SCH-060). Each question shows whether it is open, answered or closed. A sent message cannot be changed.

Office: answering, closing, and a colleague who got there first

A screen reader reads out every confirmation without the focus moving. Without script the page reloads, with the same message at the top. After an answer or closing there is one button: to the next open question, or to Questions when there are none left.

Office: answer sent

Answer sent

The customer gets an e-mail with a link to the order.

Office: no open questions left

Answer sent

There are no open questions left.

Office: confirm closing

Close the question without an answer?

The customer gets no e-mail and sees Closed on the question. It then appears under Answered and closed, with your name.

Office: closed

Question closed

The customer gets no e-mail.

Office: a colleague answered while you were typing

  1. Facilities contact, Basisschool De WilgMon 26 Oct, 11:20

    Do the classrooms need to be empty for the maintenance?

  2. Office employeeMon 26 Oct, 11:31

    No. Only the space around the units needs to be clear.

Someone just answered, at 11:31

Read that answer first. Your text was not sent and is still there.

Your answer
Yes, move the tables aside.

Customer: with a new answer

  1. Facilities contactMon 26 Oct, 09:14Answered

    Will the engineer come before or after 12:00 on Friday? The gym is in use in the morning.

  2. Voorbeeld InstallatietechniekMon 26 Oct, 10:02New

    After 12:00. The engineer arrives at 12:30 and will be done around 16:00.

  3. Facilities contactMon 26 Oct, 11:20Open

    Do the classrooms need to be empty for the maintenance?

Office: the same conversation

  1. Facilities contact, Basisschool De WilgMon 26 Oct, 09:14

    Will the engineer come before or after 12:00 on Friday? The gym is in use in the morning.

  2. Office employeeMon 26 Oct, 10:02

    After 12:00. The engineer arrives at 12:30 and will be done around 16:00.

Customer: question closed

  1. Facilities contactFri 23 Oct, 08:30Closed

    Can the outdoor unit move a metre to the left? The bikes are parked there.

Empty, with question box

No questions about this order yet

Your question

About this order, at most 2,000 characters. You get an e-mail when there is an answer.

Too many questions today

Your question
Do the classrooms need to be empty for the maintenance?

You asked 20 questions today. You can ask again tomorrow. Your text is still there.

Sending

  1. Facilities contact

    Do the classrooms need to be empty for the maintenance?

    Sending…

Sent

Your question has been sent

It is on the order. You get an e-mail when there is an answer.

  1. Facilities contactMon 26 Oct, 11:20Open

    Do the classrooms need to be empty for the maintenance?

Not sent

  1. Facilities contact

    Do the classrooms need to be empty for the maintenance?

    Not sent.

Without script

Sending reloads the order. The same message is then at the top, and the question is in the conversation.

  1. Facilities contactMon 26 Oct, 09:14Answered

    Will the engineer come before or after 12:00 on Friday? The gym is in use in the morning.

  2. Voorbeeld InstallatietechniekMon 26 Oct, 10:02New

    After 12:00. The engineer arrives at 12:30 and will be done around 16:00.

The parts of a message in a conversation

No.PartTypeSizeColourBehaviour
No.1PartWhoTypeArimo 700Size14/20Colour--vi-inktBehaviourWith a question, the customer's name. With an answer in the Customer portal, the installation company's name (VRG-001); in Office, the office employee's name (SCH-060), and with the customer also the relation
No.2PartTimeTypeArimo 400Size14/20Colour--vi-inkt-zachtBehaviourIn the app a time element with datetime
No.3PartTextTypeArimo 400Size16/24Colour--vi-inktBehaviourText only; line breaks stay; no attachments (BUITEN-007); cannot be changed after sending (VRG-004)
No.4PartState of the questionTypesee Status labelSize24 highColourOpen --vi-wacht; Answered --vi-goed; Closed --vi-inkt-zachtBehaviourWith every question in the Customer portal: open, answered or closed (VRG-002)
No.5PartNew labelTypeArimo 700Size14/20Colour--vi-inkt-vast on --vi-geelBehaviourWith an answer no customer of the relation has opened yet
No.6PartMessageType—Sizemax. 36 rem or 90 %; padding 12 × 16; radius 12Colourown: --vi-kaart-hover, right; other: --vi-kaart + 4 --vi-actie leftBehaviourOrdered list, oldest first; question box below: text area and primary button

Filter

Office

Two choices above Questions: Open, with the count, and Answered and closed. The choice is in the address, so it works without script too.

Current and default

Open3Answered and closed

The parts of the filter

No.PartSizeColourBehaviour
No.1PartItemSizeArimo 400 16/24; height 44; padding 0 × 16; radius 8Colour--vi-inkt; hover --vi-kaart-hoverBehaviourA link: the choice is in the address
No.2PartCurrentSizeArimo 700; inner border 2Colour--vi-actie on --vi-kaartBehaviouraria-current="page"
No.3PartCounterSizesee App barColour—BehaviourOnly with Open
No.4PartTraySizepadding 4; radius 12; border 1Colour--vi-vlak-2, --vi-randBehaviourWraps onto a second row when it does not fit

Table

Office

Office shows lists as a table, the oldest open question at the top. Below 900 px each row becomes a block, with the column heading as its label. Nothing scrolls sideways, and no word breaks in the middle.

Wide, with hover on the second row

RelationOrderCustomerQuestionOpen since
Bosman Metaal B.V.Order3988Air handling, hall 2CustomerPurchasing contactQuestionHas the invoice for the air handling been sent yet?Open sinceFri 23 Oct, 16:40
Basisschool De WilgOrder4127Ventilation maintenance, all classroomsCustomerFacilities contactQuestionDo the classrooms need to be empty for the maintenance?Open sinceMon 26 Oct, 11:20

Narrow, below 600 px

RelationOrderCustomerQuestionOpen since
Bosman Metaal B.V.Order3988 · Air handling, hall 2CustomerPurchasing contactQuestionHas the invoice for the air handling been sent yet?Open sinceFri 23 Oct, 16:40

No open questions

No open questions

New questions appear here, and you get an e-mail about them. Earlier questions are under Answered and closed.

Show answered and closed
RelationQuestion
Basisschool De WilgQuestionDo the classrooms need to be empty for the maintenance?Facilities contact

The parts of a table

No.PartTypeSizeColourBehaviour
No.1PartColumn headingTypeArimo 700Size14/20; bottom border 2Colour--vi-inkt-zachtBehaviourth scope="col". Questions: relation, order, customer, question, open since (SCH-050)
No.2PartLinkTypeArimo 700Size16/24Colour--vi-linkBehaviourThe start of the question, or the customer's name; opens the question or the customer
No.3PartFirst cellTypeArimo 700Size16/24; padding 12 × 16Colour--vi-inkt; row hover --vi-kaart-hoverBehaviourThe relation; below 900 px the heading of the block, without a label
No.4PartSecond lineTypeArimo 400Size14/20Colour--vi-inkt-zachtBehaviourDescription, relation code
No.—PartOrder and wrappingType—Sizebelow 900 px each row a block, padding 12 × 16Colour—BehaviourOldest open question on top. From 900 px columns; dates and buttons do not wrap. Below 900 px each row becomes a block, with the column heading as the label in each cell. A word or e-mail address never breaks in the middle. Never scroll sideways

Search field

Both apps

Search by name, relation or e-mail address, and in the Customer portal by order number or description. Nothing found? Clear search brings the list back.

Empty

By name, relation or e-mail address.

With a value

No result

No customer found for ‘wilgen’

Only people with an e-mail address in Exact Online at a relation with an order are listed here.

Without script

Customer portal

By order number or description.

Search for a customerBy name, relation or e-mail address.

The parts of the search field

No.PartSizeColourBehaviour
No.1PartLabelSizesee Input fieldColour—BehaviourVisible; in the app inside a search form (search landmark)
No.2PartIconSize20, 12 from the left and topColour--vi-inkt-zachtBehaviourDecorative
No.3PartInputSizeas Input field; padding left 40Colour—BehaviourIn the app type search; with script the list filters as you type, without script with the Search button. Customers: name, relation, e-mail address (SCH-071). Orders: order number, description (SCH-022)
No.4PartHintSize14/20Colour--vi-inkt-zachtBehaviourWhat you can search by. No result: an empty state with the Clear search button (SCH-024, SCH-074)

Access and blocking

Office

Only the administrator sees Block and Restore access. A block applies to one e-mail address at one relation, and the administrator confirms it with their passkey. Access is Can sign in or Blocked; with Blocked it shows who blocked and when.

The route: blocking in 3 steps

First · Search for the customer (typing does not count as a step)

Step 1 · Block in the row

Steps 2 and 3 · Block in the confirmation, then your passkey

The confirmation below, with the focus on Cancel. Whoever chooses Block confirms with their passkey. Without script it is a page of its own with the same question and the same two buttons.

Then · The row shows the new access at once

Blocked

Blocked by Administrator on Mon 26 Oct 2026, 14:02

Access restored

The customer can sign in again

A new sign-in link works at once. Nothing changes in Exact Online.

Office employee

The same list, to search in, without Block and Restore access. The administrator manages access.

Administrator

NameE-mail addressRelationAccessAction
Facilities contactE-mail addressfacilitair@dewilg-enschede.exampleRelationBasisschool De Wilg10482AccessCan sign in
Accounts contactE-mail addressadministratie@dewilg-enschede.exampleRelationBasisschool De Wilg10482AccessBlockedBlocked by Administrator on Mon 26 Oct 2026, 14:02

Office employee

NameE-mail addressRelationAccess
Facilities contactE-mail addressfacilitair@dewilg-enschede.exampleRelationBasisschool De Wilg10482AccessCan sign in

Confirm

Block access for facilitair@dewilg-enschede.example at Basisschool De Wilg?

This address can then no longer sign in at this relation, even if it is in Exact Online again later. You confirm with your passkey.

Done

facilitair@dewilg-enschede.example can no longer sign in at Basisschool De Wilg

A sign-in link that was already sent no longer works either.

Block access for facilitair@dewilg-enschede.example at Basisschool De Wilg?

This address can then no longer sign in at this relation, even if it is in Exact Online again later. You confirm with your passkey.

The parts of the confirmation

No.PartSizeColourBehaviour
No.1PartHeadingSizeArimo 700 19/28Colour--vi-inktBehaviourNames who (the e-mail address) and at which relation; wraps anywhere
No.2PartTextSize16/24Colour--vi-inktBehaviourWhat happens, and that the passkey confirms (SCH-072)
No.3PartDanger buttonSizesee ButtonColour--vi-foutBehaviourAsks for the passkey, then carries it out; the table has the secondary form, solid red only here
No.4PartCancelSizesee ButtonColoursecondaryBehaviourGets the focus on opening; Esc closes
No.—PartRow in the tableSizestatus 28 high; who and when 14/20Colourwho and when --vi-inkt-zachtBehaviourCan sign in: Block button. Blocked: who blocked and when (SCH-070), and the Restore access button, secondary form, without confirmation. Both buttons only for the administrator, with the e-mail address added for screen readers
No.—PartDialogSizemax. 28 rem; padding 24; radius 12Colour--vi-kaart, --vi-schaduw; backdrop Night 55 %BehaviourIn the app a dialog element with showModal(); drawn still here

Skip and back

Both apps

Skip to content is the first link on every page. Back goes up one level: the app is two levels deep.

Skip, on focus

Back

Back, hover

Back, focus

PartSizeColourBehaviour
SkipSizeArimo 700 16/24; height 44; border 2; radius 8Colour--vi-link on --vi-kaart, border --vi-actieBehaviourFirst link on every page; off screen until it gets focus
BackSizesee Order: headerColour--vi-linkBehaviourUnderlined on hover; no breadcrumb: the app is two levels deep

Footer

Both apps

The company name and two links: Privacy and Accessibility. No phone number: you ask a question on the order.

PartSizeColourBehaviour
FooterSizeArimo 400 14/20; links 44 high; padding 8 × 16; top border 1Colour--vi-inkt-zacht, links --vi-linkBehaviourCompany name and two links; no phone number (KLAAR-040)

8

Applications

The two apps of the Build, along the journeys of the specification. The Customer portal is shown at phone width, as a customer opens it from an e-mail. Office is shown at desk width, as an employee uses it all day. Every state a person can reach is shown with the component that displays it.

The core process, step by step

  1. The customer signs in. Customer portal: Sign in
  2. They see their relation's orders with their status. Customer portal: Orders
  3. They open an order, with its work orders, invoice and documents. Customer portal: Order
  4. They ask a question about the order. Customer portal: Order
  5. An office employee answers and the customer gets an e-mail. Office: Questions, Question
  6. The customer picks a time for the yearly maintenance. Not in this Build That is the Bookings add-on: option 2 of the Fit check, or later with Keep building.

Every text on these screens is the text the app shows. No names of people appear: the sample uses roles, such as Facilities contact. The app shows the name from Exact Online.

Customer portal

Mobile first. On an order the progress comes first, then the order files, then the questions. That is the order the eye reads in, and the order the Tab key follows. Every journey, with the number of steps to its outcome:

JourneyStarts atStepsAll states
JourneySign in without a passwordStarts atSign inSteps2: send the address, then tap Sign in in the e-mail (or enter the code from the e-mail)All statesSign in
JourneyWhere is my order?Starts atAn e-mail, or OrdersSteps2 from an e-mail: the button, then the order. The progress is already in the list. A session only ends after 14 days without use, so you are usually still signed in.All statesList: loading, no current orders, error
JourneyNeed a work order or invoiceStarts atOrdersSteps2: the order, then OpenAll statesOrder file
JourneyA question about the orderStarts atOrderSteps1: Send questionAll statesQuestions on an order
Customer portalSign inCore step 1 · one field, one button, no password

Voorbeeld Installatietechniek

Sign in

Enter your e-mail address. You get a link that signs you straight in.

Customer portalOrdersCore step 2 · current orders on top, earlier ones below
Customer portalOrderCore steps 3 and 4 · first the progress, then the order files, then the questions
Customer portal
Orders

Order 4093

Heat pump, gym hall

Partly deliveredPlanned date: Fri 30 Oct 2026

Ask a question about this order
  • Ordered onMon 5 Oct 2026

Order files

Work orders2

Invoice0

No invoice yet

Documents1

Questions about this order

  1. Facilities contactMon 26 Oct, 09:14Answered

    Is the engineer coming on Friday before or after 12:00? The gym hall is in use in the mornings.

  2. Voorbeeld InstallatietechniekMon 26 Oct, 10:02New

    After 12:00. The engineer arrives at 12:30 and finishes around 16:00.

Another question about this order?

About this order, at most 2,000 characters. You get an e-mail when there is an answer.

Office

Desk first. Employees sign in with a passkey. On Question the conversation and the order sit side by side, with the status changes below; on a tablet or phone the conversation comes first. In Customers the administrator sees the buttons Block and Restore access; an office employee sees the same list without those buttons. Organisation management, where the administrator invites colleagues, is in every Build and uses the same app bar and components.

JourneyStarts atStepsAll states
JourneyAnswer a questionStarts atAn e-mail, or QuestionsSteps2: the top open question, then Send answerAll statesQuestions on an order, Table
JourneyManage access (administrator)Starts atCustomersSteps3 from Customers: Block in the row, Block in the confirmation, your passkey. Searching for a customer is typing, and does not count as a step.All statesAccess and blocking
OfficeSign inEmployees only · sign in with a passkey, without an e-mail address

Office

Sign in

No passkey on this device? A passkey in your password manager works on all your devices. Otherwise, ask the administrator for a new invitation.

OfficeQuestionsCore step 5 · the oldest open question on top
Office

Questions

RelationOrderCustomerQuestionOpen since
Bosman Metaal B.V.Order3988Air handling, hall 2CustomerPurchasing contactQuestionHas the invoice for the air handling been sent yet?Open sinceFri 23 Oct, 16:40
Kinderopvang De VlinderOrder4101Heat pump and buffer tankCustomerSite contactQuestionCan the outdoor unit move a metre to the left? The bikes are parked there.Open sinceMon 26 Oct, 08:05
Basisschool De WilgOrder4127Ventilation maintenance, all classroomsCustomerFacilities contactQuestionDo the classrooms need to be empty for the maintenance?Open sinceMon 26 Oct, 11:20
OfficeQuestionCore step 5 · answering with the order beside it
Office
Questions

Question about order 4127

Open

  1. Facilities contact, Basisschool De WilgMon 26 Oct, 11:20

    Do the classrooms need to be empty for the maintenance?

Your answer

The customer gets an e-mail with a link to the order, without your text.

Order 4127

Ventilation maintenance, all classrooms

PlannedPlanned date: Thu 12 Nov 2026

  • RelationBasisschool De Wilg · 10482
  • Customerfacilitair@dewilg-enschede.example
  • Ordered onMon 19 Oct 2026

Work orders0

No work order yet

Invoice0

No invoice yet

Documents1

Status changes

  • Mon 26 Oct 2026, 07:00Status from In progress to Planned
  • Mon 26 Oct 2026, 07:00Planned date from — to Thu 12 Nov 2026
OfficeCustomers (administrator)Access · block in 3 steps; an office employee sees no buttons
Office

Customers

The contacts of your relations, from Exact Online.

By name, relation or e-mail address.

NameE-mail addressRelationAccessAction
Purchasing contactE-mail addressinkoop@bosmanmetaal.exampleRelationBosman Metaal B.V.10377AccessCan sign in
Facilities contactE-mail addressfacilitair@dewilg-enschede.exampleRelationBasisschool De Wilg10482AccessCan sign in
Accounts contactE-mail addressadministratie@dewilg-enschede.exampleRelationBasisschool De Wilg10482AccessBlockedBlocked by Administrator on Mon 26 Oct 2026, 14:02
Site contactE-mail addresslocatie@devlinder.exampleRelationKinderopvang De Vlinder10519AccessCan sign in

E-mail

The app notifies by e-mail only. Every e-mail has a short summary and ends with one button to the place in the app. The text of a question or answer is never in it, and an order file is never attached. The app receives no e-mail: a reply to an e-mail goes back to whoever sent it. Closing, blocking and restoring access send no e-mail.

E-mailToWhenThe button opens
E-mailSign-in linkToA customer who asks for it, only if that address has access. Employees get no sign-in link.WhenRight after Send sign-in link, never delayedThe button opensOrders, or the page the customer had to sign in for. The e-mail also shows the sign-in code.
E-mailNew answerToEvery customer with an open question on that orderWhenWhen an office employee answersThe button opensThe order, at the answer. If the customer is signed out, Sign in first, with the order as the destination
E-mailNew questionToEvery office employeeWhenOn a question about an order with no open questionThe button opensThe question in Office
E-mailIntegrationToThe administratorWhenWhen the sync with Exact Online stops working, and once when it works againThe button opensThe Management area

The words of every e-mail: a subject that says what it is about, a short summary, and at the end one button with a verb. Below it stands only the company name. The sender is always Voorbeeld Installatietechniek, from mail.voorbeeld.example. That domain accepts no e-mail; whoever writes back gets their e-mail returned (MEL-002, MEL-007).

Customer portalSign-in link
  • FromVoorbeeld Installatietechniek <portal@mail.voorbeeld.example>
  • Tofacilitair@dewilg-enschede.example
  • SubjectYour sign-in link for the Customer portal

The button below signs you in to the Customer portal. The link works for 10 minutes, once, in the browser you asked from.

Opened this e-mail somewhere else? Then enter this sign-in code in the browser you asked from:482 913

Sign in

Voorbeeld Installatietechniek BV · heat pumps and ventilation in Twente

Customer portalNew answer
  • FromVoorbeeld Installatietechniek <portal@mail.voorbeeld.example>
  • Tofacilitair@dewilg-enschede.example
  • SubjectAnswer to your question about order 4093

There is an answer to your question about order 4093.

Read answer

Voorbeeld Installatietechniek BV · heat pumps and ventilation in Twente

OfficeNew question
  • FromVoorbeeld Installatietechniek <portal@mail.voorbeeld.example>
  • ToEvery office employee, at their own address
  • SubjectNew question about order 4127

Basisschool De Wilg asked a question about order 4127.

Open question

Voorbeeld Installatietechniek BV · heat pumps and ventilation in Twente

AdministratorIntegration not working
  • FromVoorbeeld Installatietechniek <portal@mail.voorbeeld.example>
  • Toadmin@voorbeeld.example
  • SubjectThe integration with Exact Online is not working

Since 09:40 the sync with Exact Online is not working. The Customer portal and Office show the state of that moment.

Open Management area

Voorbeeld Installatietechniek BV · heat pumps and ventilation in Twente

AdministratorIntegration working again
  • FromVoorbeeld Installatietechniek <portal@mail.voorbeeld.example>
  • Toadmin@voorbeeld.example
  • SubjectThe integration with Exact Online is working again

Since 11:05 the sync is working again. The apps show the state of Exact Online again.

Open Management area

Voorbeeld Installatietechniek BV · heat pumps and ventilation in Twente

ComponentSizeColourBehaviour
E-mail headerSize14/20; term 5.5 rem wide; in a narrow e-mail the term sits above the valueColourterm --vi-inkt-zachtBehaviourFrom, To, Subject, as the mail client shows them. The New question e-mail goes separately to every office employee (MEL-006)
Brand stripSizelogo 222 wide; inner 16; stripe 4Colourfixed white, stripe yellowBehaviourFixed light, so the primary logo stays readable in every mail client; in the e-mail as a PNG with alt text
TextSizeArimo, fallback Arial; 16/24Colour--vi-inktBehaviourA short summary; never the text of a question or answer, never an attachment (MEL-003)
Sign-in codeSizeArimo 700 28/36, letter spacing 0.15 em, tabularColour--vi-inktBehaviourOnly in the e-mail with the sign-in link, before the button; as text, selectable and copyable (BEV-002)
ButtonSizesee Button, as a linkColourprimaryBehaviourThe one link every e-mail ends with, to the place in the app
FooterSize14/20Colour--vi-inkt-zachtBehaviourCompany details, after the link (MEL-003)

System pages

An order, order file or question that does not exist or is not yours gives Not found. The page does not say which of the two it is (SCH-005). Office also has No access, for a page only the administrator may open. An error on our side has the same page in both apps.

Customer portalNot found

404

This page does not exist

The link may be old, or the page is not for you. Your orders are on the start page.

Go to your orders
OfficeNo access

403

This page is for the administrator only

You are signed in as an office employee. You can open Questions and Customers.

Go to Questions
Both appsServer error

500

Something went wrong on our side

It is not you. Try again in a few minutes.

Try again
ComponentSizeColourBehaviour
CodeSizeArimo 700, Display 40/48, tabularColour--vi-actieBehaviourSmall beside the title; not the message
Title, text, buttonSizeHeading 28/36; Text 16/24; ButtonColour--vi-inktBehaviourWith the app's app bar, without the menu; inner 48 × 16. Customer portal: an order, order file or question that does not exist or is not yours gives the same Not found page (SCH-005); the Customer portal has no No access page. Office: No access for an employee on an administrator page. Link expired: see Sign in

Order files

The apps make no document or PDF themselves. Every order file comes from Exact Online and opens as it is there, with the subject it has there.

So give an order file in Exact Online a subject the customer understands: "Work order 4093-1, installation day 1", not "WB_4093_1_def". Proposal

Photos and images

An image appears only when it says something. Every image has a text alternative that says what it shows, such as "Voorbeeld Installatietechniek logo".