← Visi darbai
Kalbų mokymosi platforma
- Kas tai
- Internetinė kalbų mokymosi sistema iš trijų dalių: vieša mokymų svetainė, mokinio mokymosi platforma ir turinio valdymo sistema. Kursus administratorius kuria pats, be programuotojo: sistema iš įvesto žodyno sudaro interaktyvias užduotis, valdo prieigą prie kursų per aktyvavimo kodus, seka mokinių progresą ir baigus lygį išduoda sertifikatą.
- Būsena
- Aktyviai vystoma.
Užduotys iš žodyno automatiškai
Administratorius žodį įveda vieną kartą, o sistema iš jo pati sudaro iki aštuonių tipų užduočių.
- Užduočių tipai: kortelė, žodis su sakiniu, klausyk ir pasirink, porų sujungimas, praleistas žodis, sakinio dėliojimas, vertimas abiem kryptimis, paveikslėlio parinkimas ir rankinis klausimas.
- Prieš kuriant matosi, kiek užduočių atsiras ir kurioms trūksta duomenų (pvz. garso).
- Klaidingi atsakymų variantai parenkami iš tos pačios temos žodžių.
- Pakartotinai sudėliojus užduotys nesidubliuoja, o rankinės išlieka.
- „Išmaišyti“ sumaišo užduotis taip, kad žodžio kortelė visada eitų prieš to žodžio tikrinimą.

Mokymosi kelias mokiniui
Mokinys eina aiškiu keliu: pamokos, testai, kartojimas ir sertifikatas. Progresas saugomas serveryje ir nedingsta pakeitus įrenginį.
- Atsakymas patikrinamas iš karto; raidžių dydis ir skyryba nesvarbūs, o praleistos lietuviškos raidės ar viena rašybos klaida įskaitomos su pastaba.
- Temos ir testai atsirakina nuosekliai, pagal progresą.
- Testai vertinami serveryje pagal praėjimo ribą.
- Žodžiai kartojami intervalais 1 → 3 → 7 → 21 diena.
- Baigus lygį išduodamas PDF sertifikatas su unikaliu numeriu.

Visas kursas iš vieno Excel failo
Visą kursą galima įkelti vienu Excel failu, o sistema prieš įrašydama parodo, kas bus sukurta.
- Tuščias ir pavyzdinis šablonas atsisiunčiami iš sistemos.
- Prieš importą tikrinami stulpeliai, ieškoma dublikatų ir parodoma, kur turinys bus įdėtas.
- Trūkstamas garsas ar paveikslėlis susiejamas automatiškai, kai vėliau įkeliamas tokiu pačiu pavadinimu.
- Importuotos pamokos gali būti iškart paskelbtos.

Techninė dalis
- Rolė
- Viena kūriau visą sistemą: duomenų bazę, serverio logiką, mokinio platformą, turinio valdymą ir testus.
- Sprendimai
- Užduočių variklis iš grynų funkcijų: kiekvienas užduoties tipas yra viena taisyklė registre, todėl naujas tipas nereikalauja keisti variklio. Atsitiktinumas perduodamas kaip parametras, todėl logika testuojama deterministiškai. Tas pats variklis veikia pamokose, testuose ir kartojime.
- Saugumas trijuose sluoksniuose: sąsajoje, serverio veiksmuose ir duomenų bazėje (Row Level Security kiekvienai lentelei). RLS taisyklės patikrintos atskirais integraciniais testais, nes sąsajos apsaugą galima apeiti kreipiantis tiesiai į API.
- Atomiški veiksmai duomenų bazėje: kodo aktyvavimas ir kitos kelių žingsnių operacijos vyksta vienoje transakcijoje su eilutės užraktu, todėl tą patį kodą aktyvuoti gali tik vienas žmogus.
- Griežtas duomenų sluoksnis: komponentas → hook'as → servisas → duomenų bazė. Kai du administratoriai redaguoja tą patį įrašą, konfliktas aptinkamas ir svetimi pakeitimai tyliai neperrašomi.
- Kokybės automatika: patikros prieš kiekvieną commit'ą, ESLint taisyklė, saugojanti dizaino sistemą, kontaktų formos apsauga nuo šlamšto, o IP saugomas tik kaip maiša ir ištrinamas po paros.
- Mastas
- 33 ekranai · 25 DB lentelės ir 64 RLS taisyklės · 9 užduočių tipai · 433 testai (iš jų 110 RLS ir 16 E2E) · 2105 vertimo raktai
- Stackas
- Next.js, React, TypeScript, Tailwind CSS, shadcn/ui, TanStack Query, React Hook Form + Zod, next-intl · Supabase (PostgreSQL, RLS, Auth, Storage), pg_cron · @react-pdf/renderer, xlsx · Vitest, Playwright