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ı.

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.

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.

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.
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ı.
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.

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.
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.

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.
Yapım ızgarasının üzerinde dikey logo. H, yazı logosunun yüksekliği; ızgara H/10.
Yatay
Sembol 1,10H · boşluk 0,35H
Dikey
Sembol 1,75H · boşluk 0,15H
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
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.
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.
Ü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
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
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
Ö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.

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.

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.

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.

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.



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
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.
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
Araç çağrıları
Plan, onay bekliyor
Hasat haftası: 3 gönderi, 4 yanıt
// 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.
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ü.
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.


