wanis.dev
← All work
Freelance · Education

Althue

The platform behind an Algerian training academy: a bilingual public site, courses delivered in cohorts, and the back office staff use to run sales, payments, and teaching.

Where
Freelance
Status
Live, ongoing
Stack
Laravel · Next.js · MySQL

Client work. Diagrams are simplified and contain no client data.

Context

The academy needed one system for everything: marketing its courses in English and French, enrolling students into specific runs of a course, collecting payments in the way people actually pay locally, and giving staff a dashboard to manage it all. The original React dashboard was already in use when the product needed a rebuild.

My role

Independent freelancer and main developer, working directly with the client since March 2025. I’ve built across all four parts: the API, the public site, the original dashboard, and the new Next.js app.

Architecture

REST + Sanctum tokensREST + Sanctum tokenssubscribe

Browser

Next.js app
public site + new dashboard
en / fr

Original dashboard
React + Vite

Laravel API

MySQL

File storage

SMTP email

.ics calendar feed

Calendar apps

Fig. 1 — Althue, simplified
  1. A Next.js app serves the bilingual public site and the new dashboard. The original React dashboard runs alongside it during the rebuild.
  2. Both frontends use the same Laravel JSON API, authenticated with Sanctum tokens. Roles and permissions decide what each staff member can do.
  3. The API stores data in MySQL, handles uploads and email, and publishes an .ics feed so students and staff can subscribe to their schedule in any calendar app.

Design decisions & trade-offs

  • Courses run as cohorts. Each run of a course is its own record, so past enrollments and feedback keep their history when a course runs again. Trade-off: every query has to know which run it’s about, and moving to this model needed a data migration.
  • Staff-reviewed transfer receipts instead of a payment gateway. Students pay by transfer and upload a receipt; staff review it. That fits how people pay locally. Trade-off: manual staff work, which needed a review queue and “needs attention” alerts so nothing waits unnoticed.
  • Backward-compatible API during the rebuild. The new app is built against the same API while the old dashboard is still live, so the live dashboard never breaks. Trade-off: old response shapes can’t be cleaned up until the switch is finished.

Stack

Laravel · Sanctum · Spatie Permission · MySQL · Next.js · React · TypeScript · Tailwind CSS · next-intl · Vercel