Groselia
Соцсети, которые ведут себя сами
Моя роль
- Сооснователь
- Разработка
- Продуктовый дизайн и дизайн бренда
Описание
Groselia ведёт соцсети прежде всего для технологических стартапов, а также для компаний других отраслей и размеров: стратегия, дизайн, публикации, ответы на комментарии и отчёты — на всех каналах, с одной платформы.
Команда
Danilo ParmegianiСооснователь
Pedro CritchiСооснователь
Контекст
Я основал Groselia вместе с Pedro, вдвоём. Он отвечает за маркетинг, продажи и операции; я спроектировал бренд и продукт и построил платформу, на которой всё работает, — от базы данных до последней анимации. Пока продукт был self-serve, в нём зарегистрировались более 200 человек, а сегодня на нём работают контент и соцсети наших клиентов. В июне 2026 года мы привлекли pre-seed на R$100k от Link Vector — акселератора Link School of Business, которую я окончил, а через два месяца после пивота в сервис Groselia приносит больше R$15 000 в месяц.
Инструменты
- Codex
- Claude Code
- Figma
- Adobe tools
Стек
React
Next.js
TypeScript
Tailwind
Supabase
Frontier LLMs
Trigger.dev
Stripe
Vercel
Сроки
- 2025 — сейчас
В цифрах
- R$180k+
- годовой run rate
- 200+
- аккаунтов создано
- 350
- брендов настроено
- 9,700+
- commits
- 520+
- пул-реквестов
- 47
- edge-функций
Задача
Разработка перестала быть узким местом. Им стала заметность.
AI обрушил стоимость создания софта. Основатель без инженерного опыта теперь может выпустить продукт за выходные — и все остальные тоже. Дешевле не стало одно: добиться, чтобы его кто-то заметил. Дистрибуция — это непрерывная операция, а не задача: публиковать каждый день в восьми соцсетях, каждой из которых нужен свой формат, отвечать на каждый комментарий и разбираться в цифрах, которые каждое приложение считает по-своему.
Стартапы платят за это одним из трёх способов. Нанимают команду, которую пока не могут себе позволить, сшивают десяток инструментов, каждый из которых решает свой кусочек, или ничего не публикуют и платят ростом. Groselia существует, чтобы быть четвёртым вариантом.
Как мы сюда пришли
Groselia четыре раза меняла форму, прежде чем нашла себя. Каждый поворот сохранял то, что работало, и отбрасывал остальное.

Конец 2025 — февр. 2026
Argibee
AI-платформа для дизайна брендов. В конце 2025 года она появилась как прототип, а в феврале 2026-го стала настоящей компанией. Свой рынок она не нашла, но её движок бренд-китов стал основой всего, что было потом.

Апр. 2026
Моушн-видео
Groselia начиналась с лонч-видео в стиле Apple, сделанных из шаблонов After Effects. Я вручную проверил весь пайплайн, а потом понял, что до нужной планки качества он не масштабируется.

Июнь 2026
Pre-seed от Link Vector
Мы попали в Startup School от Link School of Business — 100-дневную программу для основателей, снятую как реалити-шоу (смотреть сезон). Она завершилась демо-днём, где я питчил Groselia со сцены, и нашим pre-seed на R$100k от Link Vector — акселератора Link School of Business, которую я окончил.
Авг. 2026
Lovable для маркетинга
Один разговор вместо формы: опишите кампанию, и Groselia её спланирует, напишет и опубликует. Чат-агент с инструментами, а не набор ботов.
Сент. 2026
SMM-менеджер
Клиенты не хотели, чтобы AI делал для них контент. Они хотели, чтобы их собственные фото хорошо публиковались, а на комментарии отвечали. Мы убрали генерацию и сосредоточились на ведении каналов.

Сейчас
Service as a software
Мы продаём работу, а не инструмент. Наша команда ведёт соцсети каждого клиента на платформе, и благодаря ей один человек справляется с тем, на что раньше нужно было агентство.
Строим публично
Мы с самого начала строили публично. Ещё во времена Argibee мы рассказывали о своём пути на YouTube — от запуска листа ожидания Argibee до первого видео, где показали Groselia. Остальная история, видео за видео, — на нашем канале.
Бренд
Я хотел, чтобы бренд Groselia был смелым: таким, чтобы люди останавливались и смотрели — на сайте, в приложении и в каждом посте в наших соцсетях. Где бы человек с ним ни столкнулся, бренд должен впечатлить, вызвать немного восхищения и желание нанять нас из-за того, что он только что увидел. И прежде всего он должен был потрясающе смотреться для технологических стартапов — экосистемы, частью которой мы являемся, и клиентов, для которых мы строим в первую очередь.
Весь бренд я спроектировал с помощью плагина Figma внутри Codex: логотип, типографику и то, как она соединяется с символом в правильных пропорциях, визуальный стиль, библиотеку SVG-иконок, текстовые стили и упорядоченную цветовую палитру. Каждое решение попадало на одну доску, с размерами, чтобы его можно было сравнить и оспорить.

Символ
Символ появился первым и остался. Три мягких лепестка, вращающихся вокруг центра, перешли из самой первой версии компании, и новый логотип строился вокруг него, а не поверх: его геометрию копировали и масштабировали, но никогда не перерисовывали.
Словесный знак
Словесный знак набран TT Commons Pro Bold строчными буквами и переведён в векторы, чтобы везде выглядеть одинаково. С родными интервалами он казался рыхлым рядом с символом, поэтому я сжал трекинг до −4%, сдвинув каждую букву влево ещё на 6,4 единицы при 160px. Звучит как мелочь, но слово сузилось с 564 до 520 единиц и стало читаться как единая форма.
Сетка из H
Всё измеряется в H — видимой высоте словесного знака — на сетке H/10. Так логотип масштабируется, и никому не нужно снова подбирать его на глаз.
Для вертикального логотипа я нарисовал шесть вариантов: три размера символа (1.50H, 1.75H, 2.00H) на два отступа (0.15H, 0.25H), и мы выбрали B: символ 1.75H, на 0.15H выше слова. Для горизонтального я сравнил отступы от 0.20H до 0.35H и остановился на символе 1.10H с отступом 0.35H.
Вертикальный логотип на построечной сетке. H — высота словесного знака; шаг сетки — H/10.
Горизонтальный
Символ 1.10H · отступ 0.35H
Вертикальный
Символ 1.75H · отступ 0.15H
Символ
Исходные пропорции, 0.93 : 1
Colour
The palette is fifteen colours, loud on purpose. But the logo only ever comes in four treatments: blue symbol with black text, blue with white, all black and all white. The other colours are grounds, never the symbol.
To prove that, I put the symbol and both lockups on twelve backgrounds, 24 studies each, and kept the ones where its silhouette survives. On blue grounds the symbol goes monochrome. Click a colour to copy it.
Типографика
TT Commons Pro справляется со всем: шесть начертаний от Light до ExtraBold, шкала из одиннадцати ступеней от 12 до 96px и настоящий курсив. Я перевёл на него все 688 текстовых слоёв в файле, так что брендбук, приложение и сайт теперь говорят одним голосом.
Основной шрифт
TT Commons
Pro
Иконка приложения
Иконка приложения — единственное место, где бренд становится объёмным: символ из фарфора, в несколько слоёв, освещённый сверху и слегка глянцевый. В одном из обновлений я уменьшил символ внутри на 10%, чтобы ему было свободнее в плашке. У неё есть и собственная связка со словесным знаком: плашка размером 1.5H.
Мир 3D-объектов
Вокруг логотипа живёт труппа 3D-объектов: сердце с глазами-пуговками, облачка чата, хештег, искорки. Это голос бренда на сайте и в наших постах, и они никогда не стоят на месте: парят, а на сайте реагируют на курсор. Эти тоже: толкните их или оттяните один и отпустите.








Neo doodles
Для всего плоского есть Neo, наш набор иконок: толстый чёрный контур, заливки из палитры и один белый блик. На сайте каждая иконка сначала выглядит как простая линейная иконка в белой плашке и превращается в свой дудл при наведении, а её части появляются по одной: диск выскакивает, полоски падают, блик прорисовывается. Это родные дудлы и анимация сайта, скопированные как есть. Наведите на любую.
Продукт
Всё в Groselia делается в одном чате. Вы пишете, что и когда должно выйти, а она планирует, публикует, отвечает на комментарии и рассказывает, что сработало. Работа приходит как один план, который одобряет владелец, а не как десяток экранов, которыми надо управлять.
Разговор, а не дашборд
Groselia начиналась как форма: выбери цель, заполни поля, получи кампанию. Никто не хочет заполнять формы о собственном бизнесе, поэтому теперь у каждого бренда вместо этого один разговор.
Вы открываете свой бренд и пишете. Спросите, что опубликовать на этой неделе, закиньте фото с телефона или напишите «ответь на вчерашние комментарии». Агент сначала смотрит, потом отвечает: ваш календарь, что сработало, память бренда.
Если ему что-то нужно от вас, он задаёт один короткий раунд вопросов, на которые вы отвечаете в одно касание. Затем предлагает один план: посты с датами и временем, ответы, любые изменения. Вы правите что хотите, одобряете и смотрите, как заполняется календарь.
Карточка здесь — настоящий чат, собранный в браузере из собственных токенов приложения. Попробуйте.
Спроектировано дважды: для владельцев, потом для нас
Первой аудиторией были владельцы малого бизнеса, которые сами ведут свои соцсети. Они не мыслят кампаниями, воронками или частотой публикаций; они думают: «что выложить на этой неделе?». Поэтому самым сложным было спрятать механику: онбординг в четыре вопроса, бренд-кит, заполненный по ссылке, календарь с перетаскиванием, каждый экран на семнадцати языках и удобный на телефоне.
Потом мы поняли, что клиенты не хотят управлять никаким инструментом, даже самым простым. Они хотели, чтобы работа была сделана. Так что главными пользователями стали мы. Один человек в нашей команде ведёт много брендов, и тому же приложению пришлось обзавестись мультибрендовыми рабочими пространствами, циклами, которые открываются встречей и закрываются отчётом, шагом одобрения для каждого поста и одним ящиком входящих для всех соцсетей. Клиенты по-прежнему заходят в приложение, но теперь там они наблюдают за работой, а не делают её.
ноябрь 2026 г.
Сделано так, чтобы читали агенты
Всё чаще первым читателем бренда или веб-страницы оказывается AI. Поэтому всё в Groselia написано для агентов так же, как для людей. Память бренда — это набор простых документов в Markdown: предпочтения, что можно и чего нельзя, факты о бренде. Агент читает их перед каждым ответом и сам редактирует четырьмя инструментами — так AI-ассистенты ведут собственную память. Люди открывают и редактируют те же самые документы в бренд-ките.
Insights работают через одно общее ядро, которое читают и дашборд, и агент, поэтому когда вы спрашиваете «что работает?», ответ берётся из тех же цифр, что вы видите. И сайт делает то же самое для ассистентов, которых люди спрашивают о нас: groselia.com отдаёт llms.txt, более длинный llms-full.txt и файл со сравнением, и всё это генерируется из одного источника фактов в коде, так что то, что AI говорит о наших ценах или безопасности, не может разойтись с сайтом.
Вовлечённость во времени
По неделям, последние 30 дн., по дате публикации
Ключевые функции
Бренд-кит по ссылке
Вставьте адрес сайта и подключите аккаунты. Groselia соберёт данные с сайта, прочитает ваши прошлые посты и сама заполнит логотип, цвета, шрифты, голос и аудиторию.
Один разговор
AI-агент с 41 инструментом пишет подписи к вашим медиа, подбирает время по вашим собственным данным о вовлечённости, читает метрики и готовит ответы, а затем собирает всё в план.
Календарь для восьми соцсетей
Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Threads и Reddit, каждая в родном формате, а прошлые посты импортируются, так что календарь никогда не пустует.
Ответ на каждый комментарий
Комментарии и личные сообщения из всех соцсетей в одном ящике входящих, с черновиками ответов голосом бренда, а всё деликатное откладывается для человека.
Аналитика простым языком
Охват, просмотры и вовлечённость по всем аккаунтам — с честностью о том, что каждая платформа отдаёт, а что нет, — и ответ на вопрос «что работает?».
Циклы и согласования
Работа идёт циклами. Каждый открывается встречей и закрывается отчётом, который AI пишет по цифрам, а каждый пост может ждать одобрения клиента.
Сделано с AI-агентами
Я построил Groselia, а моей инженерной командой были AI-агенты. Codex и Claude Code писали код, каждое изменение в своей ветке, а я его проектировал, ревьюил каждый пул-реквест и решал, что выходит в релиз.
А большинство промптов я не печатал, а надиктовывал с помощью Wispr Flow. Хороший промпт — это длинное подробное ТЗ, и голосом я мог выдавать его с той же скоростью, с какой думал.
Codex
Агент для кода
Claude Code
Агент для кода

Wispr Flow
Голосовой ввод
Сайт
Сайт — место, где бренд звучит громче всего. Я спроектировал и построил его на Next.js. Он на семнадцати языках и при регистрации передаёт язык каждого посетителя в приложение.
Первый экран, с которым можно играть
Пока страница загружается, логотип поворачивается, а затем появляется первый экран: 3D-объекты, которые парят, наклоняются вслед за мышью и разлетаются от курсора, и сцена при прокрутке, которая заканчивается фразой «Made for you».

Настоящее приложение, воссозданное в коде
Раздел «Inside your Groselia» показывает платформу такой, какая она есть: она воссоздана в коде по экранам самого приложения с демо-брендом.

Блог
Заметки о ведении соцсетей. Посты — это простые MDX-файлы, по одному на язык, без CMS, и у каждого своя лента и структурированные данные, чтобы поисковики и AI-ассистенты читали его правильно.

Форма, которая квалифицирует лиды
Каждая кнопка «Book a call» перед календарём открывает короткую форму: кто вы, где публикуетесь, что вам нужно и какой у вас бюджет. Каждый шаг сохраняется в нашу базу по ходу заполнения, так что мы видим даже недописанные ответы, а заполненная форма шлёт уведомление нашей команде в Slack.

Адаптивный, всегда
Каждая страница спроектирована и для телефонов, а не просто ужата под размер. Там, где нет наведения, секции оживают, когда доходят до середины экрана.



Инженерия
Архитектура
Платформу я построил сам, а AI был моим напарником. Приложение — на React и Vite, лендинг — на Next.js, и оба работают на одном проекте Supabase: Postgres с row-level security, авторизация, realtime и хранилище, плюс 47 edge-функций. Всё медленное или запланированное выполняется в Trigger.dev, соцсети подключены через один API публикации, а Stripe отвечает за тарифы, карты и бразильский boleto.
Есть ещё MCP-сервер и плагин для Codex, так что Groselia можно пользоваться прямо из AI-агента: те же бренды, посты и черновики, но в виде инструментов.
Где используется
Ядро
За кулисами
Приложение, сайт и MCP-сервер размещены на Vercel.
Наведите курсор или нажмите на блок, чтобы увидеть, что он делает и с чем связан.
Путь поста
Лучший способ понять, как всё связано, — проследить путь одного поста: от фразы в чате до его цифр в Insights. Переключайте шаги сами или включите автовоспроизведение.
Веб-приложение
Владелец просит
«Опубликуй фото урожая в пятницу, в Instagram и LinkedIn». Сообщение уходит в edge-функцию агента, которая стримит ответ обратно.
Агент
Агент работает на лучших моделях рынка — от Anthropic, OpenAI и других провайдеров — как одна стриминговая edge-функция с циклом вызова инструментов. У модели 41 собственный инструмент плюс веб-поиск и загрузка страниц, до восьми шагов за ход. Сложной частью никогда не была модель. Сложно было сделать так, чтобы агент всегда знал, что правда прямо сейчас.
Поэтому на каждом ходу, ещё до того как модель увидит сообщение, функция заново собирает контекст из базы: дату и время в часовом поясе владельца, документы памяти бренда, живой календарь, открытые планы, загруженные документы и скользящее саммари старых сообщений. Стабильная часть промпта кешируется на час; эта — никогда, поэтому она не может устареть.
Остальное определили два правила. Всё публичное или необратимое попадает в план, который одобряет владелец, и никогда не уходит напрямую. И пост существует, только если его создал инструмент на этом ходу — это положило конец временам, когда агент описывал работу, которую не сделал. А ещё агент не привязан к одной модели: когда модель поменьше и подешевле стала достаточно хорошей, я перевёл чат на неё, чтобы снизить стоимость одного диалога.
Контекст, собираемый заново на каждом шаге
Вызовы инструментов
План ждёт одобрения
Неделя урожая: 3 поста, 4 ответа
// Volatile block: time + memory + live calendar + active plans + rolling summary. // Rebuilt each turn (never cached) so the agent always sees current state. const volatileSystem = () => { const parts = [ nowBlock, renderMemories(memories), renderCalendar(calendar, todayISO), renderPlans(plans), ] if (documents.length) parts.push(renderDocuments(documents)) if (rollingSummary) parts.push(`STORY SO FAR (summary of earlier messages in THIS conversation):\n${rollingSummary}`) // … then a line for each of the brand's other conversations return parts.join('\n\n') }
Модель данных
Около 55 таблиц в нескольких понятных группах. У рабочего пространства есть участники и бренды; всё остальное привязано к бренду, поэтому row-level security везде отвечает на один вопрос: является ли этот человек участником этого бренда?
Кто
- Рабочие пространства
- Участники
- Роли в брендах
- Профили
Бренд
- Бренды
- Цвета, шрифты, логотипы
- Продукты и люди
- Документы памяти
- Документы бренда
Чат
- Диалоги
- Сообщения
- Планы
- Пункты плана
Календарь
- Посты
- По одному на соцсеть
- Метрики постов
- Комментарии к постам
Каналы
- Подключённые аккаунты
- Ежедневные метрики аккаунтов
- Настройки каналов
Входящие и циклы
- Ветки входящих
- Входящие сообщения
- Черновики ответов
- Циклы
- Отчёты по циклам
Всё, что ниже «Кто», несёт id бренда; row-level security проверяет его при каждом чтении и записи.
Надёжность и безопасность
Groselia публикует в настоящие аккаунты, поэтому самые дорогие сбои — пост, ушедший дважды, или пост, который тихо так и не вышел. Большая часть инженерной работы — именно здесь.
1Двойное одобрение срабатывает один раз
Исполнитель планов забирает план, а затем каждый пункт условным обновлением, и каждый ключ идемпотентности строится из собственного id пункта. Двойной клик или повторный запрос просто повторяет прежний результат, а не публикует пост ещё раз.
2Вебхуки подписаны и переигрываются
Каждая доставка от API публикации должна нести валидную подпись HMAC. Обработчики идемпотентны, потому что доставки могут приходить больше одного раза, а отдельная задача каждые десять минут переигрывает пропущенные события.
3Отказ до постановки в очередь
Один общий файл правил описывает, что принимает каждая соцсеть (Instagram нужны медиа, YouTube — видео, в Facebook нельзя смешивать). Планировщик проверяет его до того, как что-то попадёт в очередь, и отклонённый пост возвращается как «Ошибка» с причиной, а не висит в календаре как «Запланирован».
4Доступ проверяется при каждом вызове
Row-level security в Postgres, проверка роли в каждой edge-функции и доступ к MCP через OAuth с PKCE — с ограничением по бренду и по действию, отзывается с одной страницы.
Какое-то время моё локальное приложение и боевое использовали одну продакшн-базу, и однажды миграция, запущенная раньше деплоя, опустошила живую страницу Brand Kits. С тех пор работа над бэкендом сначала идёт в ветке Supabase и сливается в продакшн вместе с кодом, которому она нужна.
Качество и процесс
Около 1000 тест-кейсов в 140 тестовых файлах покрывают приложение, MCP-сервер и edge-функции. Некоторые проверки появились потому, что однажды что-то сломалось: тест на паритет валит сборку, если в каком-то из 17 языков не хватает ключа, а наборы тестов базы для MCP работают на синтетических данных и в конце откатываются.
У агента есть свои эвалы. Один задаёт живому агенту фиксированный набор вопросов об эффективности бренда, каждый в новом диалоге, и проверяет, что агент прочитал Insights за правильный период, а в ответе те же цифры, что показывает страница Insights.
Один человек выпустил 520+ пул-реквестов, относясь к AI-агентам как к команде. Каждое изменение получает свою ветку в своём git worktree, поэтому Claude Code и Codex могут работать над несколькими задачами сразу, не мешая друг другу. Каждый прогоняет тесты и проверку типов, открывает небольшой пул-реквест, и ничего не сливается, пока я это не прочитаю.
Технические сложности
Каждая выглядела как баг в интерфейсе, а оказывалась чем-то глубже: формой стрима, меткой времени, тем, что соцсеть реально отдаёт, часами.
Генерация, которая ощущается живой · Realtime
Генерация месяца постов выглядела так: спиннер, а потом сразу двенадцать постов. Казалось медленно, но проблема была не в модели, а в гранулярности.
Я перевёл вывод модели на JSON Lines и стал стримить его, вставляя каждый пост в момент, когда закрывается его строка. Календарь подписан на изменения Postgres через Supabase Realtime и сначала рисует заглушки, так что посты печатаются сами, один за другим.
То же ожидание теперь похоже на то, как смотришь на чью-то работу.
Две метки времени, которые никогда не совпадали · Данные
Supabase предупредил, что у базы вот-вот закончится дисковый IO. С чтением всё было в порядке. Что-то перезаписывало одни и те же строки: 344 тыс. вставок, чтобы хранить 83 тыс. сообщений.
Синхронизация входящих сравнивала сохранённую метку времени с той, что читала обратно. Postgres возвращал её как +00:00, а мы записывали как Z, поэтому каждый диалог выглядел изменённым и при каждом проходе скачивался заново. Сравнение моментов времени вместо строк всё исправило.
export function sameInstant(a: string | null | undefined, b: string | null | undefined): boolean {
if (a == null && b == null) return true;
if (a == null || b == null) return false;
if (a === b) return true;
const ta = Date.parse(a);
const tb = Date.parse(b);
return Number.isFinite(ta) && Number.isFinite(tb) && ta === tb;
}Вставок, чтобы хранить 83 тыс. сообщений
344 тыс.→одна на новое сообщение
Диалогов, перечитываемых за проход
все→только изменённые
Лишние записи прекратились, а истории входящих, которые никогда не досинхронизировались, впервые загрузились полностью.
Ноль — не всегда ноль · Аналитика
Наш провайдер аналитики отдаёт одну и ту же структуру для всех соцсетей и заполняет нулём всё, о чём сеть не сообщает. У Instagram «было» ноль кликов на каждом посте. Графики вежливо врали.
Реестр метрик по платформам: он фиксирует, что каждая сеть действительно отдаёт, при загрузке заменяет всё остальное на null и позволяет каждому графику честно показать, упростить или скрыть метрику.
Аналитика по восьми соцсетям, которая никогда не показывает число, которое никто не измерял.
Разлогинен из-за спешащих часов · Авторизация
Моего сооснователя выкидывало из аккаунта сразу после входа: пятнадцать обновлений токена в секунду, а потом лимит запросов. Больше ни у кого это не воспроизводилось.
Часы на его компьютере спешили больше чем на час, поэтому каждый свежий токен выглядел просроченным. Я обернул хранилище сессии так, чтобы при записи сессии срок действия заново привязывался к локальным часам.
Обновлений токена в секунду
15→0
Вход работает при любых часах на устройстве, а консоль сообщает, если они сбиты.
Выводы
Вкус — это ров
Когда AI делает разработку дешёвой, выпускать продукты может каждый, и большинство из них выглядит одинаково. Дефицитом остаётся суждение: понимать, что выкинуть, каким должен ощущаться экран, когда анимация уже лишняя. Для команды из двух человек, которая никого не перетратит, вкус — это то, благодаря чему Groselia выглядит и работает как нечто гораздо большее, и это единственное, что я никогда не отдам модели.
Продавайте результат, а не инструмент
Никто не хотел управлять маркетинговым софтом, каким бы хорошим он ни был. Люди хотели, чтобы их видели. Продажа работы вместо приложения сделала продукт важнее, а не наоборот: он стал движком, на котором мы работаем каждый день, поэтому каждая шероховатость была исправлена.
Контекст важнее хитрости
Агент становился лучше, когда знал больше, а не когда промпт становился умнее. Живой календарь, память и открытые планы на каждом ходу, плюс правило спрашивать, прежде чем действовать, дали больше, чем любое обновление модели.
AI меняет размер команды
Когда агенты параллельно пишут большую часть кода, моя работа сместилась к тому, чтобы решать, что строить, ревьюить каждое изменение и держать планку высокой. Один человек теперь может вести то, на что раньше нужна была команда, — пока этот человек остаётся редактором.


