Groselia

Kendi kendini yöneten sosyal medya

Rolüm

Kurucu ortak
Mühendislik
Ürün ve marka tasarımı

Açıklama

Groselia önce teknoloji girişimlerinin, ardından başka sektörlerden ve her ölçekten şirketin sosyal medyasını yönetiyor: strateji, tasarım, yayınlama, yorum yanıtları ve raporlama, her kanalda, tek bir platformdan.

Ekip

Danilo ParmegianiKurucu ortak
Pedro CritchiKurucu ortak

Bağlam

Groselia'yı Pedro ile iki kişilik bir ekip olarak kurduk. O pazarlama, satış ve operasyonu yürütüyor; ben markayı ve ürünü tasarladım ve üzerinde çalıştığı platformu veritabanından son animasyona kadar geliştirdim. Self-servis olduğu dönemde 200'den fazla kişi kullanmak için kaydoldu ve bugün müşterilerimizin içeriğini ve sosyal medyasını yönetiyor. Haziran 2026'da mezun olduğum Link School of Business'ın hızlandırıcısı Link Vector'dan R$100k'lık pre-seed turumuzu topladık ve hizmete geçişten iki ay sonra Groselia ayda R$15.000'den fazla gelir getiriyor.

Araçlar

Codex
Claude Code
Figma
Adobe tools

Teknolojiler

  • React
  • Next.js
  • TypeScript
  • Tailwind
  • Supabase
  • Frontier LLMs
  • Trigger.dev
  • Stripe
  • Vercel

Zaman çizelgesi

2025–bugün

Rakamlarla

R$180k+
yıllık gelir run rate
200+
oluşturulan hesap
350
kurulan marka
9,700+
commits
520+
pull request
47
edge function

Zorluk

Geliştirmek darboğaz olmaktan çıktı. Görünmek darboğaz oldu.

Yapay zekâ yazılım yapmanın maliyetini çökertti. Mühendislik geçmişi olmayan bir kurucu artık bir hafta sonunda ürün çıkarabiliyor, diğer herkes de öyle. Ucuzlamayan şey, birinin bunu fark etmesini sağlamak. Dağıtım bir görev değil, sürekli bir operasyon: her gün, her biri farklı format isteyen sekiz ağda paylaşım yapmak, her yorumu yanıtlamak ve her uygulamanın farklı raporladığı rakamları okumak.

Girişimler bunun bedelini üç yoldan biriyle ödüyor. Henüz karşılayamayacakları bir ekip işe alıyorlar, her biri tek bir parçayı çözen bir düzine aracı birbirine ekliyorlar ya da hiçbir şey paylaşmayıp bedelini büyümeyle ödüyorlar. Groselia dördüncü seçenek olmak için var.

Buraya nasıl gelindi

Groselia, ne olduğunu bulmadan önce dört kez şekil değiştirdi. Her dönüş işe yarayanı tuttu, gerisini bıraktı.

  1. 2025 sonu – Şub 2026

    Argibee

    Yapay zekâ ile marka tasarımı platformu. 2025'in sonunda bir prototip olarak başladı ve Şubat 2026'da gerçek bir şirkete dönüştü. Pazarını bulamadı ama Brand Kit motoru, sonrasındaki her şeyin omurgası oldu.

  2. Nis 2026

    Hareketli video

    Groselia, After Effects şablonlarından yapılan Apple tarzı lansman videoları olarak başladı. Tüm süreci elle doğruladım ve sonra kalite çıtasında ölçeklenemeyeceğini gördüm.

  3. Haz 2026

    Link Vector'dan pre-seed

    Link School of Business'ın Startup School'una katıldık: kuruculara yönelik, bir realite şov olarak çekilen 100 günlük bir program (sezonu izle). Sahnede Groselia'yı sunduğum bir demo günüyle ve pre-seed turumuzla kapandı: mezun olduğum Link School of Business'ın hızlandırıcısı Link Vector'dan R$100k'lık bir yatırım.

    Demo günündeki sunumum
  4. Ağu 2026

    Pazarlamanın Lovable'ı

    Form yerine tek bir sohbet: kampanyayı anlat, Groselia planlasın, yazsın ve yayınlasın. Bir bot kadrosu değil, araçları olan bir sohbet ajanı.

  5. Eyl 2026

    Bir sosyal medya yöneticisi

    Müşteriler içeriklerini yapay zekânın üretmesini istemiyordu. Kendi fotoğraflarının iyi paylaşılmasını ve yorumlarının yanıtlanmasını istiyorlardı. Üretimi bıraktık ve kanalları yönetmeye yoğunlaştık.

  6. Bugün

    Yazılım olarak hizmet

    Aracı değil, işi satıyoruz. Ekibimiz her müşterinin sosyal medyasını platform üzerinden yönetiyor; bu da tek bir kişinin eskiden bir ajans gerektiren işi yürütebilmesini sağlıyor.

Herkesin gözü önünde geliştirildi

Başından beri herkesin gözü önünde geliştirdik. Henüz Argibee iken yolculuğu YouTube'da paylaştık; Argibee bekleme listesinin açılışından Groselia'yı gösterdiğimiz ilk videoya kadar. Hikâyenin geri kalanı, video video, kanalımızda.

Argibee bekleme listesinin açılışı
Groselia'yı gösteren ilk video

Marka

Groselia'nın markasının cesur olmasını istedim: insanları durdurup baktıran bir şey; web sitesinde, uygulamada ve sosyal medyamızdaki her gönderide. Biri onunla nerede karşılaşırsa karşılaşsın, etkilemeli, biraz hayranlık uyandırmalı ve az önce gördüğü şey yüzünden bizimle çalışmak istemesini sağlamalı. Her şeyden önce, parçası olduğumuz ekosisteme ve önce kendileri için ürettiğimiz müşterilere, yani teknoloji girişimlerine harika görünmeliydi.

Markanın tamamını Codex içindeki Figma eklentisiyle tasarladım: logo, tipografi ve sembolle doğru oranlarda nasıl birleştiği, görseller, SVG ikon kütüphanesi, yazı stilleri ve düzenli bir renk paleti. Her karar ölçülerek tek bir panoya kondu, böylece karşılaştırılabilir ve tartışılabilir oldu.

Figma'daki Groselia dosyasının yanında Codex: logo sistemi, her arka plan renginde logo, palet boyunca sembol ve renk paleti
Marka panoları, Codex içindeki Figma eklentisiyle Figma'da hazırlandı.

Sembol

Önce sembol geldi ve kaldı. Bir merkezin etrafında dönen üç yumuşak yaprak; şirketin en ilk versiyonundan beri bizimle ve yeni logo onun üstüne değil, etrafına kuruldu: geometrisi kopyalandı ve ölçeklendi, hiç yeniden çizilmedi.

Yazı logosu

Yazı logosu TT Commons Pro Bold, küçük harf, her yerde aynı görünsün diye vektöre dönüştürülmüş. Doğal aralığında sembolün yanında gevşek duruyordu, bu yüzden 160px'te her harfi fazladan 6,4 birim sola kaydırarak −%4 tracking'e sıkılaştırdım. Küçük bir şey gibi geliyor; kelimenin genişliğini 564'ten 520 birime indirdi ve tek bir şekil gibi okunmasını sağladı.

H'den bir ızgara

Her şey H ile, yani yazı logosunun görünen yüksekliğiyle, H/10'luk bir ızgarada ölçülüyor. Böylece logo, kimsenin yeniden gözle ayarlamasına gerek kalmadan ölçeklenir.

Dikey logo için altı seçenek çizdim; üç sembol boyutu (1,50H, 1,75H, 2,00H) ve iki boşluk (0,15H, 0,25H). B'yi seçtik: 1,75H sembol, kelimenin 0,15H üstünde. Yatay logo için 0,20H ile 0,35H arası boşlukları karşılaştırdım ve 1,10H sembol, 0,35H boşlukta karar kıldım.

1.75H0.15HH

Yapım ızgarasının üzerinde dikey logo. H, yazı logosunun yüksekliği; ızgara H/10.

Groselia yatay logosu

Yatay

Sembol 1,10H · boşluk 0,35H

Groselia dikey logosu

Dikey

Sembol 1,75H · boşluk 0,15H

Groselia sembol logosu

Sembol

Orijinal oran, 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 her işi görüyor: Light'tan ExtraBold'a altı ağırlık, 12'den 96px'e on bir adımlı bir ölçek ve gerçek italikler. Dosyadaki 688 metin katmanının hepsini ona taşıdım; artık marka kitabı, uygulama ve web sitesi aynı sesle konuşuyor.

Ana yazı tipi

TT Commons
Pro

TT Commons ProDisplay · 01
→Groselia@
Reels → Posts
Nº 128⅝ e

Uygulama ikonu

Uygulama ikonu, markanın 3D'ye geçtiği tek yer: porselen bir sembol, katmanlı, yukarıdan aydınlatılmış ve hafif parlak. Sonraki bir yenilemede içindeki sembolü %10 küçülttüm ki karesinin içinde nefes alsın. Yazı logosuyla kendi birleşimi de var; kare 1,5H'de.

Groselia uygulama ikonu

3D nesnelerden bir dünya

Logonun etrafında bir 3D nesne kadrosu yaşıyor: oynak gözlü bir kalp, sohbet balonları, bir hashtag, parıltılar. Web sitesinde ve gönderilerimizde markanın sesi onlar ve hiç durmuyorlar: süzülüyorlar ve sitede imlece tepki veriyorlar. Bunlar da öyle: it, ya da birini geri çekip bırak.

Neo doodle'lar

Düz olan her şey için Neo var, ikon setimiz: kalın siyah çizgiler, paletten dolgular ve tek bir beyaz parıltı. Web sitesinde her biri beyaz bir çipin içinde sade bir çizgi ikonu olarak başlar ve üzerine gelince doodle'ına dönüşür, parçaları birer birer gelir: disk belirir, çubuklar düşer, parıltı çizilir. Bunlar web sitesinin kendi doodle'ları ve animasyonu, olduğu gibi kopyalandı. Birinin üzerine gel.

Resmî bağlantılar
Sana iş düşmez
İstediğin zaman duraklat
Her şey kayıt altında
Veriler gizli kalır
İstediğin zaman ayrıl
Senin üslubunla yanıtlar
İnsan incelemesi
İşaretlenen potansiyel müşteriler
Ücretli reklamlar
Açılış sayfası
Ürün yeniden tasarımı
Marka yenileme
Kıvılcım
Kalp
Kupa

Ürün

Groselia'daki her şey tek bir sohbete yazarak yapılıyor. Neyin ne zaman yayınlanacağını yazıyorsun; o zamanlıyor, yayınlıyor, yorumları yanıtlıyor ve neyin işe yaradığını sana söylüyor. İş, bir düzine ekranı yönetmek yerine sahibinin onayladığı tek bir plan olarak geliyor.

Panel değil, sohbet

Geçen hafta nasıl geçti?

Hazirandan beri en iyi hafta.

  • Erişim %38 arttı, bunu latte art reel'i sağladı (Instagram'da 41 B, TikTok'ta 64 B izlenme).
  • Espresso karuselinde kaydetmeler ikiye katlandı. İnsanlar tarifleri saklıyor.
  • Yorumlar bekliyor. Teslimat ve öğütme kalınlığıyla ilgili 14 soru var, çoğu yanıtsız.

Desen net: videolar 17.00 ile 19.00 arası, fotoğraflar sabah. Önümüzdeki iki hafta buna uyardım.

2 gün önce

Günaydın! Bu hafta iki şey seni bekliyor:

  • Carmo de Minas hasadı cuma günü rafa çıkıyor ve onun için henüz hiçbir şey planlanmadı.
  • 14 soru gönderilerinde bekliyor, çoğu teslimatla ilgili.

Nereden başlamak istersin?

Birini seç
8 dakika önce

Groselia bir form olarak başladı: bir hedef seç, alanları doldur, bir kampanya al. Kimse kendi işiyle ilgili form doldurmak istemiyor, bu yüzden artık her markanın bunun yerine tek bir sohbeti var.

Markanı açıp yazıyorsun. Bu hafta ne paylaşman gerektiğini sor, telefonundan fotoğraf bırak ya da “dünkü yorumları yanıtla” yaz. Ajan yanıt vermeden önce bakıyor: takvimine, neyin iyi performans gösterdiğine, markanın hafızasına.

Senden bir şeye ihtiyacı olduğunda, tek dokunuşla yanıtlayacağın kısa bir soru turu soruyor. Sonra tek bir plan öneriyor: tarih ve saatleriyle gönderiler, yanıtlar, değişiklikler. İstediğini düzenliyorsun, onaylıyorsun ve takvimin dolmasını izliyorsun.

Buradaki kart gerçek sohbet; uygulamanın kendi token'larından tarayıcıda yeniden kuruldu. Hadi, kullan.

İki kez tasarlandı: önce sahipler, sonra biz için

İlk kitle, kendi sosyal medyasını yöneten küçük işletme sahipleriydi. Kampanyalarla, hunilerle ya da paylaşım sıklıklarıyla düşünmüyorlar; “bu hafta ne paylaşsam?” diye düşünüyorlar. Bu yüzden zor kısım makineyi gizlemekti: dört soruluk bir onboarding, bir bağlantıdan doldurulan bir Brand Kit, sürükleyebileceğin bir takvim, on yedi dilde ve telefonda kullanılabilen her ekran.

Sonra müşterilerin, ne kadar basit olursa olsun hiçbir aracı kullanmak istemediğini öğrendik. İşin yapılmasını istiyorlardı. Böylece ana kullanıcılar biz olduk. Ekibimizden bir kişi birçok markayı yönetiyor ve aynı uygulamanın büyümesi gerekti: çok markalı çalışma alanları, bir toplantıyla açılıp bir raporla kapanan döngüler, her gönderide bir onay adımı ve her ağ için tek bir gelen kutusu. Müşteriler hâlâ giriş yapıyor ama artık uygulama işi yaptıkları yer değil, işi izledikleri yer.

Kasım 2026

Pzt
103
Sal
113
Çar
123
Per
133
Cum
143
Cmt
152
Paz
162
8:00

Neden piyasanın %40 üzerinde ödüyoruz

İçe aktarıldı
6
Yeni hasat
49:00

Yeni hasat: Carmo de Minas

Yayınlandı
5
Kamera arkası
17:30

POV: kavurmahanede ilk vardiya

Yayınlandı
Tarifler
9:00

Espressoyu nasıl ayarlıyoruz

Yayınlandı
12:00

Koyu kavrum hakkında aykırı bir görüş

Yayınlandı
Başarısız
Kamera arkası
1218:00

Müdavimlerimizin siparişlerini puanlıyoruz

Yayınlandı
8:30

Kruvasan saati

Planlandı
3
İşe alım
11:00

Baş baristamız Ana ile tanışın

Elle
TariflerYeni hasat+1
17:00

Ağır çekimde latte art

Planlandı
9:00

1 kg yeşil kahve neye dönüşür

Planlandı
7
Kamera arkası
11:00

Kavurmahanenin içi, baştan sona

Planlandı
Tarifler
18:30

60 saniyede cold brew

Taslak
Video eksik
Yeni hasatKampanya
9:00

Yeni hasat rafta

Planlandı
Taslak
İşe alım
10:00

Kavurma şefi arıyoruz

Planlandı
17:00

Buzlu latte, baştan sona

Taslak
Kampanya
10:00

Cumartesi masan

Planlandı
15:00

Espresso tonik mevsimi geldi

Taslak
Tarifler
11:00

4 dakikalık pour-over rehberi

Planlandı
Kampanya
18:00

Oakline paketiyle tanışın

Taslak
4

Ajanlar okusun diye yapıldı

Bir markanın ya da bir web sayfasının ilk okuyucusu giderek daha sık bir yapay zekâ oluyor. Bu yüzden Groselia'daki her şey insanlar kadar ajanlar için de yazılıyor. Bir markanın hafızası sade Markdown belgelerinden oluşan bir set: tercihler, yapılacaklar ve yapılmayacaklar, marka bilgileri. Ajan bunları her yanıttan önce okuyor ve dört araçla kendisi düzenliyor, tıpkı yapay zekâ asistanlarının kendi hafızalarını tuttuğu gibi. İnsanlar da aynı belgeleri Brand Kit'te açıp düzenliyor.

Insights, hem panelin hem ajanın okuduğu ortak bir çekirdekten geçiyor; böylece “ne işe yarıyor?” diye sorduğunda yanıt gördüğün rakamlardan geliyor. Web sitesi de insanların bizi sorduğu asistanlar için aynısını yapıyor: groselia.com bir llms.txt, daha uzun bir llms-full.txt ve bir karşılaştırma dosyası sunuyor; hepsi koddaki tek bir bilgi kaynağından üretiliyor, böylece bir yapay zekânın fiyatlarımız ya da güvenliğimiz hakkında söyledikleri siteden sapamıyor.

Zaman içinde etkileşim

Haftalık, son 30 gün, yayın tarihine göre

Etk. oranı7,69%

Öne çıkan özellikler

  • Bir bağlantıdan Brand Kit

    Bir web sitesi yapıştır ve hesaplarını bağla. Groselia siteyi tarıyor, geçmiş gönderilerini okuyor ve logo, renkler, yazı tipleri, üslup ve kitleyi kendisi dolduruyor.

  • Tek bir sohbet

    41 aracı olan bir yapay zekâ ajanı medyana açıklama yazıyor, kendi etkileşim verilerinden saat seçiyor, metrikleri okuyor ve yanıt taslakları hazırlıyor, sonra hepsini bir planda topluyor.

  • Sekiz ağ için bir takvim

    Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Threads ve Reddit, her biri kendi formatında; geçmiş gönderiler içe aktarılıyor, böylece takvim asla boş kalmıyor.

  • Her yoruma yanıt

    Her ağdan yorumlar ve DM'ler tek bir gelen kutusunda; yanıtlar markanın üslubuyla taslak hâline getiriliyor, hassas olan her şey bir insana bırakılıyor.

  • Sade bir dille Insights

    Tüm hesaplarda erişim, izlenme ve etkileşim; her platformun neyi raporlayıp neyi raporlamadığı konusunda dürüst ve “ne işe yarıyor?” sorusuna bir yanıt.

  • Döngüler ve onaylar

    İş döngüler hâlinde yürüyor. Her döngü bir toplantıyla açılıyor, yapay zekânın rakamlardan yazdığı bir raporla kapanıyor ve her gönderi müşterinin onayını bekleyebiliyor.

Yapay zekâ ajanlarıyla geliştirildi

Groselia'yı mühendislik ekibim olarak yapay zekâ ajanlarıyla geliştirdim. Kodu Codex ve Claude Code yazdı, her değişiklik kendi branch'inde; ben tasarladım, her pull request'i inceledim ve neyin yayına çıkacağına karar verdim.

Prompt'larımın çoğunu da yazmak yerine Wispr Flow ile konuşarak verdim. İyi bir prompt uzun, ayrıntılı bir brief'tir ve konuşmak, onu düşündüğüm hızda vermemi sağladı.

  • Codex

    Kodlama ajanı

  • Claude Code

    Kodlama ajanı

  • Wispr Flow

    Sesle yazma

Web sitesi

Web sitesi, markanın sesini yükselttiği yer. Next.js ile tasarlayıp geliştirdim. On yedi dilde ve her ziyaretçinin dilini kaydolduğunda uygulamaya aktarıyor.

Oynayabileceğin bir hero

Sayfa yüklenirken logo dönerek giriyor, ardından hero: süzülen, fareyle eğilen ve imleç tarafından itilip kakılan 3D objeler ve “Made for you” ile biten bir kaydırma sahnesi.

groselia.com
groselia.com hero bölümü: “We run your socials. You run your business.”, kalbin etrafında 3D objelerle

Gerçek uygulama, yeniden kuruldu

“Inside your Groselia”, platformu olduğu gibi gösteriyor; bir demo markayla, uygulamanın kendi ekranlarından kodla yeniden kuruldu.

groselia.com
“Inside your Groselia”: platformun kanal bağlantıları ekranı

Bir blog

Sosyal medya yönetimi üzerine notlar. Gönderiler sade MDX dosyaları, her dil için bir tane, CMS yok; her birinin kendi feed'i ve yapılandırılmış verisi var, böylece arama motorları ve yapay zekâ asistanları onları doğru okuyor.

groselia.com
groselia.com blogu, ilk gönderi imlecin altında parlıyor, altında diğer gönderiler

Potansiyel müşterileri eleyen bir form

Her “Book a call” takvimden önce kısa bir form açıyor: kim olduğun, nerede paylaşım yaptığın, neye ihtiyacın olduğu ve bütçen. Her adım sen ilerledikçe veritabanımıza kaydediliyor, böylece yarım kalan yanıtları bile görüyoruz; tamamlanan bir form da ekibimize Slack'te haber veriyor.

groselia.com
Randevu sayfası: “Let's talk about your social media.”, üç adımın yanında formla

Her zaman duyarlı

Her sayfa telefonlar için de tasarlandı, sadece sığsın diye küçültülmedi. Hover olmayan yerlerde bölümler ekranın ortasına geldikçe uyanıyor.

Telefonda ana sayfa
Telefonda “Always in sync with your team”, ilk kartı uyanmış
Telefonda randevu formu, neye ihtiyacın olduğunu ve aylık bütçeni soran adımda

Mühendislik

Mimari

Platformu, yapay zekâyı çalışma arkadaşım yaparak kendim geliştirdim. Uygulama React ve Vite, açılış sayfası Next.js ve ikisi de tek bir Supabase projesinin üzerinde: satır düzeyinde güvenlikli Postgres, kimlik doğrulama, realtime ve storage, bir de 47 edge function. Yavaş ya da zamanlanmış her şey Trigger.dev'de çalışıyor, sosyal ağlar tek bir yayınlama API'sinden geliyor, Stripe da planları, kartları ve Brezilya'ya özgü boleto'yu yönetiyor.

Bir de MCP sunucusu ve bir Codex eklentisi var; böylece Groselia bir yapay zekâ ajanının içinden kullanılabiliyor: aynı markalar, gönderiler ve taslaklar, araç olarak.

Nerede kullanılıyor

Çekirdek

Supabase

Arka planda

Uygulama, web sitesi ve MCP sunucusu Vercel'de barındırılıyor.

Ne yaptığını ve neyle konuştuğunu görmek için bir kutunun üzerine gel ya da dokun.

Bir gönderinin yolculuğu

Parçaların nasıl birleştiğini görmenin en iyi yolu bir gönderiyi takip etmek: sohbetteki bir cümleden Insights'taki rakamlarına kadar. Adımlara tek tek tıkla ya da kendiliğinden oynasın.

Web uygulaması

Sahibi istiyor

“Hasat fotoğraflarını cuma günü Instagram ve LinkedIn'de paylaş.” Mesaj, ajanın edge function'ına gidiyor ve o da yanıtını akış hâlinde geri gönderiyor.

ReactSSE akışı

Ajan

Ajan, piyasadaki en iyi modellerle, Anthropic, OpenAI ve diğer sağlayıcılardan, araç döngüsü olan tek bir akışlı edge function olarak çalışıyor. Model web araması ve web getirmenin yanında kendine ait 41 araç alıyor, tur başına en fazla sekiz adım. Zor kısım hiçbir zaman model olmadı. Zor olan, ajanın şu anda neyin doğru olduğunu her zaman bilmesini sağlamaktı.

Bu yüzden her turda, model mesajı görmeden önce, fonksiyon bağlamı veritabanından yeniden kuruyor: sahibinin saat dilimindeki tarih ve saat, markanın hafıza belgeleri, canlı takvim, açık planlar, yüklenen belgeler ve eski mesajların sürekli güncellenen bir özeti. Prompt'un sabit kısmı bir saat önbellekte tutuluyor; bu kısım hiç önbelleğe alınmıyor, bu yüzden bayatlayamaz.

Gerisini iki kural şekillendirdi. Herkese açık ya da geri alınamaz olan her şey, doğrudan yayınlanmak yerine sahibinin onayladığı bir plana gider. Ve bir gönderi ancak bu turda bir araç onu oluşturduysa vardır; bu, ajanın yapmadığı işi anlattığı günlere son verdi. Ajan tek bir modele de bağlı değil: daha küçük, daha ucuz bir model yeterince iyi olduğunda sohbeti ona taşıdım, sohbet başına maliyeti düşürmek için.

Her turda yeniden kurulan bağlam

Talimatlar ve araçlarbir saat önbellekte
Tarih ve saatsahibinin saat dilimi
Hafıza belgeleritercihler, yapılacaklar ve yapılmayacaklar
Canlı takvimher gönderi ve durumu
Açık planlarönerilen ve onaylanan
Şimdiye kadarki hikâyesürekli güncellenen bir özet
→LLMEn iyi modeller · en fazla 8 adım→

Araç çağrıları

✓get_posting_times
✓get_insights
✓propose_plan

Plan, onay bekliyor

Hasat haftası: 3 gönderi, 4 yanıt

Ajan, bağlamını kuruyor
// 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')
}

Veri modeli

Birkaç net gruba ayrılmış yaklaşık 55 tablo. Bir çalışma alanının üyeleri ve markaları var; geri kalan her şey markaya bağlı, böylece satır düzeyinde güvenlik her yerde tek bir soruyu yanıtlayabiliyor: bu kişi bu markanın üyesi mi?

Kim

  • Çalışma alanları
  • Üyeler
  • Marka rolleri
  • Profiller

Marka

  • Markalar
  • Renkler, yazı tipleri, logolar
  • Ürünler ve kişiler
  • Hafıza belgeleri
  • Marka belgeleri

Sohbet

  • Sohbetler
  • Mesajlar
  • Planlar
  • Plan öğeleri

Takvim

  • Gönderiler
  • Her ağ için bir tane
  • Gönderi metrikleri
  • Gönderi yorumları

Kanallar

  • Bağlı hesaplar
  • Günlük hesap metrikleri
  • Kanal ayarları

Gelen kutusu ve döngüler

  • Gelen kutusu konuları
  • Gelen kutusu mesajları
  • Yanıt taslakları
  • Döngüler
  • Döngü raporları

“Kim” altındaki her şey bir marka kimliği taşır; satır düzeyinde güvenlik bunu her okuma ve yazmada kontrol eder.

Güvenilirlik ve güvenlik

Groselia gerçek hesaplarda yayın yapıyor, bu yüzden pahalı hatalar bir gönderinin iki kez çıkması ya da sessizce hiç çıkmaması. Mühendisliğin çoğu orada.

1İki kez onaylamak bir kez çalışır

Plan yürütücüsü önce planı, sonra her öğeyi koşullu bir güncellemeyle sahipleniyor ve her idempotency anahtarı öğenin kendi kimliğinden geliyor. Çift tıklama ya da yeniden deneme, tekrar yayınlamak yerine aynı sonucu tekrarlıyor.

2Webhook'lar imzalı ve yeniden oynatılabilir

Yayınlama API'sinden gelen her teslimat geçerli bir HMAC imzası taşımak zorunda. Teslimatlar birden fazla gelebildiği için işleyiciler idempotent ve bir iş, kaçırılan olayları her on dakikada bir yeniden oynatıyor.

3Kuyruğa almadan önce reddet

Ortak tek bir kural dosyası her ağın neyi kabul ettiğini söylüyor (Instagram medya ister, YouTube video ister, Facebook'ta karıştırmak yok). Zamanlayıcı bir şey kuyruğa girmeden önce bunu kontrol ediyor ve reddedilen gönderi takvimde Planlandı olarak beklemek yerine, nedeniyle birlikte Başarısız olarak geri dönüyor.

4Her çağrıda erişim kontrolü

Postgres'te satır düzeyinde güvenlik, her edge function'da bir rol kontrolü ve PKCE'li OAuth üzerinden MCP erişimi; marka ve işlem bazında sınırlı, tek bir sayfadan iptal edilebilir.

Bir süre yerel uygulamam ile canlı olan aynı üretim veritabanını paylaştı ve bir deploy'dan önce çalışan bir migration bir keresinde canlıdaki Brand Kits sayfasını boşalttı. O günden beri backend işleri önce bir Supabase branch'inde yapılıyor ve ihtiyaç duyan kodla birlikte üretime merge ediliyor.

Kalite ve iş akışı

140 test dosyasına yayılmış yaklaşık 1.000 test senaryosu uygulamayı, MCP sunucusunu ve edge function'ları kapsıyor. Bazı kontroller bir şey bir kez bozulduğu için orada: 17 dilden biri bir anahtarı atlarsa bir parite testi derlemeyi başarısız kılıyor ve MCP için veritabanı test paketleri sentetik verilerle çalışıp sonunda geri alınıyor.

Ajanın kendine ait değerlendirmeleri de var. Biri, canlı ajana bir markanın performansıyla ilgili sabit bir soru seti soruyor, her birini yeni bir sohbette, ve Insights'ı doğru dönemle okuduğunu ve yanıtının Insights sayfasındaki rakamların aynısını içerdiğini kontrol ediyor.

Tek bir kişi, yapay zekâ ajanlarına bir ekip gibi davranarak 520'den fazla pull request yayına aldı. Her değişiklik kendi git worktree'sinde kendi branch'ini alıyor, böylece Claude Code ve Codex birbirinin ayağına basmadan aynı anda birkaç iş üzerinde çalışabiliyor. Her biri testlerini ve tip kontrollerini çalıştırıyor, küçük bir pull request açıyor ve ben okumadan hiçbir şey merge edilmiyor.

Bir değişiklik→Kendi worktree'si→Claude Code ya da Codex→Testler ve tipler→Küçük bir PR→Benim incelemem→Merge ve deploy

Teknik zorluklar

Her biri arayüzde bir hata gibi göründü ve daha derin bir şey çıktı: bir akışın yapısı, bir zaman damgası, bir ağın gerçekte neyi raporladığı, bir saat.

Üretimi canlı hissettirmek · Gerçek zamanlı

Bir aylık gönderi üretmek, bir yükleniyor simgesi ve ardından aynı anda beliren on iki gönderi demekti. Yavaş hissettiriyordu ama sorun model değildi. Sorun parçaların boyutuydu.

Modelin çıktısını JSON Lines'a çevirip akış hâlinde aldım, her gönderiyi satırı kapandığı anda ekledim. Takvim, Supabase Realtime üzerinden Postgres değişikliklerine abone oluyor ve önce yer tutucuları çiziyor, böylece gönderiler kendilerini tek tek yazıyor.

Aynı bekleme artık birini çalışırken izlemek gibi hissettiriyor.

Hiç eşleşmeyen iki zaman damgası · Veri

Supabase, veritabanının disk IO'sunun bitmek üzere olduğunu bildirdi. Okumalar iyiydi. Bir şey aynı satırları tekrar tekrar yazıyordu: 83 bin mesajı saklamak için 344 bin ekleme.

Gelen kutusu senkronizasyonu, kaydettiği zaman damgasını geri okuduğuyla karşılaştırıyordu. Postgres onu +00:00 olarak döndürüyordu, biz Z olarak yazıyorduk; bu yüzden her sohbet değişmiş görünüyor ve her taramada yeniden indiriliyordu. Metinleri değil anları karşılaştırmak sorunu çözdü.

İki zaman damgasını karşılaştırmak
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 bin mesajı saklamak için eklemeler

344 bin→her yeni mesaja bir

Her taramada yeniden okunan sohbetler

hepsi→değişenler

Gereksiz yazmalar durdu ve hiç bitmeyen gelen kutusu geçmişleri ilk kez senkronize oldu.

Sıfır her zaman sıfır değildir · Analitik

Analitik sağlayıcımız her ağ için tek bir yapı döndürüyor ve bir ağın raporlamadığı her şeyi 0 ile dolduruyor. Instagram'ın her gönderide sıfır tıklaması “vardı”. Grafikler kibarca yalan söylüyordu.

Her ağın gerçekte neyi raporladığını kaydeden, gerisini veri alınırken null yapan ve her grafiğin bir metriği dürüstçe göstermesini, sınırlamasını ya da gizlemesini sağlayan platform bazlı bir metrik kaydı.

Sekiz ağda, kimsenin ölçmediği bir sayıyı asla göstermeyen Insights.

Hızlı bir saat yüzünden oturumdan atılmak · Auth

Kurucu ortağım giriş yaptığı anda oturumdan atılıyordu: saniyede on beş token yenileme, ardından hız sınırı. Başka kimse sorunu tekrarlayamıyordu.

Bilgisayarının saati bir saatten fazla ileriydi, bu yüzden her yeni token süresi dolmuş görünüyordu. Oturum depolamasını sardım; bir oturum yazıldığında süre sonunu yerel saate göre yeniden sabitliyor.

Saniyedeki token yenilemeleri

15→0

Giriş, cihazın saati ne olursa olsun çalışıyor ve saat yanlışsa konsol bunu söylüyor.

Çıkarımlar

Zevk, asıl kale

Yapay zekâ geliştirmeyi ucuzlattığında herkes ürün çıkarabiliyor ve çoğu birbirine benziyor. Hâlâ az bulunan şey muhakeme: neyi dışarıda bırakacağını, bir ekranın nasıl hissettirmesi gerektiğini, bir animasyonun ne zaman fazla olduğunu bilmek. Kimseden fazla harcayamayan iki kişilik bir ekip için Groselia'yı çok daha büyük bir şey gibi gösteren ve çalıştıran şey zevk; bir modele asla bırakmayacağım tek kısım da bu.

Aracı değil, sonucu sat

Ne kadar iyi olursa olsun, kimse bir pazarlama yazılımı kullanmak istemiyordu. Görünmek istiyorlardı. Uygulama yerine işin kendisini satmak, ürünü daha az değil daha önemli hâle getirdi: her gün çalıştırdığımız motor oldu, böylece her pürüz giderildi.

Bağlam, zekâyı yener

Ajan, prompt daha zekice olduğunda değil, daha çok şey bildiğinde iyileşti. Her turda ona canlı takvimi, hafızayı ve açık planları vermek ve harekete geçmeden önce sormasını sağlamak, hiçbir model yükseltmesinin yapamadığını yaptı.

Yapay zekâ ekibin boyutunu değiştiriyor

Kodun çoğunu ajanlar paralel yazarken işim neyin yapılacağına karar vermeye, her değişikliği incelemeye ve çıtayı yüksek tutmaya kaydı. Artık tek bir kişi, eskiden bir ekip gerektiren şeyi yürütebiliyor; yeter ki o kişi editör olarak kalsın.

Sonraki proje

Tüm projeler