tl;dr: Оказалось, что не только плошек, но и чего угодно ещё.
Расскажите о себе и сути проекта? Как появилась идея? Что вдохновило?
Всем привет, я Владлен, и я люблю заниматься всякой ерундой.
Два года назад я решил угореть по бонсай, и по плану первое худо-бедно приличное дерево должно появиться у меня ещё лет через пять (я уже в том возрасте, когда это не кажется чем-то странным). И как выяснилось, что угодно для бонсай найти в наших краях непросто. Включая плошки (горшки). Особенно если хочется конкретных форм и размеров. А даже если находишь плошку, часто под неё нет поддона.
Помимо этого в прошлом году я снова обзавёлся 3D-принтером, в очередной раз проклял все CAD'ы, в которые надо тыкать мышкой, и по совету из твиттера упоролся в OpenSCAD.
А ещё более 15 лет я занимаюсь веб-разработкой.
Короче говоря, это всё каким-то образом объединилось в моей голове в странную идею создания сервиса, который позволит сгенерировать плошки (а также поддоны и прочие нужные штуки типа дренажных сеточек), выбрав нужный дизайн и задав все необходимые размеры и параметры. После чего чего скачивается STL, который можно отправить на печать.
Да, когда я объяснял жене, кому это может быть интересно, я так и сказал: «Хорошо если человека три найдётся, которые одновременно интересуются и бонсай, и 3D-печатью».
Что вошло в прототип и сколько времени на него было потрачено?
От начала работы над непосредственно сайтом до релиза прошло ровно 7 дней. Но это не совсем честная оценка, потому что многие подготовительные работы проводились заранее.
- Модель первой тестовой плошки раздобыл из своих запасов.
- Разбирался с тем, как затолкать OpenSCAD в браузер и заставить его работать тоже в декабре. Это было не просто смело, а... ну вы поняли.
- Как любой уважающий себя разработчик, под проект я писал новый фреймворк, начатый также слегка заранее.
Так что суммарно можно предположить, что ушло до месяца.
Какой технологический стек вы использовали? Почему?
Фреймворк: Autobun!
Это сопутствующий проект, который я тоже когда-нибудь опубликую (чур имя не занимать). Если вкратце — фреймворк, похожий на Next.js первых версий. Но ещё легче и проще. Потому что мне хотелось что-то достаточно современное, но при этом почти полностью сведённое к старым добрым и тупым шаблонизаторам. В итоге получается фреймворк, в коде которого можно разобраться за полчаса (а начать писать с ним — за пару минут). Без современного некстового булшита и магии.
Под капотом — preact. Работает всё на базе Bun* (и от него неотделимо). Сейчас, к сожалению, пришлось притащить ещё одну зависимость в виде esbuild, но надеюсь уйти от этого со временем. И плагин с lightningcss, потому что CSS Modules в нужном мне виде из коробки пока не завезли.
*Bun — новый модный рантайм для JS, написанный на Zig, и в теории имеющий на борту почти всё, что может пригодиться для нормальной работы.
IDE: Cursor
Да, это не просто проект, это испытательный полигон для всего. Раньше я просто радовался копайлоту, а тут решил поэкспериментировать с Cursor и бОльшая часть самого проекта написана Claude 3.5 Sonnet. Включая всю вёрстку и подбор цветов (под моё нудное «Хочу чтобы дизайн был более "эко", поиграй с отступами и террактового добавь»).
Одного его гулять по проекту не отпустишь, но несколько недель он мне, думаю, сэкономил.
Рендеринг модели: Three.js
Всё круто, но уже есть жалобы от обладателей старых железок — из three.js выпилили фолбек на webgl первой версии.
cssmem
Ещё один мой микро-велосипед (на этот раз проверенный временем) для работы с CSS Modules в стиле БЭМ.
Почему акцентирую внимание на нём? Ну просто кроме three.js и cssmem зависимостей самого проекта больше и нет, так что почему бы и не написать.
OpenSCAD
Даже несмотря на то, что якобы он уже собран в WASM и есть даже прототип полноценного браузерного OpenSCAD, это всё равно страшно. Билды крайне нестабильны, найти работающий — та ещё задачка, а даже если работает — то часто медленно и периодически падает из-за каких-то приколов с округлениями.
Инфраструктура
Хотел хоститься на Hetzner, но тот меня забанил на этапе регистрации. Долго выбирал между Namecheap и Digitalocean. В итоге решил не рисковать и остановиться на последнем.
На сервере всё устроено очень просто в силу моей лени и нищенского дроплета:
- Всё через SSH.
- Обновления подтягиваются через git pull.
- Процессом сервера управляет systemd.
- Фронтендом выступает traefik на случай, если захочу разместить рядом что-то ещё.
Как вы запускались и искали первых пользователей?
Путём написания поста в Клуб :D
На самом деле вчера кинул ссылку в твиттер и на сайте побывало 1300 человек на момент написания сего поста. Пока всё, проекту два дня.
С какими самыми неожиданными трудностями пришлось столкнуться?
Openscad с wasm доставил больше всего боли, пожалуй. Куча проблем с самим бинарём. И с тем, чтобы его эффективно переиспользовать для нескольких рендерингов. Изначально он на каждый рендер загружал здоровенный .wasm заново, что я починил каким-то костыльным кэшированием блоба в памяти и подменой ссылки на него.
Кроме того я решил, что чем проще, тем проще (и лучше). И не стал заморачиваться с раздачей статики каким-то отдельным способом, свалив всё на Autobun. В итоге перед запуском понял две вещи:
- Не хватает кэширования. Благо работа с etag пилится в несколько строк.
- Тот самый здоровенный .wasm. Целых 13 мегабайт даже с кэшированием создают не самый приятный пользовательский опыт. В итоге для него лично появились отдельные строчки кода, позволяющие слать по сети gz-версию и ужать всё это безобразие где-то в 4 раза.
Сколько потратили и заработали? Есть идеи как это можно монетизировать?
- DO пока что показывает Estimated costs: $0.41.
- Плюс где-то $12 за домен.
- Можно ещё $20 за Cursor посчитать.
Про монетизацию думал. Можно делать «премиумные» модели. Можно ограничивать диапазон бесплатных параметров (бесплатно можешь сгенерить модель с заданными параметрами, для своих параметров — плоти).
Но это в первую очередь проект для фана, и наиболее вероятно, что он как родился бесплатновым, так бесплатновым и умрёт. Или перепрофилируется в генерацию чего-нибудь ещё.
Какие планы на будущее?
Это пока только MVP. В планах как доработки и фиксики, так и расширение возможностей.
Из важного на первое время:
- Оптимизации производительности, оно сейчас буквально в дев-режиме запущено.
- Разработка и добавление новых моделей поддонов, горшков и всяких ништяков.
Бонсайная тематика остаётся, но это скорее применимо для любого домашнего садоводства. Хотя в целом там уже можно на единственной модели нагенерировать что угодно, от плошки и тарелки до йо-йо и космической ракеты.
Бонусный уровень. Модели, которые успел нагенерить твиттер из того, что должно было быть плошкой
Модель с базовыми параметрами можете глянуть на сайте. Интереснее, когда люди пробуют менять параметры, доводя модель до безумия.
Непонятное яблоко: https://x.com/goodboy_nomore/status/1879679550889845024
Что-то инопланетно-мистическое: https://x.com/Remstam/status/1879529853902557331
Космические бонсаи бороздят просторы галактики:
https://x.com/michael___so/status/1879759566344532459
Внезапная тарелка:
https://x.com/webholt/status/1879789242626523501
Блин, по КДПВ подумал что ты научился генерить дизайн с помощью ИИ и как-то его описывать автоматически с помощью другого ИИ в Openscad :) Заманушечка получилась)))
Если это так и я ничего не упустил, то тогда вопрос, может быть опубликовать это дело на https://makerworld.com/en/makerlab/parametricModelMaker?from=makerlab в виде доступной для параметризации модели (как у тебя на сайте) ? Там еще бонусы (реальные деньги для покупок в их магазине) за скачивание пользователями дают.
Напомнило https://shapecastmolds.com/
Там чел занимающийся керамикой угорел по 3D печати, и сделал в итоге инструмент для генерации моделей из скетчей, чтобы делать формы для отливки керамики