↑ 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: f7dc3a5feat(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: 69e58086ee4a69 — 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 #chN links rewritten to page-relative chN + chapter quick-nav bar; nav_exclude: true
  • ch1.mdchN.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-N anchor
  • Book 31 — 19 <a id="chN"> anchors added before each ## LETTER heading (A=ch1, B=ch2, … W=ch19)
  • Book 07 vol4ch9 before sec-9-1, ch10 before sec-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: e07a46dfeat(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.