Groselia
自己运转的社交媒体
我的角色
- 联合创始人
- 工程
- 产品和品牌设计
简介
Groselia 为科技创业公司(也为其他行业和规模的公司)运营社交媒体:策略、设计、发布、回复评论和数据报告,覆盖所有渠道,全在一个平台上完成。
团队
Danilo Parmegiani联合创始人
Pedro Critchi联合创始人
背景
我和 Pedro 两个人创办了 Groselia。他负责市场、销售和运营;我设计了品牌和产品,并搭建了它运行的平台,从数据库到最后一个动画。在自助使用阶段,有超过 200 人注册使用,如今它运转着我们客户的内容和社交媒体。2026 年 6 月,我们从 Link Vector 拿到了 R$100k 的 pre-seed 融资,它是 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 年至今
挑战
构建不再是瓶颈。被看见才是。
AI 让做软件的成本一落千丈。一个没有工程背景的创始人,现在一个周末就能上线一款产品,其他人也一样。没有变便宜的,是让别人注意到它。分发是一项持续的运营,而不是一个任务:每天发帖,八个平台各要各的格式,回复每一条评论,还要读懂每个应用口径都不一样的数字。
创业公司为此付出代价的方式有三种:雇一个现在还养不起的团队;把十几个各管一摊的工具拼凑在一起;或者什么都不发,用增长来买单。Groselia 就是为了成为第四种选择。
一路走来
Groselia 换了四次形态,才找到今天的样子。每一次转向都留下了有用的,扔掉了其余的。

2025 年底 – 2026 年 2 月
Argibee
一个 AI 品牌设计平台。它在 2025 年底以原型起步,2026 年 2 月成为一家真正的公司。它没找到自己的市场,但它的品牌套件引擎成了之后一切的骨架。

2026 年 4 月
动态视频
Groselia 最早是用 After Effects 模板做苹果风格的发布视频。我亲手把整条流程验证了一遍,然后发现它没法在保证质量的前提下规模化。

2026 年 6 月
Link Vector 的 pre-seed 投资
我们加入了 Link School of Business 的 Startup School,一个为期 100 天、以真人秀形式拍摄的创始人项目(观看这一季)。项目以一场 Demo Day 收尾,我在台上路演了 Groselia,我们也拿到了 pre-seed:来自 Link Vector 的 R$100k 投资,它是 Link School of Business 的加速器,也是我的母校。
2026 年 8 月
营销界的 Lovable
用一场对话代替一张表单:描述你的营销活动,Groselia 来规划、撰写并发布。一个带工具的聊天智能体,而不是一堆机器人。
2026 年 9 月
一位社交媒体经理
客户并不想让 AI 替他们做内容。他们想要的是自己的照片被好好发出去,评论有人回。我们砍掉了生成功能,专心把渠道运营做深。

现在
服务即软件
我们卖的是工作成果,不是工具。我们的团队在平台上运营每个客户的社交媒体,让一个人就能干过去一整个代理公司的活。
公开构建
我们从一开始就公开构建。还叫 Argibee 的时候,我们就在 YouTube 上分享这段历程,从 Argibee 候补名单上线,到第一次展示 Groselia 的视频。后面的故事,一集一集都在我们的频道上.
品牌
我希望 Groselia 的品牌足够大胆:在官网、在应用里、在我们社交媒体的每一篇帖子里,都能让人停下来多看一眼。无论人们在哪里遇到它,都应该被打动,生出一点欣赏,并因为刚刚看到的东西而想要雇用我们。最重要的是,它必须让科技创业公司觉得惊艳,因为那是我们身处的生态,也是我们最先服务的客户。
整个品牌我都是在 Codex 里用 Figma 插件设计的:标志、字体以及它和符号按正确比例的组合、图像、SVG 图标库、文字样式和一套有条理的色板。每个决定都放在同一块画板上,量好尺寸,方便比较和争论。

符号
符号最先诞生,也一直留了下来。三片柔和的花瓣围绕中心旋转,它从公司最早的版本一路沿用至今,新标志是围绕它而建,而不是盖过它:它的几何形状只被复制和缩放,从未重画。
文字标志
文字标志用的是 TT Commons Pro Bold,小写,转成矢量轮廓,在哪里渲染都一样。按默认字距放在符号旁边显得松散,所以我把它收紧到 −4% 字距:在 160px 下,每个字母额外左移 6.4 个单位。听起来微不足道,但它让整个词从 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
应用图标
应用图标是品牌唯一走向 3D 的地方:瓷质的符号,层层叠叠,光从上方打下,带一点光泽。在后来一次更新中,我把里面的符号缩小了 10%,让它在方块里有呼吸感。它还有一个和文字标志搭配的专属组合,方块为 1.5H。
一个 3D 物件的世界
标志周围住着一群 3D 小物件:长着晃动大眼睛的爱心、聊天气泡、井号、闪光。它们是品牌在官网和帖子里的声音,而且从不安静:它们会漂浮,在网站上还会跟着光标做出反应。这里的也一样:推它们一把,或者把一个拉回来再松手。








Neo 涂鸦
所有扁平的东西交给 Neo,我们的图标集:粗黑描边,用色板里的颜色填充,再加一道白色高光。在官网上,每个图标起初都是白色小方块里的普通线条图标,鼠标悬停时变成涂鸦,各个部件一个接一个出现:圆盘弹出,条形落下,高光描出。这些就是官网自己的涂鸦和动画,原样搬了过来。悬停一个试试。
产品
在 Groselia 里,一切都靠在一个聊天框里打字完成。你写下要发什么、什么时候发,它就去排期、发布、回复评论,并告诉你什么效果好。工作以一份方案的形式交到所有者手里等待批准,而不是一打需要操作的界面。
一场对话,而不是一个仪表盘
Groselia 最初是一张表单:选个目标,填好字段,得到一个营销活动。没人想为自己的生意填表,所以现在每个品牌都只有一场对话。
打开你的品牌,开始打字。问它这周该发什么,从手机里拖几张照片进来,或者写一句“回复昨天的评论”。智能体先看再答:你的日历、过往表现、品牌的记忆。
需要你提供信息时,它会问一轮简短的问题,你点一下就能回答。然后它提出一份方案:带日期和时间的帖子、回复、各种改动。你想改哪里就改哪里,批准之后,看着日历一点点填满。
这里的卡片就是真正的聊天界面,用应用自己的设计令牌在浏览器里重建。尽管试试。
设计了两遍:先为店主,再为我们自己
第一批用户是自己打理社交媒体的小商家老板。他们不会用营销活动、转化漏斗或发布节奏来思考;他们想的是“这周发点什么?”。所以难点在于把机器藏起来:四个问题完成上手,贴个链接就填好品牌套件,可以拖拽的日历,每个界面都有十七种语言,在手机上也好用。
后来我们发现,客户根本不想操作任何工具,再简单也不想。他们想要的是活被干完。于是我们自己成了主要用户。我们团队里一个人负责很多品牌,同一个应用就得长出多品牌工作区、以会议开场并以报告收尾的周期、每篇帖子的审批环节,以及一个汇总所有平台的收件箱。客户依然会登录,但现在应用是他们看我们干活的地方,而不是他们自己干活的地方。
2026年11月
为智能体阅读而构建
越来越多时候,一个品牌或一个网页的第一位读者是 AI。所以 Groselia 里的一切,既是写给人看的,也是写给智能体看的。品牌的记忆是一组普通的 Markdown 文档:偏好、该做和不该做的事、品牌事实。智能体在每次回复前都会读它们,并用四个工具自己编辑,就像 AI 助手管理自己的记忆那样。人们在品牌套件里打开和编辑的,也正是这些文档。
数据洞察走的是同一个共享核心,仪表盘和智能体都从这里读取,所以当你问“什么效果好?”时,答案来自你看到的那些数字。官网对那些被人们问到我们的 AI 助手也是如此:groselia.com 提供一个 llms.txt、一个更长的 llms-full.txt 和一份对比文件,全部由代码里的同一个事实来源生成,因此 AI 关于我们价格或安全性的说法,不会和网站产生偏差。
互动趋势
按周统计,最近 30 天,按发布日期
核心功能
贴个链接就有品牌套件
粘贴一个网站,连接你的账号。Groselia 会抓取网站、读取你过去的帖子,自动填好标志、颜色、字体、语气和受众。
一场对话
一个拥有 41 个工具的 AI 智能体,会给你的素材写文案,根据你自己的互动数据挑选时间,读取数据并起草回复,然后把这一切打包成一份方案。
覆盖八个平台的日历
Instagram、LinkedIn、TikTok、YouTube、X、Facebook、Threads 和 Reddit,每个都用原生格式,过去的帖子也会导入,日历永远不会是空的。
每条评论都有回复
所有平台的评论和私信都在一个收件箱里,回复用品牌的语气起草,任何敏感内容都留给真人处理。
用大白话讲的数据洞察
所有账号的触达、播放和互动,坦诚说明每个平台提供什么、不提供什么,还能回答“什么效果好?”。
周期与审批
工作按周期进行。每个周期以一次会议开场,以一份 AI 根据数据撰写的报告收尾,每篇帖子都可以等客户批准后再发。
用 AI 智能体打造
我把 AI 智能体当作我的工程团队来打造 Groselia。Codex 和 Claude Code 写代码,每个改动都在自己的分支上;而我负责设计、审查每一个合并请求,并决定哪些内容上线。
我的大部分提示词是用 Wispr Flow 说出来的,而不是打出来的。好的提示词是一份又长又详细的需求说明,用说的,我能以思考的速度把它交代清楚。
Codex
编程智能体
Claude Code
编程智能体

Wispr Flow
语音输入
官网
官网是品牌放开嗓门的地方。我用 Next.js 设计并搭建了它。它有十七种语言,访客注册时,还会把他们的语言一并交给应用。
一个可以把玩的首屏
页面加载时标志旋转登场,然后是首屏:漂浮的 3D 道具,会随鼠标倾斜,被光标推来推去,还有一段滚动场景,最后落在“为你而生”。

真实的应用,重建一遍
“走进你的 Groselia”按原样展示平台,用代码根据应用自己的界面和一个演示品牌重建而成。

博客
关于运营社交媒体的笔记。文章就是普通的 MDX 文件,每种语言一个,不用 CMS,每篇都有自己的订阅源和结构化数据,让搜索引擎和 AI 助手能正确读懂。

能筛选潜在客户的表单
每个“预约通话”都会在日历之前先弹出一张简短的表单:你是谁、在哪里发帖、需要什么、预算多少。每一步都会随填随存进我们的数据库,所以就连填了一半的答案我们也能看到,表单填完后还会在 Slack 上通知我们团队。

始终响应式
每个页面都专门为手机设计过,而不只是缩小了事。在没有悬停的地方,各个区块会在滚到屏幕中间时“醒来”。



工程
架构
平台是我自己搭的,AI 是我的搭档。应用用 React 和 Vite,官网用 Next.js,两者都建在同一个 Supabase 项目上:带行级安全的 Postgres、认证、实时和存储,再加 47 个 Edge Functions。慢的或定时的任务跑在 Trigger.dev 上,社交平台通过一个统一的发布 API 接入,Stripe 负责套餐、银行卡和巴西的 boleto。
另外还有一个 MCP 服务器和一个 Codex 插件,所以可以在 AI 智能体里直接使用 Groselia:同样的品牌、帖子和草稿,以工具的形式提供。
在哪里使用
核心
背后
应用、官网和 MCP 服务器都托管在 Vercel 上。
悬停或点按一个方框,看看它做什么、和谁通信。
一篇帖子的旅程
要看清各个部分如何配合,最好的办法是跟着一篇帖子走一遍:从聊天里的一句话,到它在数据洞察里的数字。逐步点击,或者让它自动播放。
Web 应用
所有者提出要求
“周五把新季豆的照片发到 Instagram 和 LinkedIn。”消息发给智能体的 Edge Function,它把回复流式传回来。
智能体
智能体运行在市场上最好的模型上,来自 Anthropic、OpenAI 等服务商,整体是一个带工具循环的流式 Edge Function。模型有 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 张表,分成几个清晰的组。一个工作区有成员和品牌;其他一切都挂在品牌下面,这样行级安全在任何地方都只需回答一个问题:这个人是不是这个品牌的成员?
谁
- 工作区
- 成员
- 品牌角色
- 个人资料
品牌
- 品牌
- 颜色、字体、标志
- 产品和人物
- 记忆文档
- 品牌文档
聊天
- 对话
- 消息
- 方案
- 方案条目
日历
- 帖子
- 每个平台一条
- 帖子数据
- 帖子评论
渠道
- 已连接账号
- 账号每日数据
- 渠道设置
收件箱和周期
- 收件箱会话
- 收件箱消息
- 回复草稿
- 周期
- 周期报告
“谁”以下的所有内容都带有品牌 ID;每次读写,行级安全都会检查它。
可靠性与安全
Groselia 是往真实账号上发布内容的,所以代价最高的故障是:一篇帖子发了两次,或者一篇帖子悄无声息地没发出去。大部分工程工作都花在这里。
1批准两次,只执行一次
方案执行器先用条件更新认领整个方案,再逐条认领条目,每个幂等键都来自条目自己的 ID。双击或重试只会重放,不会再发一次。
2Webhook 有签名,可重放
发布 API 的每次推送都必须带有有效的 HMAC 签名。由于同一推送可能到达不止一次,处理程序都是幂等的;另有一个任务每十分钟重放所有漏掉的事件。
3入队之前先拒绝
一份共享的规则文件写明了每个平台接受什么(Instagram 需要媒体,YouTube 需要视频,Facebook 不能混发)。排期器在任何内容入队前都会检查它,被拒绝的帖子会以“失败”状态返回并附上原因,而不是以“已排期”的状态躺在日历上。
4每次调用都检查权限
Postgres 里的行级安全,每个 Edge Function 里的角色检查,MCP 则通过带 PKCE 的 OAuth 访问,按品牌和操作划分权限,可以在一个页面里撤销。
有一段时间,我本地的应用和线上的共用同一个生产数据库,有一次一个迁移跑在了部署前面,把线上的品牌套件页面清空了。从那以后,后端工作都先在 Supabase 分支上进行,再和需要它的代码一起合并到生产环境。
质量与工作流
140 个测试文件里约有 1,000 个测试用例,覆盖应用、MCP 服务器和 Edge Functions。有些检查存在,是因为某处曾经坏过:只要 17 种语言里任何一种缺了键,一致性测试就会让构建失败;MCP 的数据库测试套件用合成数据运行,结束时全部回滚。
智能体也有自己的评测。其中一项会向线上的智能体提出一组固定的、关于某个品牌表现的问题,每个都在新对话里问,然后检查它是否用正确的时间段读取了数据洞察,以及它的回答是否和数据洞察页面显示的数字一致。
一个人提交了 520 多个合并请求,靠的是把 AI 智能体当成一个团队来用。每个改动都有自己的分支,在自己的 git worktree 里,所以 Claude Code 和 Codex 能同时做好几件事而互不干扰。每个都会跑测试和类型检查,开一个小的合并请求,在我读过之前什么都不会合并。
技术挑战
每一个看起来都像界面上的 bug,结果却都藏着更深的原因:数据流的形状、一个时间戳、一个平台真正提供了什么、一个时钟。
让生成过程有“正在发生”的感觉 · 实时
生成一个月的帖子,要先转一阵圈圈,然后十二篇帖子一下子全冒出来。感觉很慢,但问题不在模型,在颗粒度。
我把模型的输出改成 JSON Lines 并流式传输,每一行一结束就插入那篇帖子。日历通过 Supabase Realtime 订阅 Postgres 的变更,先画出占位符,于是帖子一篇接一篇地“自己打出来”。
同样的等待,现在像是在看一个人干活。
两个永远对不上的时间戳 · 数据
Supabase 警告数据库的磁盘 IO 快用完了。读取没问题,是有什么东西在反复重写同样的行:为了存 8.3 万条消息,插入了 34.4 万次。
收件箱同步会把保存的时间戳和读回来的那个做比较。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;
}存储 8.3 万条消息的插入次数
34.4 万→每条新消息一次
每轮扫描重读的对话
全部→只读有变化的
写入抖动停止了,那些从来没同步完的收件箱历史,第一次同步完成。
零不一定是零 · 数据分析
我们的数据分析服务商对每个平台都返回同一种结构,平台没提供的指标一律填 0。于是 Instagram 上每篇帖子的点击都“是”零。图表在礼貌地撒谎。
一套按平台划分的指标注册表,记录每个平台真正提供哪些指标,其余的在写入时置为空值,让每张图表都能诚实地显示、降级或隐藏某个指标。
覆盖八个平台的数据洞察,绝不显示一个没人测量过的数字。
被一个走快了的时钟登出 · 认证
我的联合创始人一登录就被登出:每秒刷新十五次令牌,然后触发限流。其他人谁都复现不了。
他电脑的时钟快了一个多小时,所以每个新令牌看起来都已经过期。我给会话存储包了一层,在写入会话时把过期时间重新锚定到本地时钟。
每秒令牌刷新次数
15→0
不管设备时钟准不准,登录都能正常工作,时钟不对时控制台还会提示。
收获
品味就是护城河
当 AI 让构建变得便宜,谁都能上线产品,而大多数看起来都差不多。依然稀缺的是判断力:知道该舍弃什么,一个界面该给人什么感觉,什么时候多一个动画就是多余。对一个没法靠砸钱胜出的两人团队来说,品味让 Groselia 看起来、用起来都像一个大得多的东西,这也是我永远不会交给模型的那一部分。
卖结果,不卖工具
没人想去操作营销软件,不管它有多好。他们想被看见。卖工作成果而不是卖应用,反而让产品变得更重要:它成了我们每天都在用的引擎,所以每一个粗糙的地方都被修好了。
上下文胜过小聪明
智能体变得更好,是因为它知道得更多,而不是因为提示词更聪明。每一轮都给它实时日历、记忆和进行中的方案,并让它先问再做,这比任何一次模型升级都管用。
AI 改变了团队的规模
智能体并行写下了大部分代码,我的工作就变成了决定做什么、审查每一个改动、守住标准。一个人现在能干过去一个团队的活,只要这个人始终是那个把关的编辑。


