Files
learning-lab-express/README.md
Iqbal f219b26f71 Initial commit: Learning Lab Express
Includes fixes found while reviewing the app:
- Results: open each result by a type+agent+id key, so a video and a
  material draft with the same id no longer open each other's popup
- AuthGate: clear the query cache during render, before pages build their
  queries, and remount pages on organization switch (pages no longer stay
  on skeletons for up to a minute after sign-in or refresh)
- Instruction: keep only failed rules after a partial approve, so retrying
  does not create the successful schedules twice; drop the monthly note
  once count or frequency is edited
- Parser/schedules: never schedule a count below one
- Audio: ignore the end event of a cancelled utterance when changing speed
- Downloads: revoke the object URL later so Safari/Firefox can read it
- Results: refetch SCORM content when any part's revision changes; show a
  failed video as failed instead of "still rendering"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:42:12 +07:00

3.2 KiB
Raw Blame History

Learning Lab Express

Express Mode untuk learning-lab: UI sederhana di mana tim L&D mengunggah materi ke Brain, memberi satu Instruction ("bikin 3 video per minggu"), lalu AI menjadwalkan dan terus membuat konten yang tampil di Results. Semua logika AI ada di engine learning-lab (FastAPI, /api/v1); app ini hanya klien.

Stack: React 19, Vite 7, TypeScript, React Router 7, TanStack Query, Clerk (instance yang sama dengan learning-lab). Gaya diambil apa adanya dari mockup.html (src/styles/mockup.css).

# 1. jalankan engine: cd ../learning-lab && docker compose up   → http://localhost:8000
# 2. jalankan Express
npm install
npm run dev        # http://localhost:5174
npm test           # tes parser, jadwal, SCORM, dan ekspor (Vitest)
  • /api/* di-proxy oleh Vite ke ENGINE_URL (default http://localhost:8000), jadi engine tidak perlu CORS.
  • Clerk key dibaca dari VITE_CLERK_PUBLISHABLE_KEY, atau otomatis dari ../learning-lab/backend/.env.
  • Tombol "Open in Learning Studio" di Results membuka VITE_STUDIO_URL (default http://localhost:5173).
  • Dua bahasa: English (default) dan Indonesia, lewat tombol EN/ID di topbar dan halaman login. Teks ada di src/i18n.ts; pilihan disimpan per perangkat.
  • Login wajib memakai akun Clerk dengan organisasi aktif: agents, jadwal, dan kredit semuanya per organisasi.
Folder Isi
src/api/ client.ts (fetch + token Clerk), engine.ts (dokumen, compose, agents)
src/auth/ Gerbang login dan pemilihan organisasi
src/pages/ Brain (/brain), Instruction (/instruction), Schedule (/schedule), Results (/results)
src/express/ Parser instruksi (EN/ID), pembuat jadwal di atas Agents engine, hasil, dan ekspor SCORM (scorm.ts)
src/components/ Layout dengan panduan alur, toast, pemutar audio
prototype/ Prototipe HTML satu file sebelumnya (referensi alur)

Status: semua fase sudah dikerjakan.

  • Fase 0–3 dan 6: kerangka, auth, Brain, Instruction → jadwal, Schedule dengan "Produce now", dan Results.
  • Fase 4 · Audio: jadwal konten summary dengan brief naskah narasi. Results memutarnya dengan suara perangkat (Web Speech API) dan mengunduh naskahnya (.txt). Belum ada MP3, karena engine belum punya keluaran audio untuk agen; yang ada hanya TTS di dalam Video Studio.
  • Fase 5 · Video: agen dengan studio.create_video dan run_schedule. Setiap proses membuat satu video (4 adegan, 40 detik), jadi pilihannya hanya 1 per hari atau 1 per minggu. Batas kredit diambil dari agents/video-quote. Video yang sudah siap bisa diputar, disetujui atau ditolak, dan diunduh sebagai MP4. Ada juga tombol "Buat video sekarang" di Schedule.
  • Fase 7 · SCORM: jadwal konten dengan dua keluaran (summary + quiz 10 soal) per item, digabung menjadi satu modul di Results. Setiap hasil teks bisa diunduh sebagai paket SCORM 1.2 (.zip) yang dibuat di browser. Paket ini melaporkan selesai, atau nilai dan lulus/tidak (batas lulus 70%), ke LMS.
  • Pemantapan: toast menggantikan alert(), ada panduan alur di sidebar, dan ada tes Vitest.

Produksi konten otomatis di engine baru jalan bila harga agent.content.plan > 0 (admin Learning Studio → Pricing).