Aristocrat — qapalı B2B biznes klubu və idarəetmə paneli
Bakıda yalnız dəvətnamə ilə üzv qəbul edən biznes klubu üçün üzvlük saytı. Next.js ilə full-stack qurulub: çoxaddımlı müraciət axını, tədbir təqvimi və klubun öz idarə etdiyi admin panel — tədbirlər, xəbərlər və gələn müraciətlər üçün. Məlumat bazası bilərəkdən qurulmayıb; bütün data serverdəki JSON fayllarında yaşayır.
Canlı sayta bax- Müştəri
- Aristocrat Social & Business Club — qapalı B2B şəbəkə, Bakı
- Rol
- Full-stack development — səhifə arxitekturası, çoxaddımlı forma məntiqi, Next.js route handler-ləri, JSON əsaslı məzmun qatı, JWT ilə qorunan admin paneli, komponent sistemi, animasiyalar və VPS-də deploy (PM2 + Nginx).
- Stack
- Next.js · TypeScript · JWT Auth · JSON Storage · Tailwind CSS
- Tarix
- Avqust 2026
- Dil
- 3 — AZ / EN / RU
Dəvətnamə ilə işləyən klub üçün sayt eyni anda iki ziddiyyətli işi görməlidir: klubu tanıtmalı, amma hər kəsi dəvət etməməlidir. Böyük «qeydiyyatdan keç» düyməsi eksklüzivlik iddiasını elə birinci ekranda pozur; müraciət yolu olmayan sayt isə funksiyasız qalır. İkinci problem sayt yayımlandıqdan sonra başlayır. Tədbir təqvimi klubun canlı olduğunun yeganə görünən sübutudur — keçmiş tarixlərlə dolu təqvim isə əks mesaj verir. Müraciətlər də eyni cürdür: klubun bütün üzv axını o formadan keçir və bir poçt qutusunda itməməlidir. Yəni sayt yalnız qurulmalı deyil, klubun özü tərəfindən saxlanıla bilməli idi.
- Çoxaddımlı müraciət forması — suallar bir-bir, irəliləyiş göstəricisi ilə
- 2026 illik tədbir təqvimi, tarix və məkan detalları
- Auditoriya seqmentləri: sahibkarlar, startaplar, top menecerlər
- İmtiyazlar bölməsi: qapalı şəbəkə, eksklüziv tədbirlər, investisiya imkanları, bilik mübadiləsi
- Tərəfdaşlar bölməsi
- Klubun fəlsəfəsini izah edən redaksiya üslublu bölmələr
- Ayrıca tədbirlər səhifəsi — qarşıdan gələn tədbirlər tarix və kateqoriya ilə (Qapalı Sammit, Qeyri-rəsmi Görüş, Qala)
- Ayrıca xəbərlər səhifəsi
- Üzvlük iki trekə bölünüb: fərdi (Şəxslər) və korporativ (Şirkətlər)
- Admin panel: tədbirlərin əlavəsi, redaktəsi və silinməsi — tarix, məkan və kateqoriya ilə
- Admin paneldən xəbər yazılarının dərci
- Müraciət formasından gələn cavabların panel daxilində siyahılanması
- Tədbir və xəbər şəkillərinin birbaşa paneldən yüklənməsi
- JWT ilə qorunan admin girişi — panel marşrutları middleware səviyyəsində bağlıdır
- Frontend
- Next.js App Router. Ana səhifə, üzvlük trekləri, tədbirlər, xəbərlər və müraciət səhifələri. İnterfeys üç dildədir və seçim brauzerdə saxlanılır — hər dilin ayrıca ünvanı yoxdur, bu güzəşt aşağıda ayrıca izah olunur.
- Backend
- Ayrıca API serveri yoxdur — backend eyni Next.js tətbiqinin route handler-ləridir: müraciətlərin qəbulu, tədbir və xəbərlərin yazılması, şəkillərin yüklənməsi. Admin paneli də eyni layihənin `/admin` marşrutlarındadır, yəni tip tərifləri, komponentlər və deploy prosesi saytla ortaqdır.
- Məlumat qatı
- Məlumat bazası yoxdur. Tədbirlər, xəbərlər və gələn müraciətlər serverin diskində JSON faylları kimi saxlanılır: admin panel faylı yazır, səhifələr onu oxuyur. Səbəbi aşağıdakı «Niyə məlumat bazası qurulmadı?» qərarındadır.
- Autentifikasiya
- Öz JWT axını: token serverdə imzalanır və `httpOnly` cookie-yə yazılır. `/admin` altındakı marşrutlar həm middleware səviyyəsində, həm də hər route handler-in içində yoxlanılır.
- Media
- Tədbir və xəbər şəkilləri admin paneldən yüklənir və VPS-in diskinə yazılır; saytda `next/image` üzərindən ölçülərək verilir.
- İnfrastruktur
- VPS üzərində Next.js prosesi PM2 ilə saxlanılır, qarşıda Nginx reverse proxy dayanır — SSL, sıxılma və statik faylların keşi onun üzərindədir.
Niyə çoxaddımlı forma?
Üzvlük müraciəti çoxlu sual tələb edir. Hamısını bir ekranda göstərmək istifadəçini qaçırır. Formanı addımlara böldüm və irəliləyiş göstəricisi əlavə etdim — hər ekranda bir sual olduqda insan başladığı işi tamamlamağa daha meyilli olur.
Dizayn auditoriyanı süzür
Klub kütləvi deyil. Vizual dil də bunu deməlidir: sakit rənglər, geniş boşluq, redaksiya tipografiyası. Parlaq və şən dizayn burada mesajla ziddiyyət təşkil edərdi — sayt kimi dəvət etdiyini görünüşü ilə də bildirir.
Statik generasiya ilə dərhal açılış
Tanıtım səhifələrinin məzmunu tez-tez dəyişmir, ona görə onlar build zamanı hazır HTML kimi yaradılır. Nəticədə server gözləməsi olmur — dəvətnamə ilə gələn adam saytı dərhal açılmış görür. Tədbir və xəbər kimi dəyişən məzmun isə serverdən oxunur.
Üzvlük iki ayrı trekə bölündü
Sahibkarın fərdi üzvlüyü ilə şirkətin korporativ paketi eyni məhsul deyil — qiymət, imtiyazlar və qərar verən adam fərqlidir. Menyuda bu iki yolu ayırmaq hər iki alıcının ilk klikdə öz səhifəsinə düşməsini təmin edir. Vahid «üzvlük» səhifəsi hər ikisinə yarımçıq cavab verərdi.
Tədbirlər səhifəsi vəd yerinə təqvim verir
Qapalı klub barədə ən böyük şübhə «burada həqiqətən nəsə olurmu» sualıdır. Tarixi və kateqoriyası olan tədbirlər siyahısı bu şübhəni bir baxışda bağlayır — cavabı mətn yox, məlumatın özü verir. Bu, saytı statik broşürdən klubun canlı vitrininə çevirən bölmədir.
Fonda Bakı silueti dayanır, stok şəkil yox
Klub beynəlxalq şəbəkə deyil, konkret bir şəhərin biznes mühitidir. Hero-da Bakının tanınan silueti var — ziyarətçi ilk saniyədə bu klubun harada və kimlərin arasında qurulduğunu anlayır. Neytral stok fotoğraf eyni yeri tutar, amma heç nə deməzdi.
Niyə məlumat bazası qurulmadı?
Klubun bütün datası bir ovucdur: ildə onlarla tədbir, bir neçə onlarla xəbər, ayda bir neçə müraciət. Bu həcmdə relyasion baza qurmaq ayrıca proses, ayrıca yedəkləmə rejimi və migrasiya intizamı deməkdir — heç bir real fayda vermədən. Data serverdəki JSON fayllarında saxlanılır: admin panel faylı yazır, səhifə onu oxuyur. Yedəkləmə bir qovluğun kopyalanmasıdır, məzmunun tarixçəsi isə faylların özündə görünür. Bu, «baza qurmağa vaxt olmadı» qərarı deyil — yükə uyğun qərardır. Yazma tezliyi artıb eyni anda bir neçə nəfər redaktə etməyə başlayanda baza əlavə edilməlidir; ondan əvvəl yox. Mühəndislikdə çətin olan texnologiyanı əlavə etmək deyil, lazım olmayanı əlavə etməmək intizamıdır.
Təqvim yalnız təzə qaldıqca sübutdur
Yuxarıda tədbirlər səhifəsinin klubun canlı vitrini olduğunu yazmışdım — bu, yalnız təqvim təzə qaldıqda doğrudur. Keçmiş tarixlərlə dolu səhifə klubun işlədiyini yox, dayandığını göstərir. Ona görə tədbirlər kodda deyil, admin paneldə yaşayır: klub yeni tarixi özü əlavə edir, mənim iştirakım olmadan. Bu layihədə admin panel əlavə funksiya deyil — saytın əsas arqumentini ayaqda saxlayan mexanizmdir.
Müraciətlər poçt qutusuna yox, panelə düşür
Üzvlük müraciəti bu klub üçün ən dəyərli məlumatdır. Yalnız e-poçt bildirişinə söykənən forma bir spam süzgəci ilə itir və ən pisi odur ki, heç kim itdiyini bilmir. Ona görə hər müraciət serverdə saxlanılır və admin paneldə siyahı kimi görünür — klub istənilən vaxt geri qayıdıb baxa bilir.
Giriş tokeni httpOnly cookie-də saxlanılır
Paneldə klubun tədbir planı və müraciət edən iş adamlarının şəxsi məlumatları var — yəni qapalılıq iddiası olan bir klubda ən həssas hissə məhz oradadır. Token `localStorage`-da saxlanılsaydı, istənilən XSS boşluğu onu oxuya bilərdi. `httpOnly` cookie JavaScript üçün görünmür, `SameSite` isə tokenin başqa saytdan gələn sorğuya qoşulmasının qarşısını alır. Yoxlama yalnız middleware-də deyil, hər route handler-in öz içindədir: interfeysi gizlətmək qorunma deyil, sadəcə görünüşdür.
VPS, çünki yazılan fayllar qalmalıdır
Sayt öz datasını serverin diskinə yazır: JSON faylları və yüklənən şəkillər. Serverless mühitdə fayl sistemi müvəqqətidir — panel bir şey yazır, növbəti deploy onu silir. Ona görə tətbiq VPS-də işləyir: Next.js prosesini PM2 ayaqda saxlayır, Nginx qarşıda SSL və statik faylları idarə edir. JSON üzərində işləmək qərarı yalnız davamlı disk olan yerdə mənalıdır — bu ikisi ayrı seçim deyil, eyni seçimdir.
Üç dil bir ünvanda — güzəşt bilərəkdən edilib
İnterfeys üç dildədir, amma hər dilin ayrıca ünvanı yoxdur: seçim brauzerdə saxlanılır. Bunun qiyməti odur ki, axtarış sistemləri üç dili ayrı səhifə kimi indeksləmir. Bu layihədə güzəşt məqbuldur, çünki klub üzvü Google axtarışından gəlmir — dəvətnamə ilə, birbaşa linkdən gəlir. Üzvi axtarış kanal olsaydı, dil marşrut səviyyəsində ayrılmalı olardı; burada isə həmin iş heç kimə xidmət etməyən mürəkkəblik olardı.
Sayt 2026-cı ilin avqustundan canlıdır. Klub tədbir təqvimini, xəbərləri və gələn üzvlük müraciətlərini admin paneldən özü idarə edir — yəni saytın əsas arqumenti olan təqvimin təzə qalması artıq developerdən asılı deyil. Mobil performans ölçülüb və hədəfin altındadır; optimallaşdırma planlaşdırılır, rəqəm yaxşılaşandan sonra bura yazılacaq.
- Klub tədbir və ya xəbər əlavə etmək üçün developerə müraciət etməlidir?
- Xeyr. Tədbirlər, xəbərlər və onların şəkilləri admin paneldən idarə olunur — klub təqvimi özü yeniləyir, kod dəyişikliyi tələb olunmur.
- Müraciət formasından gələn məlumat hara düşür?
- Hər müraciət serverdə saxlanılır və admin paneldə siyahı kimi görünür, yəni yalnız e-poçt bildirişinə söykənmir. Klub istənilən vaxt keçmiş müraciətlərə qayıda bilir.
- Niyə layihədə məlumat bazası yoxdur?
- Klubun data həcmi kiçikdir — ildə onlarla tədbir və xəbər, ayda bir neçə müraciət. Bu yükdə relyasion baza əlavə fayda vermədən ayrıca proses və yedəkləmə intizamı tələb edərdi. Data serverdəki JSON fayllarında saxlanılır; yazma tezliyi artanda bazaya keçid planlanmış addımdır, təcili iş deyil.
- Saytı və admin paneli kim hazırlayıb?
- Bütün qatlar — frontend, Next.js route handler-ləri, məzmun qatı, admin paneli, autentifikasiya və VPS-də deploy — Nurlan Qadirov tərəfindən yazılıb.
- Sayt neçə dildə işləyir?
- İnterfeys üç dildədir: azərbaycan, ingilis və rus. Hər dilin ayrıca ünvanı yoxdur — seçim brauzerdə saxlanılır. Bu, klubun auditoriyası axtarışdan yox, dəvətnamədən gəldiyi üçün bilərəkdən verilmiş güzəştdir.
Layihənizi danışaq — adətən eyni gün cavab verirəm.
Nurlan Qadirov — Baku, Azerbaijan