Skip to content
alkemist

← Blog

Eight inks and a board full of experiments

Turning the chosen Ubuntu and board direction into reusable math, code, charts, a model viewer, and an interactive specimen page.

The design studio answered the aesthetic questions: Ubuntu throughout, Ubuntu Mono for technical work, handwritten notes, annotations, several inks, and graph grids on by default. The next step was to make that language survive contact with real content.

The result is the specimen board at /test. It is a long page on purpose. A theme that looks good in a title must also work in a matrix, a data table, a code gutter, and a narrow form label.

An ink should keep its identity

Earlier board studies changed accent colors with the surface. We replaced them with eight fixed inks: cobalt, cyan, teal, fern, ochre, vermilion, rose, and violet. A category keeps its color when the board changes.

There is a useful constraint hiding here. No single color can reach normal-text 4.5:1 contrast against both #111 and #eee. We selected colors near a common relative luminance, checked every hex against both surfaces, and kept ordinary text neutral. The resulting inks exceed 3:1 on both boards; dark code surfaces let the same inks exceed 4.5:1 for syntax.

The palette documentation records the rules, and a generator writes the CSS and downloadable JSON from one source. The arithmetic follows WCAG’s contrast definition.

The eight fixed inks displayed on both whiteboard and blackboard surfaces.

Browser capture of the actual palette, September 8, 2026.

Build the authoring layer around good engines

We chose existing engines for the difficult rendering work and built the shared authoring and lifecycle layer around them:

Author writesEngine doesAlkemist supplies
AlkMath or dollar-delimited mathKaTeX typesettingShared fonts/options, MathML, build errors
AlkCode or a code fenceShiki tokenizationInks, captions, line highlights, copy
AlkChart with a CSV pathVega-Lite and Vega renderingPresets, grids, tables, lazy loading, theme updates
AlkModel with a GLB pathThree.js renderingOrbit controls, camera presets, poster, cleanup
AlkShaderWebGL2 fragment shadingA bounded interactive study, controls, pause behavior

The public names keep the Alk prefix. Heavy clients load when their figure approaches the viewport. Math and code are rendered at build time. Model and shader animation starts only when requested and stops doing work when offscreen.

Real examples, explicit provenance

The torus knot is an actual local GLB generated from deterministic geometry. The oscillator, component-count, and scalar-field CSV files are synthetic fixtures with repeatable source scripts. Chart downloads expose the same files that the client reads.

The page pairs these with a proof, an SVG diagram, a static image, code in four languages, MDX footnotes and task lists, and a local form with a real preview flow. This lets a design change be examined across content types instead of judged from one hero screenshot.

What this establishes

This is the first working set of scientific components, with their APIs documented. It does not make every 3D representation interchangeable: compressed assets, arbitrary NeRF checkpoints, splats, point clouds, and robot descriptions still need format-specific work. The shader is a fixed interactive study, not yet an arbitrary shader playground.

Implementation checks include strict Astro/TypeScript validation, real math/code compilation, malformed-TeX rejection, palette contrast tests, chart preset rendering, and deterministic GLB parsing. Browser interaction and deployment evidence are recorded in the repository’s docs/progress.md as they are completed.