Bài học 1Thiết kế ví: vé đang hoạt động, lifecycle vé, hết hạn, kịch bản khôi phục và chuyển nhượngThiết kế ví quản lý vé đang hoạt động, sắp tới và hết hạn. Bạn sẽ mô hình trạng thái vé, validation, hết hạn và thay đổi thiết bị, đồng thời hỗ trợ khôi phục, chuyển nhượng và chống gian lận trong giao diện rõ ràng, dự đoán được.
Ticket state machine and lifecycle eventsActive, upcoming, and expired ticket viewsValidation states and visual security cuesRestore flows after reinstall or device lossTransfer rules, limits, and fraud controlsBài học 2UI/UX trip planner: input bắt buộc (origin, destination, time, preferences) và output (route, duration, transfers, walking segments)Thiết kế UI trip planner từ input đến kết quả. Bạn sẽ chỉ định trường bắt buộc, control preference và card kết quả, đảm bảo tiếp cận, rõ ràng trade-off và so sánh nhanh giữa route và mode thay thế.
Input forms for origin, destination, and timePreference controls for modes and walkingDesigning route result cards and summariesDetail views for legs, transfers, and faresAccessibility and localization considerationsBài học 3Control người dùng cho cảnh báo: subscription, giờ yên tĩnh, filter theo tuyến, tiếp cận cảnh báoThiết kế control người dùng quyết định nhận cảnh báo nào. Bạn sẽ triển khai subscription, giờ yên tĩnh, filter theo tuyến và option tiếp cận để hành khách điều chỉnh độ liên quan mà vẫn nhận tin nhắn an toàn quan trọng.
Subscription models: lines, stations, routesQuiet hours, do-not-disturb, and overridesPer-line and per-topic filtering optionsCritical vs optional alert categoriesAccessibility settings for alert deliveryBài học 4Delivery cảnh báo realtime: push notification, WebSocket/Socket.IO, server-sent events, polling fallbackKhám phá kênh delivery cảnh báo realtime và trade-off. Bạn sẽ so sánh push, WebSocket, SSE và polling, thiết kế reconnection và backoff, đảm bảo cảnh báo kịp thời, không trùng lặp và tiết kiệm pin trên thiết bị di động.
Choosing push vs WebSocket vs SSE vs pollingConnection management and reconnection logicOrdering, deduplication, and idempotent alertsBattery, data usage, and background limitsFallback strategies when real-time failsBài học 5Ranking và filter route: nhanh nhất, ít transfer nhất, tiếp cận, ít walking nhấtThiết kế logic ranking cân bằng tốc độ, transfer, walking và tiếp cận. Bạn sẽ xác định filter, mô hình scoring, quy tắc tie-breaking và pattern UX để hành khách nhanh chóng tìm route phù hợp preference và ràng buộc.
Ranking by time, transfers, and walking distanceAccessibility-aware route scoring and penaltiesUser-configurable filters and presetsHandling incomplete or low-quality GTFS dataExplaining rankings with clear UI labelsBài học 6Event analytics cho tính năng cốt lõi: tìm kiếm chuyến, mua vé, tương tác cảnh báoXác định analytics cho tìm kiếm chuyến, mua vé và tương tác cảnh báo. Bạn sẽ thiết kế schema event, thuộc tính user, funnel và control privacy giúp cải thiện tính năng trong khi tôn trọng quy định và kỳ vọng user.
Core events for search, purchase, and alertsEvent naming, versioning, and schemasFunnels, cohorts, and retention analysisAttribution of alerts to user actionsPrivacy, consent, and data minimizationBài học 7Flow mua vé: catalog sản phẩm, quy tắc fare, seat/reservation vs proof-of-paymentThiết kế flow mua vé từ chọn sản phẩm đến xác nhận. Bạn sẽ mô hình quy tắc fare, pass, reservation và proof-of-payment, đảm bảo rõ ràng, validation và tương thích backend agency.
Product catalog structure and fare familiesFare rules, zones, caps, and concessionsSeat reservations vs open proof-of-paymentValidating eligibility and rider typesPurchase confirmation and receipt designBài học 8User flow từ launch app đến kết quả route: permission, truy cập location, quick action, recent searchVẽ hành trình end-to-end từ launch app đến kết quả route. Bạn sẽ thiết kế prompt permission, xử lý location, shortcut và recent search để hành khách đến option chuyến liên quan với ít friction và kỳ vọng privacy rõ ràng.
Cold start, splash, and onboarding decisionsRequesting and explaining location permissionsQuick actions, favorites, and home-work shortcutsRecent searches, recents ranking, and clearingHandling denied permissions and manual locationBài học 9Trình bày cảnh báo in-app: inbox, banner, cảnh báo route contextual, personalization và prioritizationXác định cách cảnh báo xuất hiện trong app qua context. Bạn sẽ thiết kế inbox, banner và surface contextual, với prioritization, grouping và personalization giữ hành khách được thông tin mà không bị overwhelm.
Alert inbox layout and filtering optionsTransient banners, toasts, and modalsContextual alerts on route and ticket viewsPrioritization, grouping, and rate limitingPersonalization based on usage and linesBài học 10Xử lý lỗi và pattern retry trong mua hàng và network failureTìm hiểu pattern xử lý lỗi mua hàng và network failure mà không mất lòng tin user. Bạn sẽ thiết kế retry, operation idempotent, queue offline và thông báo lỗi rõ ràng bảo vệ thanh toán tránh charge trùng hoặc vé hỏng.
Classifying transient vs permanent failuresDesigning safe retry and backoff strategiesIdempotency keys for payment operationsOffline queues and local operation logsUser-facing error messages and recovery flowsBài học 11Tích hợp thanh toán: hosted page vs in-app SDK, giảm PCI scope, tokenizationKhám phá option tích hợp thanh toán và ranh giới bảo mật. Bạn sẽ so sánh hosted page và in-app SDK, thiết kế tokenization và giảm PCI scope giữ checkout mượt mà, đáng tin và tuân thủ.
Hosted checkout vs native SDK tradeoffsReducing PCI scope with tokenization3-D Secure, SCA, and regional rulesHandling declines, reversals, and refundsStoring and updating payment instrumentsBài học 12Lưu trữ local cho vé: option lưu trữ an toàn (encrypted database, keystore/Keychain) và tokenizationTìm hiểu pattern lưu trữ local an toàn cho vé và token. Bạn sẽ so sánh encrypted database, Keychain hoặc Keystore, API platform, thiết kế key rotation, backup behavior và bảo vệ chống tamper hoặc clone.
Threat model for stored tickets and tokensUsing Keychain or Keystore for secretsEncrypted databases for ticket metadataKey rotation, revocation, and migrationBackup, restore, and multi-device behavior