marlana creed

index / 01

My ESOL App The course, the practice, and the teacher tools for my adult English classes

My students study English around jobs, kids, and long commutes. I built the whole platform they use: a year-long course they can follow one week at a time, practice that sounds like their real lives, and tools that show me who needs help before the next class.

role
sole builder: data model, code, content, teaching
stack
Next.js, TypeScript, PostgreSQL, Prisma
status
live, used in my classes every week
users
adult learners and their teachers
since
dec 2025 · 1,317 commits
open
myesolclass.com ↗ (accounts required)
My ESOL App learner dashboard: this week's activities, completion progress, a Continue button, a calendar, and class resources
fig. 1  where a student starts: this week's work, one clear Continue, class resources alongsidelive app · test account · oct 7, 2026

Learning needs to fit into a life already in motion.

My students are already carrying a lot. Work and childcare leave little uninterrupted time to study, and most of their practice happens on a phone: on the bus, on a break, after the kids are asleep. I wanted English practice to fit those moments without asking them to learn another complicated system first.

I also saw that without clear assigned work, students drift away between classes. So the app is built around one question: "What do I do now?" There is always a guided answer, and a library for when someone wants more.

A path through the year, one week at a time.

The course is mapped out as 10 units and 36 weeks, organized around adult life: community, consumer smarts, housing and renting, work and careers, and health care. Each week is a short list of activities with a Continue button that always points to the next one. The current week follows the school calendar, not the student's progress, so someone who missed a week still lands where the class is.

I keep three kinds of content separate on purpose. The course map is the guided path, and I release it a week at a time. The practice library is always open for students who want more. Assignments have due dates. Mixing these up is the easiest way to confuse a student about what is required, so the app treats them as different things all the way down to the data model.

Course map with units down the left, a week timeline from September to January, and Week 4's activities with a Continue button
fig. 2  course map: the week in context, the next step still visibletest account · oct 7, 2026

Grammar taught as a story students want to finish.

I wrote 76 interactive grammar guides. The newer ones follow a few characters through situations my students know: Carlos picks up the wrong lunch bag at work, texts his sister, and the verb forms show up in the messages. Each section opens with a scene and a short chat, then unlocks exercises next to the text so the example is still in view while students practice.

Grammar guide section 'Mark is looking everywhere': a restaurant scene photo and text-message chat on the left, and a Spot the form exercise with multiple choice and a fill-in blank on the right
fig. 3  the story on the left, practice on the right, in the same viewlive app · oct 9, 2026

Every guide ends with a mini quiz written in the same storyline. Each question is tagged with the skill it checks, for example "be + V1, not base form." Those tags feed the teacher reports in the teacher's side below.

The end-of-guide Mini Quiz: question 1 asks for the correct form of leave in a sentence about Mark's lunch, and question 2 is a typed answer
fig. 4  the end-of-guide mini quiz, with every answer tagged by skilllive app · oct 9, 2026

Practice built from my students' real week.

There are about 18 kinds of games, including verb speed rounds, sorting parts of speech, a "grammar hospital" for fixing broken sentences, and listening labs for sounds that are hard for Spanish speakers, like ship and sheep. The app has 1,203 recorded audio clips, so students can hear every vocabulary word and example sentence.

Some activities are meant for talking, not tapping. Café Catch-Up is a deck of discussion cards for pairs. This one is about going to the doctor in Boston. A follow-up question lets students know they can ask for a free medical interpreter, which is useful English and useful information at the same time.

Café Catch-Up, Boston Healthcare deck: the discussion question 'Have you ever had trouble understanding a doctor, nurse, or pharmacist because of language?' with a follow-up about free interpreters, plus listener phrases and ways to participate
fig. 5  a conversation deck about health care, with phrases that help a partner keep talkinglive app · oct 9, 2026

The teacher's side: who is practicing, and what to reteach.

Most of my time as a teacher goes to noticing who is falling behind. The teaching workspace puts that up front. Participation shows who practiced this week, what they last worked on, and who has gone quiet, so I can check in before a student disappears.

Teacher Participation report: a searchable list of students with when they were last active, their most recent practice, and their points this week
fig. 6  participation: last active, recent practice, points this weeklive app · names replaced · oct 9, 2026

Skill Gaps closes the loop with the mini quizzes. It groups every tagged answer by skill, so instead of one class average I can see which specific point needs reteaching and which students are having the most trouble with it.

Mini-Quiz Diagnostics for the Verb Forms guide: 8 students attempted, 85% overall accuracy, 165 tagged responses, an insights panel naming the biggest skill gap, and a breakdown showing 'Be V1 Not Base' at 77%
fig. 7  skill gaps: accuracy by skill, built from tagged quiz answerslive app · oct 9, 2026

I also control what students see. Weeks on the course map stay hidden until I reveal them, so the class moves together and nobody gets overwhelmed by a whole semester at once.

Teacher course map controls: Week 4 is current, 4 of 36 weeks are visible to students, with Hide Week 4 and Reveal Week 5 buttons and Week 5 up next
fig. 8  releasing the course one week at a timelive app · oct 9, 2026

Effort deserves recognition, and recognition has to be reliable.

Points, streaks, and a weekly leaderboard matter to my students. That makes credit a promise: if a student finishes something on a train with bad signal, the points have to arrive, and they can never be counted twice.

a submission, start to pointssimplified

  1. AttemptThe learner finishes an activity, maybe on a train with no signal.
  2. QueueIf the connection drops, the submission waits on the phone instead of failing.
  3. RetryWhen the connection comes back, it sends again with the same key.
  4. Record onceThe server sees the key and won't give credit twice.
  5. ConfirmThe learner sees that their points were saved.

Every point is written to a ledger, and the leaderboard is computed from that ledger rather than from a running total, so there is always a record of where each point came from. The weekly board resets every Monday and shows each student how their rank changed since last week.

Weekly Leaderboard with a champion card and second and third place, each showing points, a day streak, and Quiz done, above the full rankings with change since last week
fig. 9  the weekly leaderboard: points, streaks, and change since last weeklive app · names replaced · oct 9, 2026

Learning on the phone already in hand.

The app installs to the home screen like a regular app and has an offline page for when the signal drops. These are from the live app at phone size.

The current week, featured games, and class resources together on a phone
A familiar place to returnfig. 10a · phone
The -ed Sounds game: listen to a verb and choose its ending sound, /d/, /t/, or /ɪd/
Hear it, then sort the soundfig. 10b · phone
Word Jobs asks the learner to tap the pronoun in They work together, with a listen button
Find the word doing the jobfig. 10c · phone

One person, a production system.

Underneath, the app connects classes, enrollments, weekly schedules, activities, assignments, submissions, quiz answers, and the points ledger. I built and maintain all of it myself, and I treat it like software other people depend on, because they do.

  • Every change has to pass type checks, linting, about 700 automated tests, audits of the grammar guides and their quizzes, and a production build before it ships.
  • Release checks confirm that students see the activities I've released, that completed work is saved, and that queued submissions replay correctly.
  • When logins failed on Oct 8, the logs showed a background task holding the server's only database connection. I fixed it that evening: the task moved off the login request, each server got more connections, and stuck requests now fail fast.
how it's built
app
Next.js, TypeScript, installable PWA
data
PostgreSQL via Prisma · 34 models
api
78 route handlers, role-checked for student and teacher
content
10 units · 36 weeks · 267 map items · 76 grammar guides · 1,203 audio clips
points
append-only ledger, streaks, achievements, weekly reset by cron
reliability
offline submission queue, idempotent replay, rate-limited auth
quality
114 test files (~700 tests), 4 CI workflows, release gate
history
1,317 commits · 72 merged PRs · dec 2025 to now

Students are making time for it.

In my classes, students are highly engaged and complete activities every week. This week, 19 of the 21 students in one class practiced in the app. That matters to me because I know how much they're balancing outside the classroom. These are my own observations from the teacher dashboard, not a formal outcome study.