Closes #1. ## What this fixes `roundEmail()` in `hikmat/public/game.html` rendered each Lesson Email slot's `label` and `labelHi` as raw template-literal interpolations into `innerHTML`. `tx()` is a passthrough language switch; it does not
Pull requests
- openupstreamopen ↗+338−2+338 −2
- openupstream
Closes #5. ## What this fixes `hikmat.api.delete_student` is the right-to-erasure entry point for minors' data. It deletes the Student row and Lesson Attempt rows, but it has been silently leaving the corresponding Lesson Doubt rows behind.
open ↗+28−1+28 −1 - mergedupstream
Fixes #6. ## What's going on `completeSession()` was making more PocketBase round trips than it needed to on the critical path between "जाँचो" and the celebration screen — and it scaled with class size. Two distinct issues on the same code
open ↗+38−39+38 −39 - mergedupstream
## What Replaces shorthand `<>` fragments with `<Fragment key={icon}>` inside the `.map()` call in the leaderboard page. ## Why Shorthand fragments (`<>`…`</>`) cannot accept a `key` prop. React requires a key on the top-level element retur
open ↗+13−6+13 −6 - mergedupstream
Closes #1. ## What Appends `content_progress` to the list of collections created by `scripts/setup_pocketbase.py`. Seven lines, no changes to anything else. ## Why `completeContent()` in `src/lib/db.ts` (introduced in efc11b3 — *\"feat: tra
open ↗+7−0+7 −0