Phase 1 — web app tìm kiếm shop sửa xe quanh bạn. Không cần đăng ký, xem được cả shop đã xác thực lẫn shop gợi ý từ hệ thống. Gọi điện hoặc chỉ đường ngay trên app.
Kế thừa brief design Uber-inspired đã có — giữ ngôn ngữ thiết kế thống nhất với V1 Phase sau (SOS/booking).
Monochrome đen/trắng · typography bold tracking âm · display 48-56px · radius 10px · underline input · ảnh thật · copy ngắn ("Go anywhere with Uber"). Accent màu CHỈ dùng cho urgency.
Đen là primary · cam giữ lại cho SOS (Phase 3) · Phase 1 thêm xanh (#0E8A5F) làm màu "Đã xác thực" — signal tin cậy không phải urgency. Display "Tìm thợ sửa xe, trên bản đồ." · underline search input · copy thẳng ("Gọi ngay", "Chỉ đường").
Đen là primary. Xanh "Verified" (#0E8A5F) là signal tin cậy — điểm riêng của SuaXe V2. Cam giữ lại cho SOS khi Phase 3 có cứu hộ khẩn cấp.
Inter / Uber Move · bold cho heading · tracking âm · body 16px.
| Token | Giá trị | Dùng cho |
|---|---|---|
| radius-sm | 6px | Chip, tag nhỏ |
| radius | 10px | Button, card, input, shop card |
| radius-lg | 18px | Hero, bottom sheet, modal |
| border-width | 1px | Line everywhere — không dùng shadow nặng |
| shadow | 0 2px 8px rgba(0,0,0,.1) · 0 -4px 16px cho sheet | Chỉ dùng cho search pill, bottom sheet, map sheet |
| spacing | 4 / 8 / 12 / 16 / 20 / 28 / 40 | Base 4, gap group 16-20, section 28+ |
| tracking | -0.035em (display) → -0.005em (body) | Càng to càng âm |
Web app responsive, show mobile view (mobile-first). Desktop = wider layout với map left + list right.
Cho phép vị trí để tìm shop gần nhất. Không cần đăng ký.
Bạn chưa cho phép truy cập vị trí. Chọn 1 trong 2 cách dưới đây.
Kế thừa stack V1: Leaflet + OpenStreetMap. Free, không cần API key, responsive tốt cho web.
Component React thuần, không cần API key / billing. Tile public miễn phí (set user-agent để tuân thủ ToS). Marker với custom HTML div icon → render verified vs unverified khác nhau mà không cần asset. Đổi lại: POI VN yếu, geocoding kém (sẽ bổ sung sau nếu cần autocomplete địa chỉ).
navigator.geolocation native, không lib bên thứ 3. 3 lớp fallback: permission denied → GPS off → timeout.
Khi fallback kích hoạt, show màn "Chọn vị trí" với 2 option: nhập địa chỉ tay hoặc chọn quận/huyện.
Map center theo vị trí user, zoom mặc định 15. Khi có shop pin trong bán kính viewport → fit bounds bọc user + 3-5 shop gần nhất. User di chuyển/zoom → re-query shops trong viewport.
Đề xuất leaflet-routing-machine + public OSRM server (free). Vẽ polyline tới shop, hiển thị khoảng cách + thời gian ước tính.
Alternative: vẽ đường thẳng rồi deep-link sang Google Maps — đơn giản hơn, UX thường quen với user.
Chốt chọn khi start implement.
Trigger: cần autocomplete địa chỉ chính xác · cần traffic realtime · cần route chính xác cho xe máy VN.
Đích: Google Maps (UX quen) hoặc Mapbox (branding + scale rẻ).
Khi đó chỉ cần đổi TileLayer; atom map pin và shop data giữ nguyên.
Ngày đầu ra mắt vẫn có shop trên map (không rỗng) — nhờ hệ thống seed unverified. Sau khi shop đăng ký + admin xác thực → chuyển thành verified, được nhận booking (Phase 2+).
| Khía cạnh | Verified (đã xác thực) | Unverified (hệ thống seed) |
|---|---|---|
| Pin trên map | Đen, có ✓ xanh | Trắng outline, không ✓ |
| Badge | "✓ Đã xác thực" (xanh) | Không có |
| Rating / Reviews | Có, hiện 3 mới nhất + modal xem thêm | Không |
| Số đơn hoàn thành | Hiện trên card + detail | Không |
| Giá dịch vụ | Công khai, cụ thể | "Liên hệ" (nếu có) |
| Thứ tự trong list | Ưu tiên top | Sau verified |
| Action cho user | Gọi · Chỉ đường · (Phase 2: Đặt lịch) | Chỉ Gọi · Chỉ đường |
| Note trên detail | Hiển thị đầy đủ | Có box vàng "Chưa xác thực" |
Brief này chỉ tập trung Phase 1. Các phase sau sẽ thêm auth, booking, payment...
| Phase | Trạng thái | Phạm vi | Bổ sung cho design |
|---|---|---|---|
| Phase 1 | Brief này | Search shop trên map (không auth, không booking) | Splash, GPS fallback, Map home, Shop detail (V/UV) |
| Phase 2 | Tiếp theo | Auth + Đặt lịch trước với Verified shop | Login, Profile, Booking flow, Lịch sử |
| Phase 3 | Future | Đặt thợ đến (SOS) + Notification + Real-time | SOS panel (accent cam), tracking screen |
| Phase 4 | Future | Payment + Hóa đơn | Payment sheet, invoice view |
| Phase 5 | Future | Shop dashboard | Shop side UI |
| Phase 6 | Future | Admin tools | Admin verify queue, dispute |
tailwind.config.js hoặc theme.css với palette đen/xanh/cam.GET /shops, GET /shops/:id, GET /service-categories, GET /services.