Projeler
Aktif2025 — 2026

Artiboard: Yapay Zeka Odaklı Work OS ve Anlamsal Bilgi Grafı

Artiboard'un temel mühendislik mimarisi; yüksek performans, ölçeklenebilirlik ve kusursuz bir kullanıcı deneyimi hedeflenerek sıfırdan tasarlandı. İstemci tarafında React ve Vite ekosistemi üzerine inşa edilen Electron.js mimarisi, native masaüstü uygulaması akıcılığı sunarken; TipTap tabanlı zengin metin editörü ve dnd-kit ile güçlendirilmiş Kanban panoları modüler bir arayüzde kusursuzca harmanlanıyor. Gerçek zamanlı iletişim ve video konferans yetenekleri ise LiveKit altyapısı ile sağlanarak dışa bağımlı toplantı araçlarına olan ihtiyacı tamamen ortadan kaldırıyor.

Veri yönetimi ve backend mimarisinde endüstri standardı olan PostgreSQL ve Prisma ORM tercih edilerek sağlam bir temel atıldı. NestJS ile kurgulanan modüler backend yapısı; Supabase'in sunduğu güvenli kimlik doğrulama, gerçek zamanlı (realtime) WebSocket veri senkronizasyonu ve gelişmiş yetkilendirme (RLS) katmanlarıyla entegre çalışıyor. Veritabanı şeması; yetkilendirme, faturalandırma, panolar ve toplantılar gibi mantıksal domainlere bölünerek yatay ölçeklenebilirlik ve yüksek veri bütünlüğü güvence altına alındı.

Ürünün merkezinde yer alan Büyük Dil Modeli (LLM) entegrasyonları, Artiboard'u sıradan bir SaaS ürününden "otonom bir takım arkadaşına" dönüştürüyor. Groq API üzerinden çalışan gelişmiş LLM'ler, toplantı kayıtlarını asenkron olarak işliyor; toplantı kararlarını, kilit noktaları ve görev dağılımlarını analiz edip 'Pro' yetkisine sahip ekip üyelerinin panolarına ve dokümanlarına otonom olarak aktarıyor. Ürünün global pazara açılması, B2B büyüme stratejisi ve SaaS abonelik altyapısı ise Lemon Squeezy webhook entegrasyonlarıyla tam otomatik bir tahsilat/lisanslama ekosistemine bağlanarak kesintisiz bir PLG (Product-Led Growth) modeli yaratıyor.

v1.7.4 ile ürüne bilgi katmanı eklendi ve projenin teknik ağırlık merkezi buraya kaydı. Notlar [[wikilink]] sözdizimiyle birbirine bağlanıyor; olmayan bir başlığa bağlanırsan not oluşturulup anında bağlanıyor, her notun altında backlink ve giden-bağlantı panelleri duruyor. Ortaya çıkan ağ, canvas üzerinde force-directed bir grafla gösteriliyor: renk bağlantılı bileşeni kodluyor — birbirine ulaşabilen notlar aynı rengi alıyor; düğüm boyutu bağlantı sayısıyla büyüyor, bağlantıların üzerinde parçacıklar akıyor. Zaman tüneli notları oluşturulma sırasıyla ekleyip ağın nasıl büyüdüğünü baştan oynatıyor; düğümler sürüklenerek bağlanabiliyor, düzen kalıcı tutuluyor, öksüz notlar filtrelenebiliyor ve her notun altında iki adımlık bir komşuluk grafı yer alıyor.

Asıl mühendislik anlamsal katmanda. Her not kaydedilirken sunucuda yerel çalışan bir transformer ile embedding'e çevriliyor — @xenova/transformers üzerinde all-MiniLM-L6-v2, 384 boyut — ve vektör Postgres'te pgvector ile saklanıyor; API anahtarı yok, dışarıya çağrı yok. Bunun üstüne 'AI hayalet bağlantıları' kuruldu: grafta her nota, henüz bağlanmadığı en yakın anlamsal komşusu kesikli bir çizgiyle çiziliyor; tıklayınca çizgi gerçek bir [[wikilink]]'e dönüşüyor. Fark tam burada: klasik bir bilgi grafı kurduğun bağlantıların aynasıdır, bu graf kurabileceğin bağlantıların haritası. Katmanı bir AI agent tamamlıyor — doğal dille verdiğin komutu önce plan olarak gösteriyor, sen onaylamadan hiçbir şey yazmıyor ve uyguladığı işlem geri alınabiliyor (geri alma yumuşak silme; içerik çöpe gidiyor).

Bu katmanın sınırını net çizmek gerekiyor, çünkü 'notlarınız hiçbir yere gitmiyor' demek yanlış olurdu. Anlamsal arama ve hayalet bağlantı önerileri kendi sunucumuzdaki yerel modelde çalışıyor: not içeriği üçüncü taraf bir AI servisine gitmiyor. Buna karşılık AI agent (llama-3.3-70b) ve toplantı transkripsiyonu (whisper-large-v3) Groq üzerinde çalışıyor — agent'ı çalıştırdığında ilgili not içeriği, bir toplantıyı kaydettiğinde ses kaydı üçüncü tarafa iletiliyor. Plan ayrımı da bu hattan geçiyor: yapıyı sen kurduğunda (bilgi grafı, [[wikilink]] bağlantıları, backlink panelleri) Starter'da; yapıyı yapay zeka çıkardığında (hayalet bağlantılar, anlamsal arama, agent, toplantı özetleri) Pro'da.

Electron.jsLLM & AIPrisma ORMNestJSPostgreSQLSupabaseLiveKitLemon SqueezypgvectorTransformers.jsSemantic SearchKnowledge Graph

Problem

Ekiplerin proje, doküman ve toplantıyı ayrı araçlarda taşıması bilinen bir sıkıntı; asıl zor kısım o araçları tek yerde toplamak değil, üstüne oturan bilgi katmanının çok kiracılı bir sistemde gerçekten çalıştığından emin olmaktı. Buradaki hataların ortak özelliği sessiz olmaları: hiçbiri hata fırlatmıyor, sadece yanlış sonuç veriyor.

En pahalısı vektör indeksiydi. pgvector'ün HNSW indeksi tablonun tamamı — yani tüm kullanıcıların notları — üzerinde çalışıyor. Bir HNSW taraması önce ef_search kadar (varsayılan 40) global komşu döndürüyor, user_id filtresi ancak ondan sonra uygulanıyor. Sonuç: başka kullanıcıların notları çoğaldıkça o 40 komşunun neredeyse tamamı eleniyor ve sorgu neredeyse boş dönüyor. Tek kullanıcıyla test ederken kusursuz görünüyor; hata ancak veri büyüdükçe ortaya çıkıyor.

İkinci sorun modelden değil veriden geldi: içeriği boş bir not yalnızca başlığının vektörünü taşıyor ve tüm boş notlar aynı başlığı taşıdığı için model onları birbirine tam benzer ilan ediyordu. En güçlü öneriler bir duvar dolusu 'Yeni Not ~ Yeni Not' oluyordu.

Üçüncüsü agent tarafındaydı: araçlar not id'si (UUID) bekliyordu ama llama-3.3-70b araç çağrıları arasında UUID taşıyamıyor — yer tutucu metinler ve uydurma id'ler gönderiyordu.

Dördüncüsü masaüstü olmanın doğal bedeli: çevrimdışı yapılan yazmalar kuyruğa giriyor ve bağlantı dönünce tekrar oynatılıyor. Kuyruk kalıcı hatayla geçici hatayı ayırt etmezse tek bir bozuk istek kuyruğu süresiz tıkıyor.

Çözüm

Vektör sorgusu MATERIALIZED CTE ile ikiye bölündü: notlar önce sahibine göre süzülüp maddileştiriliyor, benzerlik sıralaması ancak o küçük küme üzerinde yapılıyor. Global HNSW indeksine hiç dokunulmadı — kullanıcı başına indeks açmak ya da ef_search'ü şişirmek yerine planlayıcı doğru sırayla çalışmaya zorlandı; sonuç EXPLAIN ile doğrulandı.

Boş not sorunu bir içerik uzunluğu eşiğiyle çözüldü: eşiğin altındaki notlar embedding üretmiyor, dolayısıyla öneri havuzuna hiç girmiyor. Taviz açık — çok kısa ama anlamlı notlar da öneri almıyor; karşılığında öneri listesi gürültüden temizleniyor.

Agent araçları id yerine başlık alacak şekilde yeniden tasarlandı: modelin taşıyamadığı bir şeyi taşımasını beklemek yerine arayüz modelin becerisine uyduruldu. Agent ayrıca hiçbir şeyi doğrudan yazmıyor — önce planı gösteriyor, kullanıcı onaylıyor, uygulanan işlem geri alınabiliyor.

Çevrimdışı kuyruk sıralı tekrar oynatma ve hata sınıflandırması üzerine kuruldu: 4xx kalıcı sayılıp istek düşürülüyor (yoksa kuyruğu süresiz tıkar), 5xx ve ağ hataları geçici sayılıp deneme sınırıyla yeniden deneniyor.

En zor karar teknik değil, dürüstlük kararıydı. 'Notlarınız hiçbir yere gitmiyor' demek kolaydı ama yanlış olurdu; bunun yerine hangi işin nerede çalıştığı ayrı ayrı yazıldı — anlamsal katman kendi sunucumuzda yerel, AI agent ve toplantı transkripsiyonu Groq'ta.

Ekran Görüntüleri

Artiboard Kanban & Görev Yönetimi

Görsel yakında eklenecek

Artiboard Kanban & Görev Yönetimi
Büyüt