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.

Bağlantılar
- Canlı site ve demo panel: yonetimexpress.com
- Son yayın: 14 Ekim 2026
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ı.