{"adoption": {"forks": 253, "observed_at": "2026-08-28T04:05:48.921036+00:00", "stars": 1884}, "canonical_url": "https://ross.abutalabs.com/products/pagelm", "card": {"archived": false, "artifact_type": "application", "description": "PageLM is a community driven version of NotebookLM & a education platform that transforms study materials into interactive resources like quizzes, flashcards, notes, and podcasts.", "domain": ["education", "artificial-intelligence", "large-language-models", "pdf", "web-development"], "enriched": true, "function": ["rag", "llm-inference", "chatbot", "nlp", "pdf", "self-hosted"], "health_score": 79, "homepage": null, "language": "TypeScript", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["CaviraOSS/PageLM"], "name": "CaviraOSS/PageLM", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-19T08:24:10+00:00", "repo": "CaviraOSS/PageLM", "stars": 1884, "tags": ["notebooklm-alternative", "study-tools", "flashcards", "quizzes", "podcast-generation", "edtech", "langchain", "open-source", "retrieval-augmented-generation", "nodejs", "docker", "web-server"], "topics": ["ai", "docker", "edtech", "education", "flashcards", "javascript", "langchain", "nodejs", "notes", "oss", "podcast", "quizzes", "react", "tailwindcss", "typescript", "vite", "study-tools", "rag", "notebooklm", "pagelm"], "urls": [], "use_cases": ["turn pdfs into quizzes for exam prep", "generate flashcards from lecture notes", "create an ai podcast from study materials", "self-hosted notebooklm alternative", "summarize study documents into notes", "build interactive study guides from course material"], "what_it_is": "PageLM is an open-source, AI-powered education platform inspired by NotebookLM that transforms study materials like PDFs and notes into interactive learning resources such as quizzes, flashcards, notes, and AI-generated podcasts. It is a full-stack TypeScript application built with React, Node.js, and LangChain, deployable via Docker.", "when_to_avoid": ["you need a fully managed hosted service without self-hosting", "you require a non-community license for commercial redistribution", "you need offline study tools without LLM API access", "you want a mature product with long-term enterprise support"], "when_to_choose": ["you want an open-source, self-hosted alternative to NotebookLM", "you need to convert study materials into quizzes, flashcards, or podcasts", "you want to study from your own documents with AI assistance", "you prefer deploying educational AI tools on your own infrastructure"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pagelm", "repo": "CaviraOSS/PageLM", "role": "main", "score": 62}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "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:05:48.921036+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:48.921036+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:13:37.726610+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "34cee7cb07793efab9e8b910bb7063564b203ff109d67a0707a6ff8ca795e298", "fetched_at": "2026-08-28T04:05:48.921036+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CaviraOSS/PageLM"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 26, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 367, "days_push": 14, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 62, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}