Anuar Zhumaev

AAIC · Product design & UI engineering · 2026

An AI builds the lab. I designed how students work in it.

Galileo turns school science investigations into interactive 3D labs. An AI assistant writes each lesson from the curriculum, and the system builds the bench, the equipment and the physics. I owned everything students see and touch, as its product designer and its front-end engineer, and most of it ships in the customer release.

Connect1 / 4A cable is clipped from the battery holder to the coil, one end at a time. A ring marks where each end goes. Then the run starts.

Role
Product designer and UI engineer
Timeline
April to August 2026
Company
AAIC
Client
Activate Learning
Users
Students aged 6 to 18
Platform
School Chromebooks and tablets

At a glance

Every lab is generated, so I designed the rules

The problem
Galileo generates each lab from a lesson script, often written by a model. Nobody designs a lab’s screens, and every lab has to work for students aged 6 to 18 on a budget laptop or a tablet.
The approach
Rules in place of screens: each part of the interface knows when to appear, what to say and where to go, without anyone configuring it.
My part
I designed how students work in the labs: picking things up, setting a force, reading the bench, moving through the steps and waiting for the physics. I built that layer in code too. The dev team wired the controls into the step engine, built the carry and the table strafe, and owns the pipeline, the viewer and the physics.
The result
The gesture control, object labels, the step card, the time control, camera framing, about forty device controls and the labs’ visual system ship in the customer release.

The problem

Designing for an author who isn’t a designer

Galileo is a text-to-3D system for science classrooms, built by AAIC for Activate Learning. A curriculum specialist picks an investigation, and an AI assistant turns it into a lesson script: which objects are on the bench, what each step asks the student to do, and what should happen. The system works out the rest. Watch the three-minute product video.

  1. CurriculumAn investigation from a science curriculum such as OpenSciEd
  2. Lesson scriptWritten by an AI assistant, adjusted by a specialist. Intent only.
  3. PipelineResolves positions, trajectories and camera poses
  4. My workViewerUnity renders the bench. The kit draws everything the student reads and touches.
  5. Physics serverComputes each run. Results stream back and play.

Each step has two modes: Frozen, where the student acts, and Simulating, where they watch the computed run and read the result.

The three-minute product video from the AAIC team.

Each component had to take as few script fields as possible, fall back to sensible defaults, and work in labs nobody on the team had seen.

Generated screens
The author writes ‘push the cart gently’. The kit decides what appears, where, and when it goes away.
Physics on a server
Runs are computed on a server and played back. A student’s choice takes effect on the next run, and every run has a wait.
Students and hardware
Ages 6 to 18, on school Chromebooks with touchpads and on tablets. Screens are small, and touch has no hover.
Curriculum fidelity
The client’s curriculum specialists had to recognize their own lab procedure in every interaction.

Every component in the kit has written rules: when it appears, what it says, where it goes and what it won’t do. A generated lesson follows them when nobody configures anything. Three examples:

  • A button the step is waiting for gets a breathing cyan ring, with no change to the lesson format.
  • Pour, drip, aspirate and stir steps get a camera framing by default.
  • Labels and their hazard marks are worked out from the scene, not written by the author.

Working within other teams’ systems

The lesson format, the pipeline and the physics belong to other teams. I fixed what I could inside the kit. My first rework of the time control extended the dev team’s events, so it was rolled back and rebuilt inside the kit. Where a change needed another team, I wrote an assessment brief or a data request instead of changing their code.

In the first month I set standards in Figma. After that I designed in code, against the real 3D scene. Subject-matter experts took an active part in building the labs’ experience, and the client’s specialists reviewed live builds, so their corrections were about behavior.

The camera

Splitting the camera between the student and the author

Generated labs framed their subjects unpredictably. Instruments ended up under the step bar, and on drag steps the drop target could be off screen. Lessons are increasingly written by models, which leave out camera instructions without any error.

I audited the camera moves in eight labs. Eight of fourteen in-step moves used the same preset, and one preset was never used. I rewrote the library as twelve roles, each with a stated purpose, and seven rules for when each applies.

  • intro

    Wide opening over the whole desk, slightly above eye level, so a fresh viewer takes in the full layout.

    Use for

    The opening shot, or re-establishing the whole apparatus after a focused sequence.

  • working

    Mid-distance, scene-wide, at the angle someone takes when they reach forward to the desk. The default role.

    Use for

    Placing objects, tilting beakers, any hands-on step that needs natural depth.

  • working_close

    Same angle as working, dollied in. The whole compact prop set stays in frame at near arm’s length.

    Use for

    Careful manipulation of close-together objects; the step up from working.

  • working_high

    Tilted up to 75° on a list of objects, to read displays mounted high while keeping the rig’s height readable.

    Use for

    Column rigs, stacked supports, balance towers: setups where height carries the lesson.

  • overhead

    Near-vertical view of the whole scene, with just enough tilt to tell heights from shadows.

    Use for

    Planar work that only reads from above: drawing curves on paper, arranging compass rings.

  • overhead_focused

    Top-down on a list of objects; everything else on the desk drops out of frame.

    Use for

    A subset that must read from above without the rest of the desk.

  • overhead_close

    Tight top-down on a list of objects, well inside the fit: an aggressive close-up from above.

    Use for

    Sub-centimetre detail from above: drawn curves, indicator marks, dials on horizontal faces.

  • instrument

    Tight, head-on framing of one instrument’s display. The camera turns to face the object’s display anchor, so a vertical thermometer and a top-facing scale both read square.

    Use for

    Scales, thermometers, probes, multimeters: when the reading itself is the moment.

  • phenomenon

    Close on one science object, generous enough that its whole form stays readable.

    Use for

    A magnet on its own, a sample crystal, a flask after a reaction: the moment to look at this thing.

  • phenomenon_close

    Leans right in on one object, at 0.3× the fit: the tightest role in the library.

    Use for

    Sniffing a sample, reading a small label, watching a subtle change on one small object.

  • compare

    Sized to fit every named object at the tight fit; unrelated props drop out of frame.

    Use for

    Two cups at different temperatures; a row of three to five weighed samples or indicator tubes.

  • compare_close

    Close-up on a small set of related objects, tight enough to read sub-centimetre features.

    Use for

    Indicator-patch colours, fine markings on adjacent instruments.

The kit’s twelve camera roles.From the kit catalog
  • Every view needs a teaching reason: one sentence that says what must be visible.
  • Pitch follows the face being read. A thermometer standing in a cup can’t be read from above, so the instrument role turns to face the display.
  • Distance follows legibility. If a role sits too far, use its close variant instead of setting a distance.
  • Name the objects instead of placing the orbit target by hand.
  • The length of a transition signals intent.
  • When two readings are too far apart for one view, they get one step each.
  • The student can always orbit and zoom.

The safe zone

The step bar and the time control cover part of the canvas at every window shape. The pipeline sends the box a step needs to show, and the kit widens the field of view and shifts the orbit target, within set limits, until the box clears the bars. It never moves the camera closer or further, because the distance is the student’s. It is recomputed from the authored view each time, so adjustments don’t stack.

A pipette step with the safe zone drawn over it: red bands over the step card at the top and the time bar at the bottom, a yellow band inside them, and in the clear middle a pipette in a beaker of water beside an empty beaker.
The safe zone drawn over a pipette step. Red marks the rows the step card and the time bar cover. The pipette and both beakers are framed in the clear area inside the yellow band.

Object labels

Label what the step uses, and never the answer

A density lab has five graduated cylinders, four beakers, a pipette and a scale on one bench. In 3D every liquid is a clear fluid in glass, so water, hot water and hydrochloric acid look the same. A student could pour the acid without knowing it wasn’t water.

A lab bench with six foam cups, four of them holding the same pale blue liquid, two cup lids, two thermometers and a digital scale. Nothing is labeled.
The bench before labels. Four cups hold liquid, and nothing shows which is water and which is acid.3D render by the Galileo 3D team
The same bench with a label on every object: Hot Water with an orange disc, Water, Hot HCL with a hazard diamond and an orange disc, Cold Water with a blue disc, two Empty cup labels, Cup Lid x2, Thermometer x2 and Digital Scales.
The same bench with every label shown. Hot and cold liquids carry a temperature disc, the acid a hazard diamond, and the empty cups are named as cups.Kit labels over a 3D render by the Galileo 3D team

Three models in three months

  1. Always-on chips on every container, with the current step’s objects in focus and the rest dimmed.
  2. Two states: a small background label on everything and a full card on the active object. A gradient mask fades labels that are behind other glassware.
  3. One label, only on what the step uses. The 10 px background layer was hard to read, the wording changed when a step advanced (‘Dye blue’ became ‘Cold water (blue)’), and the model depended on hover, which touch screens don’t have.

The July model labels the object in hand, a vessel receiving a pour from the start of the step, and a drag destination once the object is picked up. Of a cable, only the end in hand is labeled. I gave up the always-on overview, and kept the background layer behind a switch instead of deleting it.

What a label can say

No numbers
‘Warm water’, never ‘48 °C’. A label with the temperature would give away what the student is there to measure. The one exception is the pipette’s volume, where reaching the number is the task.
Two hazard marks
A corrosive diamond and a thermal disc. Tinted text and real pictograms were rejected: a pictogram can’t be read at 14 px. The marks never dim.
Three bands
Below 10 °C is cold, with a blue disc. Above 40 °C is hot, with an orange disc. Warm, in between, gets the word and no disc.
Empty vessels
Whether a vessel is empty depends on the volume it holds, not on its chemistry. A cup waiting for a hot pour reads ‘Cup A (mixing vessel)’.
Clear of the interface
A label doesn’t go under the step bar or the time control. It moves to stay 10 px clear.
  • Cold waterbelow 10 °C · blue disc
  • Warm water10–40 °C · the word, no disc
  • Hot waterabove 40 °C · orange disc
  • HCl 1Mcorrosive
  • Hot HCl 1Mboth · diamond leads the disc
  • HCl + NaOHacid + base · one diamond, not two
  • Cup A (mixing vessel)empty · no liquid to derive from
Temperature bands, and how marks combine: corrosive first, then thermal. An acid and a base together get one diamond.From the kit catalog

Worked out in the kit

The lesson format has a fixed list of object properties, so authors can’t add a hazard or a temperature. The kit works the marks out itself, and I sent a data request for temperature, substance and display names to the team that owns the format. Authors can still show, hide or pin a label for a step, or replace its wording.

Placement took five attempts, from fixed pixels above the object’s pivot to an offset in world space that holds at any zoom. Leader lines were rejected because they looked like callouts.

The drag sequence

When the step opens, the object to move has only its outline and its label. Nothing yet says where it goes. The first click picks it up, and everything about the destination appears at once: a ghost at the landing pose, an arc to it, a ring on the landing spot and the destination’s label. The second click commits. On the ghost, the object settles into place. Anywhere else, it eases back to where it started and the cues go away. Either way the step resolves on the drop, so the student never has to tap the destination.

A bench of foam cups during a drag: the picked-up empty cup glows with a cyan outline, a translucent blue copy of it stands on the digital scale inside a cyan ring, and a curved line runs from the cup to the copy.
After the first click: the cup in hand is outlined, its ghost stands on the scale with a ring under it, and an arc joins the two.
A beaker of water with a pipette outlined in cyan above it. The step card reads ‘Tap the pipette until you reach 250 ml’, the beaker’s label reads ‘Water 248 ml’, two ‘+0.2 ml’ markers rise from it, and the time bar shows 00:04 of 00:10.
The one label with a number. In a pipette step the volume is the task, so the label shows it: Water 248 ml, on the way to 250. Each tap adds 0.2 ml.

The single-label model, derived hazard marks, per-step overrides for authors and the clearance around the interface ship in the customer release.

Setting a force

Letting students set the force by hand

Investigations often say ‘give the cart a gentle push’ or ‘crank the generator faster’. In the labs built so far, the student clicked the cart and the lesson decided how hard.

304Curriculum activities audited
46Steps asking for graded effort
22 / 24Numeric / qualitative only

I audited the curriculum before designing anything. Force accounted for 22 of the 46 steps, and just over half of the steps asked for a feel instead of a number. So the brief was one control with two readouts: a word when the lab says ‘gently’, and a number only when a real instrument is on the bench. Qualitative examples come first.

Seven designs, three kept

I built seven gesture designs as live prototypes and cut four:

Flick pad
A momentum sample. Hard to reproduce, and it has no direction.
Dial
Precise, but rotation in these labs is read from a bulb’s brightness or a needle’s swing, not in radians per second.
Draw and fling
The value is the release itself, so it can’t be locked and checked before it counts.
Draw and hold
A slider with a different look.

A separate wave widget went too. The procedures have no continuous wave: ‘amplitude’ is a ruler pulled back a few centimeters, and ‘frequency’ is a count of releases. Of the three that stayed, the drag-arrow sets a direction, the slider is read against a graduated scale, and the crank sets a rotation by hand.

The drag-arrow. The student clicks to anchor the arrow, moves to grow it and clicks again to fix it. Past the target the readout turns amber, and in range the arrow turns green. Amber means not yet, and red is kept for errors.
The force slider in word mode. Click the handle, move to set, click to lock. The readout names the force, Medium or Firm, against the step’s aim, and Confirm lights in range.

One sequence for every design

Click to start, move to set, click to lock. It works on a touchpad without holding a button down. A value that only passes through the range doesn’t enable Confirm, and there is no Reset button: to try again, the student makes the gesture again.

The crank. The student grabs it and circles to wind it up. The readout shows the spin in rad/s against the target, and Confirm lights in range.

What testing changed

  • The crank is a heavy spring-mass arm. A flywheel, a free-spinning marker and a cursor follower came first and failed. Reviewers called the spring version twitchy, so it was softened.
  • The force scale went from 50 N to 12 N, because the lessons stay between 1 and 10.
  • The client found the snap too strong, so its zone went from 10% to 5% of the range. The crank keeps 10%, because a turning hand needs the wider zone.
  • ‘Backwards’ became a reading, because ‘crank it backwards’ is an instruction in the curriculum. The step decides whether it is correct.
  • After the curriculum specialists’ review, the two-sided arrow for collisions got plain Left and Right labels and the full width. It replaced the dev team’s mount of two separate controls.

Where it stands

The three designs and the two-sided arrow ship in the customer release. The dev team wired them into the step engine and added a keyboard commit. Five investigations use the control, mostly in its qualitative mode.

The limit

In the release the student’s value gates the step: they have to land in range to move on, but the physics runs on the value the author wrote. By the client’s decision the kit owns the control and a documented boundary. Letting the student’s value drive the physics needs changes to the lesson format and the pipeline, which other teams own. Shaking and rubbing, two gestures from the audit, have no design yet.

Waiting

Waiting for the physics without leaving the experiment

Every run is computed on a server and played back, so every run starts with a wait. My first waiting state was a centered ‘please wait’ card over a faint wash, meant to stop stray clicks during the calculation. It also blocked orbit and zoom, which are the useful things to do while waiting. The client flagged it.

Where the signal could go

A corner badge
Collided with the microscope panel.
A chip where Continue appears
Missed calculations started by a drip or a device control.
The time-skip callout
Would have duplicated a surface the lab already has.
The middle of the time bar
Chosen: the student is already watching the bar, and it is on screen for every run.

The time bar keeps its frame, its place and the speed dial. Only its middle changes, to a spinner and the word ‘Calculating’. It appears after 2 seconds, so a quick run shows nothing, and once shown it stays at least 1.5 seconds, so it doesn’t flicker. Nothing covers the experiment.

Running

Calculating

Calculating · squeezed

Running, calculating, and calculating at a narrow width, in the same 530 × 56 frame with the speed dial in the same place.From the kit catalog

A reversal from live testing

I first kept Previous available during a calculation, as a way out. In live testing, a result that arrived after the student stepped back was applied to whichever step was on screen. Previous is now hidden for the two or three seconds a calculation takes.

What I took back

Taking back my own designs

The floating cockpit

I compared four screen layouts: a bottom dock, a side rail, a folded top and a floating cockpit, with each device control anchored beside its object. I chose the cockpit, and reversed it four days later. The floating controls took too much of the scene, moved unpredictably as the camera turned, and needed too many new rules. A stack replaced it: one device control at a time, at the bottom center, above the time bar.

A lab bench with the step card running across the top left of the screen, its progress shown as dots, and the time bar at the bottom.
The same bench with the step card as a smaller card at the left side of the screen, part way down.
The same bench with the step card centered at the top, a segmented progress strip in its header.
The same bench with the step card collapsed to a slim bar at the top center: the phase, the step count, progress dots and a small button.
Four compositions of the step card over the same lab: across the top, at the side, centered at the top with a segmented progress strip, and collapsed to a slim bar after a delay.

One way to move things

I made click, carry, click the only way to drag, and migrated 87 authored steps from press-and-hold. It uses the same sequence as the gesture controls and the same cues as the labels: the destination appears on the first click, and near the target the ghost turns bright green. The dev team built the carry itself.

Built in code

I built the layer I designed

The kit is the student-facing layer in code: about forty native web components in HTML, CSS and Canvas 2D, drawn over the Unity scene. Unity doesn’t report where an object is on screen or what hides it, so the kit works that out from positions and the camera. The labels and the camera’s safe zone depend on it.

Lab DS, the labs’ visual system, has 159 design tokens. The kit catalog runs on the production code, so a page that looks wrong means the product is wrong. The dev team and the client review against it.

159Design tokens
28Test files

Open the kit catalogEvery page loads the production CSS and custom elements.

Outcomes

What shipped, and what didn’t

In the customer release

  • Gesture control: arrow, slider, crank and a two-sided arrow
  • About forty device widgets in one family
  • Click, carry, click as the single way to place objects
  • Single active labels with derived hazard marks
  • Per-step label overrides for authors
  • Step card and progression
  • Time control and the calculating state
  • Camera safe zone, gesture framing and the table strafe
  • Microscope panel and smell descriptions
  • Liquid level marks
  • Button hints and the pickup ring
  • On/off toggle, merged into one control by the dev team
  • Lab DS

Not realized

  • The student’s value driving the physics
  • Shake and rub gestures
  • Background labels and the occlusion mask, parked behind a switch

Galileo is built by AAIC for Activate Learning. 3D lab scenes by the Galileo 3D team; pipeline, viewer and physics engineering by the Galileo dev team; curriculum review by Activate Learning’s specialists.

Student-facing UX, visual design and front-end: mine. 2026.