Design → simulate → verify → print / in the browser

Build the mechanism.Show the reasoning.

Hologram is a browser-based parametric CAD and simulation workspace where one loop closes: design the mechanism, simulate it, verify what it actually did, and export the parts to print. Nothing has to leave for another program in the middle — and the model at the end is one you can hand someone to orbit without installing anything.

04 / CURATEDGenerated assemblies
READ / ONLYInspectable by design
01 CM / UNITOne spatial convention
01 / THE LOOP

One loop, and it closes.

These four stages usually live in four programs, with a file handed across every border. Here the same session designs the mechanism, simulates it, verifies what it actually did, and exports the parts to print — and every stage of it is reachable by an agent, over the tool surface this app already serves.

01

Design

Sketches, feature trees and a parametric generator registry. A generator node stores the recipe, not the mesh, so changing a tooth count re-cuts the teeth.

02

Simulate

Joints, motors and couplings on a real rigid-body engine, advanced in fixed 1/60 s ticks from a paused transport so a repeat run is comparable to the first.

03

Verify

Drive the mechanism and read what it actually reached, not what it was asked for. The gap between those two numbers is the whole point.

04

Print

Preflight the part against the checks a slicer would raise afterwards, then export the STL in millimetres.

Each stage feeds the next without an export-and-reimport in the middle, which is why a verification result can send you back to a parameter rather than back to the start.

02 / WHAT IS ACTUALLY DIFFERENT

Ten claims, each with a name you can check.

Every claim below names the thing that makes it true — an MCP tool for the instruments, a module path for the surfaces you drive by hand. The names are not decoration: a test resolves each one against this app itself, so a claim whose backing is renamed or deleted turns this page red rather than turning it into a lie.

THE INSTRUMENTS

Four measurements that report what happened.

Each one is reachable over the tool surface this app already serves, and each names the tool that makes it true.

01simJointSweep

A driven-sweep instrument, not a hand-rolled loop.

Drive one joint across a range, settle at every step, and get back the angle the mechanism actually reached — in one call.

How it is true

The error it reports is signed, so a joint drooping under load comes back negative against a positive sweep rather than clamped to zero.

02simExportSignals

Your run leaves in a format your own tools read.

Export a simulation run as CSV, TSV or channel-major JSON, so the analysis can happen in MATLAB, Octave or Python instead of here.

How it is true

By default the rows are exactly the timestamps recorded — no resampling and no interpolation, because an exporter that quietly resampled would be a trap.

03urdfExport

URDF with inertia computed from the geometry.

Export the scene as a ROS-standard robot description in SI units, with a real inertial block on every link.

How it is true

Mass, centre of mass and the full inertia tensor about that centre — products of inertia included, parallel-axis composed across welded multi-body links — are computed from the actual geometry, not typed in.

04designPreflight

Print preflight against a real printer bed.

Ask "can I print this?" before exporting, and get manifoldness, thin walls, overhang fraction and bed fit back as an advisory verdict.

How it is true

The beds are named presets — ender3, prusa-mini, prusa-mk4, bambu-x1c, bambu-a1-mini, ultimaker-s5 — and every number comes back in millimetres, the units the slicer will see.

AND A PERSON CAN DRIVE IT

Six more, and a pointer is enough to reach them.

Rounds 34 and 35 gave the loop a mouse. Where a gesture and a tool call do the same job there is one implementation, and a suite that drives both paths and compares them — so the hand path cannot drift into a second, worse engine while nobody is looking.

05shared/sketch/stroke-fit.js

Draw it with a mouse, and the fitter is allowed to say no.

Sketch a stroke freehand and get ordinary sketch entities back — lines, arcs and circles, straightened under an explicit tolerance rather than traced sample for sample.

How it is true

A segment that satisfies neither the line test nor the arc test comes back as its own raw points, tagged as a polyline and carrying a reason that names the tolerance it missed. A beautifier that always returns something clean is lying whenever the stroke was not.

06js/sketch/sketch-extrude.js

The extrude under your cursor is the extrude the agent runs.

Click a closed loop and watch it land in the 3D scene as a solid, down the same feature-tree pipeline the tool surface calls — the pointer got a path, not a second implementation.

How it is true

The suite runs the real tool handler in-process and compares the baked vertex buffers byte for byte, on the explicit-loop, auto-detected and circle branches alike. Not one mesh triangle is authored on the browser side.

07js/design-studio/scene-tree-ops.js

Drag into a set, and the tree refuses what the server would.

Reparent by dragging and turn a selection into a set, with an illegal drop greyed out under the cursor instead of failing after the round trip.

How it is true

Every planner verdict is checked against the real mutation the agent posts — the outcome, and which refusal fires first. The two places the tree is deliberately stricter than the server are asserted as divergences, so neither can be mistaken for parity.

08shared/checkpoints/checkpoint-ops.js

Checkpoints exist once, for both callers.

Save, list, restore and delete a scene checkpoint from the panel — four of the five operations the tool surface exposes, and a restore is one undo step.

How it is true

The tool handlers and the browser routes are thin wrappers over a single implementation, so parity is structural rather than asserted: the file a route writes and the file a tool writes are byte-identical, and the suite pins exactly that.

09shared/prefs/workspaces.js

The room you work in is a thing you can name and switch.

Capture the current quick actions, layout, view, toolbars and appearance as a named workspace, then move between arrangements without rebuilding one by hand.

How it is true

A switch writes those five keys and the active-workspace marker in one patch, so the switch and the arrangement it switched to land together or not at all — half an applied workspace is not a state this can reach.

10server/library/seed-items.js

A parts library that tells you which of its numbers it trusts.

Six motor presets — two steppers, a brushed DC, two gearmotors and a hobby servo — each a self-contained group of housing, shaft, the revolute joint between them and the motor entity bound to that joint.

How it is true

One of the six is quoted from the design table in this repo. The other five are external figures this repo has not accepted, and they say so where a reader would see it: a RATIFY-ME tag on the item, and the words in its own description. Every derived quantity is computed from the datasheet inputs rather than typed.

What this page does not claim

Sweep angles, exported signals, inertia tensors and preflight numbers are measurements. Geared drive torque is not one of them: r32 measured a coupled motor delivering 2.5x its own declared stall torque, and the structural cause is written down in docs/FINDING-r32-t3-root-cause.md. URDF effort and velocity limits are placeholders the format requires, commented as such in the file — nothing here tracks a real torque or speed rating yet.

03 / THE WORK

Don't take the pitch on trust.

These are not screenshots. Each card opens a real generated .holo bundle in the read-only viewer, ready to orbit, frame, inspect, and share.

Curated sample catalogue·· / READING

Reading the curated sample catalogue.

CATALOGUE / READING

Opening the instrument case.

The rest of the page is ready while the part list is read.

04 / FROM SCREEN TO BENCH

A gearbox has to leave the viewport.

The useful story is the entire loop: parameters chosen, tooth geometry solved, printable clearances called out, parts made, and motion finally earned on the bench.

GeneratePrintAssembleDrive
01Disjoint worktree lanesisolated
02Hermetic verificationevidenced
03Review-gated mergesinspected
04Named judgement callsauditable
06 / HOW IT WAS BUILT

The process is part of the product.

Hologram is built by a mixed agent fleet working under one rulebook: narrow file ownership, tests that do not borrow a live app, and logs that separate what was verified from what was assumed. The operating model is not backstage trivia. It is the engineering story.

06Reviewed rounds
80Agent lanes run
96%Approved on review

Rounds 15 to 19b, graded by the review at review time — never self-graded. Three lanes were sent back for rework; none of the eighty shipped unreviewed.

Read the build story
07 / WHAT IS NOT HERE YET

A public playground is not scheduled.

There is deliberately no hollow button here, no date, and no list to join. Hologram is an application you run; whether a public surface ever appears is an open decision, and this page will not pretend that decision has been made.

Undecided