| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(email): let organizations set the sender display name Transactional mail went out as a hardcoded "LearnHouse <...>". An organization on a white-labelled deployment could not show its own name, and a self-hoster could not rebrand at all. Only the display NAME is configurable. The From address stays mailing.system_email_address, the domain holding the verified SPF/DKIM records — an org-chosen address would fail DKIM alignment on every message and damage a sending reputation shared across tenants. - LEARNHOUSE_SYSTEM_EMAIL_SENDER_NAME sets the deployment default and falls back to the previous name, so an unset install is unchanged. - Per-org override at customization.general.email_sender_name; the org config is a JSON blob, so no migration. - The name is admin-typed text landing in an RFC 5322 header, so sanitize_sender_name() removes control characters and line separators outright rather than replacing them, and formataddr() handles quoting and RFC 2047 so non-Latin names survive instead of being stripped. Sanitizing runs on write and again on read, so a row edited directly in the database cannot reach a header unfiltered. - Org-created and org-deleted mail stay platform-branded, for reasons noted at both call sites. | 25 天前 | |
feat(editor,assignments): add H5P size modes and optional due dates - H5P blocks get a size picker (Auto/16:9/4:3/Short/Medium/Tall) plus a manual drag handle, so a clipped embed no longer needs fullscreen to be readable. - Assignment due_date is now nullable across the migration, service layer, and both web forms; an explicit null clears an existing deadline instead of being ignored. - Hoist the Arabic key set out of rtl-guard's filter loop, cutting that test from ~5.2s to ~0.4s. | 18 天前 | |
docs: add documentation site under docs/ Vendor the standalone Nextra (Next.js 16) docs site into the monorepo so the documentation lives alongside the code and deploys from this repo on Vercel (Root Directory = docs). Preserves the prior multi-tenancy engineering note at docs/notes/multi-tenancy.md and drops the redundant nested renovate.json (the root renovate config already governs docs/). | 3 个月前 | |
docs: wire docs site for the monorepo and Vercel - Point "Edit on GitHub" links at learnhouse/learnhouse (dev branch, docs/ path) - Fix README local-dev steps to clone the monorepo and cd docs/; add cli/ to structure - Add cli/enterprise to next-sitemap priority rules - Fix dead internal links (/features, /self-hosting/hosting-guide) - Fix PWA manifest icon paths (/favicons/...) and set the app name - Remove unrendered internal draft public/vercel.txt (was served raw on deploy) - Stop tracking build-generated public/llms-full.txt (gitignore it) | 3 个月前 | |
docs(guides): add Guides section — headless platform + custom features/webhooks Add a new top-level "Guides" section (after Developers) with two complete, codebase-verified guides: - Build a Learning Platform (Next.js + the LearnHouse API): starts fully anonymous (catalogue → course → activity), then layers on auth, enrollment and progress via a server-side BFF. Includes an "agent" path with a copy-paste spec so a coding agent can build it. - Custom Features & Webhooks: API tokens, request recipes, the webhook event catalogue, payload/headers, and HMAC-SHA256 signature verification. Also adds reusable CSS flow/resource diagrams and guide cards (phosphor icons), sidebar label/order overrides + icons for the new routes, and a home-page card. All endpoints, response shapes, auth/refresh, enrollment and media paths were verified against the running API and an end-to-end Next.js build. | 2 个月前 | |
feat(assignments): add formative mode with server-gated model answers Some customers want a document hand-in that unlocks a model answer immediately, with no grading at all. Add an `ungraded` flag that skips auto-grading and makes the grading endpoints reject with 400; submissions settle on SUBMITTED and never reach GRADED. `create_assignment`/`update_assignment` force `auto_grading` off alongside it so the two can't contradict. Add solution/solution_file/solution_reveal (NEVER/ON_SUBMISSION/ AFTER_GRADING) for the model answer. Reveal is enforced server-side: read_assignment strips solution fields until unlocked and returns has_solution/solution_unlocked instead — a client-side gate would ship the answer in every assignment GET. Graded assignments still withhold it while a retry is open (same rule as show_correct_answers); formative ones skip that guard since there's no score to game. Certification and retry logic now treat formative assignments as satisfied on hand-in instead of requiring GRADED, and a retry re-locks the solution. Migration adds the four columns, with solution_reveal as a native enum so migrated DBs match create_all. 26 new API tests, two Playwright specs, migration verified up/down against Postgres. | 9 天前 | |
feat(email): let organizations set the sender display name Transactional mail went out as a hardcoded "LearnHouse <...>". An organization on a white-labelled deployment could not show its own name, and a self-hoster could not rebrand at all. Only the display NAME is configurable. The From address stays mailing.system_email_address, the domain holding the verified SPF/DKIM records — an org-chosen address would fail DKIM alignment on every message and damage a sending reputation shared across tenants. - LEARNHOUSE_SYSTEM_EMAIL_SENDER_NAME sets the deployment default and falls back to the previous name, so an unset install is unchanged. - Per-org override at customization.general.email_sender_name; the org config is a JSON blob, so no migration. - The name is admin-typed text landing in an RFC 5322 header, so sanitize_sender_name() removes control characters and line separators outright rather than replacing them, and formataddr() handles quoting and RFC 2047 so non-Latin names survive instead of being stripped. Sanitizing runs on write and again on read, so a row edited directly in the database cannot reach a header unfiltered. - Org-created and org-deleted mail stay platform-branded, for reasons noted at both call sites. | 25 天前 | |
docs(guides): add Guides section — headless platform + custom features/webhooks Add a new top-level "Guides" section (after Developers) with two complete, codebase-verified guides: - Build a Learning Platform (Next.js + the LearnHouse API): starts fully anonymous (catalogue → course → activity), then layers on auth, enrollment and progress via a server-side BFF. Includes an "agent" path with a copy-paste spec so a coding agent can build it. - Custom Features & Webhooks: API tokens, request recipes, the webhook event catalogue, payload/headers, and HMAC-SHA256 signature verification. Also adds reusable CSS flow/resource diagrams and guide cards (phosphor icons), sidebar label/order overrides + icons for the new routes, and a home-page card. All endpoints, response shapes, auth/refresh, enrollment and media paths were verified against the running API and an end-to-end Next.js build. | 2 个月前 | |
docs(guides): add Guides section — headless platform + custom features/webhooks Add a new top-level "Guides" section (after Developers) with two complete, codebase-verified guides: - Build a Learning Platform (Next.js + the LearnHouse API): starts fully anonymous (catalogue → course → activity), then layers on auth, enrollment and progress via a server-side BFF. Includes an "agent" path with a copy-paste spec so a coding agent can build it. - Custom Features & Webhooks: API tokens, request recipes, the webhook event catalogue, payload/headers, and HMAC-SHA256 signature verification. Also adds reusable CSS flow/resource diagrams and guide cards (phosphor icons), sidebar label/order overrides + icons for the new routes, and a home-page card. All endpoints, response shapes, auth/refresh, enrollment and media paths were verified against the running API and an end-to-end Next.js build. | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 25 天前 | ||
| 18 天前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 9 天前 | ||
| 25 天前 | ||
| 2 个月前 | ||
| 2 个月前 |