{"id":45557554,"url":"https://github.com/michael-borck/curriculum-curator","last_synced_at":"2026-03-13T11:00:54.860Z","repository":{"id":300585245,"uuid":"960716525","full_name":"michael-borck/curriculum-curator","owner":"michael-borck","description":"AI-powered platform for educators to create and manage course content aligned with teaching philosop","archived":false,"fork":false,"pushed_at":"2026-03-04T10:34:51.000Z","size":80393,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-04T14:58:58.001Z","etag":null,"topics":["ai","configuration","course-management","curriculum","edtech","education","eslint","fastapi","front-end","machine-learning","python","react","rust","teaching","template","typescript","vite","web-app","web-development"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michael-borck.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/SECURITY.md","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":"2025-04-04T23:34:13.000Z","updated_at":"2026-03-04T10:34:51.000Z","dependencies_parsed_at":"2025-08-02T04:29:15.109Z","dependency_job_id":"845e0d32-6baa-4956-b48f-c86ed26085f9","html_url":"https://github.com/michael-borck/curriculum-curator","commit_stats":null,"previous_names":["michael-borck/curriculum-curator","teaching-repositories/curriculum-curator","michaelborck-education/curriculum-curator"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/michael-borck/curriculum-curator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-borck%2Fcurriculum-curator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-borck%2Fcurriculum-curator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-borck%2Fcurriculum-curator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-borck%2Fcurriculum-curator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michael-borck","download_url":"https://codeload.github.com/michael-borck/curriculum-curator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-borck%2Fcurriculum-curator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30466310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T11:00:43.441Z","status":"ssl_error","status_checked_at":"2026-03-13T11:00:23.173Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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","configuration","course-management","curriculum","edtech","education","eslint","fastapi","front-end","machine-learning","python","react","rust","teaching","template","typescript","vite","web-app","web-development"],"created_at":"2026-02-23T06:11:22.997Z","updated_at":"2026-03-13T11:00:54.831Z","avatar_url":"https://github.com/michael-borck.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Curriculum Curator\n\n\u003c!-- BADGES:START --\u003e\n[![configuration](https://img.shields.io/badge/-configuration-blue?style=flat-square)](https://github.com/topics/configuration) [![eslint](https://img.shields.io/badge/-eslint-blue?style=flat-square)](https://github.com/topics/eslint) [![front-end](https://img.shields.io/badge/-front--end-blue?style=flat-square)](https://github.com/topics/front-end) [![react](https://img.shields.io/badge/-react-61dafb?style=flat-square)](https://github.com/topics/react) [![rust](https://img.shields.io/badge/-rust-000000?style=flat-square)](https://github.com/topics/rust) [![template](https://img.shields.io/badge/-template-blue?style=flat-square)](https://github.com/topics/template) [![typescript](https://img.shields.io/badge/-typescript-3178c6?style=flat-square)](https://github.com/topics/typescript) [![vite](https://img.shields.io/badge/-vite-blue?style=flat-square)](https://github.com/topics/vite) [![web-development](https://img.shields.io/badge/-web--development-blue?style=flat-square)](https://github.com/topics/web-development) [![edtech](https://img.shields.io/badge/-edtech-4caf50?style=flat-square)](https://github.com/topics/edtech)\n\u003c!-- BADGES:END --\u003e\n\n\u003e **You choose how to install it. You choose how to teach with it.**\n\u003e Deploy on your institution's server or run it on your laptop. Pick your AI provider or go fully offline. Select from 9 teaching philosophies, then build, import, and curate curriculum your way.\n\n![Python](https://img.shields.io/badge/python-3.12%2B-blue)\n![Node](https://img.shields.io/badge/node-20%2B-green)\n![License](https://img.shields.io/badge/license-MIT-green.svg)\n\n[![DeepWiki](https://img.shields.io/badge/DeepWiki-Interactive%20Docs-blue)](https://deepwiki.com/michael-borck/curriculum-curator)\n\n## Overview\n\nCurriculum Curator is a **content creation tool, not a presentation tool**. It helps educators design, structure, and refine unit materials — then export them to the LMS or format of their choice. Think of it as the workshop where you build your curriculum, not the classroom where you deliver it.\n\nThe same philosophy runs through every layer: **you choose**.\n\n- **How to host**: institution VPS, personal Docker, or desktop app\n- **Which AI**: OpenAI, Anthropic, Gemini, local Ollama, or none at all\n- **How to teach**: 9 pedagogical styles shape every piece of generated content\n- **What to export**: IMS Common Cartridge, SCORM, PDF, DOCX, PPTX, HTML\n- **How much AI help**: full generation, refine-only, or write everything yourself\n\n### Two Ways to Run\n\n| | Institutional Server | Personal / Desktop |\n|---|---|---|\n| **Who it's for** | A teaching team or department | An individual educator |\n| **Deployment** | Docker on your institution's VPS | Desktop app (Mac, Windows, Linux) or Docker locally |\n| **Accounts** | Registration, email verification, email whitelist, forgotten-password flow | No login needed (`LOCAL_MODE=true`) |\n| **Security** | JWT auth, rate limiting, account lockout, role-based access | Single-user, no auth overhead |\n| **AI keys** | Shared keys set by admin, or each user brings their own | Your own keys, or fully offline with Ollama |\n| **Database** | SQLite on the server — one file, no external DB service | SQLite on your machine |\n\nBoth modes ship in the same codebase. Flip `LOCAL_MODE=true` for personal use, or leave it off for multi-user institutional hosting.\n\n### Privacy-First, Bring Your Own Key\n\nNo matter how you deploy, Curriculum Curator never phones home:\n\n- **BYOK**: Bring your own API keys for OpenAI, Anthropic, Google Gemini — or run fully offline with local Ollama models\n- **No telemetry**: Zero analytics, zero tracking, zero external calls beyond the AI provider you choose\n- **Data stays with you**: SQLite in a single file you control — no cloud database, no vendor lock-in\n- **Air-gapped capable**: Ollama + Local Mode means the app works without any internet connection\n\n**Note**: This application uses Australian university terminology where a **Unit** is an individual subject (e.g., \"Programming 101\") and a **Course** is a degree program.\n\n### Why This Exists\n\n\u003e *This is a curriculum design tool that happens to produce content, not a content tool that happens to know about curriculum.*\n\nLMS platforms deliver content well but don't help you design it. PowerPoint and Word create content but know nothing about learning outcomes or pedagogy. Alignment tools map ULOs to assessments but don't produce anything deliverable. Curriculum Curator bridges that gap — learning design decisions (ULOs, Bloom's levels, pedagogy, accreditation) flow directly into AI-assisted content production, and the result exports to your LMS via IMS Common Cartridge.\n\nNobody else connects learning design to content production with AI assistance in one tool. For the full positioning, see [docs/POSITIONING.md](docs/POSITIONING.md).\n\n## Key Features\n\n### Content Creation \u0026 Structuring\n- **9 Teaching Philosophies**: Traditional, Inquiry-Based, Project-Based, Collaborative, Game-Based, Flipped, Differentiated, Constructivist, Experiential\n- **AI-Powered Content**: Generation, enhancement, and scaffolding using multiple LLM providers (OpenAI, Anthropic, Google Gemini, Ollama for local/private AI)\n- **AI Assistance Levels**: Educators choose their level of AI involvement — none, refine only, or full creation\n- **Multi-Scale Workflows**: Create 12-week unit structures, weekly modules, or individual materials\n- **Rich Text Editing**: TipTap-based editor with tables, code blocks, and formatting\n- **Unit Scaffolding**: AI-generated unit structures (ULOs, assessments, weekly topics) from a description\n\n### Research \u0026 Discovery\n- **Tiered Academic Search**: Search OpenAlex and Semantic Scholar (always free, no key needed), or add Google CSE / Brave / Tavily / SearXNG for broader results\n- **URL Import**: Paste URLs from papers, syllabi, or blogs — the app extracts content, classifies type, and summarises key points\n- **AI Outline Synthesis**: Generate a full unit scaffold from research sources, compare sources against an existing unit, or auto-match readings to weekly topics\n- **Propose/Apply Pattern**: AI suggests, you review and correct, then commit — nothing changes without your approval\n\n### Accreditation \u0026 Mapping\n- **Unit Learning Outcomes (ULOs)**: Bloom's taxonomy-aligned outcomes with visual mapping\n- **Graduate Capabilities**: Curtin GC1-GC6 mapping to ULOs\n- **Assurance of Learning (AoL)**: AACSB competency mapping\n- **UN SDG Mapping**: Sustainable Development Goals alignment\n- **Custom Alignment Frameworks**: Define your own frameworks (PLOs, ABET, graduate attributes) with presets and map ULOs to them\n- **Learning Outcome Map**: Visual hierarchy from ULOs through weekly materials and assessments\n\n### Export \u0026 Interoperability\nOnce your content is ready, export it to wherever you deliver:\n- **IMS Common Cartridge v1.1** (.imscc) — works with Moodle, Canvas, Blackboard\n- **SCORM 1.2** (.zip) — universal LMS compatibility\n- **Document Export**: PDF (via Pandoc + Typst), DOCX, PPTX, HTML\n- **Round-trip Metadata**: Exports include `curriculum_curator_meta.json` preserving pedagogy, outcomes, and accreditation data for future re-import\n\n### Unit Management\n- **Soft Delete / Archive**: Remove units from dashboard with full restore capability\n- **Git-backed Content**: Per-unit version history via Git repositories\n- **Analytics Dashboard**: Bloom's coverage, assessment distribution, weekly workload visualisation\n- **Quality Dashboard**: 6-dimension quality scoring with star ratings, per-week breakdown, and AI-powered improvement suggestions\n- **UDL Inclusivity Scoring**: Measures representation diversity, engagement variety, action \u0026 expression options, and content accessibility per-week and per-unit — based on CAST's Universal Design for Learning framework\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|------------|\n| Backend | FastAPI, SQLAlchemy, LiteLLM |\n| Frontend | React 18, Vite, TypeScript, Tailwind CSS |\n| Editor | TipTap (rich text with tables, code blocks) |\n| Database | SQLite (development and production) |\n| Auth | JWT (multi-user) or LOCAL_MODE (no login) |\n| AI | OpenAI, Anthropic, Google Gemini, Ollama |\n| Export | Pandoc + Typst (documents), stdlib (IMSCC/SCORM) |\n| Tooling | uv, ruff, basedpyright, pytest, ESLint, Vitest |\n\n## Quick Start\n\n### Prerequisites\n\n- Python 3.12+\n- Node.js 20+\n- Git\n- Optional: [Pandoc](https://pandoc.org/) + [Typst](https://typst.app/) for PDF/DOCX/PPTX export\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/michael-borck/curriculum-curator.git\ncd curriculum-curator\n\n# Start backend (handles venv, deps, and server)\n./backend.sh\n\n# In a new terminal, start frontend\n./frontend.sh\n```\n\nAccess the application:\n- Frontend: http://localhost:5173\n- Backend API: http://localhost:8000\n- API Docs: http://localhost:8000/docs\n\n### Docker Deployment\n\nSingle-container build — frontend is compiled and served by the backend:\n\n```bash\n./setup.sh                    # Create data directories and configure\ndocker compose up --build -d  # Build and run\n```\n\nThe Docker image includes Node.js (frontend build), Pandoc, and Typst — all export formats work out of the box.\n\nFor production deployment, see [docs/guides/docker-vps-deployment.md](docs/guides/docker-vps-deployment.md).\n\n### Local AI with Ollama\n\nRun with a local Ollama sidecar for fully private AI (no API keys needed):\n\n```bash\nLOCAL_MODE=true docker compose --profile local-ai up --build -d\n```\n\n## Project Structure\n\n```\ncurriculum-curator/\n├── backend/                 # FastAPI backend\n│   ├── app/\n│   │   ├── api/routes/      # API endpoints\n│   │   ├── core/            # Config, security, database\n│   │   ├── models/          # SQLAlchemy models\n│   │   ├── schemas/         # Pydantic schemas\n│   │   └── services/        # Business logic (LLM, export, analytics)\n│   └── tests/               # pytest test suites\n├── frontend/                # React frontend\n│   └── src/\n│       ├── components/      # Reusable UI components\n│       ├── features/        # Feature modules (auth, units, ai)\n│       ├── pages/           # Route-level page components\n│       ├── services/        # API integration\n│       ├── stores/          # Zustand state management\n│       └── hooks/           # Custom React hooks\n├── docs/                    # Documentation and ADRs\n│   └── adr/                 # Architecture Decision Records (57 ADRs)\n├── Dockerfile               # Single-container build\n└── docker-compose.yml       # Production deployment\n```\n\n## Development\n\n### Code Quality\n\n```bash\n# Backend (run from backend/)\ncd backend\n.venv/bin/ruff check .       # Linting (must be 0 errors)\n.venv/bin/ruff format .      # Formatting\n.venv/bin/basedpyright       # Type checking (must be 0 errors)\n.venv/bin/pytest             # Tests\n\n# Frontend (run from frontend/)\ncd frontend\nnpm run lint                 # ESLint (must be 0 errors)\nnpm run format               # Prettier\nnpm run type-check           # TypeScript (must be 0 errors)\nnpm test                     # Vitest\n```\n\n### Export Formats\n\n| Format | Standard Version | LMS Compatibility | Dependencies |\n|--------|-----------------|-------------------|--------------|\n| IMSCC | v1.1 | Moodle, Canvas, Blackboard | Python stdlib only |\n| SCORM | 1.2 | All SCORM-compliant LMS | Python stdlib only |\n| PDF | - | - | Pandoc + Typst |\n| DOCX | - | - | Pandoc |\n| PPTX | - | - | Pandoc |\n| HTML | - | - | Pandoc |\n\n## Configuration\n\nCreate `.env` in the backend directory:\n\n```env\n# Security\nSECRET_KEY=your-secret-key\nDATABASE_URL=sqlite:///./data/curriculum_curator.db\n\n# LLM API Keys (all optional — configure in-app or use Ollama)\nOPENAI_API_KEY=sk-...\nANTHROPIC_API_KEY=sk-ant-...\nGEMINI_API_KEY=...\n\n# Local Mode (no login, privacy-first)\nLOCAL_MODE=true\n```\n\n## Documentation\n\n- [DeepWiki - Interactive Knowledge Base](https://deepwiki.com/michael-borck/curriculum-curator)\n- [Product Positioning](docs/POSITIONING.md)\n- [Getting Started](docs/guides/getting-started.md)\n- [Docker VPS Deployment](docs/guides/docker-vps-deployment.md)\n- [Teaching Styles Guide](docs/guides/teaching-styles.md)\n- [Architecture Decision Records](docs/adr/index.md)\n\n## License\n\nMIT License - see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichael-borck%2Fcurriculum-curator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichael-borck%2Fcurriculum-curator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichael-borck%2Fcurriculum-curator/lists"}