feat(ui): implement phase 3.8 branding and UX improvements

- Integrate SweetAlert2 into WordPress bridge for enhanced error reporting
- Add professional favicon set (SVG, ICO, PWA, Apple Touch) and manifest
- Replace default Laravel welcome page with branded landing page
- Compact Filament login card dimensions and padding for better UI
- Update documentation (AGENT.md, CLIENT_DELIVERY.md) to reflect phase 3.8
- Refactor wallet transaction migration for SQLite compatibility
This commit is contained in:
Kazem Alghasi 2026-10-31 18:37:02 +03:30
parent cf7b76b707
commit 06601da30c
18 changed files with 479 additions and 315 deletions

View File

@ -1043,4 +1043,31 @@
.ifnex-total-spent strong {
color: #f9fafb;
}
}
}
/* ══════════════════════════════════════════════════════════════
SweetAlert2 — هماهنگ‌سازی با هویت بصری IFNEX (فاز ۳.۸)
پاپ‌آپ خطاهای فرم سفارش: فونت وزیرمتن + RTL + دکمهٔ کهربایی
══════════════════════════════════════════════════════════════ */
.ifnex-swal {
direction: rtl;
font-family: 'Vazirmatn', 'IranYekan', Tahoma, sans-serif;
border-radius: 16px;
}
.ifnex-swal .swal2-title {
font-family: 'Vazirmatn', 'IranYekan', Tahoma, sans-serif;
font-size: 18px;
font-weight: 700;
color: #1f2937;
}
.ifnex-swal .swal2-html-container {
font-family: 'Vazirmatn', 'IranYekan', Tahoma, sans-serif;
font-size: 14px;
color: #6b7280;
line-height: 1.8;
}
.ifnex-swal .swal2-confirm {
font-family: 'Vazirmatn', 'IranYekan', Tahoma, sans-serif;
font-size: 14px;
font-weight: 600;
border-radius: 8px;
}

View File

@ -383,7 +383,7 @@ jQuery(document).ready(function($) {
// حذف یه بسته
function removePackage(pkgId) {
if (packages.length <= 1) {
alert('حداقل باید یک بسته وجود داشته باشد.');
swalError('امکان حذف نیست', 'حداقل باید یک بسته وجود داشته باشد.');
return;
}
packages = packages.filter(function(p) { return p.id !== pkgId; });
@ -544,7 +544,7 @@ jQuery(document).ready(function($) {
// افزودن یه قلم جدید
function addInvoiceItem() {
if (invoiceItems.length >= MAX_ITEMS) {
alert('حداکثر ' + MAX_ITEMS + ' قلم می‌توانید اضافه کنید.');
swalError('سقف اقلام پر است', 'حداکثر ' + MAX_ITEMS + ' قلم می‌توانید اضافه کنید.');
return;
}
var itemNumber = invoiceItems.length + 1;
@ -564,7 +564,7 @@ jQuery(document).ready(function($) {
// حذف یه قلم
function removeInvoiceItem(itemId) {
if (invoiceItems.length <= 1) {
alert('حداقل باید یک قلم وجود داشته باشد.');
swalError('امکان حذف نیست', 'حداقل باید یک قلم وجود داشته باشد.');
return;
}
invoiceItems = invoiceItems.filter(function(i) { return i.id !== itemId; });
@ -987,12 +987,31 @@ jQuery(document).ready(function($) {
function showFormError(msg) {
$('#ifnex-form-error').text(msg).show();
setTimeout(function() { $('#ifnex-form-error').fadeOut(); }, 4000);
// پاپ‌آپ مرکزی خطا (فاز ۳.۸ — SweetAlert2)
swalError('خطا در فرم سفارش', msg);
}
function showCalcError(msg) {
$('#ifnex-calc-error').text(msg).show();
}
// ─── SweetAlert2 helpers (فاز ۳.۸) ───
// پاپ‌آپ خطا در مرکز صفحه؛ اگه Swal لود نشده بود به alert برمی‌گرده
function swalError(title, text) {
if (window.Swal && typeof window.Swal.fire === 'function') {
window.Swal.fire({
icon: 'error',
title: title,
text: text || '',
confirmButtonText: 'متوجه شدم',
confirmButtonColor: '#f59e0b',
customClass: { popup: 'ifnex-swal' }
});
} else {
alert((title ? title + '\n' : '') + (text || ''));
}
}
// ─── Submit Order ───
$('#ifnex-submit-order').on('click', function() {
@ -1077,10 +1096,15 @@ jQuery(document).ready(function($) {
: '✅ تأیید و ثبت سفارش'
);
var submitErrMsg = (res && res.data) ? res.data : 'خطا در ثبت سفارش';
$('#ifnex-submit-error')
.text(res.data || 'خطا در ثبت سفارش')
.text(submitErrMsg)
.show();
// پاپ‌آپ مرکزی خطای ثبت (فاز ۳.۸ — SweetAlert2)
swalError('ثبت سفارش انجام نشد', submitErrMsg);
}
},
@ -1103,6 +1127,9 @@ jQuery(document).ready(function($) {
.text('خطا در ارتباط با سرور')
.show();
// پاپ‌آپ مرکزی خطای ارتباط (فاز ۳.۸ — SweetAlert2)
swalError('خطا در ارتباط با سرور', 'لطفاً اتصال اینترنت را بررسی کنید و دوباره تلاش کنید.');
}
});

File diff suppressed because one or more lines are too long

View File

@ -35,7 +35,9 @@ function ifnex_enqueue_scripts() {
has_shortcode($post->post_content, 'ifnex_order_payment') ||
has_shortcode($post->post_content, 'ifnex_customer_dashboard'))) {
wp_enqueue_style('ifnex-bridge-css', plugin_dir_url(__FILE__) . 'assets/css/ifnex-bridge.css', array('ifnex-main'), '2.0.0-' . time());
wp_enqueue_script('ifnex-order-form-js', plugin_dir_url(__FILE__) . 'assets/js/ifnex-order-form.js', array('jquery'), '2.0.0-' . time(), true);
// SweetAlert2 — پاپ‌آپ خطاها (فاز ۳.۸) — باندل محلی، بدون وابستگی به CDN
wp_enqueue_script('sweetalert2', plugin_dir_url(__FILE__) . 'assets/js/sweetalert2.all.min.js', array(), '11.14.5', true);
wp_enqueue_script('ifnex-order-form-js', plugin_dir_url(__FILE__) . 'assets/js/ifnex-order-form.js', array('jquery', 'sweetalert2'), '2.0.0-' . time(), true);
}
}

View File

@ -652,10 +652,18 @@ function ifnex_enqueue_order_assets() {
// لود jQuery & JS
wp_enqueue_script('jquery');
// SweetAlert2 — پاپ‌آپ خطاهای فرم سفارش (فاز ۳.۸) — باندل محلی، بدون وابستگی به CDN
wp_enqueue_script(
'sweetalert2',
$plugin_url . 'assets/js/sweetalert2.all.min.js',
array(),
'11.14.5',
true
);
wp_enqueue_script(
'ifnex-order-form-js',
$plugin_url . 'assets/js/ifnex-order-form.js',
array('jquery'),
array('jquery', 'sweetalert2'),
'2.0.0-' . time(),
true
);

View File

@ -1,4 +1,4 @@
APP_NAME=Laravel
APP_NAME="IFNEX Logistics"
APP_ENV=local
APP_KEY=
APP_DEBUG=true

View File

@ -5,17 +5,30 @@
*
* برای پشتیبانی از فاکتورهای دستی مدیر، یک نوع تراکنش جدید اضافه می‌کنیم:
* 'invoice_payment' — کسر مبلغ فاکتور از کیف پول مشتری.
*
* سازگار با MySQL و SQLite (تست‌ها طبق AGENT.md با SQLite اجرا می‌شوند):
* - MySQL: ALTER TABLE ... MODIFY COLUMN ... ENUM
* - SQLite: enum فقط در سطح اپلیکیشن اعمال می‌شود (cast روی مدل WalletTransaction)
* پس روی SQLite نیازی به تغییر اسکیما نیست.
*/
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
if (! Schema::hasTable('wallet_transactions')) {
return;
}
// SQLite از MODIFY COLUMN پشتیبانی نمی‌کند و enum در آن معنا ندارد — skip
if (DB::getDriverName() === 'sqlite') {
return;
}
// MySQL: ALTER COLUMN به‌روزرسانی enum
// مقادیر جدید شامل همه موارد قبلی + 'invoice_payment'
DB::statement("
@ -34,6 +47,15 @@ return new class extends Migration
public function down(): void
{
if (! Schema::hasTable('wallet_transactions')) {
return;
}
// SQLite: هیچ تغییری در اسکیما داده نشده — skip
if (DB::getDriverName() === 'sqlite') {
return;
}
// بازگشت به حالت قبلی — فقط اگه هیچ رکورد با type='invoice_payment' نباشد
$count = DB::table('wallet_transactions')
->where('type', 'invoice_payment')

Binary file not shown.

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,4 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" fill="#f59e0b" rx="6"/>
<text x="16" y="22" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="white" text-anchor="middle">I</text>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<defs>
<!-- Navy brand gradient — matches login page & Filament sidebar -->
<linearGradient id="ifnexNavy" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#1b2143"/>
<stop offset="1" stop-color="#12182d"/>
</linearGradient>
<!-- Amber brand gradient — matches CTAs & accents -->
<linearGradient id="ifnexAmber" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#FDB913"/>
<stop offset="1" stop-color="#f59e0b"/>
</linearGradient>
</defs>
<!-- Rounded-square background (22% radius) -->
<rect width="24" height="24" rx="5.3" fill="url(#ifnexNavy)"/>
<!-- Subtle inner light border -->
<rect x="0.14" y="0.14" width="23.72" height="23.72" rx="5.16"
fill="none" stroke="#ffffff" stroke-opacity="0.10" stroke-width="0.42"/>
<!-- Soft amber glow behind the mark -->
<circle cx="12" cy="11" r="7.8" fill="#FDB913" opacity="0.10"/>
<!-- Paper-plane mark (Material "flight" path) centered at 62% of tile -->
<path transform="translate(12,12) scale(0.78) translate(-11.5,-12)"
fill="url(#ifnexAmber)"
d="M21,16v-2l-8-5V3.5C13,2.67 12.33,2 11.5,2S10,2.67 10,3.5V9l-8,5v2l8-2.5V19l-2,1.5V22l3.5-1l3.5,1v-1.5L13,19v-5.5L21,16z"/>
</svg>

Before

Width:  |  Height:  |  Size: 254 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1,19 @@
{
"name": "IFNEX Logistics",
"short_name": "IFNEX",
"icons": [
{
"src": "icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icon-512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#1b2143",
"background_color": "#12182d",
"display": "standalone"
}

View File

@ -1,3 +1,9 @@
<!-- IFNEX Favicon set (ico fallback + svg modern + iOS/PWA) -->
<link rel="icon" href="{{ asset('favicon.ico') }}" sizes="any">
<link rel="icon" type="image/svg+xml" href="{{ asset('images/favicon.svg') }}">
<link rel="apple-touch-icon" href="{{ asset('images/apple-touch-icon.png') }}">
<link rel="manifest" href="{{ asset('images/site.webmanifest') }}">
<!-- فونت وزیرمتن برای فارسی -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

View File

@ -86,15 +86,15 @@
transform: rotate(-18deg);
}
/* ---- Centered login card ---- */
/* ---- Centered login card — compact (فاز ۳.۸: جمع‌شدن فرم لاگین) ---- */
.ifnex-login-card {
position: relative;
z-index: 10;
width: 100%;
max-width: 440px;
max-width: 380px;
background: #FAF9F6;
border-radius: 16px;
padding: 2.5rem 2.25rem 1.75rem;
padding: 1.75rem 1.75rem 1.25rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25),
0 0 0 1px rgba(255, 255, 255, 0.05);
animation: ifnexFadeInUp 0.6s ease-out;
@ -108,8 +108,8 @@
/* ---- Logo ---- */
.ifnex-login-logo {
display: block;
margin: 0 auto 1.5rem;
width: 120px;
margin: 0 auto 1rem;
width: 84px;
height: auto;
}
@ -117,10 +117,10 @@
.ifnex-login-title {
font-family: 'Vazirmatn', sans-serif;
font-weight: 700;
font-size: 22px;
font-size: 19px;
color: #1f2937;
text-align: center;
margin: 0 0 0.5rem;
margin: 0 0 0.25rem;
letter-spacing: -0.01em;
line-height: 1.3;
}
@ -128,16 +128,16 @@
.ifnex-login-subtitle {
font-family: 'Vazirmatn', sans-serif;
font-weight: 500;
font-size: 13px;
font-size: 12px;
color: #6b7280;
text-align: center;
margin: 0 0 2rem;
margin: 0 0 1.25rem;
line-height: 1.5;
}
/* ---- Form wrapper ---- */
.ifnex-login-form {
margin-bottom: 1.5rem;
margin-bottom: 1rem;
}
/* === Filament form overrides (scoped to card) === */
@ -178,8 +178,8 @@
.ifnex-login-card input[type="email"],
.ifnex-login-card input[type="password"],
.ifnex-login-card input[type="text"] {
padding: 0.75rem 1rem !important;
font-size: 14px !important;
padding: 0.6rem 0.85rem !important;
font-size: 13.5px !important;
color: #1f2937 !important;
background: transparent !important;
font-family: 'Vazirmatn', sans-serif !important;
@ -213,7 +213,7 @@
.ifnex-login-card .fi-field + .fi-field,
.ifnex-login-card .fi-form-field + .fi-form-field,
.ifnex-login-card .fi-fo-wrp + .fi-fo-wrp {
margin-top: 1rem !important;
margin-top: 0.75rem !important;
}
/* Checkbox "مرا به خاطر بسپار" — amber accent */
@ -249,13 +249,13 @@
font-weight: 700 !important;
font-family: 'Vazirmatn', sans-serif !important;
border-radius: 8px !important;
padding: 0.75rem 1rem !important;
padding: 0.6rem 1rem !important;
width: 100% !important;
border: none !important;
box-shadow: 0 4px 14px rgba(245, 158, 11, 0.35) !important;
transition: transform 0.2s, box-shadow 0.2s, background 0.2s !important;
cursor: pointer !important;
font-size: 15px !important;
font-size: 14px !important;
display: block !important;
text-align: center !important;
letter-spacing: 0;
@ -281,7 +281,7 @@
.ifnex-login-card .ifnex-login-submit {
display: block !important;
width: 100% !important;
margin-top: 1.25rem !important;
margin-top: 1rem !important;
}
.ifnex-login-card .fi-form-actions-action,
@ -302,11 +302,11 @@
/* Footer text */
.ifnex-login-footer {
font-family: 'Vazirmatn', sans-serif;
font-size: 11px;
font-size: 10.5px;
color: #9ca3af;
text-align: center;
margin: 1.25rem 0 0;
padding-top: 1rem;
margin: 1rem 0 0;
padding-top: 0.75rem;
border-top: 1px solid #f3f4f6;
direction: ltr;
line-height: 1.5;
@ -319,18 +319,18 @@
}
.ifnex-login-card {
max-width: 100%;
padding: 2rem 1.5rem 1.5rem;
padding: 1.5rem 1.25rem 1.125rem;
border-radius: 14px;
}
.ifnex-login-logo {
width: 100px;
width: 76px;
}
.ifnex-login-title {
font-size: 20px;
font-size: 17px;
}
.ifnex-login-subtitle {
font-size: 12px;
margin-bottom: 1.75rem;
font-size: 11.5px;
margin-bottom: 1.125rem;
}
.ifnex-decor-globe,
.ifnex-decor-plane {

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
# راهنمای ایجنت — پروژهٔ IFNEX Logistics
> **تاریخ:** ۲۰۲۶-۱۰-۳۰
> **نسخه:** ۱.۴
> **تاریخ:** ۲۰۲۶-۱۰-۳۱
> **نسخه:** ۱.۵
> **تهیه‌کننده:** VernaSoft Group — Kazem Alghasi
---
@ -12,7 +12,7 @@
### وضعیت فعلی
فازهای ۰، ۱، ۲، ۳، ۳.۵ و ۳.۶ تکمیل شده‌اند. فاز ۳.۷ (اصلاحات ارزی و فاکتور دستی) تکمیل شد:
فازهای ۰، ۱، ۲، ۳، ۳.۵، ۳.۶ و ۳.۷ تکمیل شده‌اند. فاز ۳.۷ (اصلاحات ارزی و فاکتور دستی) تکمیل شد:
- [x] فلوی کامل سفارش (ثبت ← تأیید ← تعهدنامه ← پرداخت) — تست End-to-End
- [x] بازطراحی داشبورد و Login پنل Filament (هویت بصری navy + amber)
@ -29,6 +29,13 @@
- [x] **معماری IRR-only** — ارز مبنا = ریال ایران؛ تبدیل ارز در زمان ایمپورت
- [x] **فاکتورهای دستی مدیر** — صدور، پرداخت از کیف پول، اعلان خودکار به مشتری
فاز ۳.۸ (کارهای سریع ظاهری / برندینگ) نیز تکمیل شد:
- [x] **Favicon حرفه‌ای IFNEX** — ico چندسایزی + svg وکتور + apple-touch-icon + PWA icons + webmanifest + لینک در head پنل
- [x] **صفحهٔ `/` برندشده** — جایگزین welcome پیش‌فرض لاراول
- [x] **جمع‌شدن کارت لاگین فیلمنت** — ۳۸۰px، فشرده‌تر
- [x] **SweetAlert2** برای خطاهای فرم سفارش وردپرس (باندل محلی)
چندزبانه (i18n) همچنان به زمان دیپلوی موکول است.
### معماری ارزی (Currency Architecture)
@ -471,7 +478,17 @@ WALLET_AUTO_CREATE=true
| ۷ | **اضافه شدن فاکتورها به وضعیت مالی و داشبورد مشتری** | ✅ |
| ۸ | **فرمت هزارگان در فیلدهای عددی فرم فاکتور ادمین** | ✅ |
### فاز ۳.۸ (موکول به آینده)
### فاز ۳.۸ (کارهای سریع ظاهری) — ✅ تکمیل (۲۰۲۶-۱۰-۳۱)
| # | کار | وضعیت |
|---|-----|--------|
| ۱ | Favicon IFNEX (هواپیمای کاغذی کهربایی روی سرمه‌ای — هماهنگ با هویت لاگین) در `public/favicon.ico` + `public/images/favicon.svg` + apple-touch-icon + icon-192/512 + `site.webmanifest` + لینک در `filament/hooks/head` | ✅ |
| ۲ | صفحهٔ `/` برندشده (RTL، وزیرمتن، کارت‌های «پنل مدیریت / استعلام نرخ / ثبت سفارش»، چیپ‌های وضعیت سیستم) جایگزین welcome پیش‌فرض | ✅ |
| ۳ | جمع‌کردن کارت لاگین فیلمنت (max-width ۴۴۰←۳۸۰px، padding ۲.۵rem←۱.۷۵rem، فاصله‌های فشرده) | ✅ |
| ۴ | SweetAlert2 (v11.14.5 باندل محلی در پلاگین bridge) برای خطاهای فرم سفارش: اعتبارسنجی مراحل، خطای ثبت، خطای ارتباط + جایگزینی هر ۳ `alert()` بومی با پاپ‌آپ برند | ✅ |
| ۵ | سازگارسازی migration فاکتور دستی با SQLite (تست‌ها طبق همین سند با SQLite اجرا می‌شوند) | ✅ |
### فاز ۳.۹ (موکول به آینده)
| # | کار | وضعیت | اولویت |
|---|-----|--------|---------|
@ -482,8 +499,6 @@ WALLET_AUTO_CREATE=true
| ۵ | دفترچه آدرس (Address Book) مشتری | 📋 مطرح‌شده | متوسط |
| ۶ | **ارز مرجع قابل تنظیم** (نسخه Pro) | 📋 مطرح‌شده — `01_Documents/IFNEX_Pro_Backlog.md` | پایین (نسخه Pro) |
| ۷ | سیستم بروزرسانی + لایسنس (Domain Lock) | 📋 مطرح‌شده — `01_Documents/IFNEX_Pro_Backlog.md` | پایین (نسخه Pro) |
| ۸ | favicon و صفحه `/` سفارشی لاراول | 📋 | پایین |
| ۹ | بازطراحی صفحه لاگین لاراول | 📋 | پایین |
---

View File

@ -501,9 +501,9 @@ Create Import Order
# ۱۵. خلاصهٔ وضعیت تحویل
**وضعیت فعلی:** آماده برای دیپلوی (فاز ۳.۷ تکمیل شد)
**وضعیت فعلی:** آماده برای دیپلوی (فاز ۳.۷ و ۳.۸ تکمیل شد)
**آخرین کامیت بازبینی‌شده:** ۲۰۲۶-۱۰-۳۰ — شامل سیستم ۴-رُبعی نرخ‌ها، معماری IRR-only، و فیچر فاکتورهای دستی مدیر.
**آخرین کامیت بازبینی‌شده:** ۲۰۲۶-۱۰-۳۱ — شامل فاز ۳.۸ (برندینگ: favicon، صفحهٔ برندشدهٔ `/`، جمع‌شدن کارت لاگین، SweetAlert2 خطاهای فرم سفارش).
## ۱۵.۱ تکمیل‌شده در فاز ۳.۶ (۲۰۲۶-۱۰-۰۴)
@ -533,7 +533,14 @@ Create Import Order
- [x] **فرمت هزارگان** در فیلدهای عددی فرم فاکتور ادمین
- [x] آپدیت خط قرمزها برای معماری ارزی
## ۱۵.۳ باقی‌مانده
## ۱۵.۳ تکمیل‌شده در فاز ۳.۸ (۲۰۲۶-۱۰-۳۱)
- [x] **Favicon حرفه‌ای IFNEX** — طراحی هواپیمای کاغذی کهربایی روی پس‌زمینهٔ سرمه‌ای (`favicon.ico` چندسایزی + `favicon.svg` وکتور + apple-touch-icon + icon-192/512 + `site.webmanifest`) + لینک‌ها در head پنل فیلمنت
- [x] **صفحهٔ `/` برندشده** — جایگزین welcome پیش‌فرض لاراول (RTL، وزیرمتن، کارت‌های پنل مدیریت / استعلام نرخ / ثبت سفارش)
- [x] **جمع‌شدن کارت لاگین فیلمنت** — عرض ۴۴۰←۳۸۰px، padding و فاصله‌های فشرده‌تر، موبایل-فرندلی
- [x] **SweetAlert2 برای خطاهای فرم سفارش وردپرس** — باندل محلی (بدون CDN)، پاپ‌آپ مرکزی برای خطاهای اعتبارسنجی/ثبت/ارتباط با fallback به alert
## ۱۵.۴ باقی‌مانده
- [ ] i18n (موکول به زمان دیپلوی)
- [ ] تست نهایی UAT کارفرما
@ -541,8 +548,6 @@ Create Import Order
- [ ] سند پیشنهادی سیستم مالی (درخواست ۱۳ کارفرما — موکول به آینده)
- [ ] پلاگین SMS (منتظر تحویل پنل SMS مشتری)
- [ ] دفترچه آدرس (Address Book) مشتری — مطرح‌شده، آینده
- [ ] favicon و صفحه `/` سفارشی لاراول — اولویت پایین
- [ ] بازطراحی صفحه لاگین لاراول — اولویت پایین
### باقی‌مانده برای نسخه Pro (آینده)