feat: add 4 content categories, chat export, and update roadmap

Content Library:
- Children & Family: African Storybooks, Gutenberg children's lit,
  Wikipedia for Schools, PhET simulations, TED-Ed series
- Languages & Reference: Wiktionary in 6 languages (EN/ES/FR/AR/DE/PT)
  across 3 tiers by language coverage
- History & Culture: Project Gutenberg history/biography, History Q&A,
  American history texts, Wikipedia History & Culture
- Legal & Civic: Civics guides, Gutenberg law texts, Law Q&A,
  Personal Finance Q&A, Wikipedia Politics & Government

Chat Export:
- New GET /api/chat/sessions/:id/export endpoint
- Returns full conversation as a downloadable Markdown file
- Filename derived from session title (slugified)
- Includes model name, export timestamp, and all messages

Roadmap:
- Update CATEGORIES-TODO.md to mark 10 categories complete
- Add Trades & Vocational and Communications as next high-priority items

https://claude.ai/code/session_01WfRC4tDeYprykhMrg4PxX6
This commit is contained in:
Claude 2026-03-22 21:27:36 +00:00
parent 3ddbe731a5
commit 2d285bfbc7
No known key found for this signature in database
4 changed files with 370 additions and 66 deletions

View File

@ -100,6 +100,40 @@ export default class ChatsController {
}
}
async exportMarkdown({ params, response }: HttpContext) {
const sessionId = parseInt(params.id)
const session = await this.chatService.getSession(sessionId)
if (!session) {
return response.status(404).json({ error: 'Session not found' })
}
const lines: string[] = [
`# ${session.title}`,
``,
`**Model:** ${session.model} `,
`**Exported:** ${new Date().toUTCString()}`,
``,
`---`,
``,
]
for (const msg of session.messages ?? []) {
const label = msg.role === 'user' ? '**You**' : '**Assistant**'
lines.push(`${label}`, ``, msg.content, ``, `---`, ``)
}
const filename = session.title
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '')
const markdown = lines.join('\n')
response.header('Content-Type', 'text/markdown; charset=utf-8')
response.header('Content-Disposition', `attachment; filename="${filename}.md"`)
return response.send(markdown)
}
async destroyAll({ response }: HttpContext) {
try {
const result = await this.chatService.deleteAllSessions()

View File

@ -116,6 +116,7 @@ router
router.post('/', [ChatsController, 'store'])
router.delete('/all', [ChatsController, 'destroyAll'])
router.get('/:id', [ChatsController, 'show'])
router.get('/:id/export', [ChatsController, 'exportMarkdown'])
router.put('/:id', [ChatsController, 'update'])
router.delete('/:id', [ChatsController, 'destroy'])
router.post('/:id/messages', [ChatsController, 'addMessage'])

View File

@ -6,72 +6,53 @@ Potential categories to add to the tiered collections system in `kiwix-categorie
- [x] Medicine - Medical references, first aid, emergency care
- [x] Survival & Preparedness - Food prep, prepper videos, repair guides
- [x] Education & Reference - Wikipedia, textbooks, TED talks
- [x] DIY & Repair - Woodworking, vehicle repair, home improvement, iFixit
- [x] Agriculture & Food - Cooking, gardening, homesteading, food preservation
- [x] Computing & Technology - freeCodeCamp, DevDocs, Arduino, Raspberry Pi, electronics
- [x] Children & Family - African Storybooks, Gutenberg children's lit, Wikipedia for Schools, PhET simulations
- [x] Languages & Reference - Wiktionary (EN, ES, FR, AR, DE, PT)
- [x] History & Culture - Project Gutenberg history, History Q&A, Wikipedia History
- [x] Legal & Civic - Civics guides, Gutenberg law, Law Q&A, Personal Finance Q&A
---
## High Priority
### Technology & Programming
Stack Overflow, developer documentation, coding tutorials
- Stack Overflow (multiple tags available)
- DevDocs documentation
- freeCodeCamp
- Programming language references
### Children & Family
Age-appropriate educational content for kids
- Wikipedia for Schools
- Wikibooks Children's Bookshelf
- Khan Academy Kids (via Kolibri - separate system)
- Storybooks, fairy tales
### Trades & Vocational
Practical skills for building, fixing, and maintaining
- Electrical wiring guides
- Plumbing basics
- Automotive repair
- Woodworking
- Welding fundamentals
Practical skills beyond DIY — licensed trades and professional vocational content
- Electrical wiring codes and guides
- Plumbing fundamentals
- Welding techniques
- HVAC basics
- Construction safety
### Agriculture & Gardening
Food production and farming (expand beyond what's in Survival)
- Practical Plants database
- Permaculture guides
- Seed saving
- Animal husbandry
- Composting and soil management
### Communications
Emergency and amateur radio, networking
- Ham radio guides (ARRL)
- Emergency communication protocols (FEMA/NIMS)
- Basic networking/IT
- Signal procedures
---
## Medium Priority
### Languages & Reference
Dictionaries, language learning, translation
- Wiktionary (multiple languages)
- Language learning resources
- Translation dictionaries
- Grammar guides
### Mental Health & Psychology
- Psychology Stack Exchange
- Mindfulness and wellness guides
- Crisis support references
### History & Culture
Historical knowledge and cultural encyclopedias
- Wikipedia History portal content
- Historical documents
- Cultural archives
- Biographies
### Religion & Philosophy
Spiritual and philosophical texts
- Religious texts (various traditions)
- Philosophy references (Stanford Encyclopedia if available)
- Ethics guides
### Legal & Civic
Laws, rights, and civic procedures
- Legal references
- Constitutional documents
- Civic procedures
- Rights and responsibilities
### Communications
Emergency and amateur radio, networking
- Ham radio guides
- Emergency communication protocols
- Basic networking/IT
- Signal procedures
### Regional/Non-English Bundles
Content in other languages
- Spanish Wikipedia (mini)
- French Wikipedia (mini)
- Other major languages
---
@ -79,23 +60,10 @@ Emergency and amateur radio, networking
### Entertainment
Recreational reading and activities
- Project Gutenberg (fiction categories)
- Project Gutenberg fiction (lcc-pr: English literature)
- Chess tutorials
- Puzzles and games
- Music theory
### Religion & Philosophy
Spiritual and philosophical texts
- Religious texts (various traditions)
- Philosophy references
- Ethics guides
### Regional/Non-English Bundles
Content in other languages
- Spanish language bundle
- French language bundle
- Other major languages
---
## Notes

View File

@ -615,5 +615,306 @@
}
]
}
,
{
"name": "Children & Family",
"slug": "children",
"icon": "IconAbc",
"description": "Age-appropriate educational content, storybooks, and family learning resources for young readers.",
"language": "en",
"tiers": [
{
"name": "Essential",
"slug": "children-essential",
"description": "Illustrated storybooks and children's literature classics. Lightweight and fun.",
"recommended": true,
"resources": [
{
"id": "storybooks-en_en_all",
"version": "2024-05",
"title": "African Storybooks",
"description": "Illustrated storybooks for early readers in English",
"url": "https://download.kiwix.org/zim/other/storybooks-en_en_all_2024-05.zim",
"size_mb": 77
},
{
"id": "gutenberg_en_lcc-pz",
"version": "2026-03",
"title": "Project Gutenberg: Children's Literature",
"description": "Classic children's books and fairy tales from public domain",
"url": "https://download.kiwix.org/zim/gutenberg/gutenberg_en_lcc-pz_2026-03.zim",
"size_mb": 490
}
]
},
{
"name": "Standard",
"slug": "children-standard",
"description": "Adds Wikipedia for Schools - curriculum-aligned articles for K-12 learners. Includes Essential.",
"includesTier": "children-essential",
"resources": [
{
"id": "wikipedia_en_schools",
"version": "2023-10",
"title": "Wikipedia for Schools",
"description": "Curriculum-aligned Wikipedia articles selected for K-12 education",
"url": "https://download.kiwix.org/zim/wikipedia/wikipedia_en_schools_2023-10.zim",
"size_mb": 3800
}
]
},
{
"name": "Comprehensive",
"slug": "children-comprehensive",
"description": "Full educational library with interactive science simulations and math tools. Includes Standard.",
"includesTier": "children-standard",
"resources": [
{
"id": "phet.colorado.edu_en_all",
"version": "2025-08",
"title": "PhET Interactive Simulations",
"description": "Interactive science and math simulations from University of Colorado",
"url": "https://download.kiwix.org/zim/phet/phet.colorado.edu_en_all_2025-08.zim",
"size_mb": 320
},
{
"id": "ted_mul_ted-ed-series",
"version": "2025-07",
"title": "TED-Ed: Think Like a Coder",
"description": "Animated educational series on logic, coding concepts, and problem solving",
"url": "https://download.kiwix.org/zim/ted/ted_mul_ted-ed-series_2025-07.zim",
"size_mb": 710
}
]
}
]
},
{
"name": "Languages & Reference",
"slug": "languages",
"icon": "IconLanguage",
"description": "Dictionaries, language references, and translation tools for over 170 languages.",
"language": "en",
"tiers": [
{
"name": "Essential",
"slug": "languages-essential",
"description": "English dictionary and thesaurus for everyday language reference.",
"recommended": true,
"resources": [
{
"id": "wiktionary_en_all_nopic",
"version": "2025-10",
"title": "Wiktionary (English)",
"description": "Community-built dictionary with definitions, pronunciations, and etymology",
"url": "https://download.kiwix.org/zim/wiktionary/wiktionary_en_all_nopic_2025-10.zim",
"size_mb": 1100
}
]
},
{
"name": "Standard",
"slug": "languages-standard",
"description": "Adds Spanish and French dictionaries for multilingual households. Includes Essential.",
"includesTier": "languages-essential",
"resources": [
{
"id": "wiktionary_es_all_nopic",
"version": "2025-10",
"title": "Wiktionary (Spanish)",
"description": "Spanish language dictionary with definitions and grammar notes",
"url": "https://download.kiwix.org/zim/wiktionary/wiktionary_es_all_nopic_2025-10.zim",
"size_mb": 780
},
{
"id": "wiktionary_fr_all_nopic",
"version": "2025-10",
"title": "Wiktionary (French)",
"description": "French language dictionary with definitions and conjugations",
"url": "https://download.kiwix.org/zim/wiktionary/wiktionary_fr_all_nopic_2025-10.zim",
"size_mb": 900
}
]
},
{
"name": "Comprehensive",
"slug": "languages-comprehensive",
"description": "Extended multilingual library with Arabic, German, and Portuguese. Includes Standard.",
"includesTier": "languages-standard",
"resources": [
{
"id": "wiktionary_ar_all_nopic",
"version": "2025-10",
"title": "Wiktionary (Arabic)",
"description": "Arabic language dictionary and reference",
"url": "https://download.kiwix.org/zim/wiktionary/wiktionary_ar_all_nopic_2025-10.zim",
"size_mb": 340
},
{
"id": "wiktionary_de_all_nopic",
"version": "2025-10",
"title": "Wiktionary (German)",
"description": "German language dictionary with definitions and grammar",
"url": "https://download.kiwix.org/zim/wiktionary/wiktionary_de_all_nopic_2025-10.zim",
"size_mb": 700
},
{
"id": "wiktionary_pt_all_nopic",
"version": "2025-10",
"title": "Wiktionary (Portuguese)",
"description": "Portuguese language dictionary and reference",
"url": "https://download.kiwix.org/zim/wiktionary/wiktionary_pt_all_nopic_2025-10.zim",
"size_mb": 560
}
]
}
]
},
{
"name": "History & Culture",
"slug": "history",
"icon": "IconTimeline",
"description": "World history, biographies, geography, and cultural heritage from ancient to modern times.",
"language": "en",
"tiers": [
{
"name": "Essential",
"slug": "history-essential",
"description": "Classic historical texts and military history from public domain.",
"recommended": true,
"resources": [
{
"id": "gutenberg_en_lcc-d",
"version": "2026-03",
"title": "Project Gutenberg: History & Geography",
"description": "Classic works on world history, exploration, and civilizations",
"url": "https://download.kiwix.org/zim/gutenberg/gutenberg_en_lcc-d_2026-03.zim",
"size_mb": 3800
}
]
},
{
"name": "Standard",
"slug": "history-standard",
"description": "Adds Stack Exchange history Q&A and biographies. Includes Essential.",
"includesTier": "history-essential",
"resources": [
{
"id": "history.stackexchange.com_en_all",
"version": "2025-12",
"title": "History Q&A",
"description": "Stack Exchange Q&A on historical events, people, and timelines",
"url": "https://download.kiwix.org/zim/stack_exchange/history.stackexchange.com_en_all_2025-12.zim",
"size_mb": 303
},
{
"id": "gutenberg_en_lcc-e",
"version": "2026-03",
"title": "Project Gutenberg: American History",
"description": "Founding documents, historical narratives, and American biographies",
"url": "https://download.kiwix.org/zim/gutenberg/gutenberg_en_lcc-e_2026-03.zim",
"size_mb": 2600
}
]
},
{
"name": "Comprehensive",
"slug": "history-comprehensive",
"description": "Deep cultural archive including philosophy, literature, and world biographies. Includes Standard.",
"includesTier": "history-standard",
"resources": [
{
"id": "wikipedia_en_history_maxi",
"version": "2025-11",
"title": "Wikipedia History & Culture",
"description": "Curated Wikipedia articles on history, biography, and cultural heritage",
"url": "https://download.kiwix.org/zim/wikipedia/wikipedia_en_history_maxi_2025-11.zim",
"size_mb": 3100
},
{
"id": "gutenberg_en_lcc-b",
"version": "2026-03",
"title": "Project Gutenberg: Philosophy & Biography",
"description": "Works on philosophy, psychology, ethics, and notable biographies",
"url": "https://download.kiwix.org/zim/gutenberg/gutenberg_en_lcc-b_2026-03.zim",
"size_mb": 1900
}
]
}
]
},
{
"name": "Legal & Civic",
"slug": "legal",
"icon": "IconScale",
"description": "Know your rights - legal references, civic documents, and law Q&A for everyday situations.",
"language": "en",
"tiers": [
{
"name": "Essential",
"slug": "legal-essential",
"description": "Core civic documents and foundational legal texts. Essential reference for any household.",
"recommended": true,
"resources": [
{
"id": "zimgit-zimgit-civics_en",
"version": "2024-08",
"title": "Civics & Government",
"description": "US government structure, Constitution, Bill of Rights, and civic participation guides",
"url": "https://download.kiwix.org/zim/other/zimgit-civics_en_2024-08.zim",
"size_mb": 12
},
{
"id": "gutenberg_en_lcc-k",
"version": "2026-03",
"title": "Project Gutenberg: Law",
"description": "Historical legal texts, treatises, and foundational law documents",
"url": "https://download.kiwix.org/zim/gutenberg/gutenberg_en_lcc-k_2026-03.zim",
"size_mb": 470
}
]
},
{
"name": "Standard",
"slug": "legal-standard",
"description": "Adds community legal Q&A for practical everyday legal questions. Includes Essential.",
"includesTier": "legal-essential",
"resources": [
{
"id": "law.stackexchange.com_en_all",
"version": "2025-12",
"title": "Law Q&A",
"description": "Stack Exchange Q&A covering contracts, tenant rights, employment, and everyday legal questions",
"url": "https://download.kiwix.org/zim/stack_exchange/law.stackexchange.com_en_all_2025-12.zim",
"size_mb": 229
}
]
},
{
"name": "Comprehensive",
"slug": "legal-comprehensive",
"description": "Complete legal reference including personal finance and government data. Includes Standard.",
"includesTier": "legal-standard",
"resources": [
{
"id": "personalfinance.stackexchange.com_en_all",
"version": "2025-12",
"title": "Personal Finance Q&A",
"description": "Stack Exchange Q&A on budgeting, taxes, investing, and financial planning",
"url": "https://download.kiwix.org/zim/stack_exchange/personalfinance.stackexchange.com_en_all_2025-12.zim",
"size_mb": 407
},
{
"id": "wikipedia_en_wp_politics_maxi",
"version": "2025-11",
"title": "Wikipedia Politics & Government",
"description": "Curated Wikipedia articles on political systems, governments, and civic institutions",
"url": "https://download.kiwix.org/zim/wikipedia/wikipedia_en_wp_politics_maxi_2025-11.zim",
"size_mb": 890
}
]
}
]
}
]
}