Teacher login  ·  Student login

How the village school works

New host? See how to run a class (photos and steps).

From a teacher signing up, to a class running month after month. Checked against the code on 13 Oct 2026.

Starting a class

1. Sign up

flowchart TD
  A1["Buyer opens
school.cuppathai.com/signup/"] --> A2["Fills in the form:
buyer name and email,
optional host, class name,
school year, nicknames"] A2 --> A3{"Email already
has a school?"} A3 -->|yes| A4["Refused: ask your
teacher to add students"] A3 -->|no| A5["Created: school, teacher,
class and students.
Each student gets
a 4-digit PIN"] A5 --> A6["Class starts on the pack
for the school year:
Mor 2 = pack 1
Mor 3 = pack 11
Mor 4 = pack 21
Mor 5 = pack 31"] A6 --> A7["Setup invoice made,
with a payment reference"]

2. Pay the setup fee and activate

flowchart TD
  P1["Buyer pays the setup fee:
PromptPay in baht or
Wise in US dollars.
May upload a receipt"] --> P2["Presses I have paid.
This only puts it in the
Payments hub inbox"] P2 --> P3["Hub staff check the bank
and choose one action:
Paid, Short, Problem
or Cancel"] P3 -->|Paid| P4["Class activated"] P4 --> P8["First pack opens for
one month.
Teacher access code
is made.
Login EMAIL to the host,
and to the buyer
if different"] P8 --> P9["The sign-up page checks
every 10 seconds and
shows the access code,
the class code and
the student PINs"] classDef manual fill:#E3D5BF,stroke:#2A1A0E,stroke-width:2px,color:#000 class P3 manual
Done by a person (light tan boxes). Only the Payments hub can confirm a payment. The buyer's I have paid button never does.

The other things staff can choose

ActionWhat the buyer sees
ShortThe amount that arrived and the balance to pay, with the same reference.
ProblemThe staff note, on the pay screen.
CancelThe unpaid request is closed. A paid class is refunded by hand.

Day to day

3. Logging in

flowchart TD
  L1["Teacher types the
access code at /teacher/.
Student types the class
code, nickname and PIN
at /student/"] --> L2["Checked.
Signed in for 1 hour,
then sign in again"] L2 --> L3["Teacher forgot the code?
Types the host email
on the teacher page"] L3 --> L4["EMAIL with the access
code, class code and
every student PIN"]

4. A week of homework

flowchart TD
  W1["The month's pack:
4 scenes of 12 phrases"] --> W2["One scene per week.
The last week runs to the
end of the month.
Earlier weeks stay open"] W2 --> W3["Student dashboard:
This week's homework"] W3 --> W4["1. AI scoring of the
12 phrases
(Lesson Player)"] W3 --> W5["2. Practice games on the
same 12 phrases"] W4 --> W6["Teacher dashboard: each
student's progress, stars
and a suggested grade,
A to C+"] W5 --> W6

Extras on the dashboards

ExtraWhoWhat it is
Class ModeTeacherThe host leads the lesson for the whole room on a TV. It saves only the class's place (4 tries per phrase), never a student's score.
Homework AI scoringStudentThe Lesson Player at home: 3 tries per phrase, 4 stars passes. After 3 tries without a pass the student gets a Special Pass (counted as Honorary on the teacher dashboard) and moves on.
Voice LabStudentAI pronunciation practice. 1 credit per scored try. Free credits are topped up each time a new pack opens.
VOCAPStudentThe word game, unlimited.
EPUBTeacher, studentThe month's lesson book, to download.

Money, month after month

Seats are paid month by month. Nothing here is sent by email or phone alert: the dashboards show it.

5. Paying for seats

flowchart TD
  Q1["Host opens How to pay
on the teacher dashboard"] --> Q2["Invoice for seats owed.
PromptPay only.
Reissued if the
roster changed"] Q2 --> Q3["Pays and presses
I have paid"] Q3 --> Q4["Hub staff confirm
in the Payments hub"] Q4 --> Q5["Seats counted as paid.
A paused class restarts"] classDef manual fill:#E3D5BF,stroke:#2A1A0E,stroke-width:2px,color:#000 class Q4 manual

6. Late seats and pausing

flowchart TD
  G1["A seat is unpaid"] --> G2{"Added in the
middle of the
month?"} G2 -->|no| G3["Due 5 days after
the pack began"] G2 -->|yes| G4["Due 3 days after
it was added"] G3 --> G5["Student dashboard:
seat unpaid, N days left.
Teacher dashboard:
warning and unpaid names"] G4 --> G5 G5 --> G6["Due date passes:
seat paused. The student
cannot start homework
until it is paid"]

7. Month end: the next pack

flowchart TD
  M1["The pack's month ends"] --> M2{"Was at least one
seat paid during
that month?"} M2 -->|yes| M3["Next pack opens by itself.
Voice Lab free credits
are topped up"] M2 -->|no| M4["Class paused:
no new pack,
nothing is billed"] M3 --> M6["Seats are due again
for the new month"] M4 --> M5["Host pays the seats.
Class restarts on the next
pack, from that payment"]
Good to know. A class has no scheduled job. The next pack opens, and a lapse is noticed, the first time anyone opens a dashboard after the month ends. Seats are counted in the order the students were added.

Who is told what

NoticeEmailDashboard
Access code, class code and PINs, after the setup paymentyes (host, and buyer if different)yes, on the sign-up page
Forgotten access codeyesno
Payment short, or a problem with the receiptnoyes, a note on the pay screen
Payment received (seats)noyes, the banner turns to all seats paid
Seat unpaid, days leftnoyes, teacher and student
Seat pausednoyes, teacher and student
Class paused (no seats paid in the month)noyes, teacher, with a Restart button

There are no phone alerts or inbox messages in the village school.