Projeler

Yönetim Express — Apartman ve Site Yönetim Yazılımı

Apartman ve site yöneticileri için aidat, gider, kasa ve duyuru takibini tek panelde toplayan, sakinlerin kendi borcunu telefonundan görebildiği web uygulaması.

Tarih
Son güncelleme
Rolüm
Ürün fikri + tasarım + geliştirme
Durum
Yayında
Teknolojiler
Firebase · JavaScript · Realtime Database

Problem

Apartman yönetimi çoğu yerde WhatsApp grupları ve tablolarla yürüyor. Aidatı kim ödedi, kim ödemedi, kasada ne kadar para var, bu ay hangi gider yapıldı? Cevaplar farklı yerlere dağılıyor. Hedef, bunların hepsini tek panelde ve şeffaf biçimde toplamaktı.

Neler yapıyor?

  • Aidat ve geciken takibi: Daire daire kim ödedi, hangi daire hangi ayı ödememiş.
  • Gider kontrolü: Su, temizlik, bakım gibi giderler kategori kategori.
  • Şeffaf kasa: Devir dahil otomatik hesaplanıyor.
  • Duyurular ve karar defteri: Panelde kalıcı, WhatsApp'ta kaybolmuyor.
  • Sakin paneli: Herkes kendi borcunu telefonundan görüyor.
  • Sakin ve araç kaydı, onay akışı, işlem kayıtları ve KVKK metinleri.
  • Online ödeme ekranı ve yönetici için ayrı bir süper yönetici paneli.

Tanıtım sitesi de projenin parçası: özellikler, nasıl çalışır, fiyatlandırma (daire sayısına göre hesaplayan bir hesaplayıcıyla), güncellemeler ve iletişim sayfaları var. Sayfalarda arama motorları için yapılandırılmış veri (JSON-LD), paylaşım önizlemeleri ve site haritası hazır.

Yönetim Express tanıtım sitesindeki canlı demo paneli: genel özet, aylık tahsilat ve son ödemeler

Bağlantılar

Nasıl çalışıyor?

Ön yüz framework'süz: düz HTML, CSS ve JavaScript. Veri Firebase Realtime Database'de, giriş Firebase Authentication (e-posta/şifre) ile yapılıyor, yayın Firebase Hosting üzerinden. Önbellek başlıklarını elle ayarladım: görseller ve betikler bir hafta saklanırken HTML sayfaları her seferinde yeniden doğrulanıyor.

Veri tek bir apartmana değil, birden çok siteye hizmet verecek şekilde siteler/{siteId} altında tutuluyor. Kim hangi siteye ve hangi rolle bağlı, ayrı bir üyelik kaydında yazıyor:

{
  "memberships": {
    "YONETICI_UID": { "siteId": "liva8", "role": "admin" },
    "SAKIN_UID": { "siteId": "liva8", "role": "resident", "residentId": "A_1" }
  }
}

Veritabanı kuralları bu kayıtlara bakıyor: yönetici yalnızca kendi sitesini, sakin ise yalnızca kendi dairesinin profilini ve ortak duyuruları görebiliyor.

Zorlandığım yer: botlara karşı korumak

Kayıt ve iletişim formlarına robot saldırısı gelebilir. İlk aklıma gelen çözüm "Ben robot değilim" kutusuydu ama bu tek başına yetmiyor: saldırgan formu hiç açmadan doğrudan veritabanının adresine istek atabilir. Bu yüzden iki katmanlı kurdum:

Koruma Neyi koruyor
reCAPTCHA v2 Formlar
App Check Veritabanına gelen tüm istekler

reCAPTCHA v2 iki formda çalışıyor, App Check'in istemci tarafı da kodda hazır. App Check'te sıra önemli: zorunluluğu uygulama tarafı hazır olmadan açarsanız canlı site kapanıyor. Bu yüzden kurulum belgesine adımları şu sırayla yazdım: önce yayınla, sonra doğrulanan isteklerin oranını izle, en son zorunlu kıl. Zorunluluğu açmak bu ölçümden sonraki adım.

Destek botu: neden hazır servis kullanmadım?

Hazır canlı destek araçları üçüncü taraf çerezi yazıyor ve ziyaretçi verisini dışarı taşıyor; bu da çerez onayı ve ek gizlilik metni demek. Üstelik tek kişilik bir işletmede insan sohbeti çoğu zaman cevapsız kalıyor. Bunun yerine siteyle birlikte çalışan, kural tabanlı bir bot yazdım: sunucu yok, çerez yok, veri dışarı gitmiyor. Bildiği soruları (fiyat, özellikler, kurulum) anında yanıtlıyor, bilmediği her şeyi WhatsApp'a devrediyor. Fiyat sorusunda daire sayısını sorup tutarı hesaplıyor.

Öğrendiklerim

  • Güvenlik katmanlı olmalı: Tek bir koruma yetmiyor; formu da veritabanını da ayrı ayrı korumak gerekiyor.
  • Sırası olan işler için not tutmak: App Check gibi "yanlış sırada açarsan site çöker" türü adımları kurulum belgesine adım adım yazmak sonradan çok işime yaradı.
  • Gizlilik sonradan eklenmiyor: KVKK ve çerez konularını en baştan düşününce (örneğin kendi destek botumu yazmak) sonradan düzeltme ihtiyacı doğmadı.