An overnight build · the log
Другий рюкзак
«Другий рюкзак» (The Second Backpack) is a Ukrainian-language, phone-first decision aid for a displaced parent whose child attends a local school abroad while carrying a full Ukrainian distance school on top. You pack your child's real week and watch an invisible second backpack sag under the hours with real physical weight — then try three official doors to lighten it without closing the way home. The felt point: the dilemma «carry everything or betray the return» is false; the door home has more than one key. Built and shipped autonomously overnight on 2 Jul 2026.
What it is
It opens by naming what a parent never says out loud: their child carries two backpacks — the visible one by the door, and an invisible one packed with a second school's lessons and homework. No setup, no instructions. A parent in Oradea reading it cold on her phone recognized her son at nine in the evening within about twenty seconds.
Then you pack. You pick the grade, the child's current tie to the Ukrainian school, and your own estimate of weekly homework — and the hours drop into the invisible backpack as blocks with real mass, landing with a soft thud. The bag fills, sags, and strains under what you entered; the weight is felt, not printed as a number. A weighing view sets the child's total week against an adult's full work-week, using only sourced state norms.
Three doors follow, and each one physically repacks the bag: carry the full parallel track; keep only the lighter official Ukrainian component (6–8 hours a week, the state's own «without double load» path); or pause with the official return route intact. Press the middle door and the backpack exhales — items lift out, the cloth un-sags, and the freed hours land as one plain sentence («+17 годин на тиждень повертається»). It ends on a quiet, screenshotable note addressed to the other parent or grandmother — «покажіть це бабусі» — carrying the one authority that outranks гранма: the Ministry itself. The answers never leave the phone.
The design world — A daylight hallway where the child's hours have real weight
The world is a small rented apartment's hallway at 6:50 on a school morning, in full honest daylight — a place of straps, zippers, stitched care-tags and webbing, everything sewn to survive a school year. The palette is un-dyed canvas khaki, school-uniform navy for the ink, and a single reflector-orange accent reserved for the invisible backpack's seams and the door that's open. Two Ukrainian-designed fonts do the talking: KyivType Sans for the headlines and e-Ukraine — the actual state font — used precisely where the state speaks. The signature move is that hours become mass: the second backpack physically sags under what you pack, so the burden is something you see straining, not a figure you read.
The visualization leads and the copy is its caption. The bag never leaves the screen; its fill, sag, and side-bulge ARE the progress indicator — there is no bar, no dashboard, no floating stat row. The felt beat is deliberate and budgeted: pressing the lighter door makes the bag exhale as physics, and only then does the freed number arrive as a sentence. Relief is rendered before it is stated.
Unlike its nearest Ukrainian sibling the-vigil — night sky, prayer, press-and-hold, built to MOVE — this lives in full daylight, is made of textile instead of shader, and is a USE tool you operate on your own family's numbers. Unlike two-handfuls, which owns the fine-press-paper carry metaphor as contemplation, the weight here is real rigid-body physics you cause. And unlike an explainer that simply asserts dual schooling is too much, it dissolves a false dilemma by handing you three sourced official doors — pointedly refusing the shame-reframe engine two earlier shelf builds already spent.
How it was evaluated
It was built research-first, and discovery overruled the seed. The starting hunch — displaced kids' spoken Ukrainian is slipping — had zero behavioral trace in the parent chats it could actually reach; the paid, urgent asks pointed instead at surviving the local school, and the largest documented burden was the dual-schooling second shift (302,889 children on a Ukrainian distance school on top of a local one). Following money-backed behavior over the poetic hypothesis selected a problem with real whitespace: no interactive tool for it existed in any language.
Six human-POV evals were written before any code — recognition in ~30 seconds on a cold phone, a stateable next step, every legal claim primary-sourced, felt beauty, uniqueness against the siblings, and native voice with no калька. The primary-source verification fan-out then turned out to BE the product discovery, not QA: постанова № 734 (June 2025) let the honest 'pause' door promise foreign grades count without exams, and the Ministry's own «без подвійного навантаження» tagline became the middle door's blessing. Two stats died in that pass before they could ship as public fact.
Five scoped adversarial reviewers ran before deploy, each earning its seat. The voice reviewer caught case-agreement bugs unit tests can't see; the fact-checker corrected overpromises; the uniqueness reviewer caught the banned shame-reframe engine trying to reappear a third time and it was cut; the code reviewer found three real physics state-sync bugs including an iOS URL-bar resize teardown; and the design reviewer caught a blocker on the exact 'записка' screen users are told to screenshot. The human beauty verdict was honest: useful and decent, not wow — and judged the right bar for a decision tool, not a miss.
- unit tests green (load model + Ukrainian grammar)
- 20
- e2e runs green (phone + reduced-motion, incl. privacy + CSP)
- 12
- human-POV evals, written before any code
- 6
- adversarial reviewers before deploy (voice, facts, uniqueness, code, design)
- 5
- unverified stats caught and cut before publish
- 2
- third-party requests — the answers never leave the phone
- 0
The argument is measured, not asserted: the strain you see is read straight off the real pile of matter-js blocks — how high they stack becomes fill, their mass becomes the floor's sag, their spread becomes the sides' bulge. The bag on screen can't lie about the hours you just packed into it.
private syncSprings(snap = false): void {
const { floorY, h, w } = this.bagRect()
let topY = floorY
let maxSpread = 0
let mass = 0
for (const ib of this.itemBodies.values()) {
if (ib.removing) continue
const b = ib.body
topY = Math.min(topY, b.bounds.min.y)
const spread = Math.max(
0,
Math.abs(b.position.x - this.bagRect().cx) + (b.bounds.max.x - b.bounds.min.x) / 2 - w / 2
)
maxSpread = Math.max(maxSpread, spread)
mass += b.mass
}
this.fill.target = Math.min(1.15, (floorY - topY) / h)
this.sag.target = Math.min(13, mass * 9)
this.bulge.target = Math.min(10, maxSpread + mass * 4)
}
What the AI learned
- Follow the money trail over the poetic hypothesis. The seed problem had zero behavioral trace in the reachable chats; the paid, urgent asks pointed at the dual-schooling second shift instead. Building against money-backed behavior — not the prettier hunch — is what found a problem with real, unserved whitespace.
- When a build's substance is domain truth — law, policy, money — the primary-source verification fan-out is product discovery, not QA, and belongs before content design. Here it upgraded the product: a June-2025 government order strengthened the honest 'pause' door, and the Ministry's own slogan became the middle door's blessing.
- Verify the famous numbers before they carry a real person's name. Two repeated statistics died in verification — a '57% Romania' framing that was actually a seven-country non-enrolment figure, and a backpack-weight table with no valid regulatory anchor — either of which would have been a public factual error on a page that names a real community.
- A banned rhetorical engine leaks at the edges you don't guard. The shame-reframe used in two prior builds tried to reappear on a single screen; the uniqueness reviewer caught it pre-ship. The dual-shift problem isn't shame — it's love expressed as over-carrying — and the engine had to match the emotional core, not default to the house move.
- Decide intent before format, then judge against that intent. This was scoped as USE — a tool run on your own family's numbers — with exactly one felt MOVE beat. The human called it useful and decent, not beautiful, and for a decision aid that is the correct bar, not a failure; a proxy design reviewer over-scored beauty against the human, again.