Groselia
Media sosial yang berjalan sendiri
Peran saya
- Co-founder
- Engineering
- Desain produk dan brand
Deskripsi
Groselia menjalankan media sosial untuk startup teknologi terlebih dulu, dan juga untuk perusahaan dari industri dan ukuran lain: strategi, desain, publikasi, balasan komentar, dan laporan, di setiap kanal, dari satu platform.
Tim
Danilo ParmegianiCo-founder
Pedro CritchiCo-founder
Konteks
Saya memulai Groselia bersama Pedro, berdua saja. Ia memegang pemasaran, penjualan, dan operasional; saya merancang brand dan produknya, lalu membangun platform tempat semuanya berjalan, dari database sampai animasi terakhir. Selama masih self-serve, lebih dari 200 orang mendaftar untuk memakainya, dan hari ini platform itu menjalankan konten dan media sosial pelanggan kami. Pada Juni 2026 kami menggalang pre-seed R$100k dari Link Vector, akselerator milik Link School of Business, tempat saya lulus, dan dua bulan setelah pivot ke layanan jasa, Groselia menghasilkan lebih dari R$15.000 per bulan.
Alat
- Codex
- Claude Code
- Figma
- Adobe tools
Stack
React
Next.js
TypeScript
Tailwind
Supabase
Frontier LLMs
Trigger.dev
Stripe
Vercel
Linimasa
- 2025–sekarang
Dalam angka
- R$180k+
- run rate tahunan
- 200+
- akun dibuat
- 350
- brand disiapkan
- 9,700+
- commits
- 520+
- pull request
- 47
- edge function
Tantangan
Membangun tidak lagi jadi hambatan. Dilihat oranglah yang kini jadi hambatan.
AI meruntuhkan biaya membuat software. Founder tanpa latar belakang engineering sekarang bisa merilis produk dalam satu akhir pekan, dan begitu juga semua orang lainnya. Yang tidak ikut jadi murah adalah membuat orang memperhatikannya. Distribusi adalah operasi yang terus-menerus, bukan satu tugas: posting setiap hari, di delapan jaringan yang masing-masing minta format berbeda, menjawab setiap komentar, dan membaca angka yang dilaporkan berbeda oleh tiap aplikasi.
Startup membayarnya dengan salah satu dari tiga cara. Mereka merekrut tim yang belum sanggup mereka bayar, menyambung selusin alat yang masing-masing hanya menyelesaikan satu potong, atau tidak memposting apa-apa dan membayarnya dengan pertumbuhan. Groselia ada untuk menjadi pilihan keempat.
Perjalanannya
Groselia berganti bentuk empat kali sebelum menemukan jati dirinya. Setiap belokan mempertahankan yang berhasil dan membuang sisanya.

Akhir 2025 – Feb 2026
Argibee
Platform desain brand berbasis AI. Awalnya prototipe di akhir 2025 dan menjadi perusahaan sungguhan pada Februari 2026. Ia tidak menemukan pasarnya, tapi mesin brand kit-nya menjadi tulang punggung semua yang datang setelahnya.

Apr 2026
Video motion
Groselia berawal sebagai video peluncuran ala Apple yang dibuat dari template After Effects. Saya memvalidasi seluruh pipeline-nya secara manual, lalu sadar ia tidak bisa diskalakan sampai standar kualitasnya.

Jun 2026
Pre-seed dari Link Vector
Kami ikut Startup School dari Link School of Business, program 100 hari untuk founder yang direkam seperti reality show (tonton musimnya). Program itu ditutup dengan demo day tempat saya mem-pitch Groselia di atas panggung, dan dengan pre-seed kami senilai R$100k dari Link Vector, akselerator milik Link School of Business, tempat saya lulus.
Agu 2026
Lovable untuk pemasaran
Satu percakapan sebagai ganti formulir: jelaskan kampanyenya, lalu Groselia merencanakan, menulis, dan memublikasikannya. Satu agen chat dengan tool, bukan sederet bot.
Sep 2026
Social media manager
Pelanggan tidak mau AI membuat konten mereka. Mereka mau foto mereka sendiri diposting dengan baik dan komentar mereka dijawab. Kami memotong fitur generate dan fokus penuh menjalankan kanal-kanalnya.

Sekarang
Service as a software
Kami menjual pekerjaannya, bukan alatnya. Tim kami menjalankan media sosial setiap pelanggan di platform ini, yang membuat satu orang bisa menjalankan apa yang dulu butuh satu agensi.
Dibangun secara terbuka
Kami membangun secara terbuka sejak awal. Waktu masih bernama Argibee, kami membagikan perjalanannya di YouTube, dari peluncuran waitlist Argibee sampai video pertama tempat kami menunjukkan Groselia. Sisa ceritanya, video demi video, ada di kanal kami.
Brand
Saya ingin brand Groselia tampil berani: sesuatu yang membuat orang berhenti dan melihat, di situs web, di aplikasi, dan di setiap postingan media sosial kami. Di mana pun orang bertemu dengannya, brand ini harus membuat mereka terkesan, sedikit kagum, dan ingin memakai jasa kami karena apa yang baru saja mereka lihat. Di atas segalanya, ia harus terlihat luar biasa di mata startup teknologi, ekosistem tempat kami berada dan pelanggan pertama yang kami layani.
Saya merancang seluruh brand-nya dengan plugin Figma di dalam Codex: logonya, tipografinya dan cara ia dipadukan dengan simbol dalam proporsi yang pas, citranya, pustaka ikon SVG, gaya teks, dan palet warna yang tertata. Setiap keputusan dituangkan di satu papan, diukur, supaya bisa dibandingkan dan diperdebatkan.

Simbolnya
Simbolnya datang lebih dulu dan tetap bertahan. Tiga kelopak lembut yang berputar mengelilingi satu titik pusat, terbawa sejak versi paling awal perusahaan, dan logo baru dibangun di sekitarnya, bukan menimpanya: geometrinya disalin dan diskalakan, tidak pernah digambar ulang.
Wordmark-nya
Wordmark-nya memakai TT Commons Pro Bold, huruf kecil, diubah menjadi vektor supaya tampil sama di mana pun. Dengan spasi aslinya, ia terasa renggang di samping simbol, jadi saya merapatkannya menjadi tracking −4% dengan menggeser setiap huruf ke kiri 6,4 unit tambahan di ukuran 160px. Kedengarannya kecil; tapi itu membuat lebar katanya turun dari 564 menjadi 520 unit dan terbaca sebagai satu bentuk.
Grid berbasis H
Semuanya diukur dalam H, tinggi wordmark yang terlihat, di atas grid H/10. Dengan begitu logonya bisa diskalakan tanpa ada yang perlu mengira-ngira lagi.
Untuk logo bertumpuk saya menggambar enam opsi, tiga ukuran simbol (1,50H, 1,75H, 2,00H) dikali dua jarak (0,15H, 0,25H), dan kami memilih B: simbol 1,75H, 0,15H di atas kata. Untuk versi horizontal saya membandingkan jarak dari 0,20H sampai 0,35H dan memilih simbol 1,10H dengan jarak 0,35H.
Logo bertumpuk di atas grid konstruksinya. H adalah tinggi wordmark; grid-nya H/10.
Horizontal
Simbol 1,10H · jarak 0,35H
Bertumpuk
Simbol 1,75H · jarak 0,15H
Simbol
Rasio asli, 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.
Tipografi
TT Commons Pro mengerjakan semua tugas: enam ketebalan dari Light sampai ExtraBold, skala sebelas langkah dari 12 sampai 96px, dan italic sungguhan. Saya memindahkan semua 688 layer teks di file itu ke font ini, jadi buku brand, aplikasi, dan situs web sekarang berbicara dengan satu suara.
Font utama
TT Commons
Pro
Ikon aplikasi
Ikon aplikasi adalah satu-satunya tempat brand ini tampil 3D: simbolnya dalam porselen, berlapis, disinari dari atas dan sedikit mengilap. Di pembaruan berikutnya saya mengecilkan simbol di dalamnya 10% supaya punya ruang bernapas di kotaknya. Ikon ini juga punya lockup sendiri dengan wordmark, kotaknya di 1,5H.
Dunia objek 3D
Di sekitar logo hidup sekumpulan objek 3D: hati dengan mata goyang, gelembung chat, tagar, kilauan. Mereka adalah suara brand di situs web dan di postingan kami, dan mereka tidak pernah diam: mereka melayang, dan di situs mereka bereaksi terhadap kursor. Yang ini juga: dorong mereka, atau tarik satu ke belakang lalu lepaskan.








Neo doodles
Untuk semua yang datar ada Neo, set ikon kami: garis luar hitam yang tebal, isian dari palet, dan satu kilau putih. Di situs web, setiap ikon awalnya berupa ikon garis biasa di dalam chip putih, lalu berubah menjadi doodle saat kursor diarahkan ke atasnya, bagian-bagiannya muncul satu per satu: cakramnya meletup, batangnya jatuh, kilaunya tergambar. Ini doodle dan animasi asli dari situs webnya, disalin apa adanya. Arahkan kursor ke salah satunya.
Produk
Semua hal di Groselia dikerjakan dengan mengetik di satu chat. Kamu tulis apa yang perlu tayang dan kapan, lalu Groselia menjadwalkannya, memublikasikannya, menjawab komentar, dan memberi tahu apa yang berhasil. Pekerjaannya datang sebagai satu rencana yang disetujui pemilik, bukan selusin layar yang harus dioperasikan.
Percakapan, bukan dasbor
Groselia berawal sebagai formulir: pilih tujuan, isi kolom-kolomnya, dapatkan kampanye. Tidak ada yang mau mengisi formulir tentang bisnisnya sendiri, jadi sekarang setiap brand punya satu percakapan sebagai gantinya.
Kamu buka brand-mu dan mulai mengetik. Tanyakan apa yang sebaiknya kamu posting minggu ini, masukkan foto dari ponselmu, atau tulis “jawab komentar kemarin”. Agen melihat dulu sebelum menjawab: kalendermu, apa yang performanya bagus, memori brand.
Kalau ia butuh sesuatu darimu, ia mengajukan satu putaran pertanyaan singkat yang kamu jawab dengan sekali ketuk. Lalu ia mengusulkan satu rencana: postingan beserta tanggal dan jamnya, balasan, perubahan apa pun. Kamu edit yang kamu mau, setujui, lalu lihat kalendernya terisi.
Kartu di sini adalah chat yang asli, dibangun ulang di browser dari token aplikasinya sendiri. Silakan dicoba.
Dirancang dua kali: untuk pemilik bisnis, lalu untuk kami
Audiens pertama adalah pemilik usaha kecil yang mengurus media sosialnya sendiri. Mereka tidak berpikir dalam kampanye, funnel, atau ritme posting; mereka berpikir “minggu ini aku posting apa?”. Jadi bagian tersulitnya adalah menyembunyikan mesinnya: onboarding dalam empat pertanyaan, brand kit yang terisi dari satu tautan, kalender yang bisa diseret, setiap layar dalam tujuh belas bahasa dan bisa dipakai di ponsel.
Lalu kami sadar pelanggan tidak mau mengoperasikan alat apa pun, sesederhana apa pun. Mereka mau pekerjaannya beres. Jadi kami menjadi pengguna utamanya. Satu orang di tim kami mengurus banyak brand, dan aplikasi yang sama harus tumbuh dengan workspace multi-brand, siklus yang dibuka dengan rapat dan ditutup dengan laporan, langkah persetujuan di setiap postingan, dan satu inbox untuk semua jaringan. Pelanggan masih login, tapi sekarang aplikasinya jadi tempat mereka melihat pekerjaan berjalan, bukan tempat mereka mengerjakannya.
November 2026
Dibangun untuk dibaca agen
Makin lama, pembaca pertama sebuah brand atau halaman web adalah AI. Jadi semua hal di Groselia ditulis untuk agen sama seperti untuk manusia. Memori sebuah brand adalah kumpulan dokumen Markdown biasa, berisi preferensi, yang boleh dan tidak, fakta brand, yang dibaca agen sebelum setiap balasan dan ia edit sendiri dengan empat tool, seperti cara asisten AI menyimpan memorinya sendiri. Orang membuka dan mengedit dokumen yang persis sama di brand kit.
Insights berjalan lewat satu inti bersama yang dibaca dasbor dan agen, jadi ketika kamu bertanya “apa yang berhasil?”, jawabannya datang dari angka yang kamu lihat. Dan situs webnya melakukan hal yang sama untuk asisten yang ditanyai orang tentang kami: groselia.com menyajikan llms.txt, llms-full.txt yang lebih panjang, dan file perbandingan, semuanya dihasilkan dari satu sumber fakta di dalam kode, jadi apa yang dikatakan AI soal harga atau keamanan kami tidak bisa melenceng dari situsnya.
Engagement dari waktu ke waktu
Per minggu, 30 hari terakhir, menurut tanggal tayang
Fitur utama
Brand kit dari satu tautan
Tempel alamat situs web dan hubungkan akunmu. Groselia membaca situsnya, membaca postingan lamamu, dan mengisi logo, warna, font, gaya bahasa, dan audiens dengan sendirinya.
Satu percakapan
Agen AI dengan 41 tool yang menulis caption untuk mediamu, memilih jam dari data engagement-mu sendiri, membaca metrik, dan menyusun draf balasan, lalu membungkus semuanya menjadi satu rencana.
Kalender untuk delapan jaringan
Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Threads, dan Reddit, masing-masing dengan format aslinya, dengan postingan lama diimpor supaya kalendernya tidak pernah kosong.
Setiap komentar dijawab
Komentar dan DM dari semua jaringan dalam satu inbox, dengan draf balasan dalam gaya bahasa brand dan apa pun yang sensitif ditahan untuk ditangani manusia.
Insights dalam bahasa sehari-hari
Jangkauan, tayangan, dan engagement di semua akun, jujur soal apa yang dilaporkan dan tidak dilaporkan tiap platform, plus jawaban untuk “apa yang berhasil?”.
Siklus dan persetujuan
Pekerjaan berjalan dalam siklus. Setiap siklus dibuka dengan rapat, ditutup dengan laporan yang ditulis AI dari angka-angkanya, dan setiap postingan bisa menunggu persetujuan pelanggan.
Dibangun dengan agen AI
Saya membangun Groselia dengan agen AI sebagai tim engineering saya. Codex dan Claude Code menulis kodenya, setiap perubahan di branch-nya sendiri, sementara saya merancangnya, meninjau setiap pull request, dan memutuskan apa yang dirilis.
Dan sebagian besar prompt saya ucapkan, bukan saya ketik, dengan Wispr Flow. Prompt yang baik adalah brief yang panjang dan detail, dan dengan bicara saya bisa memberikannya secepat saya memikirkannya.
Codex
Agen coding
Claude Code
Agen coding

Wispr Flow
Dikte suara
Situs web
Situs web adalah tempat brand-nya tampil paling lantang. Saya merancang dan membangunnya dengan Next.js. Situsnya tersedia dalam tujuh belas bahasa, dan ia meneruskan bahasa setiap pengunjung ke aplikasi saat mereka mendaftar.
Hero yang bisa dimainkan
Logonya berputar masuk saat halaman dimuat, lalu muncul hero-nya: properti 3D yang melayang, condong mengikuti mouse, dan terdorong ke sana kemari oleh kursor, serta adegan scroll yang berakhir di “Made for you”.

Aplikasi asli, dibangun ulang
“Inside your Groselia” menampilkan platformnya apa adanya, dibangun ulang dalam kode dari layar-layar aplikasinya sendiri dengan brand demo.

Blog
Catatan soal menjalankan media sosial. Postingannya file MDX biasa, satu per bahasa, tanpa CMS, dan masing-masing punya feed dan data terstruktur sendiri supaya mesin pencari dan asisten AI membacanya dengan benar.

Formulir yang menyaring prospek
Setiap “Book a call” membuka formulir singkat sebelum kalender: siapa kamu, di mana kamu posting, apa yang kamu butuhkan, dan anggaranmu. Setiap langkah disimpan ke database kami selagi kamu mengisinya, jadi kami bisa melihat jawaban yang setengah jadi sekalipun, dan formulir yang selesai mengirim notifikasi ke tim kami di Slack.

Responsif, selalu
Setiap halaman juga dirancang untuk ponsel, bukan sekadar dikecilkan supaya muat. Di layar tanpa hover, bagian-bagiannya terbangun saat mencapai tengah layar.



Engineering
Arsitektur
Saya membangun platformnya sendiri, dengan AI sebagai partner. Aplikasinya React dan Vite, landing-nya Next.js, dan keduanya berdiri di atas satu proyek Supabase: Postgres dengan row-level security, auth, realtime dan storage, serta 47 edge function. Apa pun yang lambat atau terjadwal berjalan di Trigger.dev, jaringan sosial masuk lewat satu API publikasi, dan Stripe mengurus paket, kartu, dan boleto Brasil.
Ada juga server MCP dan plugin Codex, jadi Groselia bisa dipakai dari dalam agen AI: brand, postingan, dan draf yang sama, sebagai tool.
Tempat ia dipakai
Intinya
Di baliknya
Aplikasi, situs web, dan server MCP di-host di Vercel.
Arahkan kursor atau ketuk sebuah kotak untuk melihat fungsinya dan dengan apa ia terhubung.
Perjalanan sebuah postingan
Cara terbaik untuk melihat bagaimana semua bagiannya saling terhubung adalah mengikuti satu postingan, dari satu kalimat di chat sampai angkanya di Insights. Klik setiap langkahnya, atau biarkan berjalan sendiri.
Aplikasi web
Pemilik meminta
“Posting foto panen hari Jumat, di Instagram dan LinkedIn.” Pesannya masuk ke edge function agen, yang men-streaming jawabannya kembali.
Agennya
Agennya berjalan di model terbaik di pasar, dari Anthropic, OpenAI, dan penyedia lain, sebagai satu edge function streaming dengan tool loop. Model mendapat 41 tool miliknya sendiri ditambah web search dan web fetch, hingga delapan langkah per giliran. Bagian tersulitnya tidak pernah modelnya. Bagian tersulitnya adalah memastikan agen selalu tahu apa yang benar saat ini.
Jadi di setiap giliran, sebelum model melihat pesannya, function itu membangun ulang konteks dari database: tanggal dan waktu di zona waktu pemilik, dokumen memori brand, kalender langsung, rencana terbuka, dokumen yang diunggah, dan ringkasan pesan-pesan lama yang terus diperbarui. Bagian prompt yang stabil di-cache selama satu jam; bagian ini tidak pernah di-cache, jadi tidak bisa basi.
Dua aturan membentuk sisanya. Apa pun yang publik atau tidak bisa dibatalkan masuk ke rencana yang disetujui pemilik, tidak pernah langsung keluar. Dan sebuah postingan hanya ada kalau sebuah tool membuatnya di giliran ini, yang mengakhiri masa ketika agen menggambarkan pekerjaan yang belum ia lakukan. Agennya juga tidak terikat pada satu model: ketika model yang lebih kecil dan lebih murah sudah cukup bagus, saya memindahkan chat ke sana untuk memangkas biaya per percakapan.
Konteks, dibangun ulang setiap giliran
Panggilan tool
Rencana, menunggu persetujuan
Minggu panen: 3 postingan, 4 balasan
// 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') }
Model data
Sekitar 55 tabel, dalam beberapa kelompok yang jelas. Sebuah workspace punya anggota dan brand; semua yang lain menggantung di brand, jadi row-level security bisa menjawab satu pertanyaan di mana saja: apakah orang ini anggota brand ini?
Siapa
- Workspace
- Anggota
- Peran brand
- Profil
Brand-nya
- Brand
- Warna, font, logo
- Produk dan orang
- Dokumen memori
- Dokumen brand
Chat
- Percakapan
- Pesan
- Rencana
- Item rencana
Kalendernya
- Postingan
- Satu per jaringan
- Metrik postingan
- Komentar postingan
Kanal
- Akun terhubung
- Metrik akun harian
- Pengaturan kanal
Inbox dan siklus
- Thread inbox
- Pesan inbox
- Draf balasan
- Siklus
- Laporan siklus
Semua yang ada di bawah “Siapa” membawa brand id; row-level security memeriksanya di setiap pembacaan dan penulisan.
Keandalan dan keamanan
Groselia memublikasikan ke akun sungguhan, jadi kegagalan yang mahal adalah postingan yang tayang dua kali, atau postingan yang diam-diam tidak pernah tayang. Sebagian besar engineering-nya ada di sana.
1Menyetujui dua kali, berjalan sekali
Plan runner mengklaim rencananya, lalu setiap item, dengan update bersyarat, dan setiap idempotency key berasal dari id item itu sendiri. Klik ganda atau percobaan ulang hanya memutar ulang, bukan memposting lagi.
2Webhook ditandatangani dan diputar ulang
Setiap kiriman dari API publikasi harus membawa tanda tangan HMAC yang valid. Handler-nya idempoten karena kiriman bisa datang lebih dari sekali, dan sebuah job memutar ulang setiap event yang terlewat setiap sepuluh menit.
3Tolak sebelum masuk antrean
Satu file aturan bersama menyatakan apa yang diterima setiap jaringan (Instagram butuh media, YouTube butuh video, tidak boleh campur di Facebook). Penjadwal memeriksanya sebelum apa pun masuk antrean, dan postingan yang ditolak kembali sebagai Gagal, lengkap dengan alasannya, alih-alih diam di kalender sebagai Terjadwal.
4Akses diperiksa di setiap panggilan
Row-level security di Postgres, pemeriksaan peran di setiap edge function, dan akses MCP lewat OAuth dengan PKCE, dibatasi per brand dan per aksi, dan bisa dicabut dari satu halaman.
Untuk sementara waktu aplikasi lokal saya dan yang live berbagi satu database produksi, dan sebuah migrasi yang berjalan lebih dulu dari deploy pernah mengosongkan halaman Brand Kits yang live. Sejak itu pekerjaan backend dilakukan di branch Supabase lebih dulu dan digabungkan ke produksi bersama kode yang membutuhkannya.
Kualitas dan alur kerja
Sekitar 1.000 test case di 140 file tes mencakup aplikasi, server MCP, dan edge function. Beberapa pemeriksaan ada karena sesuatu pernah rusak: tes paritas menggagalkan build kalau salah satu dari 17 bahasa kekurangan key, dan suite database untuk MCP berjalan di atas data sintetis dan di-rollback di akhir.
Agennya punya eval sendiri. Salah satunya mengajukan serangkaian pertanyaan tetap ke agen live tentang performa sebuah brand, masing-masing di percakapan baru, lalu memeriksa bahwa ia membaca Insights dengan periode yang benar dan jawabannya membawa angka yang sama dengan yang ditampilkan halaman Insights.
Satu orang merilis 520+ pull request dengan memperlakukan agen AI seperti sebuah tim. Setiap perubahan dapat branch sendiri di git worktree sendiri, jadi Claude Code dan Codex bisa mengerjakan beberapa hal sekaligus tanpa saling mengganggu. Masing-masing menjalankan tes dan type check, membuka pull request kecil, dan tidak ada yang di-merge sebelum saya membacanya.
Tantangan teknis
Masing-masing terlihat seperti bug di antarmuka, tapi ternyata sesuatu yang lebih dalam: bentuk sebuah stream, sebuah timestamp, apa yang benar-benar dilaporkan sebuah jaringan, sebuah jam.
Membuat proses generate terasa hidup · Realtime
Membuat postingan untuk sebulan berarti menatap spinner, lalu dua belas postingan muncul sekaligus. Rasanya lambat, tapi masalahnya bukan di model. Masalahnya di granularitas.
Saya mengubah output model menjadi JSON Lines dan men-streaming-nya, memasukkan setiap postingan begitu barisnya selesai. Kalender berlangganan perubahan Postgres lewat Supabase Realtime dan menampilkan placeholder lebih dulu, jadi postingan-postingan itu seolah mengetik dirinya sendiri satu per satu.
Waktu tunggu yang sama sekarang terasa seperti menonton seseorang bekerja.
Dua timestamp yang tidak pernah cocok · Data
Supabase memperingatkan bahwa disk IO database hampir habis. Pembacaan baik-baik saja. Ada sesuatu yang menulis ulang baris yang sama: 344 rb insert untuk menyimpan 83 rb pesan.
Sinkronisasi inbox membandingkan timestamp yang disimpannya dengan yang dibaca kembali. Postgres mengembalikannya sebagai +00:00 dan kami menulisnya sebagai Z, jadi setiap percakapan terlihat berubah dan setiap putaran mengunduhnya ulang. Membandingkan momen waktunya, bukan string-nya, menyelesaikan masalah itu.
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;
}Insert untuk menyimpan 83 rb pesan
344 rb→satu per pesan baru
Percakapan yang dibaca ulang setiap putaran
semua→yang berubah saja
Penulisan berulang berhenti, dan riwayat inbox yang tidak pernah selesai akhirnya tersinkron untuk pertama kalinya.
Nol tidak selalu berarti nol · Analitik
Penyedia analitik kami mengembalikan satu bentuk data untuk semua jaringan dan mengisi apa pun yang tidak dilaporkan sebuah jaringan dengan 0. Instagram “punya” nol klik di setiap postingan. Grafiknya berbohong dengan sopan.
Registry metrik per platform yang mencatat apa yang benar-benar dilaporkan setiap jaringan, mengosongkan sisanya saat data masuk, dan membuat setiap grafik bisa menampilkan, menurunkan, atau menyembunyikan sebuah metrik dengan jujur.
Insights di delapan jaringan yang tidak pernah menampilkan angka yang tidak diukur siapa pun.
Ter-logout gara-gara jam yang terlalu cepat · Auth
Co-founder saya ter-logout begitu ia masuk: lima belas refresh token per detik, lalu kena rate limit. Tidak ada orang lain yang bisa mereproduksinya.
Jam komputernya lebih cepat lebih dari satu jam, jadi setiap token baru terlihat sudah kedaluwarsa. Saya membungkus penyimpanan sesi supaya waktu kedaluwarsa ditambatkan ulang ke jam lokal saat sesi ditulis.
Refresh token per detik
15→0
Masuk bisa berjalan di jam perangkat mana pun, dan konsol memberi tahu kalau ada jam yang meleset.
Pelajaran
Selera adalah parit pertahanan
Ketika AI membuat membangun jadi murah, semua orang bisa merilis, dan kebanyakan hasilnya terlihat sama. Yang masih langka adalah penilaian: tahu apa yang harus ditinggalkan, bagaimana sebuah layar seharusnya terasa, kapan sebuah animasi sudah kelebihan satu. Untuk tim dua orang yang tidak bisa menang dalam hal anggaran, selera adalah yang membuat Groselia terlihat dan bekerja seperti sesuatu yang jauh lebih besar, dan itu satu bagian yang tidak akan pernah saya serahkan ke model.
Jual hasilnya, bukan alatnya
Tidak ada yang ingin mengoperasikan software pemasaran, sebagus apa pun. Mereka ingin dilihat. Menjual pekerjaannya, bukan aplikasinya, justru membuat produknya makin penting: ia menjadi mesin yang kami jalankan setiap hari, jadi setiap sisi kasarnya diperbaiki.
Konteks mengalahkan kecerdikan
Agennya jadi lebih baik ketika ia tahu lebih banyak, bukan ketika prompt-nya lebih pintar. Memberinya kalender langsung, memori, dan rencana terbuka di setiap giliran, dan membuatnya bertanya sebelum bertindak, berdampak lebih besar daripada upgrade model mana pun.
AI mengubah ukuran tim
Dengan agen yang menulis sebagian besar kode secara paralel, pekerjaan saya bergeser ke memutuskan apa yang dibangun, meninjau setiap perubahan, dan menjaga standar tetap tinggi. Satu orang kini bisa menjalankan apa yang dulu butuh satu tim, selama orang itu tetap menjadi editornya.


