MY LEARN E — Agent Skill | Skills Pool
MY LEARN E — Agent Skill MY LEARN E — open-source English learning app (Anki/Quizlet-style, optimized for Vietnamese learners). Covers stack (Express, MySQL, React admin, Flutter), folder placement, naming, layered backend architecture, review/3-touch/error-notebook priorities, and phased roadmap. Use when building or planning this repo, adding features to backend/web-admin/mobile-app, or when the user mentions MY LEARN E, spaced repetition, review engine, or Vietnamese learning flow.
HiepF5 0 スター 2026/03/27
Product intent (do not skip)
Core value : personal memory management for English — not “more flashcards.”
Priority order (from specs): review engine → error notebook → active recall → flashcard UI .
Do not ship many features before the review scheduler and queue are solid.
Technology stack (locked for this project)
Layer Choice Notes API Node.js + Express controller → service → repository; no DB in controllersORM / DB access Sequelize (or Knex + raw for migrations)Migrations under database/migrations Database MySQL Production schema targets ~24 tables; (see reference)
クイックインストール
MY LEARN E — Agent Skill npx skillvault add HiepF5/hiepf5-my-e-learn-cursor-skills-my-learn-e-project-skill-md
作者 HiepF5
スター 0
更新日 2026/03/27
職業 Phase 1: 10 tables
Admin web React + Vite , Redux Toolkit , Axios Ant Design preferred for tables/forms
Mobile Flutter , Dart Riverpod for state; Dio for HTTP
Jobs node-cron Daily review queue generation (~midnight)
Auth API JWT + bcrypt Helmet, CORS, Morgan
Mobile cache / offline Hive (later)Local-first sync strategy
AI / LLM : Phase 2+; Phase 1 = rule-based priority and scheduling (no chat-first AI).
Monorepo layout — where code lives MY-LEARN-E/
├── backend/ # Express API
│ └── src/
│ ├── config/ # DB, env
│ ├── controllers/ # HTTP in/out only
│ ├── services/ # Business logic, review math
│ ├── repositories/ # DB queries
│ ├── routes/
│ ├── middlewares/ # auth, error handler
│ ├── models/ # Sequelize models
│ ├── jobs/ # cron: daily queue
│ ├── validators/
│ ├── utils/
│ ├── constants/
│ ├── ai/ # Phase 2+: rule engines → later ML/LLM
│ ├── app.js
│ └── server.js
├── web-admin/ # React (Vite)
│ └── src/
│ ├── assets/
│ ├── layouts/
│ ├── pages/
│ ├── components/
│ ├── services/ # axios api client
│ ├── hooks/
│ ├── store/ # Redux slices
│ ├── routes/
│ ├── utils/
│ └── constants/
├── mobile-app/ # Flutter
│ └── lib/
│ ├── screens/ # splash, auth, home, review, vocabulary, error_note, topic, profile
│ ├── widgets/
│ ├── services/ # Dio, ReviewService, etc.
│ ├── providers/ # Riverpod
│ ├── models/
│ ├── routes/
│ └── utils/
├── database/ # migrations, optional seeds
└── docs/ # architecture notes (optional; do not create unless asked)
API response shape (backend) { "success": true, "data": {}, "message": "OK" }
Errors: consistent success: false, HTTP status aligned with error type; central error.middleware.
Core HTTP surface (MVP → production)
Auth : POST /api/auth/register, POST /api/auth/login (JWT).
Vocabulary : GET/POST /api/vocabulary, PUT/DELETE /api/vocabulary/:id.
Review : GET /api/review/today, POST /api/review/submit.
Errors : GET/POST /api/errors (error notebook).
Topics / daily : GET /api/topic/today, POST /api/topic (as spec evolves).
AI (later) : e.g. POST /api/ai/generate-today-plan.
Naming conventions
Files (backend)
kebab-case for route files: vocabulary.route.js, auth.route.js.
camelCase or kebab for others per existing folder; stay consistent — prefer *.controller.js, *.service.js, *.repository.js, *.middleware.js.
JavaScript / React
Variables, functions : camelCase (calculateNextReview, reviewProgress).
React components : PascalCase files and exports (Dashboard.jsx, VocabularyPage.jsx).
Redux slices : camelCase slice names + Slice suffix file optional (vocabularySlice.js).
Database (MySQL)
snake_case table and column names: review_progress, next_review, user_id, touch1_done.
PascalCase Sequelize model names mapping to tables (ReviewProgress → table review_progresses or explicit tableName).
Flutter / Dart
snake_case for library files: review_screen.dart, error_note_screen.dart.
PascalCase for classes/widgets: ReviewScreen, TodayProgressCard.
Providers : *Notifier, *Provider suffixes where idiomatic.
Git branches
main, develop, feature/* (e.g. feature/review-submit).
Code-writing rules (project)
Thin controllers : parse/validate input, call service, map to HTTP; no SQL or Sequelize in controllers.
Services own rules : spaced repetition intervals, ease factor, queue composition, 3-touch completion.
Repositories own persistence : one place per aggregate/query; reuse from services.
Validators at the edge (Joi/Zod/express-validator — pick one per project and stick to it).
Secrets : only process.env; never commit .env; document .env.example.
Security : JWT in Authorization header; bcrypt cost ≥ 10; Helmet + CORS configured.
React : API calls in services/api.js with axios instance + interceptors for token; pages consume hooks/store.
Flutter : API in services/; UI in screens/ + small widgets/; avoid huge build methods.
IDs : prefer BIGINT compatible types in DB for production scale.
Soft deletes / audit (when tables go production-wide): deleted_at or status, plus created_at / updated_at.
Review engine rules (must implement correctly)
Intervals (base): e.g. 1, 3, 7, 14, 30, 60 days (extend to 120 as in advanced spec).
Wrong answer : reset level / shorten interval; adjust ease_factor (e.g. −0.2) per spec.
Rating buttons (Again / Hard / Good / Easy): map to interval changes (Again = reset; Hard = short; Good = schedule; Easy = jump).
3-touch : touch1_done (recognize) → touch2_done (type) → touch3_done (sentence); mark learned only when all true.
Daily queue (conceptual mix): due reviews + weak words + today’s topic slice + error-linked items — implement in service + optional daily_review_queue job.
Estimated timeline (solo dev, part-time — adjust for full-time) Phase Scope Rough duration 0 Repo scaffold, ESLint/Prettier, Docker MySQL optional, .env.example 3–5 days 1 DB Phase 1 (10 tables), migrations, users + auth JWT 1–1.5 weeks 2 Vocabulary + topics CRUD, import CSV (admin) 1 week 3 Review engine + review_history + today endpoint + submit 1.5–2 weeks 4 Touch history + 3-touch flow (API + minimal UI) 1 week 5 Error notebook + tags 1 week 6 Web admin: layout, dashboard, vocab, review queue, errors, auth 2–3 weeks 7 Flutter: auth, home “today”, review UI, 3-touch, errors 3–4 weeks 8 Cron queue, streaks, daily_learning_log, polish 1 week 9 AI rule layer (src/ai/), priority score, optional plan endpoint 2+ weeks 10 Offline (Hive), FCM, AI/LLM personalization ongoing
Master checklist (high level)
Anti-patterns (explicit)
Building flashcard-only UX before scheduling + recall logic.
Controller or React page issuing raw SQL or Sequelize.
GPT chat before review + error + priority engines.
Deleting user learning rows permanently without strategy (prefer soft delete for content).
Additional documentation Technology stack (locked for this project)