Independent concept prototype for Build What Moves India · Not a Government of India service · All data is demo data.

Documentation · the design

The ten sheets these screens were built from, rendered once from the design canvas and kept here as the record. The mark, the button family and the six surfaces come first; the eight screens after them are the prototype itself, which is where they are best tried. A department copies from the developer page; the argument for all of it is the direction. Drawn at desktop width — on a phone the sheets scroll sideways.

Meri Pehchaan 2.0 · concept redesign

One button, four tiers, and a citizen who can always see who has access.

Ten sheets, from the mark to the authenticator. Built on the government's own component library and its shipped tokens — purple #4a2bc2 structural, neutral for everything else, status hues for status only, radius 8, 44 and 48px targets, and the twelve languages the library's own switcher ships.

SHEET 01

The mark — specification प्रतीक चिन्ह — विनिर्देश

Pehchaan Chakra · single colour · one continuous stroke

Tier required

None — the mark is pre-authentication furniture.

If the hub is down

Mark stays; it is a static SVG served with the relying page.

Who has access

Mark links to Who has access wherever it sits in a header.

Final

Pehchaan Chakra

A ring of ticks carrying the chakra's rhythm, and a fingerprint whorl that runs out of the centre, turns, and finishes at 12 o'clock where the twelfth tick would have been. Core and ring are one unbroken line.

  • Why it is the mark: with colour prohibited, the nationality signal has to be geometric. Chakra rhythm plus a fingerprint is the only combination that carries both identity and nation, and drawing them as one stroke is what makes it a mark rather than an assembly.
  • Legal: ticks, not spokes. No navy wheel, no emblem, no flag, no tricolour. Never describe it as the Ashoka Chakra.
  • The two rejected directions — a Devanagari मे monogram and three arcs — are recorded in PROMPTS.md with the reasoning. They are not part of the system.

Construction

The mark is drawn on a 24-unit canvas so it maps 1:1 onto the Material Symbols grid the component library already uses.

Measurements

All values in canvas units. One unit = 1/24 of the mark's height.

Canvas 24 × 24 · centre 12, 12 · viewBox 0 0 24 24
Outer circle r 10.4 — live area 20.8, leaving ~1.6 units of padding inside the box
Tick band r 8.4 → 10.4 · length 2.0 · flat ends
Tick count 11, at exact 30° steps. The 12 o’clock position is the whorl’s tail, not a tick
Whorl 1.5 turns · r 0.55 → 6.2 · ridge gap 1.97 · core cap covers the true centre
Tail Cubic, first control point on the spiral’s exit tangent — curvature-continuous, no visible join. Ends on the outer circle at 12 o’clock
Stroke 1.8 everywhere — ticks and whorl alike. ≈2px optical at 24px
Colour currentColor. Single colour, always
Clearance Whorl outer edge to tick band: 1.3 units. Never let them touch

Clear space

The measure is x, the length of one tick — 2 units, or 1/12 of the mark's height. Keep 3x clear on all four sides. Nothing sets inside it: no rule, no wordmark, no edge of a card.

3x 3x

Inside a button the rule is tighter and fixed by the component: mark 20px, then 8px to the label, then the button's own 16px padding.

Minimum sizes

16px is the floor. Below it the whorl's ridges close up and the ring becomes a grey circle — use the wordmark on its own instead.

128
48
24
20
16

20px — inside a 48px button. This is the size the mark was drawn for.

16px — favicon and the tier chip. Absolute minimum.

24px — default in UI, matching the Material Symbols optical size.

Colour

The mark is single colour and inherits currentColor. There is no second-colour version, no tricolour version and no gradient version to fall back on — the four uses below are the whole set.

Positive

#4a2bc2 on #ffffff

Reverse on primary

#fafafa on #4a2bc2

Neutral

#171717 on #ffffff

Reverse on neutral

#fafafa on #171717

Lockups

Three lockups, no others. The gap between mark and wordmark is 4x — a third of the mark's height — at every size. The mark's box centres on the wordmark's line: its outer circle stands a little above the cap height, which is what makes the two read as the same size. The mock wordmark is MeriPehchān, with the macron.

MeriPehchān
मेरी पहचान
MeriPehchān मेरी पहचान

Misuse

Six ways the mark stops being the mark. The first is the one that matters legally as well as visually.

DON'TRecolour it

Single colour, and only purple, neutral or the surface’s inverse. A status hue turns the mark into a status.

DON'TStretch it

Scale proportionally. The tick rhythm and the whorl only hold on a square canvas.

DON'TRotate it

The tail sits at 12 o’clock. Turning it breaks the one axis the mark is built on.

DON'TAdd effects

No shadow, no glow, no bevel, no gradient. The library's shadows are for surfaces, not for marks.

DON'TPlace it on low contrast

The mark needs 3:1 against its background. Purple on purple is decoration, not a mark.

DON'TEnclose it

No ring, badge or container around it. The mark already has a ring — a second one fights it.

SHEET 02

The button बटन

3 variants × 7 states × EN/HI · md and lg

Tier required

Set by the relying service, never by the button. Copy stays the same at every tier.

If the hub is down

DEGRADED state: button disabled, note reads “Meri Pehchaan is busy — use OTP below.”

Who has access

Never named on the button. Sub-IdPs and “Powered by” are prohibited here.

Primary — the first action in the form's action row

Primary
default
hover
active
focus
loading
disabled
degraded
Meri Pehchaan is busy — use OTP below.
मेरी पहचान व्यस्त है — नीचे OTP का उपयोग करें।

Outline — secondary surface

Outline
default
hover
active
focus
loading
disabled
degraded
Meri Pehchaan is busy — use OTP below.
मेरी पहचान व्यस्त है — नीचे OTP का उपयोग करें।

Neutral-dark — #171717 fill, for dark or photographic surfaces

On a dark surface
default
hover
active
focus
loading
disabled
degraded
Meri Pehchaan is busy — use OTP below.
मेरी पहचान व्यस्त है — नीचे OTP का उपयोग करें।

Large — 48px, the library's large control height

Twelve languages

the set the library's own language switcher ships

Every button below is 320px wide — narrower than a 360px phone screen with its margins. With the brand name off the label the strings are short, so none of them wrap now; the width is kept because the labels around them still can. The mark, the 8px gap and the 16px padding never move. The height starts at the 48px minimum and grows with the line box: English sits at 48px, one Indic line at line-height 1.8 makes it 55px. Nothing here wraps to a second line, and if a longer verb ever did, the button would grow rather than clip. It never truncates.

English
English
English
English
English
English
English
English
English
English
English
English

These translations are drafts. They are here to prove the layout holds in twelve scripts, not to be shipped. Every string needs a native reviewer before it goes near a citizen, and the brand name in particular is a transliteration decision, not a translation one.

Live

Hover, press and tab to it. This is the shipped button, not a state swatch.

Copy rules

  • Formula: the verb alone — Sign in · Continue · Verify · Authorise. The mark carries the brand, so the label does not repeat it. This departs from docs/05 §5.1, which sets <verb> with Meri Pehchaan; the trade is a shorter, calmer button against a weaker cross-portal cue, and it should be tested before it is settled.
  • Never: “Login with”, “Powered by”, or any sub-IdP name on the button.
  • Never: the verb without the mark. With the name gone, the mark is the only thing distinguishing this from “Send OTP”.
  • Never: mark without label. The mark alone is a chip, not a button.
  • Always: aria-label mirrors the visible text; the mark is aria-hidden; loading sets aria-busy.
SHEET 03

The six surfaces छह सतहें

Everywhere the mark appears that is not a button

01 · Tier chip

Tiers are purple depth, never a second hue. The label always names the tier, so status is never colour-alone.

शब्द Shabda अनुमान Anumaan प्रत्यक्ष Pratyaksh अधिकृत Adhikrit

02 · Pehchaan-filled field

Marked so the citizen knows which values came from the hub and can still edit them.

Verified

Filled by Meri Pehchaan · मेरी पहचान से भरा गया · Change

03 · Approve on phone

Number matching, and what you see is what you sign.

42

Tap 42 on your phone to approve

अनुमति देने के लिए अपने फ़ोन पर 42 दबाएँ

Signing: EPFO · view passbook · valid 90 seconds

04 · Acting-for banner

A warning state, so it uses the library's warning orange — not a decorative tint. Nothing else on the page is orange.

Ramesh Kumar is acting for Aanya Sharma

रमेश कुमार, आन्या शर्मा की ओर से कार्य कर रहे हैं

CSC operator · Adhikrit · VLE-MH-2024-00387 · ends 14:40

End session

05 · Ready badge

For relying services in the developer portal. Never used inside a form.

Meri Pehchaan Ready मेरी पहचान तैयार

06 · Header lockup

Mark, wordmark, tier chip, and the link to who has access — the same four items on every screen.

MeriPehchān प्रत्यक्ष Pratyaksh Who has access
SHEET 04

Sign in — before and after साइन इन — पहले और बाद में

One block changes: the form actions

Tier required

Shabda to enter; the service raises the tier only when the action needs it.

If the hub is down

Third frame: button disabled, legacy OTP form auto-expanded, nothing else moves.

Who has access

Linked from the footer of the card, before the citizen signs in — not only after.

360px

Before · the stock card sign-in
Independent concept prototype · Not a Government of India service · Demo data.

Sign In

साइन इन

We send a 6-digit OTP to the number on record.

the form's action row

After · 2.0
Independent concept prototype · Not a Government of India service · Demo data.

Sign In

We send a 6-digit OTP to the number on record.

the form's action row — the only diff

OR
After · degraded
Independent concept prototype · Not a Government of India service · Demo data.

Sign In

साइन इन

Meri Pehchaan is busy — use OTP below.

Demo OTP is 123456.

Meri Pehchaan is busy — use OTP below.

1280px

MeriPehchān मेरी पहचान

One sign-in for every service, and a record of who used it.

हर सेवा के लिए एक साइन इन, और इसका रिकॉर्ड कि किसने इसका उपयोग किया।

Independent concept prototype for Build What Moves India · Not a Government of India service · All data is demo data.

Sign In

साइन इन

We send a 6-digit OTP to the number on record.

OR
SHEET 05

Consent and account-link सहमति और खाता-लिंक

What · why · who · until when · withdraw

Tier required

Pratyaksh to authorise a read of Aadhaar-sourced fields. Shabda can view the request but not grant it.

If the hub is down

The request is held, not failed: “EPFO will ask again when Meri Pehchaan is back.” Nothing is granted by default.

Who has access

Every grant made here appears in Who has access the moment it is given, with the same three lines.

Consent · 360
Independent concept prototype · Not a Government of India service · Demo data.

Consent

EPFO is asking to use your Meri Pehchaan

EPFO आपकी मेरी पहचान का उपयोग करना चाहता है

What it will read

Full name

Aanya Sharma

Aadhaar

Date of birth

14 August 1996

Aadhaar

UAN

ending 4321

EPFO
WhyTo show your passbook and let you file a claim. WhoEmployees' Provident Fund Organisation · Ministry of Labour & Employment Until31 March 2027. You can end it any time from Who has access.

Never pre-ticked. Nothing is shared until you tick it.

Account link · 360
Independent concept prototype · Not a Government of India service · Demo data.

First sign-in

We found a UAN ending 4321

It is registered to your Aadhaar. Confirm it with the OTP you already use for EPFO, and it joins your Meri Pehchaan.

Enter the 6-digit OTP sent to 98765 43210

Resend in 00:17 · Attempt 1 of 5

Linking never moves your EPFO records. It records that this UAN and this Pehchaan are the same person.

Withdraw · 360
Independent concept prototype · Not a Government of India service · Demo data.

Withdraw

End EPFO's access?

Your open claim needs this access. Ending it now will stop that claim until you grant it again.

Granted12 March 2026 Used14 times · last on 22 August 2026 ReadsName, date of birth, UAN

Red is danger, and danger only. Nothing else on these sheets is red.

Rules this screen enforces

  • Never pre-ticked. The Authorise button stays disabled until the citizen ticks. Try it — the tick above is live.
  • Four questions, always in this order: what will be read, why, who is asking, and until when. Each field names its source, so the citizen can see which of the three doors it came through.
  • Withdrawal is designed, not buried. It tells the citizen what will break before they end it, and it is reachable from the consent screen itself, not only from settings.
  • Linking is a claim about identity, not a data transfer. The copy says so, because the fear it answers is “are you moving my provident fund somewhere”.
SHEET 06

The citizen dashboard नागरिक डैशबोर्ड

Card first · task list · no percentage

Tier required

Shabda gets in and sees the card and the task list. Each row states the tier it needs before it opens.

If the hub is down

The card, the task list and the last-known Applications state are cached and shown read-only. Nothing new can be granted.

Who has access

It is section four of the home, not a settings page three levels down. That placement is the argument.

Home · 360
Independent concept prototype · Not a Government of India service · Demo data.
MeriPehchān मेरी पहचान प्रत्यक्ष Pratyaksh

Aanya Sharma

MP-8842-1097-3310

Tap to prove — a fresh code every 30 seconds

Raise your level

Three things stand between you and अधिकृत Adhikrit. No score, no percentage — just what is left.

Enrol a passkey on this phone

Replaces the OTP. Two minutes.

Incomplete

Set two recovery routes

One is set. Add a second so losing this phone is not losing your identity.

Incomplete

Link your PAN

Unlocks Income Tax and GST.

Completed

Add a nominee

Available once two recovery routes are set.

Cannot start yet

Applications

Open across every portal, in one list.

EPFO · Form 19 withdrawal

EPF-2026-44120 · with the field office

4 days left

Passport · re-issue

PPT-2026-88301 · police verification done

On track

Income Tax · refund

ITR-2025-26 · processed

Completed

Inbox

One channel for every portal that has something to tell you.

EPFO

Your claim moved to the field office.

2h

Transport · Maharashtra

Licence renewal opens next month.

3d

Who has access

Every row can be revoked or contested.

Ramesh Kumar · CSC operator

Acting for you until 14:40 today

End now

EPFO

Reads name, date of birth, UAN · until 31 Mar 2027

Revoke

Income Tax

Read PAN and date of birth · 4 times this month

Revoke

Security

This phone · Pune

Passkey not yet enrolled

Set up

Sign out everywhere

Ends every session except this one

Run

Freeze my identity

Stops all use immediately. Reversible.

Freeze

The one decision on this screen

No 0–100 readiness score. The tier chip is the score, and a task list carries the rest.

Only gov.br shows a trust tier, and it shows it as a named ladder with one explicit next step rather than a meter. The behavioural evidence is consistent: percentage meters demotivate when progress is slow, and progress here is slow by design — raising a tier means visiting a centre or enrolling a device. A citizen stuck at 40% reads it as a verdict. A citizen with three named tasks reads it as a list.

Order of the home, and why

  1. The card first. Every mature system opens on the identity object — Singpass, gov.br, Korea, the new Aadhaar app. It is the thing the citizen came for and the thing they show to a clerk.
  2. Raise your level. GOV.UK task-list statuses: Completed, Incomplete, Cannot start yet. Each row says what it unlocks, because "enrol a passkey" is not a reason.
  3. Applications before Inbox. An open application has a deadline; a notice does not.
  4. Who has access is a named section, not a settings sub-page — the whole argument of 2.0 is that the citizen can see this without hunting.
  5. Security last, but Freeze is on the home screen. Recovery starts from panic, and panic does not navigate.

Status without colour

Every status on this screen is a word first. The colours below only reinforce it — desaturate the page and nothing is lost.

Completed Incomplete Cannot start yet 4 days left
SHEET 07

Delegation प्रत्यायोजन

Act for me, not as me

Tier required

The citizen must be Pratyaksh to mint a grant. The delegate signs in with their own identity at Adhikrit — never the citizen\u2019s.

If the hub is down

No new grants are minted. Live grants keep working until they expire, because killing them mid-claim would strand the citizen at a counter.

Who has access

Every grant is a row on Who has access from the second it is approved, with End now on it.

Grant · operator asks
Independent concept prototype · Not a Government of India service · Demo data.

Grant requested

Ramesh Kumar wants to act for you

CSC operator · VLE-MH-2024-00387 · Certified by MeitY

PurposeSubmit EPFO Form 19 on your behalf
PortalEPFO — and nothing else
ScopeSubmit one claim. Cannot read your documents, change your phone, or grant access to anyone else.
WindowToday, 10:00 – 11:00
UsesOnce

Five lines, always the same five. A grant that cannot state its purpose, portal, scope, window and number of uses is not a grant.

Approval · the phone
Independent concept prototype · Not a Government of India service · Demo data.
MeriPehchān Aanya's phone
42 tap this number

Approve Ramesh Kumar acting for you?

Expires in 01:32

You are signing exactly this

Submit EPFO Form 19 · EPFO only · once · today 10:00–11:00 · by VLE-MH-2024-00387

17
42
85

Number matching, not a yes button. A citizen who is being talked through a scam has to read the operator's screen and pick the match — and the thing they are signing is written out above it.

Revoke · 360
Independent concept prototype · Not a Government of India service · Demo data.

Revoke

End this grant now?

Ramesh Kumar · CSC operator

Submit EPFO Form 19 · used 0 of 1 · ends 11:00

Started10:04 today
ActionsOpened Form 19. Nothing submitted yet.
EffectHis session ends within seconds. Anything already submitted stands.

Revoke is one tap from the home screen, and it says what it will and will not undo. Grants expire by default — nothing here is open-ended.

Ramesh Kumar is acting for you · EPFO Form 19 · until 11:00

grant MP-G-2026-0091 · VLE-MH-2024-00387 · every action logged as “Ramesh for Aanya under grant 0091”

Why this is the differentiator

  • Today the operator uses the citizen's OTP. That is the actual practice at a lakh of service centres, and it means the citizen's credential leaves their hands. A grant replaces the shared OTP with a scoped, logged, expiring permission.
  • The delegate signs in as themselves. The token carries who is acting and under which grant, so the log reads “Ramesh for Aanya”, not “Aanya”.
  • Assisted mode is first-class. A citizen without a smartphone approves with a counter-issued one-time code plus Aadhaar face — the same grant object, a different approval channel.
  • The banner is a warning, not a decoration. It uses the library's warning tokens because acting-for genuinely is a warning state, and it stays on screen for the whole session.
SHEET 08

Loss and recovery हानि और पुनःप्राप्ति

Lose the device, never the identity

Tier required

Freeze needs no tier and no session. Recovery restores a tier rather than assuming one — R4 hands back Anumaan, and Pratyaksh only after the cooling period.

If the hub is down

Freeze is the one action that must never depend on the hub being healthy: it is served from a separate path, and the phone line is printed on the card.

Who has access

Every recovery event is written to the access log with its route, and the old devices and the nominee are told as it happens.

Freeze · from anywhere
Independent concept prototype · Not a Government of India service · Demo data.

Freeze

Stop everything, right now

No sign-in needed. Freeze from any phone, any browser, or by calling 1800. Aadhaar number plus one OTP is enough — because the person who just lost their phone has nothing else.

Freezing does this

  • Every session ends, everywhere.
  • Every live grant is suspended, not deleted.
  • No new sign-in until you unfreeze.
  • Your data is untouched. Nothing is lost.

Reversible, and it says so twice. A freeze the citizen is afraid to press is a freeze that does not happen.

R4 · 24-hour cooling
Independent concept prototype · Not a Government of India service · Demo data.

R4 · cooling

You are back in, at a lower level

Face authentication got you to अनुमान Anumaan. Full access returns in 23 h 41 m, unless someone stops it.

Your old phone and your nominee have been told. Either of them can veto this recovery, and it stops immediately.

What you can do now

CanRead your documents, see applications, use Shabda-level services
CannotGrant access, change your phone, add a device, submit a claim

The Apple Stolen-Device-Protection move: a thief who has your face on a screen still cannot finish the job inside a day, and the real owner is watching.

Veto · old device
Independent concept prototype · Not a Government of India service · Demo data.

Veto · the old device

Someone is recovering your Pehchaan

When10:41 today
WhereA new phone in Pune
HowAadhaar face authentication
ThenFull access returns at 10:41 tomorrow

Stopping is the loud button here, because the expensive mistake runs the other way. A wrong veto costs the owner one trip to a counter; a missed one costs them the identity.

The recovery ladder

Any one route is enough. The prepared routes are instant; the unprepared ones cost time or a trip, which is the whole design — you are never locked out, but you cannot be rushed either.

RoutePreparedHow it worksLevel restored
R1 Second trusted device Yes Approve the new device from the old one, with number matching Full, instantly
R2 Backup codes Yes One of ten single-use codes, shown once at enrolment, plus Aadhaar OTP Full, instantly
R3 Nominee Yes Your nominee approves on their own phone, plus your Aadhaar OTP Anumaan, then Pratyaksh after face
R4 Aadhaar face on the new phone No Liveness plus VID or OTP, then a 24-hour cooling period during which old devices and the nominee can veto Anumaan now, Pratyaksh after cooling
R5 Assurance counter No Fingerprint or iris on an Aadhaar RD device, with the operator\u2019s own Adhikrit identity logged as “X recovered Y” Full, instantly

What keeps recovery from becoming the attack

Rate limited

One recovery per 24 hours, whatever the route.

Cooled

R4 hands back a lower tier first and holds full access for a day.

Witnessed

R5 records the operator's own identity, so a counter recovery has a name on it.

Reversible

72 hours to undo a security change, and every change is announced on all channels.

SHEET 09

Developer portal डेवलपर पोर्टल

One page a department has to read

Tier required

Adhikrit — an organisation officer signs in with their own identity and the department is an entity, not a login.

If the hub is down

Integration docs are static and cached. The sandbox reports the hub\u2019s status honestly rather than pretending.

Who has access

A department can see every scope it holds and every citizen who has revoked it, on the same screen it integrates from.

MeriPehchān for departments Integrate · Button kit · Scopes · Status

Put the button on your sign-in page. Everything else is already built.

You keep your own sign-in. Meri Pehchaan becomes the first action above it, and the three doors behind it stop being your problem.

1

Register the service and declare the scopes you need. Each one needs a plain-language reason a citizen will read.

2

Drop in the button. Two files and eight lines, and it inherits your dark mode.

3

Handle the degraded state. Your existing OTP form is the fallback — keep it.

Meri Pehchaan Ready

Services that pass the conformance check may show the badge. It means three things a citizen can rely on: the button is the first action, consent is asked before the redirect, and every scope held is visible on Who has access.

EPFO · Income Tax · Passport Seva · Transport MH · 41 more

Button kit

The whole integration, on one screen. Copy it out of the page — there is no SDK.

<!-- 1. the stylesheet you already have -->
<link rel="stylesheet" href="…the stylesheet every department already loads…">
<link rel="stylesheet" href="https://cdn.meripehchaan.gov.in/2.0/mp.css">

<!-- 2. first action in your form actions, above the OR -->
<div class="ux4g-form-actions">
  <button type="button"
          class="ux4g-btn-lg ux4g-btn-meripehchaan"
          aria-label="Sign in">
    <svg class="ux4g-btn-icon" aria-hidden="true" width="20" height="20"
         sc-camel-view-box="0 0 24 24"><use href="#mp-mark"/></svg>
    Sign in
  </button>
</div>
mark.svg mark-mono.svg mp.css favicon.ico Twelve-language label table
DO

First action, above the OR

The national option is listed first and is at least as prominent as any other. Your OTP form stays exactly where it is.

DON'T

Restyle the button

No new fills, no rounded pill, no drop shadow, no department colour. It is the same object on every portal or it signals nothing.

DO

Keep the mark at 20px or more

Inside a 48px button, with 8px to the label. Smaller and the whorl closes.

DON'T

Name the doors

Never DigiLocker, e-Pramaan or JanParichay on the button. Which door the citizen came through is routing, not branding.

SHEET 10

The authenticator प्रमाणक

Number matching · what you see is what you sign · offline

Tier required

Enrolling the device is what makes a citizen Pratyaksh. Until then these screens do not exist for them and OTP carries the load.

If the hub is down

Push fails, so the code does the work. The TOTP screen is the hub-down path and it needs no network at all.

Who has access

Every approval made here appears in the access log within seconds, with the portal that asked and the device that answered.

Push · number matching
Independent concept prototype · Not a Government of India service · Demo data.
MeriPehchān now

Signing in to Income Tax?

Pune · Chrome on Windows · 10:42

Tap the number shown on that screen

Three numbers, not an Approve button. A citizen on the phone with a scammer cannot be told which one to press.

Sign · high stakes
Independent concept prototype · Not a Government of India service · Demo data.

High-stakes action

You are about to sign this

Withdraw ₹2,40,000 from EPF

To account ending 7781 · Form 19 · EPFO

Asked byEPFO member portal
On behalfYou. No delegate is active.
Valid for90 seconds

What you see is what you sign: the amount and the destination are rendered on the device that holds the key, not passed through the browser that asked.

TOTP · offline
Independent concept prototype · Not a Government of India service · Demo data.

No network

Read this code out instead

Push needs data. This does not — it works on a phone with no signal, and at a counter where the operator types it in.

418 209
New code in 11 seconds

You are offline. Codes keep working; anything that needs the hub will retry when you are back.

Offline is a designed state, not an error screen. On a 2G connection at a Jan Seva counter it is the normal one.

Three defences, one screen each

Number matching beats fatigue

An Approve button gets pressed reflexively, and a caller can talk someone into pressing it. Choosing one of three numbers off a screen the caller cannot see breaks that script.

Signing shows the thing signed

The amount and the destination are rendered on the device holding the key. A compromised browser can change what it displays; it cannot change what the phone shows.

Offline is designed

Connectivity is stated, codes keep working without it, and pending actions retry on reconnect rather than failing silently.

Decisions recorded on these four sheets

  1. Mark: Direction A (Pehchaan Chakra) with Direction B as the ≤16px favicon. C rejected because it requires green, which the library reserves for success.
  2. Button family: solid / outline / dark, md 44px and lg 52px, seven states each. Degraded is a first-class state, not an error.
  3. Colour: purple and neutral only. The library's shipped stylesheet uses its saffron palette in zero components, so using it would look less like the government's own screens, not more. Status hues mean status: orange warns (acting-for), cyan informs (degraded), green confirms.
  4. Bilingual: both languages ship in the markup on every label; the toggle changes which one leads, so nothing is ever hidden from a screen reader.
  5. Sign in: BEFORE and AFTER differ by one block. The legacy OTP and Aadhaar routes are never removed, only collapsed — and they auto-expand when the hub is degraded.

Open: the class names in tokens/mp.css are written against the shipped CSS in the repo, which is not reachable from here — these sheets carry the values inline so they render standalone. Wiring them back onto the library's verified classes is the next step.

Take it with you

The written specification

Everything on these ten sheets, written out in the form the library uses for its own component contracts: the ten rules, the foundations, the mark’s locked geometry, every component and pattern, the assurance tiers, the accessibility contract, a compliance mapping to the government's web guidelines and the DPDP Act — and the five gaps we found in the library, offered back.

Download the specification Markdown · v1.0 · 28 August 2026 · free to use