Case study · 05 / 09

IUSVitae

E-learning platform for law students

Practice tests built on the actual statutes, spaced repetition, real-time multiplayer quizzes — and Ustawoteka, a reader that plays the law aloud, line by line, on the web and in a mobile app.

  • EdTech
  • Real-time
  • Audio
  • Payments

Partner

IUSVitae

Industry

EdTech · Law

Platform

Web app + Flutter mobile app

Our role

Product engineering, end to end

The product

What it does

Law students and bar candidates build tests from a question bank mapped to every part of a statute, repeat what they keep getting wrong, race friends in live games and follow their progress. Ustawoteka reads legal codes aloud with the current provision highlighted — handy on a commute through the mobile app. Access is sold as subscriptions.

Our part

What we built

A Vue 3 + TypeScript frontend on a Laravel 12 backend in hexagonal/DDD architecture with CQRS, real-time games on Laravel Reverb WebSockets and recurring payments across three gateways.

Under the hood

The hard parts

  1. 01

    Live multiplayer games

    Races, exams and homework on Laravel Reverb: private and presence channels, chat on client whispers and a leaderboard driven by events.

  2. 02

    Statutes as a tree

    A recursive tree of book, title, division and chapter with cascading selection and the question count at every level.

  3. 03

    Audio synced to the text

    Joined audio files with fragment offsets keep the reading in step with the provision on screen, at adjustable speed, with a bridge to native audio in Flutter and v-memo for ~700 provisions.

  4. 04

    Spaced repetition and payments

    Knowledge levels 1–5 and “+”, user-defined intervals with a review calendar — and subscriptions through Stripe Checkout and Billing Portal, Przelewy24 and Espago card tokenisation.

The outcome

Tests, repetition, live games and listening to the law — in one subscription, on web and mobile.

Inside the product

6 screens, explained

Demo data · click any screen to enlarge

01

Student dashboard

Today’s score, progress across the bank, daily bars, review calendar and knowledge level. The backend builds the chart configuration from aggregate tables; the frontend just renders it.

02

Live race with chat

Timer, progress, shuffled answers, player ranking and chat — messages and scores arrive over WebSockets on private and presence channels.

03

Test builder

A recursive tree of the statute with cascading parent/child selection and the number of questions on every unit.

04

Ustawoteka audio reader

The Civil Code read aloud: the current provision highlighted and auto-scrolled, table of contents, jump to article, 1.25× speed and listening history.

05

Ustawoteka on mobile

The same reader at 390 px, running inside the Flutter app, where a JS bridge plays audio natively in the background.

06

Spaced repetition

Questions due today, the calendar for the days ahead and knowledge levels in each area of law — questions come back at the intervals each student sets.

Stack

Frontend

  • Vue 3.5
  • TypeScript
  • Vite 6
  • Vuetify 3
  • Pinia
  • Chart.js
  • Laravel Echo

Backend

  • Laravel 12 / PHP 8.4
  • DDD + CQRS
  • Passport (OAuth2)
  • Laravel Reverb
  • Orchid admin

Payments

  • Stripe
  • Przelewy24
  • Espago

Infra & quality

  • MariaDB
  • Redis
  • Docker
  • PHPStan
  • Deptrac
  • Cypress
  • Sentry

Next case

Kasanowa →

Sales incentive programme

Want a product
like this?

Get a free estimate