↑ Contents · Contents · Ch 2 →
Chapters: Ch 1 · Ch 2 · Ch 3 · Ch 4 · Ch 5
Phases 35–28 — Search & Pagefind, CI Chapterization, Grammar Section
2026-03-24 to 2026-03-27
Phase 35 — Pagefind Search Integration + Mobile Fix (2026-03-27)
Root cause: bracket filter syntax broken in Pagefind 1.4.0. The data-pagefind-filter="section[DNS Bhat]" inline-bracket syntax silently returns an empty string for all pages — pf.filters() showed {"section":{"":1039}} (every page mapped to an empty section). Fix: switch to text-content syntax via a visually-hidden <span data-pagefind-filter="section">DNS Bhat</span> on each DNS Bhat page. After fix, pf.filters() correctly returns {"section":{"DNS Bhat":800,"Eke":4,...}}.
PagefindUI abandoned; low-level pagefind.js API adopted. PagefindUI’s selected_filters wrapper was unreliable even with the corrected index. Replaced with direct low-level calls: pf.search(query, { filters: { section: ['DNS Bhat'] } }) returns exactly the 468 DNS Bhat pages. The _pfSearch(query, filterSection, label) function handles both global search (filterSection = null) and section-filtered search.
Results panel rendered to the right of the sidebar. Previous approach rendered results inside the sidebar column, cropping long excerpts. New approach: a position:fixed panel appended to <body>; reposition() dynamically sets left = sidebar.getBoundingClientRect().right on desktop. Panel shows up to 12 results with bold title, URL, and Pagefind excerpt.
Mobile results panel full-width. On mobile the sidebar is full-width (r.right ≥ window.innerWidth − 10), so the panel is positioned at left:0, top:sidebar.bottom instead — full viewport width below the sidebar header.
Both search bars moved to sidebar top. nav_footer_custom.html (formerly the search host) emptied to a comment. New docs/_includes/components/sidebar.html override injects a .site-search div between .site-header and `<nav aria-label="Main" id="site-nav" class="site-nav">
<ul class="nav-list"><li class="nav-list-item"><a href="/ettuge/" class="nav-list-link">Home</a></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="ಕನ್ನಡ submenu" aria-expanded="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button><a href="/ettuge/kannaDa/" class="nav-list-link">ಕನ್ನಡ</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="DNS Bhat submenu" aria-expanded="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button><a href="/ettuge/kannaDa/dnsbhat/" class="nav-list-link">DNS Bhat</a><ul class="nav-list"><li class="nav-list-item"><a href="/ettuge/kannaDa/dnsbhat/book.html" class="nav-list-link">Books</a></li><li class="nav-list-item"><a href="/ettuge/kannaDa/dnsbhat/web.html" class="nav-list-link">Blog</a></li><li class="nav-list-item"><a href="/ettuge/kannaDa/dnsbhat/youtube.html" class="nav-list-link">YouTube</a></li><li class="nav-list-item"><a href="/ettuge/kannaDa/dnsbhat/stub.html" class="nav-list-link">Stubs</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Eke submenu" aria-expanded="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button><a href="/ettuge/kannaDa/eke/" class="nav-list-link">Eke</a><ul class="nav-list"><li class="nav-list-item"><a href="/ettuge/kannaDa/eke/reference.html" class="nav-list-link">Eke Reference</a></li><li class="nav-list-item"><a href="/ettuge/kannaDa/eke/motivation.html" class="nav-list-link">Motivation</a></li><li class="nav-list-item"><a href="/ettuge/kannaDa/eke/script-history.html" class="nav-list-link">Script History</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Verb Paradigms submenu" aria-expanded="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button><a href="/ettuge/kannaDa/grammar/" class="nav-list-link">Verb Paradigms</a><ul class="nav-list"><li class="nav-list-item"><a href="/ettuge/kannaDa/grammar/mADu-verb-paradigm.html" class="nav-list-link">ಮಾಡು — Regular Verb (36 forms)</a></li><li class="nav-list-item"><a href="/ettuge/kannaDa/grammar/iru-verb-paradigm.html" class="nav-list-link">ಇರು — to be (42 forms)</a></li><li class="nav-list-item"><a href="/ettuge/kannaDa/grammar/illa-verb-paradigm.html" class="nav-list-link">ಇಲ್ಲ — Negator (5 forms)</a></li></ul></li></ul></li><li class="nav-list-item"><a href="/ettuge/Books/Books.html" class="nav-list-link">Books</a></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Functional Programming submenu" aria-expanded="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button><a href="/ettuge/FP/" class="nav-list-link">Functional Programming</a><ul class="nav-list"><li class="nav-list-item"><a href="/ettuge/FP/om-lambda.html" class="nav-list-link">ॐλ — Lambda Calculus</a></li><li class="nav-list-item"><a href="/ettuge/FP/monoids-and-semigroups.html" class="nav-list-link">Monoids and Semigroups</a></li><li class="nav-list-item"><a href="/ettuge/FP/hsom.html" class="nav-list-link">rangapura vihAra</a></li><li class="nav-list-item"><a href="/ettuge/FP/qsortof.html" class="nav-list-link">Lazy Min-K in Haskell</a></li><li class="nav-list-item"><a href="/ettuge/FP/kumbaLakAyi-kaLLanalla.html" class="nav-list-link">ಕಳ್ಳ — Pumpkin Puzzle</a></li><li class="nav-list-item"><a href="/ettuge/FP/cloud_flowers_and.html" class="nav-list-link">Kojo — Clouds and Flowers</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Reflection submenu" aria-expanded="false">
<svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
</button><a href="/ettuge/Reflection/" class="nav-list-link">Reflection</a><ul class="nav-list"><li class="nav-list-item"><a href="/ettuge/Reflection/kannada.html" class="nav-list-link">Kannada</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/japanese.html" class="nav-list-link">Japanese</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/linguistics.html" class="nav-list-link">Linguistics</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/sanskrit.html" class="nav-list-link">Sanskrit</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/indian-history-culture.html" class="nav-list-link">Indian History & Culture</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/scala-functional-programming.html" class="nav-list-link">Scala & FP</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/machine-learning-ai.html" class="nav-list-link">Machine Learning & AI</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/mathematics.html" class="nav-list-link">Mathematics</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/mathematics-science.html" class="nav-list-link">Mathematics & Science</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/world-history-archaeology.html" class="nav-list-link">World History & Archaeology</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/algorithms-data-structures.html" class="nav-list-link">Algorithms & Data Structures</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/infrastructure-devops.html" class="nav-list-link">Infrastructure & DevOps</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/data-engineering.html" class="nav-list-link">Data Engineering</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/health-fitness.html" class="nav-list-link">Health & Fitness</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/martial-arts.html" class="nav-list-link">Martial Arts</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/books-literature.html" class="nav-list-link">Books & Literature</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/arts-music-film.html" class="nav-list-link">Arts, Music & Film</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/cricket-sports.html" class="nav-list-link">Cricket & Sports</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/travel-outdoors.html" class="nav-list-link">Travel & Outdoors</a></li><li class="nav-list-item"><a href="/ettuge/Reflection/miscellaneous.html" class="nav-list-link">Miscellaneous</a></li></ul></li></ul>
</nav>
. DNS Bhat search input is conditionally rendered only on page.url contains ‘/kannaDa/dnsbhat/’` pages.
Mobile search bar always visible. Initial sidebar override used d-md-block d-none on the .site-search div — JTD’s responsive utility sets display:none !important on mobile. Fixed by removing the class entirely; search inputs are now unconditionally visible on all screen sizes.
Commits: search filter fix → low-level API + results panel → sidebar search bars → mobile visibility fix (2026-03-27)
Phase 34 — Eke Chapterization + PROJECT-RECAP Restructure (2026-03-26)
Eke chapter pages for all books: book/eke/full.md files now split into per-chapter pages by CI alongside the kn files. Book 27 eke (book/eke/full.md): 5 <a id="chN"> aliases added before each <a id="part-N"> anchor — CI now generates ch1–ch5 Eke pages. Books 03, 07 (vol1–vol4), 08, 14, 17, 25, 28, 29, 30 already had chapter anchors in their eke files.
Book 07 book/eke/full.md updated: Volume count corrected (2→4); ch7–8 links fixed to vol3, ch9–10 to vol4; ch10 (tOrUpada) added to TOC and content; stale “vols 3–4 not available” notice removed.
PROJECT-RECAP restructured: Phase history reversed to newest-first; ಪರಿವಿಡಿ TOC added; <a id="chN"> anchors added at 8 major sections so CI generates chapter pages for the recap itself.
src/ sync fix: Phases 28–33 were accidentally added only to docs/dnsbhat/PROJECT-RECAP.md (old location); now correctly added to src/main/md/kannada/dnsbhat/PROJECT-RECAP.md so CI serves them at the live URL.
Commit: f7dc3a5 — feat(eke): chapterize book 27 eke + fix PROJECT-RECAP sync — Phase 34
Phase 33 — Chapter Page Title Fixes + Claude Prompt Chapter URLs (2026-03-26)
Chapter title extraction fixed (5 commits to pages.yml):
| Fix | Problem | Solution |
|---|---|---|
| TOC-priority | first_heading() found section headings (## ೧.೧ ...) instead of chapter titles for books 03, 08, 14 | Added toc_title_map() parsing [ಅಧ್ಯಾಯ N — Title](#adhyAya-N) links; TOC title preferred over body heading |
| Number-prefix strip | ## 1. ಮುನ್ನೋಟ rendered as “1. ಮುನ್ನೋಟ” | Added re.sub(r'^[\d\u0CE6-\u0CEF]+[.\s]+', '', h) to strip Arabic and Kannada numeral prefixes |
| Book 07 vol4 | No ## chapter headings for ch9/ch10 | Added ## ಅಧ್ಯಾಯ ೯ — ಆಡುಪದಗಳ ಬಳಕೆ and ## ಅಧ್ಯಾಯ ೧೦ — ತೋರುಪದಗಳ ಬಳಕೆ + TOC links |
| Book 27 ch4 | ಭಾಗ ನಾಲ್ಕು was plain text, not ## | Promoted to ## ಭಾಗ ನಾಲ್ಕು — ಕನ್ನಡ ಭಾಷೆಯ ಸ್ವರೂಪ; other part headings given subtitles |
| Book 03 ch9 | ## ಅಧ್ಯಾಯ ಒಂಬತ್ತು (generic); missing TOC entry | Updated to ## ಅಧ್ಯಾಯ ೯ — ಮುಕ್ತಾಯ; added [ಅಧ್ಯಾಯ 9 — ಮುಕ್ತಾಯ](#adhyAya-9) to TOC |
Verified live on GitHub Pages — all 13 book/vol files now have correct chapter page titles:
- Book 03 ch1: “Ch 1 — ಪೀಠಿಕೆ” ✅
- Book 07 vol1 ch1: “Ch 1 — ಮುನ್ನೋಟ” ✅
- Book 08 ch1: “Ch 1 — ಮುನ್ನೋಟ” ✅
- Book 14 ch1: “Ch 1 — ಪೀಠಿಕೆ” ✅
- Book 27 ch1: “Ch 1 — ಭಾಗ ಒಂದು — ಭಾಷೆಯ ಸ್ವರೂಪ” ✅
- Book 31 ch1: “Ch 1 — A” ✅
Claude prompt chapter URL updates: update_chapter_prompts.py script written and run — appended Phase 33 item to 11 claude-prompt.md files with exact GitHub Pages fetch URLs per chapter:
| Book | Chapters | Item # |
|---|---|---|
| 03 | ch1–ch9 | 11 |
| 07 | ch1–ch4 (vol1), ch5–ch6 (vol2), ch7–ch8 (vol3), ch9–ch10 (vol4) | 12 |
| 08 | ch1–ch5 | 11 |
| 14 | ch1–ch12 | 11 |
| 17 | ch1–ch12 | 11 |
| 25 | ch1–ch11 | 11 |
| 27 | ch1–ch5 | 11 |
| 28 | ch1–ch12 | 11 |
| 29 | ch1–ch11 | 11 |
| 30 | ch1–ch10 (new INSTRUCTIONS section) | 1 |
| 31 | ch1–ch19 (A–W) | 7 |
Purpose: Claude Chat skills can now fetch a specific chapter URL (e.g. book/kn/ch3) rather than loading the full 100k–300k character source, preventing token exhaustion when answering focused questions.
Primers regenerated: 194k + 129k chars (both within 200k limit) ✅
Commits: 69e5808…6ee4a69 — Phase 33 chapter title fixes and prompt updates
Phase 32 — CI Chapter Splitter + Chapter Anchors (2026-03-25)
Book 14 raw.md cleanup: 587 lines of Internet Archive HTML chrome (nav bars, SVG icons, banners) removed from top of book/kn/raw.md; content now starts cleanly at # Full text of "...".
Chapter splitter added to CI (pages.yml): Walks all docs/kannaDa/dnsbhat/*/book/*/full.md, splits at <a id="(?:ch|adhyAya-)(\d+)"> anchors, generates:
ch0.md— preamble + ಪರಿವಿಡಿ TOC with#chNlinks rewritten to page-relativechN+ chapter quick-nav bar;nav_exclude: truech1.md…chN.md— one per chapter anchor; nav banner← Prev · Contents · Next →
Sidebar CANDIDATES updated so book/kn/ch0.md takes priority over book/kn/full.md (lightweight index first on slow connections).
Chapter anchors added to three books that lacked them:
- Book 27 — 5
<a id="chN">aliases added before each#part-Nanchor - Book 31 — 19
<a id="chN">anchors added before each## LETTERheading (A=ch1, B=ch2, … W=ch19) - Book 07 vol4 —
ch9beforesec-9-1,ch10beforesec-10-1
Books with chapter pages generated (≥2 anchors): 03, 07 (vol1–vol4), 08, 14, 17, 25, 27, 28, 29, 30, 31 — 13 full.md files, ~120 chapter pages total.
Commit: e07a46d — feat(ci): add chapter splitter step to pages.yml — Phase 32
Phase 31 — PROJECT-RECAP Cleanup (2026-03-25)
Removed stale TBD items from PROJECT-RECAP.md:
- 3 completed High-priority items (Deep TOC anchors Phase 19, Markdown headings Phase 18, word-per-line OCR artifact Phase 18)
- “Expand Eke home page description” completed item removed
Phase 29 — Grammar Section: Illustrated Verb Paradigms (2026-03-25)
New directory src/main/md/kannada/grammar/ with three verb paradigm pairs:
| File | Content |
|---|---|
iru-verb-paradigm.md | 42 forms of ಇರು across tense/mood/person/number |
iru-illustrated.html | Visual interactive paradigm table |
mADu-verb-paradigm.md | 36 forms of ಮಾಡು |
mADu-illustrated.html | Visual interactive paradigm table |
illa-verb-paradigm.md | 5 forms of ಇಲ್ಲ (defective negative) |
illa-illustrated.html | Visual interactive paradigm table |
Cross-navigation between all three illustrated pages (prev/next banners). Compound forms notes added: mADihanu (converb + emphatic ಹನು), mADalAre (purpose converb + defective aux ಆರು). Root redirect stubs at grammar folder index.
Phase 28 — Sidebar Restructure + Eke Motivation Rewrite (2026-03-24)
Sidebar restructure: ಕನ್nnaDa L1 root reorganised — DNS Bhat / Eke / Grammar as L2 peers; Books / Blog / YouTube / Stubs as L3 under DNS Bhat. 562 occurrences of mixed-script ಕನ್nnaDa header text normalised.
Eke motivation section rewritten: Symbol complexity table added (46 Eke symbols vs Devanagari’s 47); q/Q for vocalic ḷ/ḹ documented; : and ^ as dialect modifiers clarified (: = geminate, ^ = unrounded-u in Havyaka). Script history Tamil-Brāhmī lineage clarified.