Online learning for secondary students
Tadris Syria
Tadris Syria is a learning platform for Syrian secondary students in grades 9 to 12. I led the build of one monorepo holding six web apps (a marketing site and portals for students, teachers, parents, staff and admins), a REST API and an Expo app. Every screen is Arabic-only and right to left. It is in beta on 3lmna.com subdomains, running on seeded demo content.
- Client
- Tadris Syria
- Year
- 2026
- Role
- Product and engineering lead, Admix Lab
- Status
- Beta
- Platforms
- Marketing site, Student portal, Teacher portal, Admin and staff, Parent portal


Students and parents. The public front door: an Arabic landing page aimed at the baccalaureate, with features, subjects, plans and a free sign-up.
- Six web apps, a REST API and an Expo app (built, not yet released) in one monorepo
- 50 data models; 79 API route files with 96 handlers
- Arabic-first: every portal is Arabic and right to left
- Device limits per plan to stop account sharing, plus streaks, XP and levels
Challenge
Syrian secondary students preparing for the baccalaureate needed a learning platform built in Arabic from the first screen and around local conditions: card payments are limited, shared accounts are common, and parents, teachers and operations staff each need their own tools.
The scope covered six user roles (student, parent, teacher, staff, admin and super admin) and the whole loop: lessons, quizzes and exams, motivation, payments and oversight.
Approach
The Admix Lab team first explored the product in four Lovable design prototypes between February and March 2026. I then led the build of one Turborepo monorepo: six Next.js 16 web apps, a REST API and an Expo app for students and parents, sharing packages for the database, auth, a typed API client, UI components and types. The schema has 50 Prisma models on Supabase Postgres, and the API has 79 route files with 96 handlers. The repo went from its first database migration on 16 March 2026 to a production deployment on 20 March.
Security sits in the API, not the screens: 15-minute access tokens with 30-day refresh sessions in Upstash Redis, an emailed one-time code before sign-up, a sliding-window limit of 60 requests per minute per IP, device limits per plan, a staff-tier check in middleware that keeps refunds to Supervisors, and signed URLs for videos and private files. Parents see a child's data only after linking with an expiring code.
Payments fit the market: Stripe Checkout with a signature-verified webhook for cards, and manual, Syriatel Cash and MTN Cash transfers where the student submits the sender name, transfer reference and receipt for an admin to verify or reject. Lesson videos upload directly to Cloudflare Stream, and PDFs, slides and other resources sit in Supabase Storage behind 24-hour signed links.
Impact
The six web apps and the API are deployed as seven Vercel projects on 3lmna.com subdomains, with an Arabic-only interface. The platform is in beta: production runs on seeded demo content for grades 9 to 12, and some student pages still need fixes before launch.
The API implements email-code sign-up with grade and track, lesson watch progress, quiz and exam attempts, XP, levels and streaks, parent linking, payment verification, and refunds limited to the Supervisor tier among staff.
The Expo app for students and parents (25 screens on Expo SDK 54) sits in the same monorepo with EAS build profiles set up. It has not been released on the App Store or Google Play.
Students and parents
Marketing site
The public front door: an Arabic landing page aimed at the baccalaureate, with features, subjects, plans and a free sign-up.
- Arabic, right-to-left hero for students heading into the baccalaureate
- Twelve subjects, from mathematics, physics and chemistry to philosophy and informatics
- Plans and their device limits load live from the API
Students in grades 9 to 12
Student portal
The student's daily workspace: streak, XP and level up front, lessons to pick up, and progress by subject. On phones the same web portal switches to a bottom tab bar.
- Video lessons save watch progress and count as complete at 80% watched
- Quizzes and exams with six question types; correct answers stay on the server during an attempt
- XP, levels and daily-streak bonuses at 3, 7, 14, 30 and 100 days
- Each plan allows 1, 2 or 3 devices, and students remove old ones from a devices page

Teachers
Teacher portal
Teachers build and maintain their lessons by subject and chapter. The dashboard's four figures (students, lessons, exam average, watch time) come from the API; its other panels are sample UI in this build.
- Lesson library with search, a subject filter, and each lesson's duration and publish status
- Each teacher can see, edit and delete only their own lessons, checked in the API
- New lessons start as drafts, only an admin can publish one, and teachers cannot delete a published lesson

Admins and operations staff
Admin and staff
Admins run the content, users and payments, from a lesson CMS to a queue for verifying transfers. A separate staff portal gives the operations team tiered access.
- Lesson CMS with draft, review, published and archived states, searchable by title or teacher
- Stripe Checkout for cards, plus manual, Syriatel Cash and MTN Cash transfers that admins verify or reject
- Staff portal for students, subscriptions and the payments ledger, with five staff tiers and a menu that shows only what each tier can use
- Among staff, the API lets only the Supervisor tier refund; a refund needs a reason, cancels the linked subscription or course access, and is written to the staff activity log





Parents
Parent portal
Parents link to a child's account with a code the student generates, then follow each child's XP, streak and completion.
- Link codes are 8 characters (XXXX-XXXX), skip look-alike characters and expire after 48 hours
- The API returns a child's data only to the parent linked to that child
- Per-child pages for progress, subjects and exams
Stack
- Next.js 16
- React 19
- TypeScript
- Turborepo
- Tailwind CSS v4
- TanStack Query
- Prisma
- PostgreSQL (Supabase)
- Upstash Redis
- Expo SDK 54
- React Native 0.81
- Vercel
Integrations
- Stripe Checkout and webhooks
- Cloudflare Stream
- Supabase Storage
- Upstash Ratelimit
- Resend