Ship a fast, Arabic‑first marketing site with hero, features, pricing, FAQs, and docs links. Localize content (ar/en), add clear CTAs to start a trial, implement basic SEO (titles, meta, sitemap, robots), and measure conversions. Keep payloads small for low bandwidth. Provide a basic blog/updates section tied to the changelog.
Implement a signup/signin experience with credentials and Google/Facebook OAuth. Validate email ownership, create a user profile with preferred locale, and show a clean post‑signup path to trial. Add rate limits, clear error surfaces, and a developer debug mode. Persist sessions securely and expose RoleGate for conditional UI from day one.
Start a no‑card trial by default for Sudan, display a countdown in the dashboard, store plan and usage limits, and lock plan‑gated features after a grace period. Support manual receipt upload/approval for paid plans, with audit events and notifications. Prepare for online payments later without blocking manual flow.
Implement an end‑to‑end flow that creates a School with a unique subdomain, validates availability server‑side, persists locale/timezone and brand settings, assigns the creator as Owner, seeds minimal defaults, writes an audit event, and redirects to the new subdomain. Handle conflicts, reserved names, and isolation from the first write.
Resolve subdomain and custom domain to schoolId on each request, cache the resolution briefly, attach schoolId to server actions and RSC loaders, and reject missing/invalid tenants with a friendly page. Support localhost/preview hosts, strip www, and add tests for positive/negative cases.
Add a self‑serve custom domain request flow, verify CNAME ownership asynchronously, automate certificates, and surface status/health in Settings. Keep the school live on its subdomain until the custom domain is verified. Fetch per‑school theme assets at runtime and apply brand consistently.
Seed core roles and a minimal academic scaffold (example class and subject) at provisioning. Allow admins to purge demo data. Provide deterministic factories for staging and E2E tests.
Define Prisma models with composite uniques scoped by schoolId, add createdAt/updatedAt, soft‑archive flags where needed, and indexes for frequent queries. Implement CRUD server actions with Zod validation and optimistic UI hooks, ensure referential integrity (enrollment, teaching assignments), and ship factories + seeds.
Adopt the generic data table for Students/Teachers with column meta for filters, URL‑synced sort/paging, and server‑driven queries. Respect role‑based scoping, enable column pinning, and add CSV export that reflects the current filtered/sorted view.
Parse CSV on the server with encoding detection, map headers to canonical field names, present a validation preview with row‑level errors, implement idempotent upserts with dedupe keys, guard with rate limits, and provide a downloadable error report.
Provide flows to configure years/terms/periods, classes, subjects, rooms, and assignments. Validate inputs with Zod, enforce schoolId scoping, and surface errors inline. Offer sensible defaults and quick‑start templates.
Allow admins to invite Owners/Admins, Teachers, and Parents with localized emails/SMS. On acceptance, create/link user accounts to the school, set roles, and write audit events. Enforce least‑privilege and add resend/expire flows.
After acceptance, show assigned classes and timetable, highlight first tasks (mark attendance, post announcement), and provide role‑appropriate help. Persist dismissible tips.
Allow parents to verify contact and link to one or more students securely. Render a mobile‑first portal with attendance and announcements. Ensure guardian role is read‑only at the server action layer. Respect guardian locale and privacy.
Build class/period marking with keyboard‑friendly UI, idempotent server actions, and backdate rules. Include bulk mark with per‑student overrides, reports by student/class/date range with server‑side pagination, and CSV export. Add indexes on (schoolId, classId, date).
Render a weekly grid per class and teacher using normalized period definitions, persist slots atomically, and detect conflicts (teacher/room). Respect timezone and DST. Provide a duplicate‑week utility.
Create, edit, publish/unpublish announcements scoped to school/role/class with createdAt sorting, lightweight list views, and simple moderation. Persist author and visibility metadata, and provide a minimal reader for parents/students with pagination.
Set locale and dir (RTL/LTR) in root layout, mirror directional icons, translate primary flows (auth, provisioning, attendance, announcements), format date/number/currency per locale, and default Arabic for Sudan while allowing per‑user overrides. Add i18n snapshots.
Introduce a logging adapter that injects requestId and schoolId into every log line, enable error tracking with release tags and user/tenant context, and record KPIs (signups, active schools, attendance events/day). Add lightweight dashboards and alert thresholds.
Schedule automated daily database backups with 7/30‑day retention, document a restore‑to‑staging drill with step‑by‑step verification, and publish RPO/RTO targets. Include an operator checklist and roll‑forward guidance.
Add lint and typecheck jobs, run a minimal Playwright E2E smoke (create school, mark attendance, publish announcement), post artifacts on failure, block merges on red, and publish a human changelog. Trigger preview deployments for PRs.
Mitigate EPERM rename failures on Windows by pinning Prisma engines or adding a cleanup step, and document a reliable local workflow (close watchers, remove .prisma, reinstall) in Contribute.
Audit and add missing indexes, set conservative pagination limits, introduce RSC caching where safe, measure bundle size and TTFB, and remove obvious render bloat. Track regressions in CI with a simple perf budget.
Guarantee full keyboard navigation and logical focus order, meet contrast ratios, add labels/ARIA on primary forms and controls, and include skip links and focus traps for dialogs/sheets. Verify with automated checks and a short manual checklist.
Harden secret storage, use strong password hashing and rotation policy, add audit events for billing/domain/role changes, review role checks and server action guards, and set sensible rate limits on auth and write endpoints.
Allow owners to export core data (CSV) and request deletion. Move the school to a time‑boxed retention queue before permanent removal. Provide confirmations and a checklist of post‑deletion expectations for transparency.
On This Page
IssuesMarketing site (public)Visitor signupTrial and plansTenant provisioning (subdomain)Tenant context middlewareCustom domains and brandingSeed defaultsCore data models (Students, Teachers, Classes, Subjects)Generic table adoptionCSV import pipelineAdmin setupInvites and accessTeacher onboardingParent and student onboardingAttendance (daily/period)Timetable (basic)AnnouncementsInternationalization (ar/en)Observability baselineBackups and disaster recoveryCI and release managementWindows Prisma reliabilityPerformance passAccessibilitySecurity hardeningExit and deprovisioning