Günümüzde birçok geliştirici için not alma uygulaması yapmak neredeyse bir gelenek haline geldi. Ancak ben, Annota’yı geliştirirken farklı bir bakış açısıyla yola çıktım: yerel odaklı, tamamen çevrimdışı çalışabilen ve varsayılan olarak şifrelenmiş bir mimari oluşturmaya odaklandım.
Annota, kullanıcı gizliliğine önem veren bir not alma uygulamasıdır. Masaüstü için Tauri (macOS ve Windows), mobil içinse React Native + Expo (iOS için mevcut, Android yakında gelecek) kullanılarak geliştirilmiştir. Projenin en önemli hedeflerinden biri, uygulamanın büyümesiyle birlikte mimarisinin de sürdürülebilir kalmasını sağlamaktı. Bu nedenle, uygulama izole paketlere bölünerek farklı bileşenlerin birbirinden bağımsız olarak geliştirilmesi ve güncellenmesi hedeflendi. Örneğin, not editörü ile senkronizasyon motoru birbirinden ayrılarak sıkı bağlılıkların önüne geçildi.
Son haftalarda Annota’nın mimari kararlarını belgeledim. İşte projede karşılaşılan üç temel zorluk ve bunların nasıl aşıldığına dair yüksek seviyeli bir bakış.
🔐 Uçtan Uca Şifreleme: Veriler Sadece Sizde Kalsın
Gizliliğe önem veren bir uygulama geliştirirken, sunucunun kullanıcı verileri hakkında mümkün olduğunca az bilgi sahibi olmasını istedim. Tüm işlemler kullanıcının cihazında başlıyor:
- 12 kelimelik BIP39 kurtarma ifadesinden bir ana tohum oluşturuluyor.
- Bu tohum, Argon2id algoritmasıyla işlenerek 256 bitlik bir anahtar türetiliyor.
- Anahtar, HKDF-SHA256 kullanılarak notlar ve dosya ekleri için ayrı şifreleme anahtarlarına bölünüyor.
- Herhangi bir eşitleme yapılmadan önce, not içeriği ve meta verileri yerel olarak AES-256-GCM kullanılarak şifreleniyor.
Sonuç olarak, sunucu notların düz metin hallerine asla erişemiyor. Bu yaklaşım, kullanıcı verilerinin gizliliğini maksimum düzeyde koruyor.
🔄 Senkronizasyon: Verilerinizi Güvenle Eşitleyin
Yerel odaklı bir uygulama için senkronizasyon motoru geliştirmek, projenin en ilginç kısımlarından biri oldu. Buradaki asıl zorluk, yanıt verme hızını, güvenilirliği ve pil kullanımını dengelemek.
Annota’da uygulanan bazı teknikler şunlar:
- Değişiklikten sonraki 10 saniye boyunca debounce uygulanarak aşırı ağ istekleri engelleniyor.
- Uzun süreli düzenlemelerde her 2 dakikada bir zorunlu senkronizasyon yapılıyor, böylece değişiklikler yerel olarak kalmıyor.
- Silinen notlar için mezar taşı (tombstone) sistemi kullanılıyor, böylece silme işlemleri tüm cihazlara doğru şekilde iletiliyor.
- Dosya senkronizasyonunda ID tabanlı fark alma yöntemi kullanılıyor, böylece cihazlar sadece sahip olmadıkları ekleri indiriyor.
Amaç, cihazları senkronize tutarken bant genişliği ve pil tüketimini minimize etmek.
🌐 Paylaşılabilir Notlar: Şifreli Verilerle Açık Erişim
Her notun şifrelendiği bir sistemde, kullanıcıların notlarını web üzerinden paylaşabilmesi nasıl mümkün olabilir? Bu zorluk için çözüm, genel içeriği şifreli not deposundan tamamen ayırmak oldu:
- Paylaşılan notlar özel bir veritabanı tablosunda saklanıyor.
- Kötüye kullanımı engellemek için veritabanı düzeyinde sınırlamalar uygulanıyor.
- Web arayüzü, doğrudan veritabasına bağlanmak yerine Supabase Edge Function üzerinden yayınlanan içeriğe erişiyor.
- Next.js ISR (Incremental Static Regeneration) sayesinde hızlı sayfa yüklemeleri sağlanırken, webhook’lar sayfaların anında yenilenmesini sağlıyor.
Bu yaklaşım, kullanıcıların notlarını paylaşabilmelerini mümkün kılarken, ana şifreli depolama modelinin korunmasını sağlıyor.
Sonuç: Geleceğe Yönelik Adımlar
Annota’yı geliştirmek, yerel odaklı mimariyi, senkronizasyon zorluklarını ve pratik uçtan uca şifrelemeyi keşfetmek için mükemmel bir fırsat oldu. Bu süreçte birçok şey öğrendim ve çözülmeyi bekleyen daha birçok ilginç problem var. Örneğin, MCP Sunucuları entegrasyonu planları yapıyorum. Mevcut BYOK (Bring Your Own Key) sistemimi iyileştirerek, sadece seçilen notları bağlam olarak kullanarak gizliliği korumaya çalışacağım.
Eğer siz de yerel odaklı, çevrimdışı öncelikli veya gizlilik odaklı uygulamalar geliştiriyorsanız, karşılaştığınız zorlukları ve çözümlerinizi paylaşmaktan memnuniyet duyarım. Geri bildirimleriniz, sorularınız ve mimari tartışmalarınız her zaman welcome!
Yapay zeka özeti
Annota projesiyle yerel odaklı mimariyi uçtan uca şifrelemeyle birleştiren bir not alma uygulamasının mimari detayları ve karşılaşılan zorluklar.