TutorLoom
기업·대학·교육기관을 위한 학습 플랫폼, 무료 오픈소스이며 엔터프라이즈 버전 제공
ΓΛΩΣΣΑ와 의사코드 개발 환경, 교과서·가격표·단계별 실행·AI 도우미 제공, 전국대학 컴퓨터과학 준비용
Περιβάλλον ανάπτυξης για ΓΛΩΣΣΑ και ψευδογλώσσα, με εκτέλεση σύμφωνα με το σχολικό βιβλίο, πίνακα τιμών βήμα προς βήμα και βοηθό τεχνητής νοημοσύνης. Για την προετοιμασία στην Πληροφορική των Πανελλαδ
교육TypeScript · PythonGitHub @dimos-vasalakis온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Περιβάλλον ανάπτυξης για ΓΛΩΣΣΑ και ψευδογλώσσα, με εκτέλεση σύμφωνα με το σχολικό βιβλίο, πίνακα τιμών βήμα προς βήμα και βοηθό τεχνητής νοημοσύνης. Για την προετοιμασία στην Πληροφορική των Πανελλαδικών.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗AEPP Max lets students write and run ΓΛΩΣΣΑ, the teaching pseudo-language of the school textbook, directly in the browser. Nothing to install, and it works on a phone. Next to the editor sits an AI assistant that explains errors, gives hints and, when asked, writes changes into the code. What Cursor did for code editors, AEPP Max does for ΓΛΩΣΣΑ.
AEPP Max runs the same programs as the Διερμηνευτής της ΓΛΩΣΣΑΣ by Άλκης Γεωργόπουλος, the desktop interpreter schools use, but it is an independent implementation: it contains no code, text or images from it and is not affiliated with its author.
Faithful to the exam. Students are graded on textbook ΓΛΩΣΣΑ, so the interpreter accepts what the textbook and the Διερμηνευτής accept and rejects the rest. A program that runs here but would lose marks in the exam is treated as a bug. The rules it follows are written down in docs/glossa.md, and every rule has a test.
Errors a student can act on. Messages are in Greek, with the line number, and say how to fix the common mistakes: = instead of <-, ΤΕΛΟΣ ΑΝ without the underscore, 0 < x < 10, Latin look-alike letters in keywords, a forgotten ΑΡΧΗ, a procedure called without ΚΑΛΕΣΕ. Errors are underlined in red while typing, and the line number turns red. Code that never runs is checked too.
An editor that knows the language.
ΑΝ … ΤΕΛΟΣ_ΑΝ, ΓΙΑ, subprograms) with blanks to fill in using Tab.A tutor that doesn't guess. The agent runs your code on the real interpreter before it says anything about its output, replies in Greek, and uses only constructs from the textbook. Tutor mode gives hints before solutions and never touches your code. Agent mode writes changes into the editor: either at once (αυτόματα, Ctrl+Z undoes them) or as a diff you approve with Ctrl/Cmd+Enter first (με έγκριση). Shift+Tab switches between the two inside Agent mode. Slash commands work in the chat: /switch (Tutor ↔ Agent), /new and /help.
Free to try, no account needed to run code. Running programs, autocomplete and error checking are public. Only the agent needs an account (email link or Google), since it is the part that costs money.
The πίνακας τιμών, step by step. The exam asks students to trace a program by hand. One button builds the trace table: a row per executed line, a column per variable, each condition's value and what ΓΡΑΨΕ printed. Rows appear one at a time, so students predict each before they see it, while the editor highlights the line. Students can then check their paper table against it.
Your programs, everywhere. With an account, Ctrl/Cmd+S or Αποθήκευση saves the code; it never saves on its own, as students asked. «Τα προγράμματά μου» opens, renames, copies and deletes them from any device.
Made for the screen you have. Three built-in themes, including Κλασικό, with the colors students know from the school lab. Make your own theme from 12 colors in the Επεκτάσεις panel.
One interpreter everywhere. It lives on the backend, so the editor, the agent's tools and, later, exercise checking all give the same answer and can't be tampered with from the client.
Working: the full interpreter, the editor, running programs with input, the step-by-step πίνακας τιμών, saving and opening programs, the agent (Tutor and Agent modes, approval, slash commands, a daily limit per student), themes, an in-app guide (ⓘ) and sign-in.
Not built yet: a list of past agent conversations, and markdown in agent replies.
| Part | Tech | Hosting |
|---|---|---|
| Frontend | Next.js 16, CodeMirror 6, Tailwind 4 | Vercel |
| Backend | FastAPI, ΓΛΩΣΣΑ interpreter (pure Python) | Render |
| Agent | OpenAI Agents SDK | (backend) |
| DB & Auth | Supabase (Postgres + Auth), Alembic migrations | Supabase |
The interpreter is written by hand in pure Python, with no parser generator and no web or database imports (backend/app/glossa/). A program goes through four stages:
lexer.py) turns the source into tokens. Keywords and names are compared after normalizing them (uppercase, no accents, ς → Σ), so γραψε, Γράψε and ΓΡΑΨΕ are the same word.parser.py) is recursive descent, one function per grammar rule, and builds an AST of dataclasses (nodes.py: Assign, If, For, Call, Procedure, …), each node with its line and columns. Writing it by hand is what lets the first error come out in Greek, with a hint for the common mistakes.checker.py) walks the AST before anything runs: undeclared or duplicate names, assignments to constants, array dimensions, calls. Errors in code that never runs are still reported.interpreter.py) walks the checked AST and executes each node directly.Ψευδογλώσσα algorithms use the same pipeline, through subclasses (algorithm_*.py).
An interpreter, not a compiler. Nothing is translated into another language, neither Python nor bytecode. Walking the tree is what makes the step-by-step πίνακας τιμών possible, a row per executed statement. It also keeps runtime errors in Greek on the right line. And it is safe: the interpreter counts its own steps, time, output, call depth and memory, so a student's program can never hang the server or reach anything outside it. Student programs are small, so speed doesn't matter.
Values and memory. ΑΚΕΡΑΙΑ, ΠΡΑΓΜΑΤΙΚΗ, ΧΑΡΑΚΤΗΡΑΣ and ΛΟΓΙΚΗ are Python int, float, str and bool; a variable starts as a special UNSET value. Each call pushes a frame on the interpreter's call stack (a list of frames) holding its variables, and arrays are flat lists inside the frame. Parameters are copies: a procedure copies them back to the caller when it returns, as the textbook says, so frames never share memory. The Μεταβλητές tab shows this stack.
No garbage collector. ΓΛΩΣΣΑ has no pointers and no dynamic allocation, so every value lives exactly as long as its call. When a call returns, its frame is dropped and Python frees it. What the interpreter does keep is a count of live array cells (MAX_LIVE_CELLS, freed on return) and a limit of 200 nested calls, so deep recursion with large arrays stops with an error instead of filling memory.
# backend
cd backend && python3.12 -m venv .venv && source .venv/bin/activate
pip install -r requirements-dev.txt && cp .env.example .env
fastapi dev app/main.py # http://localhost:8000/docs
# frontend
cd frontend && npm install && cp .env.example .env.local
npm run dev # http://localhost:3000
Everything defaults to empty, so the app boots without secrets: running programs works, and the agent and sign-in switch on once you add OPENAI_API_KEY and the Supabase keys.
cd backend && pytest && ruff check . # backend tests and lint
cd frontend && npm test && npm run lint # frontend tests and lint
Code reviews in Claude Code go to the code-reviewer subagent in .claude/agents/. It checks a change against the rules in CLAUDE.md, runs the tests and lint, and reports verified findings without editing anything.
| For | Read |
|---|---|
| Students | User guide (Greek) |
| Anyone checking what the interpreter accepts | docs/glossa.md |
| Contributors | CLAUDE.md: commands, architecture, deployment |