Visual Design Document

The RISE design system — the brand, color, typography, spacing, components, and motion that make the AI Interview Coach feel like a calm, supportive partner.

Product
RISE — AI Interview Coach
Document
Visual Design / Design System
Version
1.4
Date
2026-09-15
Author
Zoran Krnetić (PR BRIGHTNESS)

v1.4 — 2026-09-15. The statistics pages, and the same mistake as last time. Adds the select field, the statistics figures, a change coloured by its sign, the first-against-most-recent comparison with its withheld row, and the trend. The select is v1.3's number-input lesson repeated exactly: the chevron was a hand-kept list of contexts, every form added since was left out of it, and three of them shipped with the raw native arrow. It is one element-level rule now — which was only possible once the rules styling a select stopped using the background shorthand that resets the image. Also records that a filter is a select and never a second row of tabs, and that a status is a noun: the data-request column was filled from the action buttons, so a cancelled request read "Not now".

v1.3 — 2026-09-14. Settings grew from one panel to four, which needed a navigation and a way for a section to report its own state while closed: adds the settings rail and its status pip, the gap banner, and the controls those pages are built from — the number input, the period pair, and the three-way limit control. The number input is the correction this version exists for: it had been rendering with browser defaults because it was in none of the shared field selectors, and a field that is not listed with the other fields is a field that will drift. Adds the rule for a school's own sentences in the privacy notice, the student's allowance and the fourth level-button state, and the help sheet. The catalogue intro no longer promises unlimited repeats, because it is no longer true. Sections 08–13 renumbered to make room. Sample rows in the administration screens now use invented people: they had been real teachers and students, named beside their personal email addresses, which is not something a design system for a data-protection platform should ship.

v1.2 — 2026-09-03. The platform now has four audiences rather than two. Adds the administration screens — a school managing its own people and content, and the platform operator managing schools — and the components the stylesheet had but this document never described: the note block, the two pill families, the field hint, and what a data table does on a phone. Records three rules the product learned the hard way, the first of which cost the most to find: a disabled control must say why it is disabled.

v1.1 — 2026-08-27. Adds section 08, Switched-off states: disabled, read-only, retired and muted history. Disabled now changes material rather than brightness, replacing the blanket opacity: .62 that v1.0 applied to every off state alike. Sections 09–12 renumbered accordingly.

01 — Foundations

Brand & Design Principles

RISE is an AI Interview Coach. The interface must feel like a calm, supportive partner — never a complex technical tool — because many users arrive with interview-related anxiety. The style is Modern Corporate Minimalism: high legibility, intentional white space, and precise alignment that keep all focus on the student's performance and the AI's feedback.

Personality

  • Authoritative — trustworthy guidance, grounded in a professional blue.
  • Supportive — encouraging tone, soft surfaces, generous spacing.
  • Clear — a strict type hierarchy makes complex feedback scannable.
  • Human — cutting-edge yet warm; approachable rounded shapes.

Design principles

  • Reduce cognitive load — less is more; strip non-essential decoration.
  • Legibility first — deep-slate text, never pure black; roomy line height.
  • Intentional white space — breathing room between sections.
  • Accessible by default — WCAG-AA contrast, visible focus, labeled inputs.
Depth through tone, not weight. Elevation is achieved with ambient shadows and tonal layers, and modals use backdrop blur rather than heavy overlays — keeping the interface light and transparent.

03 — Foundations

Color

The palette centers on a trustworthy primary blue extracted from the brand. Surfaces use a cool, faintly violet white-space strategy that keeps cards distinct without hard borders. Functional colors are calibrated for immediate, unambiguous feedback during practice.

Primary & brand

Primary
#0040A1
Actions, links, brand
Primary Bright
#0056D2
Hover, focus glow, accents
Primary Soft
#DAE2FF
Chips, score badge, tints

Surfaces & text

Background
#FAF8FF
App canvas
Surface
#FFFFFF
Cards, panels
Surface Low
#F2F3FF
Table head, insets
Surface Container
#EAEDFF
Grouped fills
Surface High
#E2E7FF
Raised fills
Text
#131B2E
Headings, body
Text Muted
#424654
Secondary text, labels
Outline
#C3C6D6
Borders
Outline Strong
#737785
Quote bar, emphasis border

Functional

Success
#067047
Completed, encouragement
Success Soft
#D8F7E8
Completed pill bg
Warning
#92400E
In-progress text
Warning Soft
#FFF1C7
In-progress pill bg
Error
#BA1A1A
Destructive, errors
Error Soft
#FFDAD6
Error banner bg
Contrast. Primary #0040A1 on white reaches ~8.6:1 and body text #131B2E on background reaches ~15:1 — both clear WCAG-AA (and AAA for body). Status pills pair a soft tinted background with a darker same-hue text so they stay legible at 12px.

04 — Foundations

Typography

One family — Inter — across the entire product for a systematic, utilitarian feel. Display sizes use tight letter-spacing for a tech-forward edge; body copy uses generous 1.5–1.65 line height so long-form AI advice stays easy to scan.

Display · 48 / 700 · -0.02em
Rise to the moment
H1 · 32 / 700
Interview practice, guided
H2 · 22 / 650
Your feedback for this answer
H3 · 18 / 650
Communication & clarity
Body L · 18 / 400 · 1.65
Tell me about a time you resolved a difficult technical problem for a customer.
Body M · 16 / 400 · 1.5
You explained the steps clearly and stayed calm. Next time, quantify the outcome to make the impact concrete.
Label · 14 / 500
Email address
Label S · 12 / 600 · caps
Service Technician
Weights in use. 400 body · 500 labels · 650 headings & buttons · 700 H1 & strong emphasis · 800 uppercase micro-labels (table headers, section eyebrows).
Hierarchy is enforced. Uppercase 12px/800 micro-labels group content (professions, table headers); they carry meaning through weight, not size.

05 — Foundations

Spacing & Layout

A 4px base unit drives all rhythm. Desktop uses a fixed grid capped at 1280px with 24px margins and gutters; mobile drops to 16px to reclaim screen. Generous vertical spacing between sections reinforces the minimal aesthetic.

Spacing scale

xs · 4
sm · 8
md · 16
lg · 24
xl · 32
2xl · 48
3xl · 64

Grid & container

TokenDesktopMobile
Max content width1280pxfluid, min 320px
Columns12-column4-column
Margin24px16px → 12px
Gutter24px16px
Card gridrepeat(auto-fit, minmax(280px, 1fr)) — cards reflow from multi-column to single-column

06 — Foundations

Elevation & Shape

Depth is quiet: diffuse ambient shadows and tonal layers, never hard drop shadows. Corners are rounded to strike a balance between a precise professional tool and an approachable coaching app.

Elevation

Level 0 — Flat
background
Level 1 — Card
0 2px 14px / 6%
Level 2 — Hover
0 8px 24px / 9%
Level 3 — Popover
0 18px 46px / 14%

Corner radius

sm · 4px
base · 8px
lg · 16px
pill · 999px
When to use which. 8px for buttons, inputs, small cards · 16px for dashboard sections, panels, and modals · full pill exclusively for tags, status chips, and the score badge — a distinct language from actionable buttons.

07 — Library

Components

Live components reproduced from the production stylesheet. Every element here uses the same tokens the app ships with.

Buttons

Start interview Cancel Review Delete Submitting… Focus state

Primary = brand blue, white text, subtle shadow. Secondary = outlined neutral. Ghost = outlined, inverts to solid blue on hover. Danger = red text, fills red on hover. Focus = 2px #0056D2 ring at 2px offset. Minimum height 40px (44–48px for primary actions and touch targets). Disabled drops the fill and the elevation entirely — see Switched-off states.

Form fields

Labels are always visible (never placeholder-only). 44px min height, 1px outline; focus transitions to bright blue with a 3px soft glow.

Number input

Everything but the width comes from the shared field treatment — same 44px height, same 8px radius, same 1px outline, same 16px type, same focus ring. That is the whole rule: a number box is a field, and it is listed in the same selectors as every other field rather than given a parallel set of its own. A second definition of "what an input looks like" is a second thing to keep in step, and when it drifted the box came out square-cornered and 22px tall beside the fields around it.

It holds at most three digits and usually sits inline beside a label or a radio, so it is fixed at 84px instead of filling its container — full width would make a two-digit number look like a text field. tabular-nums keeps the digits from shifting as the value changes. Disabled is the ordinary disabled field: --surface-container fill, muted label, no fade. The fourth is a field whose blank would be visible to a reader — see the gap banner below.

Select field

The chevron is drawn, not native. A platform select arrow sits hard against the right edge and looks different on every operating system, so appearance: none removes it, 40px of right padding opens the room, and the chevron goes in as a background image.

This is the same rule the number input states, broken a second time and in the same way: the treatment was written as a hand-kept list of contexts, and every form added afterwards was left out of the list. Two settings forms and the statistics period picker all shipped with the raw native arrow jammed into the border. It is now one element-level rule for every select in the product.

It could only become element-level once every rule that styles a select used background-color rather than the background shorthand — the shorthand silently resets background-image, which is where the chevron lives. Do not reach for the shorthand on a field. That single character is what forced the per-context duplication in the first place.

A select and a date input each size themselves from their own internals, two and four pixels off a text input respectively. Invisible in a column, obvious in a row, so both are pinned to 44px.

Statistics figures

Interviews completed642+27% against the previous period
First interview2,84mean overall score, out of 5
Most recent3,61+0,77 improvement

One card, one number, one line of context under it. Values are tabular-nums so a figure does not jitter when the period changes, and every number goes through Intl with the reader's locale — which is how all three partner countries get the comma decimal they write, rather than an English number with translated words around it.

A change, coloured by its sign

+0,92 −0,29 ±0,00

Never assume improvement. The first version painted every delta green, carried over from a mockup whose invented data only went up. Real pilot data has technical knowledge and resilience rising while time management and ethics fall — and a page that renders all four as success hides exactly the two worth discussing. Green up, red down, grey unchanged, with an explicit sign in front of each so the colour is never the only signal.

First against most recent

Technical knowledge 2,66 → 3,07 +0,41
Time management 2,88 → 2,59 −0,29
Adaptability Withheld — fewer students than the reporting threshold

Two bars stacked rather than side by side: the reader is comparing one competency with its own past, not with its neighbours. The lower bar turns red when it is shorter than the upper one, so a decline reads at a glance rather than needing the number.

The third row is the normal case, not an edge case. Any group below five students is withheld — these pages carry no names, but an average over two students read by their own teacher is not anonymous. A withheld row keeps its place and states its reason; a row that disappears becomes a zero in somebody's chart, which is a worse lie than saying nothing. The competency names are the school's own words from its own rubric, printed as written and never translated.

Trend

1118 Aug 1625 Aug 01 Sep 178 Sep

Every bar carries its number, above itself. The first version put the count in a title tooltip — invisible on a touch screen, unreadable at a glance on any screen, and the first question anyone asked of the chart was "how many is that one".

One colour. An earlier draft painted the last bar solid, inherited from a mockup where it was decoration; on a chart a different colour reads as a different kind of thing, and a reader is right to ask what it means. Bars are width-capped so four buckets do not stretch into four billboards.

Zero draws no ink. There is a minimum bar size so a small but real value stays visible; it applies only above zero. Applied blindly it drew a sliver of blue under a figure that said 0, and the picture disagreed with the number.

Granularity follows the window — per day up to ten days, per week up to a quarter, per month beyond — because thirty daily bars of single digits is a worse picture than four weekly ones, and a monthly chart over a week is one bar.

Period control

A retention period is a number and a unit, never a sentence. Typing "two years" into a text box would put those English words into the Serbian, French and Portuguese privacy notices, and nothing on screen would tell the person who typed it. The sentence is assembled per language at the point of display — which is also where Serbian gets its three plural forms (24 meseca, but 12 meseci).

Three-way limit control

Attempts at the same interview

A repeat attempt reuses questions the student has already seen a model answer for.

Use the platform default Platform default: 3
Limit this
No limit

Three states, not a number with a magic value: inherit, limit to n, and no limit. The store keeps 0 for "no limit", but nobody types it — the number box never accepts 0, which is what stops a zero meant as "none allowed" being read as its exact opposite. The box stays visible but disabled while another choice is selected, showing the value that would apply. The platform console renders the same control without the first row, because there is nothing above it to inherit from.

Settings rail

Settings outgrew one scrolling panel at four sections, and they do not fit in a tab row that already carries Users and Settings — nesting tabs inside tabs reads as two navigations arguing. The rail buys something a tab row cannot: a permanent place for each section to carry a status. "1 empty" is how an administrator learns the privacy notice is unfinished without opening it, and it is the only reason anyone would open that page a second time. The pip is red by default because the state it usually reports is an unfinished legal document, and green only when there is nothing left to report. Below 900px the rail lies down into a wrapping row.

Gap banner

4 fields are still empty.3 of them appear, blank, in the notice a student reads — so the notice does not yet satisfy Article 13.

1 field is still empty.Nothing a student reads is missing. The rest is in the staff notice.

Every field is filled in. No placeholder appears in any notice.

Three states, and the middle one is the point. A gap is only loud when a student would see the blank; a staff-only gap is worth reporting and not worth alarming anyone about. Counting every empty field the same way would have trained administrators to ignore the count, which is the one thing it cannot afford.

Read-only contact

RISE platform supportsupport@riseproject.space

One address, answered by one team, shown inside every school and editable by none of them — a school changing it would change who answers for every other school's students. Rendered as a contact rather than a disabled input, because it is not a field somebody failed to fill in.

Help sheet

1IT služba školeNalog, lozinka, odeljenje.it@skola.example
2Nešto ne radiIntervju se ne otvara, nema povratne informacije.support@riseproject.space
3Vaši podaciKo ih vidi, koliko se čuvaju, brisanje.Pročitajte obaveštenje o privatnosti

Three destinations, numbered, and never one. A student cannot reliably classify their own problem, so the sheet does not ask them to — it lists all three with one line each and puts the school first, because that is who knows them. The separation is not tidiness: a single "contact us" address routes erasure requests into an IT inbox with a one-month statutory clock running and nobody there with authority to answer. An entry with no address is omitted entirely rather than shown empty — unlike the privacy notice, a help sheet with <email> in it is worse than one with two entries.

Status & meta chips

A status is a noun, in every language. The data-request table filled its status column from the action buttons, so it read "Mark answered" and "Refuse" — and a cancelled request showed the dismiss label of a modal, which in Serbian meant its status was the words "Not now". Verbs belong on buttons. A status names what a thing is, and needs its own string in each language rather than borrowing one that happens to be nearby.

Completed In progress Abandoned Student Teacher Intermediate Overall 4.2 / 5

Scenario card

Technical troubleshooting

Diagnose a field fault and walk the customer through the resolution, staying calm under pressure.

Intermediate Start

Question card

Question 2 of 5

Tell me about a time you resolved a difficult technical problem for a customer. What was the outcome?

AI feedback block

The AI feedback block is the signature component: a very light blue tint with a vertical brand-colored accent bar on the left, distinguishing AI coaching from user content. Each criterion gets its own left-accented row.

Session summary

Session summary

Overall 4.1 / 5

Strengths. You communicate calmly and structure answers well.

To improve. Add concrete numbers to show impact.

Great progress — you're clearly interview-ready with a little more practice.

Summary reuses the card pattern with a soft success-green tint and border to signal completion.

Tabs

Navigation only — a filter is a select. The statistics period picker was built as a second segmented control and sat directly under the section tabs, so the page opened with two identical rows and nothing to say which moved you and which narrowed what you were looking at. The rule that came out of it: this control changes where you are. Anything that changes what is shown takes a select, which no one mistakes for navigation.

Sessions table (teacher)

StudentScenarioStatusAvg score
Marija P.Technical troubleshootingCompleted4.2Open
Nikola S.Customer communicationIn progress—Open

On phones the table collapses: each row becomes a card and cells stack with their column name shown via a data-label prefix.

Modal & error banner

Error: Invalid email or password.
Session meta — Status: In progress · Question 2 / 5

Modals sit on a 38%-opacity slate backdrop with heavy soft shadow. Error banners use the soft-red surface with darker red text.

Note block

Uvezeno
12 scenarija, 380 pitanja, 52 rubrike. 1 uklonjeno.

A labelled aside for a consequence the reader must not skip — what an import just changed, why a scenario is retired. The label is the point: it says what kind of statement follows before the reader commits to the sentence. There is a warn variant in amber; it is for facts that carry a cost, never for emphasis. A note used to make ordinary text louder stops working the first time it matters.

Pills — settled, and waiting

u upotrebi Aktivan Pozvan Poziv istekao RETIRED

Two families, and the distinction is settled versus waiting, not severity. A neutral pill states a fact that needs nobody — a role, the content version in use, an active account. An amber pill marks something waiting on a person: an unaccepted invitation, an open erasure request, an organisation with no administrator. Amber here is not a warning about danger; it is a queue.

Field hint — including the disabled reason

Lozinka mora imati najmanje 10 znakova.

Napravi nalog

A disabled control must say why it is disabled. This is a rule the product learned the hard way: a registration form showed two filled-in password fields and an inert button, and the reader had no move at all. Whatever the cause — and in that case it was a browser autofill the page could not see — the state was indefensible. Name the unmet condition, in the reader's language, immediately below the control. The hint carries reasons, never decoration.

Data table on a phone

Every table cell carries a data-label, and below the table breakpoint each row becomes a card with those labels as its field names — so a phone shows a readable record instead of a grid scrolling sideways. This is why a new column is not finished until it has its label: without one it simply loses its name on mobile, silently, and only for the readers least able to work around it.

08 — Library

A school's own sentences in the privacy notice

Parts of the privacy notice can only be written by the school: who the controller is, who the data protection officer is, how long answers are kept. Those sentences are assembled from the school's settings, and how an unfinished one looks is a design decision, not a technical one.

To be completed by your school We keep your account for <period> after you stop using the platform.

The data controller is Tehnička škola Zrenjanin, Đorđa Stratimirovića 23, 23000 Zrenjanin. Our data protection officer is Milena Ristić, dpo@skola.example.

The box appears only while the sentence still has a blank in it. Once the school has filled it in, it is ordinary prose like every sentence around it.

The label used to be unconditional, and it leaked a build-time affordance into what a fifteen-year-old reads: a notice visibly assembled from parts, with one part disowned by the people who sent it. A filled sentence is not "to be completed by your school" — it is the school talking. The treatment is kept for a sentence that genuinely is unfinished, because a gap should look like a gap; it is the administrator, not the student, who is shown the count and told the notice does not yet satisfy Article 13.

Note the second sentence ends after the email address. A telephone is optional everywhere, and an optional field left blank must leave no trace — not a gap, and not a dangling comma before a full stop.

09 — Library

Switched-off states

Three different things get switched off, and they must not look alike. Through v1.0 the stylesheet had one rule for all of them — a blanket opacity: .62 — which is why a withdrawn scenario read as broken and a dead button could only be identified by pressing it.

Disabled

Cannot be used right now, and may become usable again. The affordance is removed on purpose, because acting on it is impossible — and it is removed by changing material, never by fading, so the state survives touch, daylight and greyscale.

--surface-container fill
--outline border
--text-muted label, full opacity
no elevation

Read-only

Real, unchangeable, and worth copying — a scenario id, a submitted answer. This is not a softer disabled: the text keeps full contrast, and the field stays focusable and selectable.

--surface-low fill
--text label
cursor: text

Retired / deactivated

Content a partner has withdrawn while student history still points at it. Out of circulation but still real: fully readable, fully clickable, so it must keep looking clickable. Reversible.

link stays --primary
supporting cells --text-muted
3px --outline-strong accent
no background tint

Muted history

A record of something that happened — an abandoned session, a past attempt. Never styled as an error or a fault: it is data, not a problem.

--text-muted
neutral pill
no tint

Disabled buttons

v1.0 — opacity .62

Still blue, still elevated, still shaped like the primary action. The one dependable tell was cursor: not-allowed, and a phone has no cursor.

Send invitation Cancel Open

v1.1 — flat, neutral, unelevated

The fill carries the state, so nothing has to be dimmed to say it and the label stays readable on a projector.

Send invitation Cancel Open

All variants converge, deliberately. The ranking between primary, secondary and ghost is a ranking of the actions on offer; when none of them can be taken, the ranking has nothing left to say. Hover rules must be guarded with :not(:disabled) — unguarded, a disabled ghost still inverts to solid blue under the pointer and contradicts its own state.

Disabled and read-only fields

A disabled select also drops its chevron: a control that cannot open must not advertise that it opens. Note that :read-only matches disabled inputs too, so read-only rules need :not(:disabled) or they quietly undo the disabled fill.

A level a student cannot start

III stepenZapočni IV stepenU toku III stepenZavršeno III stepenNema više pokušaja

A fourth state beside available, in progress and completed: nothing left to start here. It is deliberately not green — done means the student finished it and is an achievement, while this is neither an achievement nor an error, so it goes dashed and quiet and out of the way. A level with history stays clickable even when spent, because that is where the student reviews what they already did; closing it would take something away rather than withhold something.

Preostalo intervjua ukupno: 6Započeto intervjua: 9 od 15 · Intervju se računa od trenutka pokretanja, bez obzira na to da li je završen.

Ukupan broj intervjua je iskorišćen: 15 od 15.Otvoreni intervjui mogu i dalje da se završe — za više se obratite nastavniku.

Preostalo pokušaja: 2 Ponovo dostupno: 16. septembar Nema više pokušaja

Said once above the catalogue, not on each of 213 rows. Quiet while there is room left and loud only once it is spent — a counter that shouts from the first interview teaches students to stop reading it. Waiting is not the same as spent: an interview in its cooldown comes back on its own, so the date is stated in brand blue rather than warned about in amber.

Retired content row

ScenarioSectorLevel
Tehničar mehatroniketehnicar-mehatronike-eqf4 Mehatronika i automatikaNOKS 4Open
Construction — EQF 3Retiredconstruction-eqf3 BâtimentEQF 3Open
Bravar-zavarivačbravar-zavarivac-eqf3 MašinstvoNOKS 3Open

The scenario name keeps its full --primary, because the row still opens and has to keep saying so. Only the supporting cells recede; a Retired pill states it in words; a 3px accent on the leading edge makes the row findable in a list of a hundred. No background tint — a tint reads as disabled, and this is the opposite of disabled. On phones, where rows collapse into cards, the accent moves to the card's left border.

Construction — EQF 3Retiredconstruction-eqf3 BâtimentEQF 3Open

The v1.0 treatment for comparison: everything muted over a tinted background. The scenario name was the same grey as the rest of the row, so the one interactive thing on it stopped looking interactive.

Contrast of the new states

StateForeground on backgroundRatioAA body
Disabled control#424654 on #eaedff8.08:1Pass
Read-only field#131b2e on #f2f3ff15.56:1Pass
Retired scenario name#0040a1 on #ffffff9.34:1Pass
Retired supporting cells#424654 on #ffffff9.39:1Pass
v1.0 disabled primary#6189c5 on #ffffff3.56:1Large text only
v1.0 retired row#8a8c95 on #ffffff3.35:1Large text only

Disabled controls are formally exempt from the WCAG contrast minimum. We hold them to it anyway, because a teacher still has to read them on a classroom projector — and because once the flatness carries the state, there is nothing to gain by dimming the label as well.

10 — Application

Screens

How the foundations and components come together in the real product — assembled entirely from the tokens and components defined above. The first group is what a student and a teacher move through. The second is administration: a school managing its own people and content, and the platform operator managing schools. Those two are deliberately not the same shape, and one of them is deliberately not in the reader's language.

Sign in

app.riseproject.space/login

Job Interview AI Coach · AI kouč za razgovor za posao · Coach IA d'entretien · Coach de IA para entrevistas

Sign in

Sign in. English-first because language is chosen after login; the four-language subtitle signals inclusivity from the first screen. Centered card on the tinted canvas, labeled inputs, full-width primary action.

Student dashboard — the catalogue

app.riseproject.space/student

Dostupni intervjui

Izaberite zanimanje, pa nivo koji odgovara vašem obrazovanju.

Nastavite gde ste stali 2 nezavršenih
Tehničar mehatronike
započeto pre 3 dana · pitanje 4 od 10
Nastavi
Bravar-zavarivač
započeto pre 21 dan · pitanje 2 od 10
Nastavi
Zanimanje ili oblast… Sve oblasti ▾

9 zanimanja · 12 intervjua

ZanimanjeOblastNivo
Tehničar mehatronike
2 pokušaja · najbolja 4,5
Mašinstvo IV Započnite 3. pokušaj
Bravar-zavarivač
1 pokušaj · 3,7
Mašinstvo III Započnite 2. pokušaj
Vozač motornih vozila
2 nivoa dostupno
Saobraćaj III · IV Započni

Student dashboard. One row per occupation, not per scenario. A catalogue can hold 224 interviews across 75 trades, and a student needs exactly one of them — so the row is the trade, and its qualification levels sit beside it rather than as separate entries competing for the same name. Search, sector and level narrow it; the count above the table says what the filters left, against the whole catalogue.

Resume comes first, above the catalogue, because a student returning to an unfinished interview is the commonest reason this page is opened — and it names the question they stopped on rather than a percentage. An attempt left for two weeks or more is muted: still offered, no longer suggested.

Attempts and best score sit under the occupation name, and the primary action counts up — Započnite 3. pokušaj — so a student can see they are repeating rather than starting. On phones each row becomes a card, with the column names carried by data-label. This screen replaced a grid of scenario cards grouped under profession headings; that layout worked at 12 scenarios and stopped working at 224.

Interview session & AI feedback

app.riseproject.space/student/sessions/…
← Nazad

Tehničko rešavanje problema

Pitanje 2 od 5

Opišite situaciju u kojoj ste rešili složen tehnički problem za klijenta. Kakav je bio ishod?

Pošalji odgovor

Interview session. The platform drives the flow one question at a time. After each answer the AI feedback block appears — light-blue tint, brand accent bar, per-criterion rows, and an improved-answer example. This is where the design system does its most important work: making evaluative feedback feel supportive, not harsh.

Teacher dashboard

app.riseproject.space/teacher
Intervjui učenikaPregled sadržaja

Intervjui učenika

Svi završeni i tekući intervjui. Najnoviji na vrhu.

Učenika sa intervjuom
24
započelo bar jedan intervju
Intervjua ove nedelje
11
83 ukupno
Prosečna ocena
3,64
završeni intervjui, svi scenariji
Traži pažnju
5
nezavršeni ili ocena ispod 2,5
StudentMarija Petrović×
ZanimanjeSva zanimanja
SviTraži pažnjuPrvi pokušajPonovljeni pokušaj

6 od ukupno 83 intervjua

Student ↕ Scenario ↕ Pokušaj ↕ Status ↕ Prosečna ocena ↕ Počelo ↓
Marija PetrovićTehničar mehatronike3 Završeno 4,20+0,45 26. avgPregledaj
Nikola SimićBravar-zavarivač1 U toku — 26. avgPregledaj
Ana KovačevićKuvar2 Završeno 3,10−0,30 25. avgPregledaj
Stefan JovanovićTehničar mehatronike1 Napušteno 2,20 24. avgPregledaj

Teacher dashboard. Four KPIs answer "is anything wrong?" before the teacher reads a single row — the last one turns amber only when it is non-zero, so an ordinary week shows no alarm colour at all. Below them, every column sorts, and the two high-cardinality filters (student, scenario) are type-ahead comboboxes rather than long select lists, because a large school has hundreds of each. Scores carry a coarse three-band colour and a bar for scanning a column at a glance, plus a delta against the previous attempt at the same scenario — the only comparison on this screen that is methodologically sound, since scores are not comparable between scenarios. The student's name opens their progress view; Pregledaj opens the session itself. On phones the table collapses into stacked cards.

School administration — users

ImeE-poštaUlogaJezikStatus
Jelena Markovićjelena.markovic@skola.exampleNastavniksrPozvan···
Nikola Ilićnikola.ilic@skola.exampleUčeniksrAktivan···
Vesna Simićvesna.simic@skola.exampleNastavniksrPoziv istekao···

School administration. One table holds accounts and unaccepted invitations together, because to the person reading it they are the same question — who is in my school, and who has not arrived yet. The status column carries that difference rather than a second table doing it. This surface manages people and never shows their work: a school administrator cannot open a transcript, and there is no endpoint that would return one. The interface is not hiding a capability; the capability does not exist. Everything here is in the school's own language, chosen when the organisation was created.

Deleting a person — the only irreversible control

Obrisati Nikola Ilić i sve njihove podatke?

Ovo trajno uklanja:

  • 4 vežbi intervjua
  • 38 odgovora i povratne informacije o njima
  • 3 završnih izveštaja

Evidencija o tome ko je pristupao podacima ove osobe čuva se 12 meseci i ne briše se.

Zadrži nalogObriši trajno

The dialogue counts what it destroys. “Are you sure?” invites a reflexive yes; “this removes 4 interviews and 38 answers” does not. The counts are real, fetched for this person at the moment of asking. Note what the dialogue does not contain: any of the content it is about to delete — an administrator can carry out an erasure without ever reading what is being erased. The keep option is worded as an action rather than as Cancel, so the safe choice reads as a choice.

School administration — content

Sadržaj intervjua

Intervjui vaše škole dolaze iz jedne Google tabele. Vidi je samo vaša škola.

povezano 12 scenarija, 380 pitanja
Uvezi iz tabeleOtvori tabelu

Izmena tabele ne menja ono što učenici vide. Uvezite je kada budete spremni.

The spreadsheet is an authoring surface, not a live source. The sentence under the buttons is the whole design: editing the sheet changes nothing until someone imports it. That is what stops an accidental edit reaching a class mid-lesson, and it is why this panel needs an explicit action rather than quietly staying in sync. There is no field for a key — access is granted by sharing the sheet with the platform's service account, so what the administrator needs is an address to paste into Google's own dialogue, not somewhere to type a credential we would then hold.

Import history

UvezenoScenarijiPitanjaKoIntervjui
3.9.2026. 11:24 u upotrebi12380Zoran K.7
29.8.2026. 09:0212376Zoran K.4Vrati u upotrebu

Every import is kept, and this is where a mistake is undone. Putting an earlier version back changes what students can start; it never changes what a finished interview shows, because each interview keeps the content it was taken on. The Intervjui column is the reason a version cannot simply be tidied away — it counts the interviews that still depend on it, and the database refuses to delete a version any of them point at.

Platform administration — organisations

OrganisationCountryAdminsTeachersStudentsStatus
Tehnička škola Zrenjanin
tehnicka-zrenjanin
Serbia1219active
Lycée Jacques Le Caron
lecaron
Francenone01active

Counts, never content. This console provisions schools and invites their first administrator; it sits outside every school and cannot read a single student's answer. That is not a restriction the interface applies — no endpoint exists that would return one — and it is the claim the impact assessment rests on, so it holds only as long as none is added. This is the one surface in the product that is English only, deliberately: it belongs to the platform operator rather than to a school, is used by one person, and deals in slugs and organisation status rather than in anything a student or teacher reads. The amber none is doing real work — an organisation with no administrator can invite nobody and answer no erasure request.

My account

Vaši podaci

Kopiju svega što sistem čuva o vama možete preuzeti odmah. Brisanje traži škola, koja odgovara u roku od mesec dana.

Preuzmi svoje podatkeTražim brisanje svojih podataka

Preuzimanje počinje odmah i niko drugi ne mora da ga odobri.

Two buttons that look alike and are not. The copy downloads immediately — nobody approves it, and no member of staff opens a transcript in order to hand it over. Deletion goes to the school, because that one genuinely is theirs to decide and to carry out, and it starts a one-month clock the law counts. The asymmetry is the design: a right you can exercise yourself should not be dressed as a request. The Serbian reads Preuzmi svoje podatke, not moje — the verb is second-person imperative, so the interface addresses the reader rather than speaking as them.

11 — Expression

Motion — Skill Constellation

While the AI evaluates an answer, RISE shows the Skill Constellation: a small network of nodes with energy pulsing along its edges and a traveling glow. It signals "your skills are connecting" — turning unavoidable model latency into a calm, on-brand moment instead of a spinner.

Timing. Energy flows on a 1.8s loop, nodes pulse on 1.6s, and a glow travels the path on 2.4s — staggered so the network feels alive, not mechanical. UI transitions elsewhere are a quick 140ms ease.
Reduced motion. Under prefers-reduced-motion all animation stops and the constellation simply holds visible — respecting user and accessibility settings.

12 — Quality

Accessibility

The pilot explicitly includes students with special educational needs, so accessibility is a first-class requirement, not a polish pass. The baseline below is already in the system; the Launch-Preparation phase extends it (see the platform PRD, §7.2).

In the system today

  • Visible keyboard focus ring on every interactive element (2px #0056D2, 2px offset).
  • Labels always visible on inputs — never placeholder-only.
  • WCAG-AA text contrast across primary, body, and status colors.
  • Touch targets 44–48px for primary actions and the avatar control.
  • prefers-reduced-motion honored for the constellation.
  • Fluid layouts down to 320px; no loss of function on small screens.

Extended at Launch Prep

  • Localised login (falls back via browser language) so non-English readers can sign in.
  • aria-live announcements when AI feedback arrives.
  • Accessibility panel: OpenDyslexic font, 100/125/150% text scaling, high-contrast theme, text-to-speech.
  • Automated axe-core checks wired into the build.
  • All touch targets raised to a 44px minimum.

13 — Quality

Responsive Behaviour

The layout is fluid from 320px up to the 1280px cap. Three breakpoints progressively simplify structure — reflowing card grids, stacking form controls, and collapsing data tables into cards.

≤ 860px
Reduced page padding, smaller logo & H1, tightened header.
≤ 640px
Single-column card grids, full-width buttons, stacked filters, tables collapse to cards, language buttons stack.
≤ 390px
Narrowest gutters, compact brand row, single-column invite form.
Mobile-first intent. On phones the answer screen keeps the Submit action reachable and session lists render as scannable cards rather than horizontally-scrolling tables — matching the platform PRD's mobile requirements (§7.6).