Satır güvenliği
PostgreSQL RLS politikaları firma kapsamını uygular; uygulama işlemleri de firma bağlamını kontrol eder.

Randevudan tahsilata, paket seansından stoğa kadar salonun tamamı tek ekranda.
Salonda bir randevu açıldığında yalnız saat ayırmış olmuyorsunuz. Müşterinin paket hakkı, hizmeti verecek uzman, kullanılacak kabin ve hizmet sonrası ödeme aynı işin parçaları. Projenin çıkış noktası bu bilgilerin defter, ayrı tahsilat kâğıdı ve hatırlanan seans sayıları arasında dağılmasıydı. Biz çalışma düzenini randevudan başlayıp gün sonuna uzanan bir kayıt zinciri olarak ele aldık. Böylece panelin tasarımını ekran sayısından önce günlük işin sırası belirledi.
Bir müşteri aradığında resepsiyonun takvime bakması, uzmanın geçmişi incelemesi ve tahsilatı alan kişinin kalan borcu görmesi gerekiyor. Ortak müşteri kaydını bu geçişlerin merkezine koyduk. Ziyaret, paket ve ödeme birbirine bağlanırken çalışanların görev kapsamlarını da ayrı tuttuk. Boş saatlerin ve takip gerektiren kayıtların günlük panelde görünmesi, kayıt tutma ile sonraki işi seçme arasında bağlantı kurdu. Siz günü planlarken aynı müşteri hakkında farklı listelerden bilgi toplamak yerine ilişkili kayıtlarla ilerliyorsunuz.
Tek panel kararını bütün çalışanların aynı işlemleri yapması şeklinde uygulamadık. Rol izinleri, kullanıcıya özel izin ekleri ve kaldırmaları ile firmanın etkin özellikleri birlikte değerlendiriliyor. Resepsiyonun randevu açmasıyla muhasebenin ödeme iptalini incelemesi farklı sorumluluklar. Biz bu ayrımı hem gezinmeye hem sunucu eylemlerine taşıdık. Yetki ve firma durumu istek sırasında veritabanından tazeleniyor; ekranda görünen seçenekler çalışan göreviyle ilişkilendiriliyor.
Paket ve kasa için de ayrı kayıt modelleri seçtik. Paket hakkının değişmesi seans defterinde hareket oluşturuyor. Nakdin hesabı ise yalnız tarihe bakılarak değil, açık kasa oturumuna bağlı hareketlerle kuruluyor. Bu kararlar aynı panelde farklı işlerin kendi kurallarını korumasını sağlıyor. Bir ödemeyi incelerken kasa bağını, bir paket kullanımını incelerken randevu bağını görebiliyorsunuz. Geçmişi düzeltmek için ters hareket kullanılması da geliştirmede ortak bir yaklaşım oldu.
Uygulamanın teknik temelini Next.js, TypeScript, PostgreSQL ve Prisma oluşturuyor. Auth.js oturum tarafında yer alıyor. Biz salonlar arası ayrımı yalnız ekran filtresine bırakmak yerine PostgreSQL satır güvenliği politikalarıyla uygulama kontrollerini birlikte kullandık. Firma bağlamı işlem içinde yerel olarak kuruluyor; bağlantı havuzundaki sonraki isteğe taşınmıyor. Portal sorgularında bu kapsam müşteri kimliğiyle daha da daraltılıyor. Kullanıcı tablosundaki firma kapsamı ise uygulama filtresi üzerinden yönetiliyor.
Değişiklik yapan sunucu eylemleri girdi şemasını, oturumu, izni ve firma durumunu kontrol ediyor. Denetim kaydı değişiklikle aynı veritabanı işlemi içinde yazılıyor. Bu yapı bir kaydın yeni değeri kadar onu kimin değiştirdiğini de incelemeye imkân veriyor. Geliştirme kaynaklarında firma izolasyonunu sınayan testler bulunuyor. Satış defteri testlerinde stok yetersizliğinin satışı reddetmesi gibi iş senaryoları da yer alıyor. Böylece mimariyi salon kapsamı ve iş kuralı üzerinden ayrı ayrı değerlendirebiliyoruz.
PostgreSQL RLS politikaları firma kapsamını uygular; uygulama işlemleri de firma bağlamını kontrol eder.
Mutasyon ve denetim kaydı aynı transaction içindedir. Randevu geçmişi, seans ve stok hareketleri ayrıca tutulur.

Randevu geliştirmesinde zor kısım boş görünen bir saatin gerçekten uygun olup olmadığını belirlemekti. Uzmanın mesaisi, molası ve izni; hizmet yetkinliği; kabin ve cihaz gereksinimi aynı karara katılıyor. Hizmet süresiyle hazırlık payı da hesapta yer alıyor. Biz takvimdeki personel sütunlarını bu uygunluk hesabının görünür yüzü olarak tasarladık. Kaynak uygunluğu ekranda ayrı sütun göstermeden de randevu motorunun girdisi oluyor.
Çakışma kontrolü sunucu akışında yapılırken eşzamanlı rezervasyon veritabanı kısıtıyla da korunuyor. Çakışan seçimden sonra kullanıcıya en fazla beş uygun alternatif sunuluyor. Liste uygun saat bulunmasına bağlı; öneriler tıklanarak seçilebiliyor. Buradaki tasarım kararı hata mesajından sonra yeni bir yol göstermekti. Siz saat değiştirdiğinizde personel ve kaynak koşullarını yeniden birlikte değerlendiren akışla ilerliyorsunuz. Birden fazla hizmetin ardışık planlanması da aynı uygunluk yaklaşımına katılıyor; her hizmetin gereksinimi hesapta kendi yerini koruyor.

Paket hakkının randevu açılır açılmaz azalması, planlanan işle yapılan işi birbirine karıştırırdı. Biz kullanımı tamamlanma olayına bağladık. Randevu tamamlandığında seans defterine kullanım hareketi yazılıyor; tamamlanma geri alınırsa iade hareketi oluşuyor. Eski kullanımın silinmemesi, hakkın neden değiştiğini geçmişte izlemeyi sağlıyor. Ekranlarda kullanılan seans sayacı da bu defterle eşzamanlı güncelleniyor. Satılan paketin adı ve seans değerleri satış anındaki hâliyle saklanıyor.
Tahsilat tarafında aynı randevunun ikinci kez ücretlendirilmesi engelleniyor ve paketten karşılanan hizmet tekrar ücretlendirilmiyor. Nakit açık kasa oturumuna bağlanıyor; kart ve havale çekmecedeki nakde eklenmiyor. Kapanış diyaloğunda sayım girildikten sonra beklenen tutar ve fark gösteriliyor. Mutlak fark 50 ₺ veya üzerindeyse açıklama gerekiyor. Beklenen tutarın, sayımın ve farkın kapanışta dondurulması, gün sonunu sonradan yeniden hesaplanan bir toplamdan ayrı bir kayıt hâline getiriyor.
Tamamlanma seans kullanımını doğurur; geri alma ters hareketle hakkı iade eder.
Ödeme hizmetle ilişkilendirilir. İptal sebebi ve ters hesap hareketi kaydedilir.
Kapanış değerleri saklanır; mutlak 50 ₺ ve üzeri farkta açıklama zorunludur.

Telefon tasarımında masaüstü takvimini küçültmek yerine ajanda görünümünü kullandık. Masaüstünde uzman sütunlarıyla okunan gün, telefonda saat sırasıyla izleniyor. Alt menü yeni randevuya erişim sağlıyor; tam menü çekmecesi diğer alanları açıyor. Form düzenleri ve kartlar dar ekrana uyarlanıyor. Dokunmatik taşıma davranışında basılı tutma gecikmesi, yanlış sürüklemeyi azaltmak için yer alıyor. Böylece telefonda bir kaydı açmak ve randevuyu taşımak farklı hareketlerle ele alınıyor.
Uzmanın günlük görünümünü personel kaydıyla eşleştirdik. Varsayılan kapsamda kendi randevularını izleyip durumlarını ilerletebiliyor; rol ve kişisel izinler işlem kapsamını belirliyor. Siz hizmet odasına geçerken sıradaki kaydı tarayıcıdan açabiliyorsunuz. Ayrı uygulama indirmeden kullanılan bu düzenin odağı, randevu durumu ile müşteri bilgisini günlük işin içinde erişilebilir tutmak. Ekranlar örnek verilerle çekilmiştir. Aşağıdaki görüntüler ajanda ve uzman günü kararlarının arayüzdeki karşılığını gösteriyor.


Veri geçişinde temel müşteri bilgileri için CSV önizlemesini kullandık. Excel listesinin CSV UTF-8 biçiminde kaydedilmesi, aktarımın belirli bir dosya biçimi üzerinden ilerlemesini sağlıyor. Akış en fazla 5.000 satırı destekliyor. Önizlemede dosya içindeki tekrarlar, mevcut telefonlar, hatalı satırlar ve eklenecek kayıtlar ayrı gösteriliyor. Şube seçimi bu değerlendirmenin parçası. Siz aktarmadan önce hangi satırın nasıl ele alınacağını inceleyebiliyorsunuz; aktarım sırasında veri yeniden kontrol ediliyor.
Bu yaklaşımda müşteri listesini içeri almakla çalışma düzenini kurmak ayrı adımlar. Hizmet süreleri, gereken kaynaklar, personel yetkinliği ve mesai tanımları uygun saat hesabını besliyor. Biz başlangıç değerlendirmesini bir müşteri kaydından randevuya, tamamlanmadan tahsilata ve kasa kapanışına uzanan örnek akışla ilişkilendirdik. Eski randevu, finans ve seans geçmişinin geçiş kapsamı ayrıca görüşülüyor. Temel müşteri aktarımının önizlemesi, bu görüşmede hangi kayıtların hazır olduğunu ve hangi alanların ayrıca ele alınacağını somutlaştırıyor.
Temel müşteri listesi CSV UTF-8 olarak kaydedilir; hedef şube seçilir.
Tekrarlar ve hatalar önizlemede ayrılır; aktarım veriyi yeniden kontrol eder.

Güzellik Salonu Yönetim Sistemi canlı kullanımda. Bu vaka çalışmasında geliştirme yaklaşımını randevu uygunluğu, seans hareketi, kasa oturumu ve firma kapsamı üzerinden anlattık. Günlük panelde kalan paket hakkı, geciken ziyaret ve bekleyen online talep gibi kayıtların yapılacak işlere dönüşmesi de aynı yaklaşımın devamı. Takip satırı kullanıcıya neden ilgilenmesi gerektiğini gösteriyor; görüşmenin sonucu panelde işaretleniyor. Hazır mesaj dış uygulamada açıldığında kontrol ve gönderim sizde kalıyor.
Sonraki kapsamı salonun günlük görevleri üzerinden birlikte değerlendirebiliriz. Etkin firma özellikleri hangi alanların kullanılacağını belirliyor; ekip rolleri ve şube düzeni bu seçime yön veriyor. Biz yeni bir ihtiyacı konuşurken ilgili kaydın nerede oluştuğuna, hangi işlemle değiştiğine ve geçmişinin nasıl izleneceğine bakıyoruz. Ürün sayfasında ekranları ve kullanım kapsamını daha ayrıntılı inceleyebilirsiniz. Görüşmede kendi randevu, paket ve kapanış akışınızı paylaşmanız, sonraki geliştirme kararını somut bir çalışma senaryosuna bağlamamıza yardımcı olur.


Biz bu kayıtları aynı hizmetin farklı adımları olarak ele aldık. Ortak müşteri kaydı üzerinden bağlantı kuruldu; randevu planlaması, gerçekleşen seans ve tahsilat kendi kurallarını korudu.
Firma bağlamı veritabanı işlemi içinde yerel kurulur. PostgreSQL satır güvenliği ve uygulama kontrolleri birlikte kullanılır; portal sorguları ayrıca müşteri kimliğiyle daraltılır.
Kullanımı tamamlanan randevuya bağladık. Geri alma eski hareketi silmek yerine iade hareketi üretir. Ekranlarda kullanılan sayaç defterle birlikte güncellenir.
Akış en fazla beş uygun alternatif üretir. Kullanıcı öneriyi seçebilir; uygun saat bulunmadığında liste boş kalır. Personel ve kaynak koşulları uygunluk hesabına birlikte katılır.
Nakit hareketinin hangi açık kasaya ait olduğunu izlemek için oturum modeli kullanıldı. Kapanışta sayım, beklenen tutar ve fark saklanır; mutlak 50 ₺ ve üzeri fark açıklama ister.
Temel müşteri listesindeki tekrarları, mevcut telefonları, hatalı ve eklenecek satırları gösterir. Siz aktarım öncesi değerlendirebilirsiniz; veri aktarım sırasında tekrar kontrol edilir.

Daha hızlı oku, daha iyi anla: hızlı okuma, odaklanma ve dersler tek platformda.

Ayrılmaya başlayan üyeyi, üyeliği bitmeden fark eden salon yönetim sistemi.
Randevu, seans ve tahsilat arasındaki kayıt ihtiyaçlarınızı paylaşın; sonraki geliştirme kararını günlük işleriniz üzerinden konuşalım.
Projeni Başlat