DriverHub
سیستم جامع مدیریت آموزشگاه رانندگی؛ از مدیریت مربیان و برنامههای کاری تا رزرو جلسات، نوبتدهی و پنلهای اختصاصی کاربران.
این پروژه چیست؟
DriverHub یک سیستم مدیریت آموزشگاه رانندگی است که برای سازماندهی و سادهتر کردن فرآیندهای مختلف آموزشگاه طراحی شده است. این سیستم امکان مدیریت مربیان، برنامه کاری، رزرو و نوبتدهی را فراهم میکند و کاربران مختلف، از جمله مدیر سیستم، مربیان و آموزگاران، به داشبوردها و امکانات متناسب با نقش خود دسترسی دارند. پروژه با معماری Monorepo طراحی شده تا Frontend، Backend و کدهای مشترک در یک ساختار سازمانیافته مدیریت شوند.
- دستهبندی
- Management Platform
- سال
- ۱۴۰۴
- تیم
- NextUp
- تکنولوژیها
- 11 مورد
از کجا شروع شد و چطور حلش کردیم
مدیریت یک آموزشگاه رانندگی شامل بخشهای مختلفی مانند برنامه کاری مربیان، رزرو جلسات، مدیریت کاربران و هماهنگی بین نقشهای مختلف است. وقتی این فرآیندها بهصورت پراکنده مدیریت شوند، برنامهریزی جلسات پیچیدهتر میشود و کاربران مختلف دید مشخصی نسبت به اطلاعات موردنیاز خود ندارند. همچنین هر گروه از کاربران، مانند مدیران و مربیان، نیازها و دسترسیهای متفاوتی دارند.
یک سیستم یکپارچه طراحی کردیم که بخشهای مختلف مدیریت آموزشگاه را در کنار هم قرار میدهد. مدیر سیستم میتواند بخشهای اصلی آموزشگاه را مدیریت کند، مربیان به اطلاعات و برنامههای کاری خود دسترسی دارند و هر نقش از طریق داشبورد اختصاصی، اطلاعات مرتبط با خود را مشاهده میکند. برای سازماندهی بهتر پروژه نیز ساختار Monorepo انتخاب شد تا Frontend، Backend و کدهای مشترک در یک Repository و با ساختاری قابل نگهداری توسعه پیدا کنند.
مهمترین قابلیتهای محصول
مدیریت مربیان
مدیریت اطلاعات و دادههای مربوط به مربیان و سازماندهی آنها در سیستم.
مدیریت برنامه کاری هفتگی
امکان ثبت و مدیریت برنامه کاری هفتگی برای ایجاد ساختاری مشخص در زمانبندی فعالیتها و جلسات.
سیستم رزرو و نوبتدهی
کاربران میتوانند فرآیند رزرو و نوبتدهی را از طریق سیستم انجام دهند و برنامهریزی جلسات بهصورت سازمانیافتهتری مدیریت میشود.
جستوجو و فیلترهای پویا
سیستم شامل قابلیت جستوجو و فیلترهای داینامیک است تا کاربران بتوانند اطلاعات موردنظر خود را سریعتر پیدا و محدود کنند.
داشبورد مدیر
پنل اختصاصی برای مدیریت بخشهای مختلف سیستم و دسترسی به اطلاعات موردنیاز مدیر.
داشبورد مربیان
مربیان به فضای اختصاصی خود دسترسی دارند و میتوانند اطلاعات و دادههای مرتبط با فعالیتهای خود را مشاهده کنند.
داشبورد آموزگاران
یک داشبورد اختصاصی برای نقش آموزگار، متناسب با نیازها و وظایف آنها در سیستم.
پنلهای مبتنی بر نقش
بخشهای مختلف سیستم بر اساس نقش کاربران سازماندهی شدهاند تا هر کاربر به اطلاعات و امکانات مرتبط با خود دسترسی داشته باشد.
با چه چیزی ساخته شده
انتخاب هر تکنولوژی بر اساس نیاز همین پروژه انجام شده، نه عادت.
- Next.js
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- NestJS
- TypeORM
- PostgreSQL
- Redis
- Docker
- pnpm
ساختار فنی پروژه
معماری Monorepo
کل پروژه در یک Repository و بهصورت Monorepo سازماندهی شده است. این ساختار باعث میشود Frontend، Backend و Packageهای مشترک در یک محیط واحد توسعه و مدیریت شوند.
Frontend مستقل
رابط کاربری پروژه با Next.js توسعه داده شده و مسئول نمایش صفحات، داشبوردها و تعامل کاربران با سیستم است.
Backend با NestJS
Backend پروژه بهصورت مستقل با NestJS طراحی شده و مسئول مدیریت API، منطق برنامه و ارتباط با پایگاه داده است.
Packageهای مشترک
Typeها، ثابتها و Utilityهای مشترک در Packageهای مستقل قرار گرفتهاند تا بین بخشهای مختلف پروژه قابل استفاده مجدد باشند. این ساختار از تکرار کد جلوگیری میکند و هماهنگی بین Frontend و Backend را سادهتر میسازد.
پایگاه داده و Cache
اطلاعات اصلی سیستم با PostgreSQL مدیریت میشوند و Redis برای بخشهایی که نیاز به ذخیرهسازی سریعتر یا دادههای موقت دارند، مورد استفاده قرار گرفته است.
محیط توسعه با Docker
سرویسهای موردنیاز پروژه مانند پایگاه داده و Redis از طریق Docker اجرا میشوند تا راهاندازی محیط توسعه سادهتر و یکپارچهتر باشد.
سختترین بخشهای کار
مدیریت چند نقش مختلف
سیستم کاربران مختلفی دارد که هرکدام نیازها و دسترسیهای متفاوتی دارند. طراحی داشبوردها و بخشهای اختصاصی برای هر نقش، نیازمند سازماندهی مناسب اطلاعات و مسیرهای کاربری بود.
هماهنگی بین برنامه کاری و رزروها
برنامههای کاری و فرآیند رزرو باید به شکلی مدیریت شوند که اطلاعات کاربران و زمانبندیها ساختار مشخص و قابل مدیریتی داشته باشند.
سازماندهی پروژه در Monorepo
مدیریت Frontend، Backend و کدهای مشترک در یک Repository نیازمند ساختار مشخصی است. با جدا کردن اپلیکیشنها و Packageهای مشترک، تلاش شد وابستگیها و کدهای قابل استفاده مجدد به شکل سازمانیافتهتری مدیریت شوند.
هماهنگی Typeها بین Frontend و Backend
یکی از چالشهای پروژههای Full-Stack، جلوگیری از تفاوت و ناسازگاری بین مدلهای داده در Frontend و Backend است. قرار دادن Typeهای مشترک در Package مستقل، امکان استفاده مجدد از ساختارهای TypeScript را فراهم میکند.
چه چیزی تغییر کرد
فرآیندهای اصلی مدیریت یک آموزشگاه رانندگی در یک سیستم واحد سازماندهی شدند.
نقشهای مختلف سیستم به داشبوردها و بخشهای اختصاصی خود دسترسی دارند.
مدیریت مربیان، برنامههای کاری و رزرو جلسات در یک پلتفرم یکپارچه قرار گرفته است.
ساختار Monorepo باعث شده Frontend، Backend و کدهای مشترک به شکل سازمانیافتهتری مدیریت شوند.
زیرساخت پروژه بهگونهای طراحی شده که توسعه و نگهداری بخشهای مختلف سیستم سادهتر باشد.