DOL English Navigation Shell Contracts
DomainsDOL EnglishUX2.643 words13 min read
DOL English - Navigation Shell Contracts
Phần tiêu đề “DOL English - Navigation Shell Contracts”Purpose
Phần tiêu đề “Purpose”- Chốt shell model mới cho logged-in
DOL Englishở mức cross-surface. - Tách rõ
cross-program orchestration,one-program execution, vàdeep object ownership. - Giảm việc dùng nav như sitemap phẳng thay vì workflow controller.
Doc Role
Phần tiêu đề “Doc Role”- Đây là
feature-rulechi tiết cho navigation shell. - Nếu cần đọc navigation như
1 featurehoàn chỉnh, mở./ENG_Navigation_00_Overview.mdtrước. - File này là supporting rule doc; chỉ mở khi cần matrices, boundary, hoặc behavior detail sâu hơn file master.
Objective
Phần tiêu đề “Objective”- Tối ưu
task completion,clarity,retention, và khả năng scale của hệ thống khi số program, tool, và object tiếp tục tăng. - Giữ
logged-in shellưu tiên execution hằng ngày hơn discovery/catalog. - Dùng một contract đủ ngắn để UX, content, PM, và implementation cùng đọc ra một logic giống nhau.
Current Truth
Phần tiêu đề “Current Truth”- Logged-in shell của DOL English không còn nên đọc như một portal trộn
discovery + portfolio + execution. - Baseline active là:
Program WorkspaceSelective Cross-program Aggregate ViewsDeep Object
Problem Framing
Phần tiêu đề “Problem Framing”- Đây là shell cho
logged-in learning product, không phải lớp menu của site khám phá. - User quay lại để:
- học tiếp thứ đang dở,
- làm bài được giao,
- luyện kỹ năng theo program,
- ôn vocab,
- xem mình đang tiến bộ hay tụt ở đâu.
- Vì object của DOL English chồng nhau (
program,course,assignment,attempt,vocab,analytics), shell phải hoạt động nhưworkflow controller, không phảiflattened sitemap.
Key Assumptions and Constraints
Phần tiêu đề “Key Assumptions and Constraints”- Baseline này đang tối ưu cho
desktop web logged-in experience. Learnerlà role chính cần tối ưu trong shell hiện tại.- Phần lớn hành vi học trong một giai đoạn vẫn là
1 programchính, kể cả khi account có hơn một program. - Shell mới phải giữ tương thích với
returnTo,protected entry, và các entry contract đã khóa ở Stage A/A2. - Chưa có đủ dữ liệu để hard-lock mọi quyết định về:
- danh sách đầy đủ các aggregate view đủ điều kiện ngoài
schedule / calendar, - độ thường xuyên thật của hành vi
Từ vựng, - mức ưu tiên của ecosystem switcher trên mobile/compressed layouts.
- danh sách đầy đủ các aggregate view đủ điều kiện ngoài
Locked Principles
Phần tiêu đề “Locked Principles”Program = context.Task = primary navigation.Cross-program viewchỉ là scoped exception, không được giả làmdefault shellhaydeep execution view.Mỗi deep objectphải có1 canonical home.Một lớp nav = một chiều thông tin; không để một row vừa là destination, vừa là context, vừa là subview.
Shell Layer Model
Phần tiêu đề “Shell Layer Model”1. Public Discovery
Phần tiêu đề “1. Public Discovery”- Trả lời:
Tôi học gì / mua gì / vào app bằng đường nào? - Dùng
programhoặcbuying intentlàm trục chính. - Không thay thế shell logged-in.
2. Program Workspace
Phần tiêu đề “2. Program Workspace”- Trả lời:
Trong chương trình này, tôi làm gì tiếp và đi vào section nào? - Một lần chỉ ở
1 programthật. - Desktop baseline dùng task-first primary destinations:
Hôm nayKhóa họcLuyện tậpTừ vựngTiến độ
- Local tabs chỉ xuất hiện bên trong từng destination, ví dụ:
Luyện tập->Reading / Listening / Writing / SpeakingTiến độ->Overview / History / Weak areasKhóa học->Active / Schedule / Assignments / Materials
3. Selective Cross-program Aggregate Views
Phần tiêu đề “3. Selective Cross-program Aggregate Views”- Không phải là
Home, không phảiGlobal Today, và không phảiAll Programs workspace. - Chỉ được tồn tại trong các view thật sự cần gom dữ liệu chéo chương trình.
- Confirmed initial use case:
schedule / calendarstyle operational surfaces.
- Contract của aggregate view:
- mặc định vẫn đọc theo
program hiện tại, - chỉ mở
All Programsnhư scope toggle tường minh khi cần, - không dùng cho deep execution như timed attempt, course detail, vocab queue, hoặc analytics deep dive.
- mặc định vẫn đọc theo
4. Deep Object
Phần tiêu đề “4. Deep Object”- Assignment, attempt, result, vocab item, AI feedback, hay object tương tự luôn thuộc một owner section thật.
- Mọi surface khác chỉ được surfacing object như
shortcut,queue item, hoặcsummary entry.
Hierarchy Semantics
Phần tiêu đề “Hierarchy Semantics”Ecosystem switcher- đổi giữa
DOL English / DOL Kid / DOL Academy. - Đây là
brand/domain context, không phải logged-in task nav.
- đổi giữa
Program switcher- đổi
program workspace context. - Đây là
global statecủa workspace, không phải filter local.
- đổi
Primary navigation- đổi
task destinationtrong shell hiện tại. - Ví dụ:
Hôm nay / Khóa học / Luyện tập / Từ vựng / Tiến độ.
- đổi
Local navigation- đổi subview trong cùng destination.
- Ví dụ:
Reading / Listening / Writing / SpeakingtrongLuyện tập.
Utility navigation- giữ
search / notification / help / account / quick access. - Không chen vào primary nav.
- giữ
Filter / search / sort- chỉ thay đổi cách nhìn dữ liệu trong cùng view.
- Không được dùng để giả làm context switch.
Program Context Contract
Phần tiêu đề “Program Context Contract”- Program switcher chỉ liệt kê
program thật. Tất cả chương trìnhkhông được sống như peer context trong switcher hoặc workspace shell.- Nếu một aggregate view đủ điều kiện có
All Programs, đó chỉ làview scope toggle, không phải switcher context. - Nếu user mở object thuộc program khác từ notification/search/deep-link:
- app được phép đổi context sang program đúng,
- nhưng phải đổi một cách tường minh trong URL/state,
- và phải cho user tín hiệu rõ rằng context đã đổi.
- Nếu user đang ở critical flow như
timed attempthoặcunsaved high-cost action:- switch program không được silent,
- hoặc phải chặn,
- hoặc phải yêu cầu confirm rõ hậu quả.
Default Entry Contract
Phần tiêu đề “Default Entry Contract”- Nếu có
returnTohợp lệ -> quay lại exact context trước. - Nếu không có
returnTohợp lệ:last meaningful program workspace-> resume vào đó,- nếu deep target cũ không còn hợp lệ -> fallback về
same program root, - nếu không có restore context nhưng chỉ có
1 valid active program-> vào thẳng workspace của program đó, - nếu chưa resolve được program hợp lệ -> onboarding / program choice / discovery.
Single-programkhông nên bị ép học theo mental model portfolio nếu không có nhu cầu thật.Multi-programvẫn đọc theoprogram-first; aggregate chỉ bật trong eligible views thay vì trở thành default shell destination.
Active Program Resolution Contract
Phần tiêu đề “Active Program Resolution Contract”Last meaningful program workspacekhông được đọc từ raw URL cuối cùng một cách mù quáng.- Resolution inputs tối thiểu gồm:
current in-progress program,recent meaningful activity,last explicit program intent,goal_program,program lifecycle state(not_started | active | completed | archived),entitlement / registration / purchase statenếu ảnh hưởng quyền vào workspace.
- Restore source phải loại trừ các route không đáng resume:
- auth,
- account,
- checkout,
- transient success/error pages,
- expired deep routes.
- Khi cần resolve safe fallback hoặc sort ưu tiên cho restore, thứ tự baseline là:
current in-progress program,recent meaningful activity,last explicit program intent,goal_program,- direct single-program fallback,
- onboarding / program choice / discovery.
Owned but not started,completed, hoặcarchivedkhông được đẩy lên thành default execution context chỉ vì tồn tại trong account state.
Hôm Nay vs Tiến Độ Contract
Phần tiêu đề “Hôm Nay vs Tiến Độ Contract”Hôm nay- trả lời:
Bây giờ tôi nên làm gì? - owner của:
- continue,
- due queue,
- next class/deadline,
- recommended next action,
- shortcut vào owner section.
- trả lời:
Tiến độ- trả lời:
Tôi đang tiến triển thế nào theo thời gian, yếu ở đâu, và pattern nào đáng chú ý? - owner của:
- analytics,
- history,
- weak areas,
- trend,
- goal comparison.
- trả lời:
- Nếu một page không giữ được ranh giới này, ưu tiên:
- merge,
- hoặc đổi label,
- không giữ hai destination mờ nghĩa cùng tồn tại.
Canonical Object Ownership Contract
Phần tiêu đề “Canonical Object Ownership Contract”- Mỗi deep object phải có tối thiểu:
programobject_typesourcecanonical_section
- Ví dụ:
- bài Writing được giao trong course:
- có thể xuất hiện ở
Program Workspace root / Hôm nayhoặc aggregate view đủ điều kiện, - nhưng owner thật vẫn là
Khóa học.
- có thể xuất hiện ở
- kết quả một bài luyện:
- có thể được nhắc lại ở
Tiến độ, - nhưng owner detail vẫn nằm ở flow result / section chuẩn của
Luyện tập.
- có thể được nhắc lại ở
- bài Writing được giao trong course:
- Không được có hai object state khác nhau chỉ vì object đó được surfacing ở hai surface khác nhau.
Canonical Home Matrix
Phần tiêu đề “Canonical Home Matrix”Course schedule / lesson / assignment / material / teacher feedback- canonical home:
Khóa học
- canonical home:
Drill / mock test / AI room / attempt / result- canonical home:
Luyện tập
- canonical home:
Saved word / review queue / source-tagged vocab item- canonical home:
Từ vựng
- canonical home:
Analytics / history / weak areas / trend / goal-gap reasoning- canonical home:
Tiến độ
- canonical home:
Continue card / due card / next action card- canonical home:
Hôm naychỉ ở mức shortcut orchestration trong program workspace; detail vẫn thuộc owner section bên dưới
- canonical home:
Naming Contract
Phần tiêu đề “Naming Contract”- Primary nav logged-in phải ưu tiên wording learner-centric và action-centric.
- Không dùng label system-centric làm destination chính nếu có label learner-centric rõ hơn.
- Baseline direction:
Khám phá-> ra khỏi primary nav logged-in,Quản lý khóa học->Khóa học,Quản lý luyện tập->Luyện tập,Tổng quan->Hôm naynếu page thực chất là next-action surface.
Từ vựngchỉ nên giữ slot top-level khi hành vi review thực sự đủ thường xuyên trong cohort chính; nếu không, phải cân nhắc hạ prominence thay vì giữ vì structure nội bộ.
Behavior Matrix
Phần tiêu đề “Behavior Matrix”Single-program learner- default: resume last meaningful workspace hoặc program root.
- shell phải giảm tối đa cảm giác đang ở chế độ portfolio.
Multi-program learner- default vẫn là
resume last meaningful workspacenếu không córeturnTo. - aggregate chỉ bật ở eligible views khi learner thật sự cần xem chéo chương trình.
- default vẫn là
Deep-link entry- đi thẳng tới object/owner section nếu target hợp lệ.
- nếu phải đổi program, UI phải báo rõ là context đã đổi.
No valid restore context- không fabricate
Global Todaydashboard làm fallback. - đi tới
single valid program workspacehoặcprogram choice / discovery.
- không fabricate
Empty / no-course / no-practice state- dùng CTA khởi động và add-program entry,
- không fabricate fake data để lấp shell.
Archived / unavailable program- không giữ như active peer context trong switcher.
- chỉ xuất hiện ở grouped history/archive surface nếu thật sự cần.
UX Guardrails
Phần tiêu đề “UX Guardrails”- Không stack nhiều row ngang mà mỗi row lại là một logic khác (
destination,program,subview) cùng tranh attention. - Không biến
All Programsthành workaround cho vấn đề cross-program orchestration. - Không để dashboard cards trở thành
second homecủa object. - Không để discovery chiếm ưu tiên hơn daily execution trong logged-in primary shell.
- Không dựng standalone
Global Today/All Programsoverview chỉ để phục vụ rare cohort multi-program nếu cùng bài toán đã được giải tốt hơn bằngresume last program + scoped aggregate views. Offline / live online / self-pacedlàcourse modality; chúng chỉ sống ởfilter / chip / groupingbên trongKhóa học, không sống như primary destination.Luyện tậpkhông được biến thành top nav itemization của toàn bộ tool (AI Speaking,Mock Test,Mini Quiz, …); tool inventory phải được gom theoskill / use casevà đi bằng local nav hoặc content grouping.
Accessibility and State Feedback
Phần tiêu đề “Accessibility and State Feedback”- Context switch phải có state feedback rõ:
- visual cue,
- selected state,
- và announcement path phù hợp cho screen reader nếu context đổi đáng kể.
- Không dùng
color-onlyđể phân biệt program hoặc selected state. - Header actions quan trọng không được chỉ là icon nếu thiếu accessible name rõ.
- Mega menu hoặc switcher không được phụ thuộc hoàn toàn vào hover.
- Focus order phải phản ánh hierarchy thật:
- ecosystem/domain,
- program context,
- task destination,
- local nav,
- content.
Success Measures
Phần tiêu đề “Success Measures”first_click_successtime_to_resume_studywrong_context_entry_ratebacktracking_after_entryassigned_task_completion_rate
Validation Methods
Phần tiêu đề “Validation Methods”- Ưu tiên:
card sortingđể kiểm tra user nhóm nội dung đúng theo mental model,tree testingđể kiểm tra user có vào đúng section/context hay không.
- Task baseline:
- tìm lớp IELTS 6.5,
- vào mock test SAT,
- xem bài Writing cần sửa,
- ôn lại từ TOEIC đã quên.
Validation-dependent Calls
Phần tiêu đề “Validation-dependent Calls”Từ vựngcó giữ slot top-level ở mọi cohort hay chỉ ở cohort có review frequency cao.- Exact list của aggregate-eligible views sau
schedule / calendar. - Mobile/compressed shell nên ưu tiên collapse theo trục nào để không phá
hierarchy semantics. - Một số family như
IELTS / SAT / TOEICcó cần local-nav template riêng hay vẫn đủ dùng một baseline thống nhất. - Storage/read model cho
last meaningful program workspacecó đủ an toàn với expired deep route hay không.
Open Validation
Phần tiêu đề “Open Validation”Từ vựngcó xứng đáng top-level across cohorts hay không.- Mobile shell nên nén thế nào mà không phá hierarchy semantics.
- Data model đã đủ sạch để mọi surfaced object luôn mang
program + source + canonical_sectionhay chưa. - Aggregate views nào ngoài
schedule / calendarthật sự đáng unlock. - Restore/fallback ladder của
last meaningful program workspaceđã đủ an toàn với route lỗi thời hay chưa.
References
Phần tiêu đề “References”./ENG_Page_Role_Contracts.md./ENG_Lifecycle_Motivation_Contracts.md../Product Discovery/30_STATE/STATE_Navigation_Shell_and_Object_Ownership.md./Home & Discovery/HOME_ENG_Detailed_Baseline.md../Product Discovery/20_DECISIONS/DEC-0096_resume-last-program-and-selective-cross-program-aggregation-shell-model.md
Change log
Phần tiêu đề “Change log”- 2026-03-27: Retire
Global Today Hubnhư default logged-in shell, chuyển baseline sangresume last meaningful program workspace, và giới hạn cross-program aggregation vàoselective scoped viewsvới use case ban đầu làschedule / calendar. - 2026-03-26: Bổ sung
utility navigation, khóacourse modalityvề lớp filter/grouping trongKhóa học, chốtpractice tool inventoryphải đi theoskill / use case, và thêmvalidation methods. - 2026-03-26: Bổ sung
Active Program Resolution Contractđể chốt input resolve orchestration state sau login (in-progress,recent activity,goal,explicit intent,lifecycle,entitlement) và tránh đọcactive programnhư entitlement thô. - 2026-03-25: Gắn
doc_role: feature-rulevà giữENG_Navigation_00_Overview.mdlàm file master để giảm phân mảnh đường đọc. - 2026-03-25: Bổ sung
Objective,Key Assumptions and Constraints, vàValidation-dependent Callsđể phân biệt phần đã khóa với phần còn cần validate trước khi detailed IA/pixel design. - 2026-03-25: Mở rộng shell contract theo hướng build-ready hơn: thêm
Problem Framing,Locked Principles,Hierarchy Semantics,Hôm nay vs Tiến độ,Canonical Home Matrix,Behavior Matrix,Accessibility and State Feedback, vàSuccess Measures. - 2026-03-25: Khởi tạo shell contract mới cho mô hình
Global Today Hub + Program Workspace + Deep Object, chốt ruleno pseudo-program, default entry theo số program active, và canonical object ownership.