Overview
The mobile app now ships first-party workspace surfaces for:- Drive at
Routes.drive - CRM at
Routes.crm - Education at
Routes.education
ShellMiniNavfor mode or section switchingShellChromeActionsfor quick actions such as filters, create, sort, and view toggles- A finance-style overview hero card inside the page body for stats and search
- Compact panel sections in the page body instead of raw admin
Card/ListTilestacks, so module pages read like first-class mobile products rather than direct dashboard ports
404 responses.
Mobile Drive Coverage
The Drive screen inapps/mobile supports the main dashboard Drive flow:
- Workspace permission-gated loading
- Storage analytics summary
- Folder navigation and breadcrumb-style path movement
- Search, sort, grid/list toggle, and pagination
- Folder creation, rename, delete, bulk delete, and upload
- File preview, external open, share, and path copy
- Folder export-link generation and sharing
/api/v1/workspaces/:wsId/storage/list/api/v1/workspaces/:wsId/storage/analytics/api/v1/workspaces/:wsId/storage/folders/api/v1/workspaces/:wsId/storage/rename/api/v1/workspaces/:wsId/storage/object/api/v1/workspaces/:wsId/storage/share/api/v1/workspaces/:wsId/storage/export-links/api/v1/workspaces/:wsId/storage/upload-url/api/v1/workspaces/:wsId/storage/finalize-upload
Mobile CRM Coverage
The CRM screen inapps/mobile supports:
- Workspace permission-gated users and audit tabs
- Search, filters, pagination, and audit range filters
- Create, edit, and delete user records
- Avatar upload during create/edit flows
- Feedback create/update/delete flows
- Duplicate detection and merge flows
- CSV import with preview and deduping by email
- CSV export of the currently filtered users dataset
/api/v1/workspaces/:wsId/users/database/api/v1/workspaces/:wsId/users/api/v1/workspaces/:wsId/users/:userId/api/v1/workspaces/:wsId/users/groups/api/v1/workspaces/:wsId/users/feedbacks/api/v1/workspaces/:wsId/users/audit-logs/api/v1/workspaces/:wsId/users/duplicates/detect/api/v1/workspaces/:wsId/users/merge/api/v1/workspaces/:wsId/users/bulk-import/api/v1/workspaces/:wsId/users/avatar
Workspace not found even for valid workspace members.
Mobile Education Coverage
The Education screen inapps/mobile supports:
- An overview dashboard with counts for courses, quizzes, quiz sets, flashcards, and attempts
- Course search, create, edit, delete, and paginated browsing
- Library management for quizzes, quiz sets, and flashcards
- Quiz authoring with answer options, correctness flags, and explanations
- Attempt browsing with status and quiz-set filters plus attempt-detail review
apps/web:
/api/v1/workspaces/:wsId/courses/api/v1/workspaces/:wsId/courses/:courseId/api/v1/workspaces/:wsId/quizzes/api/v1/workspaces/:wsId/quizzes/:quizId/api/v1/workspaces/:wsId/quiz-sets/api/v1/workspaces/:wsId/quiz-sets/:setId/api/v1/workspaces/:wsId/flashcards/api/v1/workspaces/:wsId/flashcards/:flashcardId/api/v1/workspaces/:wsId/education/attempts/api/v1/workspaces/:wsId/education/attempts/:attemptId
.single() response on a collection endpoint can work in the web dashboard but break mobile Bearer-token callers or pagination assumptions.
When an Education mobile list needs derived counts from workspace-protected join tables such as course_module_quiz_sets, verify workspace membership first with the request-scoped client, then run the joined read on an admin-backed client. Also select real join columns such as module_id; do not assume those bridge tables expose a synthetic id.
Import And Export Format Notes
- The web CRM page still has richer spreadsheet tooling, including XLSX-oriented flows.
- Mobile import and export currently use CSV plus native share sheets.
- Keep the server contract for bulk import as a raw JSON array of
{ email, fullName }rows.
apps/mobile does not accept a stable XLSX package cleanly without conflicts, so mobile should prefer CSV/share flows unless spreadsheet generation is moved server-side later.
Verification
For Drive, CRM, or Education mobile changes:- Update
apps/mobile/lib/l10n/arb/*.arbfor every new user-facing string. - Run
flutter gen-l10n. - Run
bun check:mobile.