.module.scss files generating unique hashed class names — preventing any style leakage between Dashboard, Course Adventure, Vocabulary Builder, Live Translation, and Assessment modules. Each component is self-contained and portable.
src/pageComponents/account/pages/login/Index.tsx for clean imports and tree-shakinguseCall* pattern for standardized API layers:root level for theming consistency.mobile, .tablet, .desktopclamp() and rem unitsapp.thinkandspeak.comuat-app.thinkandspeak.comwsRef React refs to backend signaling server (NEXT_PUBLIC_WS_ROOM_URL). Exponential backoff reconnection — max 3 attempts, 10-second delays — prevents connection storms during widespread network failures.
isContinuouslyFetchRoomsRefisContinuouslyFetchAttendantsRefpageSize: 10000genKeyPair, decryptFromServer) encrypt Azure access tokens during transit. Enterprise-grade security for school deployments.
YYYY-MM-DDTHH:mm:ss${schoolId}-${studentId} for multi-tenant datahandleInviteAllStudents and handleInviteAllInSchool batch operationsattendingStudentIds and invitedStudentIds track presence. "Question" and "understand" signals populate the Live Learning Feedback & Heatmap — teachers see class comprehension at a glance.
onlineStudentCount > 0 triggers IN_PROGRESS. startTime comparison with dayjs library drives temporal triggers via callModifyRoomStatus API.
getAvatarUrl → emoji representations (👨/👩)roomCardInactive: grayscale + 0.6 opacity for completed sessionsroomCardBlue, roomCardYellow, roomCardPinkuseBreakpoints hook adapts desktop ↔ mobileroomSelectorOptions dropdown for multi-session navigationisLoadingExport state for transcript generation UXlabelToVariant mapping + slugifyTag for custom categories. transformNoteListToMyNoteBookDialogData parses comma-separated labels, counts per category, and maps to icon variants.
<Tag> componentsCheckbox.Group for multi-label classificationautoSize: {minRows:1, maxRows:4}getCommentSearchText/[\p{L}]/gu — preserves multilingual word boundaries. Filters numeric-only tokens (/^\d+$/). Supports English-Chinese-Cantonese trilingual extraction.
hasWordEntity / getWordEntity — case-insensitive matching against taggedWordListDataLiveWordPracticeDialog (dynamic import, ssr: false)HH:mm:ss)date-fnsconvertToMastered() checks practice scores ≥ 50 before allowing mastery. Tags stored as comma-separated strings, parsed into filter arrays.
rotate(-10deg) / rotate(+10deg)linear-gradient(124.76deg, #00A1FF)transform-style: preserve-3d + backface-visibility: hidden| Level | Name | Color Intensity |
|---|---|---|
| 1–2 | First / Simple Words | Light Blue |
| 3–4 | Basic / Learning Words | Blue |
| 5–6 | Intermediate / Advanced | Strong Blue |
| 7–8 | Expert / Master Words | Orange |
| 9–10 | Specialist / Extreme | Deep Orange |
ChatHeader integration with Model enum.
| # | Dimension | Options |
|---|---|---|
| 1 | Age Groups | 6–8, 9–11, 12–14, 15–17, 18+ |
| 2 | Gender | Avatar & theme customization |
| 3 | Interest Topics | 11 categories |
| 4 | Learning Personas | 9 types |
| 5 | Motivation Factors | 8 categories |
| 6 | Learning Styles | 8 methods |
| 7 | Proficiency Level | Scale 1–10 |
| 8 | Curious Subjects | 22 academic topics |
data-age-group attribute selectors cascade color themes through the entire interface — from authentication to Course Adventure progression to Live Translation cohort indicators.
useCallGetUserDashboard — custom API hook for real-time datauseModuleGuardian — access control for module sequencingscrollContainer.scrollTo({top: scrollHeight}) mimics eye contactisUserSending, isSystemThinking, isSystemAnsweringnexus-ari-ai.replit.app for specialized debate environmentsopacity: 0 → opacity: 100 on hover. Students can interrupt AI mid-explanation — just like interjecting in human conversation. Builds speaking confidence through agency.
pendingMultiSelectCommitRef with 400ms debounce. 180-character minimum ensures substantive practice passages. Authenticated discourse becomes personalized speaking material.
toPracticeCount: filteredWordList.filter(item => item.tags.includes('To Practice')).lengthmyNotebookDialogOpenInfo.edit({roomId}) — seamless transition from live translation to personal study. Complete learning loop: listen → capture → review → master. Decorative CSS layers (polygons, stars, card layers) create game-like flashcard aesthetic.
| Property | Desktop | Mobile |
|---|---|---|
| Font Size | 24px | 18px |
| Line Height | 32px | 26px |
| Max Width | 75% | 90% |
| Padding Top | 60px | 24px |
stroke-linecap="round"aria-hidden="true" and currentColor strategy<animateTransform>) — GPU-accelerated 60fpsrx="30" ry="30"content-visibility: auto for off-screen elementscontain: layout style paint isolationwill-change: transform for GPU accelerationssr: false for heavy componentsaria-hidden on decorative SVGsprefers-reduced-motion supportonPressEnter, autoFocus| Role | Password | |
|---|---|---|
| Teacher | test_teacher@seechange-edu.com | Aa123456 |
| Student | test_student1@seechange-edu.com | Aa123456 |