{"adoption": {"forks": 189, "observed_at": "2026-08-28T04:04:19.145516+00:00", "stars": 1308}, "canonical_url": "https://ross.abutalabs.com/products/chattutor", "card": {"archived": false, "artifact_type": "application", "description": "👨‍🏫 ChatTutor: Visual and Interactive AI Tutor", "domain": ["education", "artificial-intelligence", "large-language-models", "web-development"], "enriched": true, "function": ["chatbot", "llm-inference", "agent-framework", "data-visualization", "gui"], "health_score": 73, "homepage": "https://chattutor.app", "language": "Vue", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["HugeCatLab/ChatTutor"], "name": "HugeCatLab/ChatTutor", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-01-09T00:36:45+00:00", "repo": "HugeCatLab/ChatTutor", "stars": 1308, "tags": ["ai-tutor", "whiteboard", "stem-education", "interactive-learning", "math-canvas", "mindmap", "vue", "web-server", "nodejs"], "topics": ["ai", "ai-education", "education", "llm", "stem"], "urls": [], "use_cases": ["learn math with an AI tutor that draws on a whiteboard", "get visual explanations of STEM concepts instead of plain text", "generate mindmaps from AI conversations while studying", "self-host an interactive AI teaching assistant", "bring my own API key to an AI tutoring web app", "help students understand equations with interactive diagrams"], "what_it_is": "ChatTutor is a visual and interactive AI tutoring application that gives LLMs the ability to teach on an electronic whiteboard. It combines chat with math canvases and mindmaps so AI can explain STEM concepts visually rather than through text alone.", "when_to_avoid": ["you only need a plain text chatbot without visual teaching aids", "you require a fully managed service without configuring your own API keys", "you need a non-AGPL license for commercial redistribution"], "when_to_choose": ["you want AI tutoring with visual, interactive teaching tools like a whiteboard and mindmaps", "you need a self-hostable education app where you control the LLM API key", "you are learning STEM subjects and text-only chatbots are not enough"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/chattutor", "repo": "HugeCatLab/ChatTutor", "role": "main", "score": 54}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.145516+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:50:03.200355+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b005b4043cfed65dd54ad8757190132adba2376eb2c2cdabf29624674dd9fd0", "fetched_at": "2026-08-28T04:04:19.145516+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HugeCatLab/ChatTutor"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 61, "longevity": 21, "rhythm": 64}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 301, "days_push": 237, "days_rel": 242, "gap_med": 24, "n_releases_24m": 2}, "score": 54, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}