The RISE design system — the brand, color, typography, spacing, components, and motion that make the AI Interview Coach feel like a calm, supportive partner.
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
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.
02 — Foundations
The RISE wordmark sits inside a soft, rounded container silhouette — a nod to a speech bubble and a rising card. It is the single most important brand asset and appears in the app header, auth screens, and this document.
150px wide in the page header, 104px on auth screens, scaling down to 106–122px on small screens.#1d1d1b) mark on light, or the white reverse on primary.03 — Foundations
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.
#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
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.
05 — Foundations
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.
| Token | Desktop | Mobile |
|---|---|---|
| Max content width | 1280px | fluid, min 320px |
| Columns | 12-column | 4-column |
| Margin | 24px | 16px → 12px |
| Gutter | 24px | 16px |
| Card grid | repeat(auto-fit, minmax(280px, 1fr)) — cards reflow from multi-column to single-column | |
06 — Foundations
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.
07 — Library
Live components reproduced from the production stylesheet. Every element here uses the same tokens the app ships with.
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.
Labels are always visible (never placeholder-only). 44px min height, 1px outline; focus transitions to bright blue with a 3px soft glow.
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.
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.
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.
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.
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.
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.
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 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 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.
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.
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.
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.
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.
Diagnose a field fault and walk the customer through the resolution, staying calm under pressure.
Tell me about a time you resolved a difficult technical problem for a customer. What was the outcome?
Clear, well-sequenced explanation that a non-technical customer could follow.
Good diagnosis; state the root cause explicitly and quantify the result.
"Improved answer: … I isolated the fault to the PSU within 10 minutes, replaced it, and confirmed the line was back to full throughput — cutting downtime by roughly half."
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.
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.
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.
| Student | Scenario | Status | Avg score | |
|---|---|---|---|---|
| Marija P. | Technical troubleshooting | Completed | 4.2 | |
| Nikola S. | Customer communication | In progress | — |
On phones the table collapses: each row becomes a card and cells stack with their column name shown via a data-label prefix.
Modals sit on a 38%-opacity slate backdrop with heavy soft shadow. Error banners use the soft-red surface with darker red text.
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.
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.
Lozinka mora imati najmanje 10 znakova.
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.
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
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.
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
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.
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
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
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
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
Still blue, still elevated, still shaped like the primary action. The one dependable tell was cursor: not-allowed, and a phone has no cursor.
The fill carries the state, so nothing has to be dimmed to say it and the label stays readable on a projector.
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.
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 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.
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.
| Scenario | Sector | Level | |
|---|---|---|---|
| Tehničar mehatroniketehnicar-mehatronike-eqf4 | Mehatronika i automatika | NOKS 4 | |
| Construction — EQF 3Retiredconstruction-eqf3 | Bâtiment | EQF 3 | |
| Bravar-zavarivačbravar-zavarivac-eqf3 | Mašinstvo | NOKS 3 |
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âtiment | EQF 3 |
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.
| State | Foreground on background | Ratio | AA body |
|---|---|---|---|
| Disabled control | #424654 on #eaedff | 8.08:1 | Pass |
| Read-only field | #131b2e on #f2f3ff | 15.56:1 | Pass |
| Retired scenario name | #0040a1 on #ffffff | 9.34:1 | Pass |
| Retired supporting cells | #424654 on #ffffff | 9.39:1 | Pass |
| v1.0 disabled primary | #6189c5 on #ffffff | 3.56:1 | Large text only |
| v1.0 retired row | #8a8c95 on #ffffff | 3.35:1 | Large 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
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.
Job Interview AI Coach · AI kouč za razgovor za posao · Coach IA d'entretien · Coach de IA para entrevistas
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.
Izaberite zanimanje, pa nivo koji odgovara vašem obrazovanju.
9 zanimanja · 12 intervjua
| Zanimanje | Oblast | Nivo | |
|---|---|---|---|
| Tehničar mehatronike 2 pokušaja · najbolja 4,5 |
Mašinstvo | IV | |
| Bravar-zavarivač 1 pokušaj · 3,7 |
Mašinstvo | III | |
| Vozač motornih vozila 2 nivoa dostupno |
Saobraćaj | III · IV |
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.
Opišite situaciju u kojoj ste rešili složen tehnički problem za klijenta. Kakav je bio ishod?
Jasno i logično objašnjenje koje bi netehnički klijent mogao da prati.
Dobra dijagnoza; navedite uzrok eksplicitno i kvantifikujte rezultat.
"Poboljšan odgovor: … izolovao sam kvar na napajanju za 10 minuta i vratio liniju na pun kapacitet — smanjivši zastoj za oko pola."
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.
Svi završeni i tekući intervjui. Najnoviji na vrhu.
6 od ukupno 83 intervjua
| Student ↕ | Scenario ↕ | Pokušaj ↕ | Status ↕ | Prosečna ocena ↕ | Počelo ↓ | |
|---|---|---|---|---|---|---|
| Marija Petrović | Tehničar mehatronike | 3 | Završeno | 4,20+0,45 | 26. avg | |
| Nikola Simić | Bravar-zavarivač | 1 | U toku | — | 26. avg | |
| Ana Kovačević | Kuvar | 2 | Završeno | 3,10−0,30 | 25. avg | |
| Stefan Jovanović | Tehničar mehatronike | 1 | Napušteno | 2,20 | 24. avg |
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.
| Ime | E-pošta | Uloga | Jezik | Status | |
|---|---|---|---|---|---|
| Jelena Marković | jelena.markovic@skola.example | Nastavnik | sr | Pozvan | |
| Nikola Ilić | nikola.ilic@skola.example | Učenik | sr | Aktivan | |
| Vesna Simić | vesna.simic@skola.example | Nastavnik | sr | Poziv 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.
Ovo trajno uklanja:
Evidencija o tome ko je pristupao podacima ove osobe čuva se 12 meseci i ne briše se.
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.
Intervjui vaše škole dolaze iz jedne Google tabele. Vidi je samo vaša škola.
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.
| Uvezeno | Scenariji | Pitanja | Ko | Intervjui | |
|---|---|---|---|---|---|
| 3.9.2026. 11:24 u upotrebi | 12 | 380 | Zoran K. | 7 | |
| 29.8.2026. 09:02 | 12 | 376 | Zoran K. | 4 |
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.
| Organisation | Country | Admins | Teachers | Students | Status |
|---|---|---|---|---|---|
| Tehnička škola Zrenjanin tehnicka-zrenjanin | Serbia | 1 | 2 | 19 | active |
| Lycée Jacques Le Caron lecaron | France | none | 0 | 1 | active |
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.
Kopiju svega što sistem čuva o vama možete preuzeti odmah. Brisanje traži škola, koja odgovara u roku od mesec dana.
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
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.
prefers-reduced-motion all animation stops and the constellation simply holds visible — respecting user and accessibility settings.12 — Quality
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).
#0056D2, 2px offset).prefers-reduced-motion honored for the constellation.aria-live announcements when AI feedback arrives.axe-core checks wired into the build.13 — Quality
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.