jobnest · design

Principles

Six rules that settle most design arguments.

1

Calm, warm, high-contrast

Cream working panel, charcoal context panel, one accent.

2

One language for status

A status looks identical everywhere, from one definition.

3

Light and dark are equals

Components hold tokens, never colours.

4

The accent is a lever

Change it once; text colour adapts to stay readable.

5

Show what is automatic

Auto tasks, system entries and locked records are marked.

6

Dense, not cramped

44px targets, 12px minimum text, generous radii.

Colour, both themes

Both themes side by side, regardless of the theme selected above. Tones are paired background and foreground, checked for 4.5:1.

light theme

--page
--left
--shell
--card
--rcard
--chip
--inp
--line
--ring
--btn
--nav
--accent
accentredorangegreenbluepurplegreyneutraldark

dark theme

--page
--left
--shell
--card
--rcard
--chip
--inp
--line
--ring
--btn
--nav
--accent
accentredorangegreenbluepurplegreyneutraldark

Accent and automatic text colour

The accent can be any colour. The text on it is chosen from its luminance, so a pale accent gets dark text and a deep one gets white.

Verified

#FFC107 · text #1a1a1a

Verified

#FF8A65 · text #1a1a1a

Verified

#7DD3A8 · text #1a1a1a

Verified

#8AB4FF · text #1a1a1a

Verified

#C7A6FF · text #1a1a1a

Verified

#1F3A8A · text #ffffff

Verified

#0F766E · text #ffffff

Verified

#B91C1C · text #ffffff

Typography

Plus Jakarta Sans. Light weight only from 28px up. Numbers that change use tabular figures.

DisplayLet's Track Every Application48px / 300
TitlePayment request28px / 300
Number$1,84056px / 300
HeadingReview payment request22px / 400
Heading SPay the tasker18px / 600
BodyClosed automatically when you approved it.15px / 400
LabelMessage as proof (optional)12px / 600
CaptionAmara Okoye · James Brown · Oct 212px / 400

Shape, spacing, elevation

Radii step down toward the inside. Spacing sits on a 4px base. Only three elevations exist.

sm 14
md 22
lg 28
xl 40
pill
4
6
8
10
12
14
16
18
20
24
28
32
40
Flat
Nav shadow
Shell shadow
Modal shadow

Status language

Every status has a tone, an icon and a label. Colour is never the only signal. Defined once in STATUS.

stage

AppliedScreeningInterviewOfferRejected

priority

HighMediumLow

payment

RequestedApprovedTo be paidPaidRejectedLocked

account

WorkingVerifiedPausedTerminated

Countdown

Overdue 3h4h 18m left1d 6h left

Red when overdue, accent under 24 hours, neutral otherwise.

Do

PaidTo be paid

Icon plus label plus tone. Readable without colour.

Don't

Colour-only dots, or a status styled inline in a feature.

Layout anatomy

Two panels. The cream left panel is where work happens; the charcoal right panel gives context and one hero number.

logo + nav pills (active pill is dark, or accent in dark theme)
page header: title 48 light, subtitle, round accent add button
tabs or filters (44px pills)
content: cards, rows, tables, forms
search pill · bell · avatar
hero card (accent): one number, one action
supporting lists on dark cards: charts, per-account totals, queues

Shell 1376 max, grid 720 | 1fr, radii 40/56. Single column under 1100px.

Workflows

State machines the UI and the server share. Terminal states are locked.

Payment request

Requestedmanager can edit or withdraw
Approvedadmin edited total and split; manager locked
To be paidoptional
Paidproof optional; added to account record
Sent backRequested → back to manager
Rejectedterminal
Withdrawnby manager before approval; terminal

Account lifecycle

Applicationstage on the Board
Workingmoves to Accounts tab
Terminatedown section; still counted when paid

Verified is a badge usable while Working. It sorts the account first.

Task

Opencreated by a rule or by hand
Doneauto: closed by an event · manual: ticked

Overdue is derived from the due time, not a stored status.

Event flow

One transaction records the change and the event. Everything else reacts to the event.

CommandApprove request
One transactionupdate payment + write event to outbox
Outboxpayment_request.approved
Handlersidempotent, run by workers

Audit

timeline entry (system, locked)

Task engine

close review task, open Pay the tasker

Notifier

in-app, email, push

Finance

totals and ledger projections

Realtime updates are pushed to open browsers over server-sent events.

Auto-linked tasks

A rule turns an event into a task, links it to the exact page, and closes it when the matching event arrives.

Rule

Whenpayment_request.submitted
CreateReview payment request, High, due 24h
Done whenapproved · rejected · sent back · withdrawn
Task done: Review payment request
Closed automatically when you approved it. New task: Pay the tasker, due in 48h.

Audit trail it produces

Oct 2 • YouSystem

Proof added, marked Paid

Oct 1 • YouSystem

Request approved. Total and split edited

Oct 1 • Amara OkoyeSystem

Payment request sent: $600

Review payment request, $600

James Brown · Meridial · from Amara Okoye
High
Auto taskPayment request
20h left
Done when: you approve, reject or send back

Who sees what

Enforced by the server and the database. The interface only reflects it.

CapabilityAdminManager
Directory, accounts, rulesFullNone
Assigned accounts and projectsAllOnly assigned
Track time and add session notesYesIf tool enabled
Request a paymentn/aIf enabled; edit until approved
Approve, edit total and split, mark PaidYesNever
Splits, bills, admin cutYesHidden unless full amount chosen
Audit log notesEdit and deleteNone
Custom tablesBuild and assignFill assigned tables

Rules at a glance

The short version. Full text in docs/COMPONENT-RULES.md and docs/ENGINEERING-RULES.md.

No raw colours in components

Tokens only, so every theme and accent works.

Status from STATUS

Never styled inline in a feature.

Real elements, named icons

Buttons are buttons; icon-only controls have labels.

Every component has a playground

Real props, realistic text, both themes.

Commands emit events

Audit, tasks, notifications are handlers, not inline code.

Auto tasks close themselves

Created by a rule, closed by an event on the same record.

Money is exact and append-only

Integer minor units, typed rate, adjustments after Paid.

The server is the guard

Row-level security and per-role response models.

Sections: principles · color · accent · type · shape · status · layout · flows · events · tasks · permissions · rules. Component gallery