سالن‌یار — نوبت‌دهی آرایشگاه، بدون نصب اپ

سامانه‌ی نوبت‌دهی چندمستأجری برای آرایشگاه‌ها: هر سالن یک لینک رزرو می‌گیرد که در هر مرورگری باز می‌شود، به‌علاوه‌ی مینی‌اپ بله، پنل سالن و آرایشگر و کنسول مدیر پلتفرم.

نتیجه

آماده‌ی پایلوت پس از ۱۲ فاز: تست واحد و e2e، بودجه‌ی کارایی اجباری در build (حدود ۸۸ کیلوبایت جاوااسکریپت gzip در صفحه‌ی اول) و کوئری‌های اصلی اندازه‌گیری‌شده روی حدود ۴٫۴ میلیون نوبت.

مسئله

آرایشگاه‌ها نوبت را تلفنی یا در دایرکت اینستاگرام می‌گیرند، و نتیجه‌اش نوبت‌های روی هم، مشتری‌ای که یادش می‌رود و صندلی‌ای است که خالی می‌ماند. ابزارهای آماده‌ی نوبت‌دهی دو فرض دارند که در ایران جواب نمی‌دهد: اینکه مشتری برای یک نوبت اپ نصب می‌کند و ثبت‌نام می‌کند، و اینکه پیامک و اعلانِ سرویس‌های خارجی به گوشی می‌رسد. پس رزرو باید از یک لینک شروع شود، در کمتر از یک دقیقه تمام شود، و روی بله و پیامک داخلی تکیه کند.

بک‌اند NestJS روی PostgreSQL و Prisma، صف BullMQ روی Redis، و یک فرانت React که هم صفحه‌ی وب است و هم مینی‌اپ بله.

یک لینک برای هر سالن. salonyar.ir/<slug> صفحه‌ی سالن — نام، آدرس، ساعت کاری، خدمات و قیمت — را سمت سرور رندر می‌کند (nginx SSI با کش ۳۰ ثانیه‌ای)، پس لینکی که در واتس‌اپ یا اینستاگرام فرستاده می‌شود خود سالن را نشان می‌دهد، نه یک صفحه‌ی خالی.

یک هسته‌ی رزرو، دو در ورودی. وب و بله از یک مسیر می‌گذرند: «هر آرایشگری» پیش‌فرض است و نزدیک‌ترین زمان‌های خالی اول می‌آیند. مشتری بدون ورود می‌گردد و فقط لحظه‌ی ثبت با کد یک‌بارمصرف تأیید می‌شود. در بله شماره با دیالوگ خود بله تأیید می‌شود، بدون تایپ، و حساب وب و بله یک هویت می‌شوند.

رزرو تکراری را دیتابیس رد می‌کند، نه کد. ایجاد، لغو، جابه‌جایی، تأیید و رد نوبت، با پنجره‌ی لغو مخصوص هر آرایشگر. دو رزرو هم‌زمان روی یک زمان را یک exclusion constraint در PostgreSQL متوقف می‌کند، و یک تست همزمانی دقیقاً همین را می‌آزماید.

پنل موبایل‌محور برای سالن. تقویم همه‌ی نوبت‌ها، ثبت نوبت تلفنی، و لینک و QR قابل چاپ. سالن خودش ثبت‌نام می‌کند و یک ویزارد خدمات پیش‌فرض، آرایشگرها و ساعت کاری را می‌چیند و در پایان لینک وب، QR، لینک بله و متن بیوی اینستاگرام را تحویل می‌دهد. پلن‌ها دوره‌ی آزمایشی دارند، سقف آرایشگر بر اساس پلن، و تبدیل روزهای باقی‌مانده هنگام تغییر پلن.

برای نیامدن مشتری: یادآوری در بله با پیامک پشتیبان، و بیعانه با کیف پول بله. اعلان‌ها از صف BullMQ با الگوی outbox می‌روند؛ کد ورود از سرویس «سفیر» بله و پیامک کاوه‌نگار می‌آید، با محدودیت نرخ. استک production هر روز خودش بکاپ می‌گیرد و هشدارهایش را به بله می‌فرستد، و API با تنظیمات ناامن اصلاً بالا نمی‌آید.