{"id":47733693,"url":"https://github.com/1111philo/plato","last_synced_at":"2026-05-07T17:05:44.629Z","repository":{"id":348241152,"uuid":"1197085712","full_name":"1111philo/plato","owner":"1111philo","description":"Agentic Learning Management System","archived":false,"fork":false,"pushed_at":"2026-04-14T16:13:53.000Z","size":1419,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-14T18:13:08.269Z","etag":null,"topics":["ai","education","open-source"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/1111philo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-31T10:08:47.000Z","updated_at":"2026-04-13T20:00:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/1111philo/plato","commit_stats":null,"previous_names":["1111philo/plato"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/1111philo/plato","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1111philo%2Fplato","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1111philo%2Fplato/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1111philo%2Fplato/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1111philo%2Fplato/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/1111philo","download_url":"https://codeload.github.com/1111philo/plato/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1111philo%2Fplato/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31937733,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T12:37:54.787Z","status":"ssl_error","status_checked_at":"2026-04-17T12:37:25.095Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","education","open-source"],"created_at":"2026-04-02T22:05:31.211Z","updated_at":"2026-04-28T23:01:22.673Z","avatar_url":"https://github.com/1111philo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"client/assets/plato-square.png\" alt=\"plato\" width=\"120\" /\u003e\n\u003c/p\u003e\n\n# plato\n\nAn Open Source, AI-powered [microlearning](https://philosophers.group/platos-microlearning/) platform. Learners work through focused, exemplar-driven lessons in a continuous conversation with an AI coach that creates activities, evaluates submissions, and tracks progress toward mastery — all in under 20 minutes.\n\nBuilt by [11:11 Philosopher's Group](https://github.com/1111philo).\n\nSpecial thanks to [UIC Tech Solutions](https://it.uic.edu/), [UIC TS Open Source Fund](https://osf.it.uic.edu/), [WordPress](https://wordpress.org/), [Louisiana Tech](https://www.latech.edu/), and the [ULL Louisiana Educate Program](https://louisiana.edu/educate).\n\n## How it works\n\nplato applies [microlearning principles](https://philosophers.group/platos-microlearning/) through AI-powered personalization. Each lesson is a focused experience designed to be completable in ~11 exchanges (~20 minutes), built around a single exemplar and 2-4 learning objectives.\n\nA **lesson** defines an exemplar (the mastery-level outcome a learner produces) and a set of learning objectives. When a learner starts a lesson, an AI coach opens a conversation and guides them through activities — coaching, creating tasks, evaluating submissions (text or images), and tracking progress — all in a single continuous chat. The coach enriches a knowledge base as the learner progresses, adapting to their strengths and weaknesses until they achieve the exemplar.\n\n### Microlearning pacing\n\nLessons are designed for completion within 11 exchanges (~20 minutes), but the system never cuts a learner off. The coach adapts its approach as exchanges accumulate — and always decides when the exemplar has been demonstrated. There is no hard cutoff and no forced closure.\n\n| Exchanges | Coach behavior |\n|-----------|---------------|\n| 1-7 | Normal coaching — diagnostics, practice, assessment |\n| 8-10 | Approaching target — converge toward the exemplar, prefer focused steps |\n| 11+ | Past target — drop non-essential objectives, scaffold to the biggest remaining gap |\n| 20+ | Well past target — the lesson probably mismatched the learner; coach flags it in `[KB_UPDATE]` but keeps moving them forward |\n\nThe admin dashboard tracks an **On-Target Rate** KPI showing what percentage of lessons complete within the 11-exchange target. A low rate means the **lesson design** or **coach prompt** probably needs tuning — not that pacing should be enforced more aggressively. Extended lessons (2× target or beyond) are surfaced as informational diagnostics, never as metrics to drive to zero.\n\nAdmins manage everything from `/plato`: lessons, users, a classroom customizer (styles + knowledge base), and integrations.\n\n## Reporting issues\n\nIssues and feature requests go in [GitHub Issues](https://github.com/1111philo/plato/issues). An automated intake agent reads every new issue and either:\n\n- Tags it `ready-for-pilot` — enough detail is present, a maintainer or the pilot agent will pick it up\n- Tags it `needs-info` and posts a few focused clarifying questions — reply inline when you can\n- Closes it politely (with an invitation to reopen) if it's spam, off-topic, or abusive\n\nTo skip the `needs-info` round-trip, include upfront:\n\n- The URL or page where it happened\n- What you did (exact steps)\n- What you expected vs. what actually happened\n- Any error message, screenshot, or browser console output\n- Your browser + OS, and whether you were signed in as a learner or admin\n\nThe intake agent only asks for things you can provide. It never asks you to inspect code — that's our job.\n\n## Quick start\n\n### Prerequisites\n\n- Node.js 20+\n- npm\n\n### Setup and run\n\n```bash\n# Clone the repo\ngit clone https://github.com/1111philo/plato.git\ncd plato\n\n# Install dependencies (client and server)\ncd client \u0026\u0026 npm install \u0026\u0026 cd ../server \u0026\u0026 npm install \u0026\u0026 cd ..\n\n# Build the client (server serves the built files)\ncd client \u0026\u0026 npm run build \u0026\u0026 cd ..\n\n# Configure your API key\ncd server \u0026\u0026 cp .env.example .env\n# Edit .env and add your Anthropic API key\n\n# Start the dev server (uses SQLite — no Docker or AWS needed)\nnode dev-sqlite.js\n```\n\nOpen [http://localhost:3000](http://localhost:3000).\n\nOn first visit you'll name your classroom and create an admin account. Prompts and lessons are seeded automatically. The knowledge base is created by admins through the conversational KB Editor in the Customizer.\n\n### AI provider\n\nplato needs access to Claude models. Set one of these:\n\n| Option | Env var | Best for |\n|--------|---------|----------|\n| **Anthropic API** (recommended) | `ANTHROPIC_API_KEY=sk-ant-...` | Local dev, small deployments |\n| **Amazon Bedrock** | AWS credentials + `AI_PROVIDER=bedrock` | Production on AWS |\n\nGet an Anthropic API key at [console.anthropic.com](https://console.anthropic.com/settings/keys). If `ANTHROPIC_API_KEY` is set, plato uses it automatically. For Bedrock, set `AI_PROVIDER=bedrock` and configure AWS credentials.\n\nThen log in and navigate to `/plato` to see the admin dashboard, or `/lessons` to start learning.\n\n## Project layout\n\n```\nplato/\n  client/    React 19 + Vite SPA (learner and admin UI)\n  server/    Node.js + Hono + AWS Lambda + DynamoDB (API, auth, data, AI proxy)\n  scripts/   Build and deploy tooling\n  docs/      Extended guides (deployment, etc.)\n```\n\nFor architectural details (AI agents, data model, auth, conventions) see [CLAUDE.md](CLAUDE.md).\n\n## Deployment\n\nFor production deployment to AWS — SAM setup, CI/CD from a private fork, custom domains, backups — see **[docs/DEPLOY.md](docs/DEPLOY.md)**.\n\n## Accessibility\n\nplato is designed to be fully usable with screen readers (VoiceOver, NVDA, JAWS) and keyboard-only navigation. The AI chat follows the [MITRE Chatbot Accessibility Playbook](https://mitre.github.io/chatbot-accessibility-playbook/) and [Orange accessibility guidelines](https://a11y-guidelines.orange.com/en/articles/chatbot/): silent-by-default chat log, controlled announcements for new messages, keyboard navigation between messages (`Alt+ArrowUp`/`Alt+ArrowDown`), and `Cmd/Ctrl+Enter` to send. Implementation details live in [CLAUDE.md](CLAUDE.md).\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for setup, conventions, and how to submit changes. The `main` branch is protected — all changes require a pull request.\n\n## License\n\nCopyright (C) 2026 [11:11 Philosopher's Group](https://github.com/1111philo)\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the [GNU Affero General Public License v3.0](LICENSE) as published by the Free Software Foundation. Modified versions that are accessible over a network must also be made available under the same license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1111philo%2Fplato","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F1111philo%2Fplato","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1111philo%2Fplato/lists"}