SOQ International Academy

UAT Test — Full Platform Coverage

uat_test_handover screenshot

Live screenshot from the SOQ beauty demo (aiacademy.aiee.dev).

SOQ International Academy TMS · Exhaustive acceptance matrix for Public/Landing, Panel (Student / Instructor / Organization), Admin, Staff, Themes & Landing Builder · Updated 2026-09-24

Jump

0. Full coverage matrix (summary)

SuiteWhoWhat must be coveredResult
Public & LandingGuest + logged-inHome landing blocks, header/footer chrome, all major public routesP / F / B
Student PanelStudentEvery Panel sidebar item available to user roleP / F / B
Instructor PanelInstructorStudent-shared items + teaching/seller/blog/noticeboard toolsP / F / B
Organization PanelOrganizationInstructor-like tools + Members manage; no BlogP / F / B
AdminAdminEvery Admin sidebar section + Settings hub tabsP / F / B
StaffStaffPermission-trimmed Admin onlyP / F / B
Themes & LandingAdminThemes, headers/footers, homepage + custom landingsP / F / B
Critical journeysAll rolesEnroll/learn, teach, book meeting, checkout, admin opsP / F / B

1. Public site & frontend landing

Role: Guest (then Student for auth-only paths)  |  Login: logged out, then /demo-login/student

For every row: open the URL/menu, confirm page loads (no 500/blank), chrome matches role, mark Pass / Fail / Blocked. Use Blocked (feature toggle) when the env shows Feature not activated or the feature toggle is off.

1A. Homepage / landing composition
  1. Open / — confirm it uses the assigned Landing Builder page (not a blank shell).
  2. Scroll every enabled component: heroes, course grids, instructors/orgs, education verticals, statistics, blog, store, jobs, events, meetings, CTAs, FAQ, logos, sliders.
  3. Click each primary CTA (Explore Courses, Book a Meeting, Start Learning, etc.) and verify destination.
  4. Resize to mobile: header drawer, hero, and CTAs remain usable.
AreaScreen / itemPathCheckResult
Landing / HomeHomepage loads/Hero + landing components render; SOQ brandingP / F / B
Landing / HomeFeatured / newest / best courses blocks/Course cards link to /course/{slug}P / F / B
Landing / HomeInstructors / orgs / stats / blog / store blocks/Blocks match CMS landing; empty OK if unusedP / F / B
Landing / HomeEducation verticals (if configured)/education-verticals/{slug}Vertical page opensP / F / B
ChromeHeader logo ? home/Returns to homeP / F / B
ChromeSearch/searchResults or empty stateP / F / B
ChromeCategories mega-menu/categories/...Category/subcategory catalogueP / F / B
ChromeCart drawerheader cartDrawer opens; line items if anyP / F / B
ChromeFooter links + newsletterfooterLinks resolve; newsletter form validatesP / F / B
ChromeFloating bar / ad modal / cookiesoverlaysShow once per rules; dismissibleP / F / B
CoursesCatalogue/classesFilters + course cardsP / F / B
CoursesTags / reward courses/tags/... , /reward-coursesLists load or feature-off stateP / F / B
CoursesCourse detail tabs/course/{slug}About, Content, Reviews, CommentsP / F / B
CoursesLearning page (enrolled)/course/learning/{slug}Lessons/progress; auth requiredP / F / B
BundlesList + detail/bundles , /bundles/{slug}Bundle page + enroll CTAP / F / B
UpcomingList + detail/upcoming_coursesTeasers / notifyP / F / B
InstructorsList/instructorsInstructor cardsP / F / B
OrganizationsList/organizationsOrg cardsP / F / B
FinderInstructor finder + wizard/instructor-finderSearch + profile + reserve pathP / F / B
ProfilePublic user/org profile tabs/users/{username}/profileAbout/Courses/Products/Articles/Forum/Badges/MeetingsP / F / B
StoreProducts list + detail/products , /products/{slug}Buy/cart when Store onP / F / B
BlogList + post/blog , /blog/{slug}Posts renderP / F / B
ForumsIndex + topic/forumsBrowse/create when Forums onP / F / B
AuthLogin/loginForm + demo buttons if enabledP / F / B
AuthRegister/registerStudent (+ instructor/org options if enabled)P / F / B
AuthForgot / reset / verify/forget-password , /verificationFlows complete without 500P / F / B
CartCart overview/cartTotals; proceed to paymentP / F / B
CartCheckout / payment channels/cart paymentGateway or offline option rendersP / F / B
Become instructorApply + packages/become-instructorForm + packages when enabledP / F / B
EventsList + detail + tickets/eventsFeature gate; detail tabsP / F / B
JobsList + detail + apply/jobsFeature gate; apply when logged inP / F / B
Meeting packagesPublic packages/meeting-packagesPurchase/free pathP / F / B
FormsCustom form/forms/{url}Submit + validationP / F / B
GiftsGift purchase (auth)/gift/...Auth requiredP / F / B
Installments / SubscribesPlan details/installments , /subscribesFeature-gated pagesP / F / B
CertificatesPublic validation/certificate_validationValidate by codeP / F / B
Contact / CMSContact + custom pages/contact , /pages/{link}Forms/pages loadP / F / B
LandingsCustom landing URL/landings/{url}Published landing rendersP / F / B
Errors404 themed/not-a-real-page-xyzBranded 404P / F / B

2. Student panel (role: user)

Role: Student  |  Login: /demo-login/student ? /panel

For every row: open the URL/menu, confirm page loads (no 500/blank), chrome matches role, mark Pass / Fail / Blocked. Use Blocked (feature toggle) when the env shows Feature not activated or the feature toggle is off.

Must NOT see: Members (org), Create course/bundle/event/job, meeting settings/requests (instructor), store seller tools, sales report, blog articles, noticeboard create, Admin chrome.

SectionMenu / screenPathCheckResult
MainDashboard/panelStudent stats (classes/following)P / F / B
MainEvents calendar/panel/events-calenderCalendar loadsP / F / B
CoursesMy purchases/panel/courses/purchasesPurchased courses listP / F / B
CoursesMy comments/panel/courses/...commentsComments listP / F / B
CoursesFavorites/panel/...favoritesFavorites listP / F / B
CoursesCourse notes/panel/...notesFeature-gatedP / F / B
CoursesMy attendances/panel/courses/my-attendancesAttendance feature-gatedP / F / B
UpcomingFollowing/panel/upcoming...Feature upcoming_coursesP / F / B
EventsMy purchases / comments/panel/events...Feature eventsP / F / B
MeetingsMy reservation/panel/meetings/reservationReservations listP / F / B
MeetingsPurchased packages/panel/meetings...packagesMeeting packages featureP / F / B
JobsMy requests / comments / bookmarks/panel/jobs...Feature jobsP / F / B
AssignmentsMy assignments/panel/assignments...Assignment featureP / F / B
QuizzesMy results / not participated/panel/quizzes...Quiz listsP / F / B
CertificatesMy achievements/panel/certificates...Certificates + validation linkP / F / B
StoreMy purchases / comments/panel/products...Store access gateP / F / B
FinancialSummary / Payout / Charge / Subscribes / Installments/panel/financial...Wallets & plansP / F / B
MarketingAffiliates / Registration bonus / Coupons/panel/marketing...Only if affiliate/bonus/coupons onP / F / B
RewardsRewards/panel/rewardsRewards settingsP / F / B
SupportNew / Classes support / Tickets/panel/support...Support formsP / F / B
ChatPublic chat/panel/public-chatPublic chat featureP / F / B
ForumsNew topic / My topics / posts / bookmarks/panel/forums... + /forums/create-topicForums onP / F / B
UserNotifications/panel/notificationsNotification listP / F / B
UserAI contents/panel/ai-contentsAI feature gateP / F / B
UserSettings/panel/settingProfile settingsP / F / B
UserLog out/logoutReturns to publicP / F / B

3. Instructor panel (role: teacher)

Role: Instructor  |  Login: /demo-login/instructor ? /panel

For every row: open the URL/menu, confirm page loads (no 500/blank), chrome matches role, mark Pass / Fail / Blocked. Use Blocked (feature toggle) when the env shows Feature not activated or the feature toggle is off.

Re-check all Student-shared items that also appear for teachers, then every instructor-only row below.

SectionMenu / screenPathCheckResult
CoursesNew course wizard/panel/courses/new8-step wizard loadsP / F / B
CoursesMy classes/panel/coursesInstructor coursesP / F / B
CoursesInvited classes/panel/courses/invitedInvites listP / F / B
CoursesOrg classes (if organ_id)/panel/courses/organizationOrg-linked classesP / F / B
CoursesMy class comments/panel/courses/...Class commentsP / F / B
CoursesAttendances (instructor)/panel/courses/...attendancesSession attendanceP / F / B
UpcomingNew / My upcoming/panel/upcoming_courses...Create + listP / F / B
BundlesNew / My bundles/panel/bundles...Bundle create + listP / F / B
EventsNew / My events / Org events / Comments/panel/events...Event CRUDP / F / B
MeetingsRequests/panel/meetingsIncoming requestsP / F / B
MeetingsSettings (availability)/panel/meetings/settingsSlots saveP / F / B
MeetingsSold meeting packages/panel/meetings...soldSales listP / F / B
JobsNew / My jobs / Comments/panel/jobs...Job CRUDP / F / B
AssignmentsList + Students assignments/panel/assignments...Review submissionsP / F / B
QuizzesNew / List / Results/panel/quizzes...Quiz builder + resultsP / F / B
CertificatesList / All students/panel/certificates...Issue/listP / F / B
StoreNew product / Products / Sales / Comments/panel/store...Seller toolsP / F / B
FinancialSales report / Registration packages/panel/financial...Teacher financeP / F / B
MarketingDiscounts / Promotions/panel/marketing...Teacher promosP / F / B
BlogNew article / My articles / Comments/panel/blog...Teacher-only blogP / F / B
NoticeboardHistory / New / Course notices/panel/noticeboard...NoticesP / F / B
UserMy public profile/users/{username}/profilePublic profile opensP / F / B

4. Organization panel

Role: Organization  |  Login: /demo-login/organization ? /panel

For every row: open the URL/menu, confirm page loads (no 500/blank), chrome matches role, mark Pass / Fail / Blocked. Use Blocked (feature toggle) when the env shows Feature not activated or the feature toggle is off.

Same education/store/financial tools as instructor except Blog (teacher-only). Plus Members management.

SectionMenu / screenPathCheckResult
MembersInstructors New / List/panel/manage/instructors...Create + list instructorsP / F / B
MembersStudents New / List/panel/manage/students...Create + list studentsP / F / B
CoursesOrg classes/panel/courses/organizationOrg course listP / F / B
EventsOrg events/panel/events...Org events if feature onP / F / B
NoteNo Blog menu — Blog must NOT appear for Organization (teacher-only)P / F / B
ParityInstructor-like menus (courses, meetings, store, financial, noticeboard)/panel/...Open each teaching menu; confirm org capacity/seat messaging where shownP / F / B

5. Admin console

Role: Admin  |  Login: /demo-login/admin ? /admin

For every row: open the URL/menu, confirm page loads (no 500/blank), chrome matches role, mark Pass / Fail / Blocked. Use Blocked (feature toggle) when the env shows Feature not activated or the feature toggle is off.

Open every sidebar parent and child. If a page shows Feature not activated, mark B and confirm Activations / soq.edu.sg wording (not marketplace purchase copy).

SectionMenu / screenPathCheckResult
DashboardsGeneral dashboard/adminKPIs loadP / F / B
DashboardsMarketing dashboard/admin marketing dashboardMarketing KPIsP / F / B
EducationClasses: New / Courses / Live / Text / Agora history / NotesEducation ? ClassesEach child opensP / F / B
EducationBundles New / ListEducation ? BundlesCRUD listP / F / B
EducationUpcoming New / ListEducation ? UpcomingCRUD listP / F / B
EducationEvents New / List / Sold tickets / SettingsEducation ? EventsFeature-toggle awareP / F / B
EducationQuizzesEducation ? QuizzesQuiz adminP / F / B
EducationCertificates (quiz/course/templates/settings)Education ? CertificatesTemplates + settingsP / F / B
EducationAssignments / Course forum / Course noticesEducation ? ...Each leaf opensP / F / B
EducationEnrollment Add + HistoryEducation ? EnrollmentMay be activation stubP / F / B
EducationWaitlistsEducation ? WaitlistsQueue listP / F / B
EducationCategories New/List/Trends + Filters New/ListEducation ? Categories/FiltersTaxonomyP / F / B
EducationReviewsEducation ? ReviewsModeration listP / F / B
EducationAttendances History + SettingsEducation ? AttendancesAttendance opsP / F / B
AppointmentsConsultants / AppointmentsAppointmentsConsultant + booking listsP / F / B
AppointmentsMeeting packages Create/Lists/Sold/SettingsAppointments ? PackagesPackage opsP / F / B
UsersNew / All / Staff / Students / Instructors / OrganizationsUsers ? listsEach list filters correctlyP / F / B
UsersNot access to contentUsersRestriction listP / F / B
UsersRoles New/List + Groups New/List + BadgesUsers ? Roles/Groups/BadgesRBAC screensP / F / B
UsersInstructor requests + Delete-account + IP mgmtUsers ? ...Requests + login history + IPP / F / B
ForumForums / Featured / Recommended + SettingsForumForum adminP / F / B
Live chatRooms / Public chats / SettingsLive chatChat adminP / F / B
CRMSupport tickets New/List/DepartmentsCRM ? SupportTicket opsP / F / B
CRMClass conversations + Comments (all types) + ReportsCRMModerationP / F / B
CRMContacts / Noticeboard / NotificationsCRMComms toolsP / F / B
ContentStore (products/orders/sellers/categories/...)Content ? StoreFull store admin or stubP / F / B
ContentJobs (lists/applications/categories/settings)Content ? JobsJobs admin or stubP / F / B
ContentBlog + Pages + Additional pages + Testimonials + TagsContentCMSP / F / B
ContentRegions / Form builder / AI contents / Delete requests / Instructor finderContentEach opensP / F / B
FinancialBalances / Sales / Payout / Offline paymentsFinancialMoney opsP / F / B
FinancialSubscribes / Rewards / Registration packages / InstallmentsFinancialPlans & rewardsP / F / B
MarketingDiscounts / Cart discount / Special offers / Abandoned cartMarketingPromo toolsP / F / B
MarketingFeature webinars / Cashback / Gifts / Promotions / Ads / NewslettersMarketingGrowth toolsP / F / B
MarketingAffiliate / Registration bonus / Ad modal / Bars / Purchase notifications / BadgesMarketingEach leafP / F / B
AppearanceThemes (new/list/colors/fonts/headers/footers)Appearance ? ThemesTheme libraryP / F / B
AppearanceLanding builder New + All pagesAppearance ? Landing builderBuilder opensP / F / B
SettingsBulk imports / Translator / ActivationsSettingsOps toolsP / F / B
SettingsSettings hub: General / Financial / Personalization / Notifications / SEO / Mobile / UpdateSettings ? hubEach card + tabsP / F / B

6. Staff (permission-trimmed Admin)

Role: Staff  |  Login: /demo-login/staff ? /admin

For every row: open the URL/menu, confirm page loads (no 500/blank), chrome matches role, mark Pass / Fail / Blocked. Use Blocked (feature toggle) when the env shows Feature not activated or the feature toggle is off.

SectionMenu / screenPathCheckResult
AccessLand on /admin not /panel/demo-login/staffAdmin chrome onlyP / F / B
MenusVisible menus ? Staff role permissionssidebarMissing items vs Admin notedP / F / B
DeniedRestricted admin URLknown denied path403 or hidden — not full accessP / F / B
Education opsReview courses / Categories / Filters / ReviewsEducation ops docsPermitted pages workP / F / B
Users opsUser lists Staff can accessUsersNo role-edit if not permittedP / F / B

7. Themes & Landing Builder

Role: Admin  |  Login: Admin ? Appearance

For every row: open the URL/menu, confirm page loads (no 500/blank), chrome matches role, mark Pass / Fail / Blocked. Use Blocked (feature toggle) when the env shows Feature not activated or the feature toggle is off.

SectionMenu / screenPathCheckResult
ThemesList themes / activateAdmin ? ThemesActive theme applies to publicP / F / B
ThemesColors / FontsThemes ? colors/fontsPublic CSS variables updateP / F / B
ThemesHeader_1 / Header_2 / MobileThemes ? headersPublic header matchesP / F / B
ThemesFooter_1 / Footer_2Themes ? footersFooter links/newsletterP / F / B
LandingEdit homepage landing componentsLanding builderHome composition edits saveP / F / B
LandingPublish custom /landings/{url}Landing pagesPublic URL rendersP / F / B
LandingHero variants used on hometwo_columns_hero / full_width / sliding_courses / etc.CTA + images OKP / F / B
LandingCourse grids on homefeatured/newest/best/discounted/free/custom/multi_tabCards + linksP / F / B
LandingInstructors / orgs / verticals / stats / blog / store / jobs / events / meetingshome componentsEach enabled blockP / F / B

8. Critical journey scripts (deep checks)

After smoke-opening every menu above, run these end-to-end cases with real clicks and data.

CJ-01 — Guest ? Landing ? Catalogue ? Course ? Login
Steps
  1. Open /; verify landing hero + at least one course grid.
  2. Use header/footer CTAs; open /classes; filter; open /course/{slug}; check About/Content/Reviews/Comments tabs.
  3. Click enroll/buy while logged out ? redirected to login/register.
  4. Login as student; return to course; complete free enroll or cart checkout.
ExpectedLanding and catalogue work; auth gate correct; post-login enrollment succeeds.
ResultPass / Fail / Blocked — notes:
CJ-02 — Student learn path
Steps
  1. From purchases open /course/learning/{slug}.
  2. Play/open a lesson; check progress UI.
  3. Open quiz/assignment/certificate entry points if present on the course.
  4. Open Panel quizzes/assignments/certificates menus and confirm data appears.
ExpectedLearning page usable; evaluation tools reachable without Admin chrome.
ResultPass / Fail / Blocked — notes:
CJ-03 — Student book meeting
Steps
  1. Open /instructor-finder ? instructor profile ? Reserve.
  2. If no slots, mark B and run Instructor CJ-05 first.
  3. Confirm Panel ? Meetings ? My reservation shows the booking.
ExpectedReservation created and visible to student.
ResultPass / Fail / Blocked — notes:
CJ-04 — Instructor create course (all wizard steps)
Steps
  1. Open /panel/courses/new.
  2. Complete steps: 1 Basic “ 2 Extra ” 3 Pricing “ 4 Content ” 5 Prerequisites “ 6 FAQ ” 7 Quiz & certificate — 8 Message.
  3. Save; find course in My classes (draft OK).
  4. As Admin, open Education ? Classes and locate the course for review if submitted.
ExpectedWizard completes; course listed for instructor and visible to Admin review flow.
ResultPass / Fail / Blocked — notes:
CJ-05 — Instructor meetings + availability
Steps
  1. Panel ? Meetings ? Settings: add availability window.
  2. Panel ? Meetings ? Requests: page loads.
  3. As Student, confirm slot on public profile / finder.
ExpectedAvailability drives public booking; requests list works.
ResultPass / Fail / Blocked — notes:
CJ-06 — Instructor store / blog / noticeboard (when enabled)
Steps
  1. Store: New product ? list ? sales ? comments.
  2. Blog: New article ? list ? comments (instructor only).
  3. Noticeboard: New notice + course notices.
  4. Verify public /products / /blog show published items.
ExpectedSeller/content tools publish to public surfaces when features on.
ResultPass / Fail / Blocked — notes:
CJ-07 — Organization manage members
Steps
  1. Panel ? Members ? Instructors: list + new.
  2. Panel ? Members ? Students: list + new.
  3. Open org courses/financial; note seat/package limits.
  4. Confirm Blog menu is absent.
ExpectedOrg can manage people in Panel; not full Admin; no Blog.
ResultPass / Fail / Blocked — notes:
CJ-08 — Cart / checkout / offline payment
Steps
  1. As Student add paid course or product to cart (/cart).
  2. Proceed to payment; exercise one online channel OR offline payment.
  3. If offline: as Admin open Financial ? Offline payments and approve/reject path.
  4. Confirm access granted only after success/approval rules.
ExpectedCheckout happy path works; offline pending state explained in UI.
ResultPass / Fail / Blocked — notes:
CJ-09 — Admin education + users smoke
Steps
  1. Education: open Classes, Categories, Enrollment, Certificates, Attendances.
  2. Users: open Students, Instructors, Organizations, Staff, Roles.
  3. CRM: open one support ticket list + one comments queue.
  4. Settings ? Features: note which public modules are on/off for this env.
ExpectedCore admin ops load; feature flags match what Public/Panel showed as B.
ResultPass / Fail / Blocked — notes:
CJ-10 — Homepage landing builder round-trip
Steps
  1. Admin ? Appearance ? Landing builder ? open the homepage landing.
  2. Confirm components match what Guest sees on /.
  3. Edit a visible text/CTA on one hero; save; hard-refresh public home.
  4. Open Themes ? Headers/Footers; confirm public chrome matches active theme.
ExpectedLanding/theme edits reflect on public frontend.
ResultPass / Fail / Blocked — notes:
CJ-11 — Module gate wording
Steps
  1. As Admin open a known inactive module page (e.g. Organizations admin or Store if off).
  2. Read stub: must say Feature not activated; Activations + soq.edu.sg.
  3. Confirm no old vendor / paid-plugin marketplace wording.
ExpectedSOQ gate copy only.
ResultPass / Fail / Blocked — notes:
CJ-12 — Staff vs Admin permission contrast
Steps
  1. Login Staff; list visible sidebar sections.
  2. Login Admin; list full sidebar.
  3. Document differences; open one Staff-allowed page and one denied path.
ExpectedStaff is trimmed Admin on /admin only.
ResultPass / Fail / Blocked — notes:

9. Results log

SuiteRows testedPassFailBlockedSign-off
Public & Landing
Student Panel
Instructor Panel
Organization Panel
Admin Console
Staff
Themes & Landing Builder
Critical journeys CJ-01…CJ-12

10. Defect report format

  1. Suite + row / CJ-ID
  2. Role + account
  3. Surface (Public / Panel / Admin) + full URL
  4. Steps, expected vs actual
  5. Screenshot + console/network if 4xx/5xx
  6. Feature flag / activation if Blocked

Related: Frontend Master Guide · Screen Map · Documentation/Technical/MASTER_TECHNICAL_DOCUMENTATION.md