نرم‌افزار سفارشی · فروشگاه اینترنتی · آموزش رباتیک و برنامه‌نویسی

روبوکد: آموزشگاه، آزمون آنلاین، فروشگاه و شبکه‌ی نمایندگان روی یک سامانه

سکوی یکپارچه‌ی مؤسسه‌ی آموزشی روبوکد روی .NET 10: دوره‌ی آنلاین و حضوری، آزمون با کارنامه، فروشگاه با قیمت‌گذاری عمده، صدور گواهی با استعلام QR، پنل نمایندگان و مدرسان با پورسانت، و ورود یکپارچه از شاد.

کارفرما
مؤسسه آموزشی روبوکد
حوزه
آموزش رباتیک و برنامه‌نویسی
سال
1404
وضعیت
در حال بهره‌برداری
  • تحلیل و کشف نیاز
  • طراحی تجربه و رابط کاربری
  • معماری نرم‌افزار
  • توسعه فرانت‌اند
  • توسعه بک‌اند و API
  • طراحی پایگاه داده
  • یکپارچه‌سازی با سیستم‌های دیگر
  • استقرار و DevOps
  • سئوی فنی
  • تست و تضمین کیفیت
  • پشتیبانی و توسعه مستمر

نتیجه در عدد

18
ماژول با اسکیمای مستقل

در یک استقرار واحد، روی یک پایگاه داده

2,831
تست خودکار

1,922 دامنه و API، 697 پنل، 212 سایت

154
صفحه‌ی سایت و پنل

57 صفحه‌ی عمومی، 97 صفحه‌ی مدیریتی

چالش

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

با چهار سیستم جدا، کاربر چهار بار ثبت‌نام می‌کند، هنرجویی که دوره خریده در فروشگاه غریبه است، پورسانت نماینده باید دستی از دو گزارش جمع زده شود، و مدیر برای یک عدد ساده — «این ماه چقدر فروختیم» — باید سه فایل اکسل کنار هم بگذارد.

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

راه‌حل

یک سکوی واحد ساخته شد که هر چهار کسب‌وکار را اجرا می‌کند، ولی درونش 18 ماژول با مرز واقعی است: هر ماژول اسکیمای پایگاه داده‌ی خودش را دارد و به جدول ماژول دیگر دست نمی‌زند.

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

سه مسئله‌ی سختِ اول این‌طور حل شدند:

ورود از شاد با تبادل سرور‌به‌سرور و توکن مرچنت انجام می‌شود، با هش یک‌بارمصرف که ده دقیقه اعتبار دارد؛ حساب کاربر بدون شماره تلفن ساخته می‌شود.

ویترین دوم با مفهومی به نام Surface حل شد: فروشگاه اصلی و لندینگ شاد کاتالوگ، روش ارسال، سفارش و درگاه جدا دارند — روی همان داده و همان موجودی، بدون کپی کردن سیستم.

ویدیوی دو گیگابایتی تکه‌تکه بارگذاری می‌شود و بعد از قطعی اینترنت از همان تکه ادامه می‌دهد، نه از اول.

و چون پول از چند مسیر جابه‌جا می‌شود — خرید دوره، خرید کالا، کیف پول، پورسانت نماینده، بازپرداخت — کارهای بین‌ماژولی از جدول outbox رد می‌شوند: اعطای دوره پس از پرداخت، شارژ کیف پول پس از بازپرداخت، و 44 رویداد دیگر، با تلاش مجدد و در نهایت dead-letter. هیچ‌کدام در یک تراکنش گره نمی‌خورند و هیچ‌کدام گم نمی‌شوند.

قابلیت‌های کلیدی

  • آزمون آنلاین با کارنامه‌ی تفکیکی

    بانک سؤال، دسته و بسته‌ی آزمون، برگزاری زمان‌دار، تصحیح خودکار، و کارنامه با نمره‌ی خام و درصد به تفکیک.

  • صدور گواهی و کارت عضویت با QR

    گواهی دوزبانه با قالب و مهر، کارت عضویت با کد QR و صفحه‌ی عمومی استعلام — هرکسی می‌تواند اصالت گواهی را خودش بررسی کند. هنرجو هم می‌تواند از پنلش درخواست گواهی بدهد.

  • فروشگاه با قیمت‌گذاری پلکانی عمده

    محصول با تنوع و موجودی، قیمت عمده به‌صورت پلکانی، روش ارسال بر پایه‌ی منطقه‌ی جغرافیایی و وزن، ارسال رایگان بالای مبلغ، و رسید کارت‌به‌کارت.

  • پنل نمایندگان، مربیان و مدرسان

    درخواست و تأیید همکاری، سطح‌بندی و تخصص، سیاست پورسانت با تسویه‌ی خودکار، و کارنامه‌ی درآمد تفکیک‌شده — نماینده خودش می‌بیند از کدام فروش چقدر سهم دارد.

  • دوره‌ی آنلاین با ویدیوی دو گیگابایتی

    فصل و درس، بارگذاری تکه‌ای تا 2 گیگابایت با ازسرگیری پس از قطعی، فروش درس‌به‌درس یا بسته‌ای، پخش‌کننده‌ی اختصاصی و کنترل دسترسی محتوا.

  • پرداخت، کیف پول و کد تخفیف هدف‌دار

    اتصال مستقیم به درگاه پارسیان با تأیید و برگشت مطابق قرارداد بانک و محافظت در برابر callback تکراری، کیف پول، کد تخفیف با سقف مصرف، و بازپرداخت قابل ردیابی.

  • ورود یکپارچه از شاد

    دانش‌آموز از داخل شبکه‌ی دانش‌آموزی وارد می‌شود، بدون شماره تلفن: تبادل سرور‌به‌سرور با توکن مرچنت و هش یک‌بارمصرف با انقضای ده‌دقیقه‌ای.

  • دو ویترین روی یک داده

    فروشگاه اصلی و لندینگ شاد کاتالوگ، روش ارسال، سفارش و درگاه جدا دارند — روی همان موجودی و همان گزارش، بدون کپی کردن سیستم.

معماری و فناوری

سبک معماری
مونولیت ماژولار
الگوها
طراحی دامنه‌محور (DDD)رویدادمحورالگوی Outbox

مونولیت ماژولار: یک واحد مستقر می‌شود، ولی مثل چند سرویس مرزبندی شده است — سادگی استقرار یکپارچه، با انضباط مرزی میکروسرویس.

مرز واقعی، نه اسمی. هر ماژول DbContext و اسکیمای خودش را دارد و همه در یک پایگاه داده‌ی PostgreSQL با 18 اسکیمای مجزا می‌نشینند. یک ماژول نمی‌تواند جدول ماژول دیگر را join کند؛ فقط از قرارداد عمومی آن می‌خواند. این تنها چیزی است که جلوی تبدیل شدن یک مونولیت به کلاف را می‌گیرد، و چون در سطح اسکیما اعمال شده، رعایتش اختیاری نیست.

ارتباط رویدادمحور با تحویل تضمینی. کارهای بین‌ماژولی — اعطای دوره پس از پرداخت، شارژ کیف پول پس از بازپرداخت، محاسبه‌ی پورسانت نماینده — از جدول outbox رد می‌شوند، با تلاش مجدد و تأخیر نمایی و در نهایت dead-letter. پرداخت موفق هیچ‌وقت به‌خاطر کند بودن یک ماژول دیگر برنمی‌گردد.

دو ویترین روی یک داده. مفهوم Surface اجازه می‌دهد فروشگاه اصلی و لندینگ شاد کاتالوگ، روش ارسال، سفارش و درگاه جدا داشته باشند، بدون کپی کردن سیستم. اگر ویترین سومی لازم شود، یک پیکربندی است نه یک استقرار تازه.

پیکربندی زنده. درگاه، قالب پیامک، تنظیمات سئو، محتوای لندینگ و اتصال SSO از پنل تغییر می‌کنند؛ استقرار دوباره لازم نیست. برای سامانه‌ای که تیم عملیاتش برنامه‌نویس نیست، این تفاوت بین «فردا انجام می‌شود» و «الان انجام شد» است.

بک‌اند و API
.NET 10C#Entity Framework CoreMediatRHangfireREST API

API، دامنه و کارهای زمان‌بندی‌شده؛ 96 پروژه، 65 کنترلر نسخه‌دار

پایگاه داده
PostgreSQL

PostgreSQL 16 — 18 اسکیمای مجزا، 109 مهاجرت نسخه‌بندی‌شده

کش
Redis

Redis 7 — نشست، کد یک‌بارمصرف، محدودیت نرخ

فرانت‌اند
Next.jsReact.jsTypeScriptTailwind CSS

سایت عمومی با رندر سمت سرور و سئو — 57 صفحه، راست‌چین کامل و تقویم شمسی

فرانت‌اند
Vite

پنل مدیریت با TanStack Query — 97 صفحه‌ی مدیریتی

زیرساخت و استقرار
Dockernginx

Docker Compose، nginx و Let’s Encrypt — تک‌سرور و بازگشت‌پذیر

CI/CD و مانیتورینگ
SerilogSeq

لاگ ساخت‌یافته و ردیابی درخواست

یکپارچه‌سازی‌ها

  • شاد — ورود یکپارچه از شبکه‌ی دانش‌آموزی، بدون شماره تلفن
  • درگاه بانک پارسیان — تأیید، برگشت و محافظت در برابر callback تکراری
  • SMS.ir — پیامک تراکنشی و کمپینی با لاگ کامل
  • سرویس ایمیل اختصاصی با DKIM، SPF و DMARC

شرح تکمیلی

همه‌ی امکانات، به تفکیک

هر بخش یک محصول مستقل است، ولی همه روی یک هویت، یک سبد، یک پرداخت و یک گزارش می‌نشینند.

آموزش

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

آزمون

بانک سؤال، دسته‌ی آزمون و بسته‌ی آزمون، برگزاری زمان‌دار، تصحیح خودکار، و کارنامه‌ی تفکیکی با نمره‌ی خام و درصد.

فروشگاه

محصول با تنوع و موجودی، قیمت‌گذاری پلکانی عمده، روش‌های ارسال بر پایه‌ی منطقه‌ی جغرافیایی و وزن، ارسال رایگان بالای مبلغ مشخص، و ثبت رسید کارت‌به‌کارت.

پرداخت

اتصال مستقیم به درگاه پارسیان با تأیید و برگشت تراکنش مطابق قرارداد بانک، کیف پول کاربر، کد تخفیف هدف‌دار با سقف مصرف، و بازپرداخت قابل ردیابی.

گواهی و کارت

صدور گواهی دوزبانه با قالب و مهر، کارت عضویت با کد QR و صفحه‌ی عمومی استعلام، و امکان درخواست گواهی از سوی هنرجو.

شبکه‌ی همکاران

نماینده، مربی و مدرس با فرایند درخواست و تأیید، سطح‌بندی و تخصص، سیاست پورسانت و تسویه‌ی خودکار، و کارنامه‌ی درآمد تفکیک‌شده.

ارتباط با کاربر

پیامک تراکنشی و کمپینی روی SMS.ir با کد قالب جداگانه برای هر رویداد و لاگ کامل ارسال، خبرنامه، و اطلاعیه‌ی درون‌برنامه‌ای با متن غنی و پیوست، هدف‌گذاری‌شده بر اساس نقش.

محتوا و رسانه

وبلاگ و صفحه‌ساز بلوکی، تنظیمات سئو و متادیتا، کتابخانه‌ی رسانه با پردازش تصویر و بندانگشتی، و سرو امن فایل خصوصی.

هویت

ورود با رمز یک‌بارمصرف، نقش و مجوز ریزدانه، پیوند ولی و دانش‌آموز، دفترچه‌ی نشانی، و ورود یکپارچه از شاد.

نقشه‌ی هجده ماژول

هر ماژول اسکیمای پایگاه داده‌ی خودش را دارد و به جدول ماژول دیگر دست نمی‌زند؛ ارتباطشان فقط از راه قرارداد عمومی و رویداد است.

هویت و دسترسی — کاربر، نقش، توکن، نشانی، هویت شاد

آموزش — دوره، ثبت‌نام، خرید دوره، ارسال محتوا

آزمون — دسته‌ی آزمون، بسته‌ی آزمون، شرکت در آزمون

فروشگاه — محصول، سفارش، ارسال

پرداخت — تراکنش، تأیید، بازپرداخت، برگشت بانکی

قیمت و تخفیف — کیف پول، کوپن، پورسانت، تسویه

گواهی — درخواست گواهی، کارت عضویت

نمایندگان — درخواست مربی و مدرس، سطح، تخصص

اعلان — کمپین، اطلاعیه، خبرنامه

رسانه — فایل، پردازش تصویر، آپلود تکه‌ای

محتوا — مقاله، صفحه‌ساز، بلوک

تنظیمات — پیکربندی زنده‌ی سامانه بدون استقرار

جست‌وجو — نمایه‌ی یکپارچه‌ی کاتالوگ

گزارش — داشبورد فروش و عملکرد

رد ممیزی — ثبت تغییرات حساس

باشگاه مشتریان — امتیاز و وفاداری

جشنواره — رویداد و مسابقه

پشتیبان اداری — ابزارهای داخلی

انضباط مهندسی

  • 2,831 تست خودکار — 1,922 تست دامنه و API، 697 تست پنل و 212 تست سایت. هر رفع اشکال با تستی همراه می‌شود که دقیقاً همان حالت خراب را می‌سنجد.
  • 109 مهاجرت پایگاه داده — تغییر ساختار همیشه نسخه‌بندی‌شده و قابل بازگشت است؛ هیچ تغییری دستی روی پایگاه داده‌ی تولید اعمال نمی‌شود.
  • 44 رویداد یکپارچه‌سازی — قرارداد بین ماژول‌ها صریح و تایپ‌دار است، نه فراخوانی مستقیم بین لایه‌ها.
  • 65 کنترلر API با نسخه‌بندی، محدودیت نرخ لایه‌ای و پاسخ خطای استاندارد RFC 7807.

یکپارچه‌سازی‌های بیرونی

شاد — ورود یکپارچه از شبکه‌ی دانش‌آموزی: تبادل سرور‌به‌سرور با توکن مرچنت، هش یک‌بارمصرف با انقضای ده‌دقیقه‌ای، و ساخت حساب بدون شماره تلفن.

بانک پارسیان — درخواست خرید، callback امن، تأیید تراکنش پس از تطبیق کامل مبلغ و شناسه‌ها، و برگشت وجه، با محافظت idempotency در برابر callback تکراری.

SMS.ir — پیامک تراکنشی با کد قالب جداگانه برای هر رویداد، کمپین زمان‌بندی‌شده، و لاگ کامل ارسال.

سرویس ایمیل اختصاصی — ایمیل سازمانی روی همان زیرساخت با DKIM، SPF و DMARC، به‌همراه محافظت در برابر حمله‌ی جست‌وجوی فراگیر.

پروژه‌ی مشابهی در ذهن دارید؟

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

رویدادیار شهرداری تهران: رویدادهای فرهنگی 22 منطقه روی یک سامانه
کار شاخص

نرم‌افزار سفارشی

رویدادیار شهرداری تهران: رویدادهای فرهنگی 22 منطقه روی یک سامانه

سامانه‌ی یکپارچه‌ی رویدادها و اماکن فرهنگی شهر تهران: زنجیره‌ی تأیید چندمرحله‌ای، اطلس فرهنگی روی نقشه، گزارش میدانی ژئوفنس‌شده و نظرسنجی شهروندی — سه کلاینت وب، موبایل و API روی یک هسته.

  • React.js
  • Vite
  • TypeScript
  • Leaflet

شهرداری تهران · 1404

کلینیک زیبایی شایلین: رزرو آنلاین، مجله‌ی تخصصی و یک پنل مدیریت
کار شاخص

نرم‌افزار سفارشی

کلینیک زیبایی شایلین: رزرو آنلاین، مجله‌ی تخصصی و یک پنل مدیریت

سامانه‌ی جامع کلینیک زیبایی شایلین روی .NET 10 و Next.js: رزرو آنلاین با انتخاب خدمت و پزشک و تقویم شمسی، گالری قبل و بعد، مجله‌ی تخصصی با صفحه‌ساز، وب‌اپلیکیشن نصب‌شدنی با اعلان Web Push، و یک پنل مدیریت برای همه‌ی این‌ها.

  • Next.js
  • React.js
  • TypeScript
  • Vite

کلینیک زیبایی شایلین · 1404

کلینیک مشاوره روشا: سامانه‌ی رزرو تا تسویه‌ی مشاور، روی وردپرس اختصاصی
کار شاخص

نرم‌افزار سفارشی

کلینیک مشاوره روشا: سامانه‌ی رزرو تا تسویه‌ی مشاور، روی وردپرس اختصاصی

سامانه‌ی یکپارچه‌ی مدیریت کلینیک روان‌شناسی روی وردپرس: رزرو آنلاین با قفل ضد تداخل، پرداخت و بیعانه، میز پذیرش 15 ماژولی، پنل مشاور با محاسبه‌ی سهم، و گزارش مالی با PDF فارسی. بدون افزونه‌ی رزرو یا قالب آماده.

  • WordPress
  • PHP
  • REST API
  • MariaDB

کلینیک مشاوره روشا · 1404