Дж... работает над новым языком программирования во время шестинедельного батча в Recurse Center. Задача — создавать процедурные часы. Первый прототип перерос во второй, и получился визуальный редактор, где вместо кода — узлы и стрелки.
В основе лежит простая математика. Есть квадратный холст с кругом радиуса ρ. Векторы — это время: секунды, минуты, часы. Векторы превращаются в скаляры: нормализованное скалярное произведение, длина, горизонтальная и вертикальная проекции. Скаляры можно складывать, вычитать, умножать и делить. Векторы — складывать, вычитать, поворачивать и умножать.
Дальше идут «глифы» — видимые элементы. Солнце, луна и звезда появляются в координатах вектора, линия соединяет два вектора. «Хэбитаты» — это композиции, которые красят холст целиком: трава, деревья, туманность, мета-трейс, яйцо, фокус (иллюминатор), мох. Параметры хэбитатов меняются от векторных входов.
В редакторе есть настройки для всей композиции: циклы в день, часы на цикл, базовая глубина и скорость дыхания, толщина линий, тема (ambiance, mono, contrast, cividis, tri, botanical), цвета фона и линий, частота кадров.
Редактор называется Loom — он держит композицию из узлов и стрелок. Weave компилирует это в скетч p5.js в превью-iframe. Любое изменение перезапускает часы. Готовые часы скачиваются как самодостаточный HTML-файл, который работает офлайн.
Технический стек: Svelte 5 с рунами и сниппетами, TypeScript со svelte-check и ESLint, Vite для сборки, Svelte Flow для графа узлов, p5.js для рендера. Автосохранение, история отмены и позиции хранятся в localStorage — всё в браузере, никакого бэкенда.
Интерфейс почти без слов: кнопки с сигналами, ручные иконки на узлах. Есть отладка — переключатель ⌖ показывает ползунок, который проматывает весь день, и подсвечивает выбранные узлы. Примеры часов добавлены после фидбека от IndieWeb-сообщества, панель слоёв ещё в разработке.
Заголовок редактора использует символы Ǝ (there exists) и ∋ (such that) — сторона редактирования и сторона рендера. Итоговый код доступен на te-st.ing, там же можно собрать свои часы и экспортировать.