π Visit the Official Landing Page π
Plot Ark is an open-source long-term memory for course improvement. It connects each course version to the evidence that prompted a change, the human decision that followed, and the results observed in the next learning cycle.
Most learning platforms show what happened once: completion, time spent, scores, or feedback. Plot Ark is built for the question that comes next:
We changed the course. Did it actually get better?
Plot Ark keeps that answer traceable across repeated analysis runs:
- collect course structure, learner behavior, and learner voice;
- diagnose where learning friction is concentrated;
- let a human accept, reject, or revise the recommendation;
- persist the evidence and decision in long-term memory (LTM);
- compare the next course version and cohort against the earlier run.
flowchart LR
A[Course version] --> B[Learning evidence]
B --> C[Friction diagnosis]
C --> D[Human decision]
D --> E[(LTM snapshot)]
E --> F[Next course version]
F --> G[Next learning cycle]
G --> B
| Academic | Enterprise L&D | |
|---|---|---|
| Primary question | Where are students struggling, and how should the course change? | Where does training lose people, and what should the next version fix? |
| People | Professor / Student | Admin / User |
| Typical inputs | Syllabus, course materials, xAPI events, concept annotations, student feedback | SCORM/PDF/PPTX/DOCX materials, LMS CSV/XLSX exports, Learner Pulse; xAPI optional |
| Evidence level | Individual self-view plus privacy-safe cohort analysis | Cohort-level diagnosis; no employee ranking |
| Human control | Instructor reviews curriculum suggestions | L&D owner reviews revision recommendations |
| Memory | Analysis snapshots preserve course changes across teaching cycles | The same LTM model is intended to compare training versions and later business evidence |
| Current state | Functional end-to-end backend and UI | Product preview with synthetic data; server-side ingestion and parsing are roadmap work |
The two workspaces are not separate products. They share the same core: evidence β diagnosis β human decision β LTM β next version.
| Area | What it contains |
|---|---|
| Academic workspace | Course generation, xAPI evidence, LightRAG knowledge graph, learner self-view, A2A diagnosis, LTM, and instructor-governed revision |
| Enterprise L&D workspace | LMS/HCM-adjacent workflow, practical file inputs, Learner Pulse, privacy boundary, current preview, and planned ingestion backend |
| Full system architecture | Page flows, services, database schema, privacy red lines, and project structure |
| Interactive landing page | Visual product overview and demos |
| Releases | Version history and shipped changes |
System Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (React + TypeScript + Vite) β
β ββββββββββββ ββββββββββββ ββββββββββββ βββββββββββββ βββββββββββ ββββββββββββ βββββββββββ
β β Generate β β Courses β β Course β β Knowledge β β Student β β Student β βSettingsββ
β β Page β β Page β β Page β β Graph β β Data β β Profile β β (Prof) ββ
β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ βββββββ¬ββββββ ββββββ¬βββββ ββββββ¬ββββββ βββββ¬ββββββ
β β β β β β β β β
β components/ui/ components/generate/ components/analytics/ ModelSelection (shared) β
β (Select, Input) (SyllabusUpload) (TrendChart, ReportSections, ...) β
β GraphViewer (2D KG + mastery overlay) β
β SSE streaming β
βββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββββΌβββββββββββββΌββββββββββββΌβββββββββββββΌββββββ
β β β β β β β
βΌ βΌ βΌ βΌ βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backend (Flask + Blueprints) β
β βββ app.py (~30 lines, routing) βββ config.py (18 models + env constants) β
β βββ extensions.py (Global instances) βββ async_loop.py (Event loop) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β routes/ β β
β β βββ curriculum.py generate / skeleton / expand / save β β
β β βββ curriculum_agent_routes flags / suggestions / apply / redo β β
β β βββ history.py CRUD + favorite + DOCX export β β
β β βββ analytics.py A2A SSE + history API + export β β
β β βββ xapi.py xAPI statements + mock data seed β β
β β βββ feedback.py Student sentiment + comments β β
β β βββ profile.py Profile CRUD + model_config + Fernet API keys β β
β β βββ settings.py Professor settings (preferences, models, prompts) β β
β β βββ graph.py KG data + RAG query + /courses lookup β β
β β βββ annotations.py KG concept annotations + aggregation β β
β β βββ sources.py Tavily source preview β β
β β βββ syllabus.py PDF/DOCX parse + import β β
β β βββ materials.py LightRAG ingest β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β βββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββββββββββ β
β β agents/ (Hive-style A2A) β β services/ β β
β β βββ base.py (BaseNode) β β βββ research.py (Tavily) β β
β β βββ orchestrator.py β β βββ file_parser.py β β
β β βββ behavior_analyst.py β β βββ prompt_builder.py β β
β β βββ risk_detector.py β β βββ xapi_generator.py (β‘ aware) β β
β β βββ content_optimizer.py β β βββ student_diagnosis.py (diagnosis) β β
β β βββ cohort_comparator.py β β βββ report_exporter.py (facade) β β
β β βββ kg_context_analyst.py β β βββ chart_generator.py (+history) β β
β β βββ curriculum_agent.py β β βββ ltm_writer.py (Cold layer) β β
β β SharedMemory (Redis) β β βββ threshold_checker.py β β
β ββββββββββββ¬βββββββββββββββββββ β βββ kg_mapper.py (3-layer match) β β
β β β βββ export_{pdf,docx,excel}.py β β
β β ββββββββββββββββ¬ββββββββββββββββββββββββββββ β
βββββββββββββββΌβββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββ ββββββββββββ ββββββββββββββββ ββββββββββββββββ
β PostgreSQL β β Redis β β LightRAG β β data/ltm/ β
β βββ curricula β β (π΄ Hot: β β GraphML KG β β (π΅ Cold: β
β βββ xapi_statements β β pipelineβ β (Hot Layer) β β .md YAML β
β βββ student_profiles β β runtime)β β β β snapshots) β
β βββ concept_ β β β β β β β
β β annotations β β β β β β β
β βββ π‘ Warm: β β β β β β β
β snapshots/mastery β β β β β β β
βββββββββββββββββββββββββ ββββββββββββ ββββββββββββββββ ββββββββββββββββ
Full Project Pipeline
LTM 3-Layer Architecture
Full Agentic Loop
π Full architecture, page-by-page data flows, database schema, red lines, and project structure β ARCHITECTURE.md
| Layer | Technology | Role |
|---|---|---|
| Frontend | React + TypeScript + Vite | Module editor, A2A dashboard, SSE client, drag-and-drop |
| Backend | Python + Flask Blueprints | Modular route-based API (10 Blueprints + 6 Agents + 6 Services) |
| AI | OpenAI GPT-4o / Google Gemini | Content generation & A2A analysis (via AI_PROVIDER); A2A agents are sql-only β zero LLM cost for analytics |
| Research Agent | Tavily Search API | Pre-generation academic source retrieval |
| Database | PostgreSQL | Curricula, xAPI statements, student feedback, course_analysis_snapshots (LTM) |
| Cache & Memory | Redis | Graph query cache, learner state, A2A shared memory (a2a:{session}:{key}) |
| Knowledge Graph | LightRAG + networkx + react-force-graph-2d | Course material ingestion β interactive concept graph |
| Behavior Data | xAPI 1.0.3 + mini-LRS | Statement ingestion β mock data engine (4 noise levels) β professor analytics panel |
| Analytics Engine | A2A multi-agent (Hive-style, sql-only Phase 1) | 5-node pipeline: Orchestrator + 4 parallel agents; token tracking; LTM snapshot |
| Report Export | ReportLab + python-docx + openpyxl + matplotlib | PDF (Anthropic-style cover), DOCX, Excel; filenames include course slug + noise label |
| Curriculum Export | IMS Common Cartridge + DOCX + PDF + Markdown | LMS-compatible output in multiple formats |
| Dev | Docker Compose | Single-command local environment (frontend :5173, backend :5000) |
Prerequisites: Docker, an OpenAI or Gemini API key, a Tavily API key (free tier at tavily.com)
git clone https://github.com/Schlaflied/Plot-Ark
cd Plot-Ark
cp .env.example .env
# Set AI_PROVIDER=openai or AI_PROVIDER=gemini
# Add the corresponding API key + TAVILY_API_KEY
docker compose up --build| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend | http://localhost:5000 |
The login screen offers two workspaces:
- Academic β Professor / Student
- Enterprise β Admin / User
The Enterprise workspace ships with synthetic data for product evaluation. Its file selector currently performs client-side format, file-count, and size validation; it does not yet upload or parse the selected files on the backend.
The knowledge graph feature lets you ingest your own course materials (PDFs, PPTXs, or DOCXs) and explore them as an interactive concept map.
- Go to the Knowledge Graph tab
- In the Upload Materials panel on the right, fill in:
- Subject name (required) β e.g. "Organizational Behavior"
- Course code (optional) β e.g. "ADMS 2400"
- Year (required) β which year of study this course belongs to
- Drop your PDF / PPTX / DOCX files into the dropzone
- Click Build Graph β ingestion runs in the background (~$0.10β0.30 per 10 PDFs at gpt-4o-mini rates)
- Once complete, the graph appears automatically under the correct year and course tab
- KG β Curriculum concept mapping β 3-layer matching (word-boundary + abbreviation + reverse lookup)
- Knowledge Map tab β per-module KG concepts with definitions + cross-module dependencies
- Concept mastery tracking β xAPI verb + feedback β
cohort_concept_mastery; auto-sync after every analysis run - GraphViewer mastery overlay β fill = mastery level, border = knowledge layer; unified gray for untracked concepts
- KG bidirectional annotation β students mark confused/important; professors mark exam focus; anonymous aggregation feeds confusion heatmap
- KG β Agentic Loop β
KGContextAnalystNodeinjects per-concept confusion % + top confused concepts into CurriculumAgent context - GraphViewer role-split β student view (mastery filters + confusion social signal) vs professor view (high confusion heatmap + exam focus)
- xAPI β KG bridge β KG annotation events mirror to xAPI statements (verb: flagged / noted); full signal unification
- Student Profile β 4-tab profile with avatar, discipline selector (5 disciplines), CP/OC narrative anchors, and progress color blocks
- One-sentence diagnosis β template-driven concept-gap guidance with "Jump to Module" navigation
- AI Settings β custom prompt instructions + clickable ideas library with auto-save
- Multi-persona sets β multiple character groups with relationship tags, gender, personality descriptions, linked courses
- Multi-model Agent Team β 18 preset models across 9 providers + custom model support; β recommended tags, β MoE warnings, dynamic API keys
- Professor Settings Portal β profile, academic preferences, model defaults, prompt templates; all with auto-save
- Per-provider API keys β Fernet-encrypted storage, dynamic detection, masked GET responses
- Professor prompt template editor β DB-backed prompt management with version control and variable highlighting
- Week 1 hardening β fail-closed encrypted BYOK storage, browser-secret removal, and main application CI
- Enterprise L&D Preview β workspace-aware Admin/User login, synthetic compliance-training diagnosis, evidence chain, Learner Pulse, and HITL revision review
- Enterprise source-intake contract β SCORM ZIP/PDF/PPTX/DOCX/XLSX/CSV selector with explicit client-side count and size limits; xAPI remains optional
- Enterprise ingestion backend β safe static SCORM manifest/content extraction, persisted uploads, CSV/XLSX field mapping, evidence coverage, and revision-brief export
- Assignment Timeline + Due Date calculator
- A2A Phase 2 β LLM integration for CurriculumAgent (dense model required); other agents remain sql-only
- Progressive summarization β semester-level LTM summaries for LLM context management
- LTI 1.3 β push into Canvas / Moodle
GNU Affero General Public License v3.0 β see LICENSE
- Free for personal use, research, and open-source projects
- Modifications must be open-sourced under the same license
- Network deployment requires your product to also be open-source
- Commercial licensing β open a GitHub Issue
- π Awesome-AI-Agents β agentic EdTech curriculum engine
Architectural inspiration from Hive (YC-backed AI agent infrastructure) β the node pipeline, shared memory, and evolution loop patterns informed the agentic curriculum engine design.
Knowledge graph layer powered by LightRAG (HKUDS) β incremental knowledge graph construction and prerequisite inference across course materials.
Two-phase generation pipeline design inspired by OpenMAIC (Tsinghua University) β the outline-first, then expand pattern informed Plot Ark's curriculum skeleton generation approach.
Built with Claude (Anthropic) as AI pair programmer.
Special thanks to the two chief quality assurance officers who supervised every late-night coding session β Icy (ε°η³, white) and ιͺζ’¨ (calico):
Star this repo if it's useful.




