9.8 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
KGPZ Web is a Go-based web application for serving historical newspaper data from the KGPZ (Königsberger Gelehrte und Politische Zeitung) digital archive. The application combines server-rendered HTML with HTMX for progressive enhancement, providing a modern web interface for browsing historical content.
Architecture
The application follows a modular Go architecture:
- Main Application: kgpz_web.go- Entry point and application lifecycle management
- App Core: app/kgpz.go- Core business logic and data processing
- Controllers: Route handlers for different content types (issues, agents, places, categories, search, quickfilters)
- View Models: Data structures for template rendering with pre-processed business logic (viewmodels/)
- XML Models: Data structures for parsing source XML files (xmlmodels/)
- Providers: External service integrations (Git, GND, Geonames, XML parsing, search)
- Templating: Custom template engine with Go template integration and helper functions
- Views: Frontend assets and templates in views/directory
Development Commands
The user runs a dev server in the background rebuilding assets & go code on file changes
Note: The project maintainer handles all Go compilation, testing, and error reporting. Claude Code should not run Go build commands or tests - any Go-related errors will be reported directly by the maintainer.
Configuration
The application uses JSON configuration files:
- config.dev.json- Development configuration (if exists)
- config.json- Default configuration (fallback)
Key configuration options:
- git_url: Source repository URL for data
- git_branch: Branch to use for data
- webhook_endpoint: GitHub webhook endpoint for auto-updates
- debug: Enable debug mode and logging
- watch: Enable file watching for template hot-reloading
Route Details
Issues/Ausgabe (/:year/:issue/:page?)
- Controller: controllers/ausgabe_controller.go
- URL Structure: /1771/42or/1771/42/166(with page)
- Components: views/routes/ausgabe/body.gohtml,head.gohtml,components/_inhaltsverzeichnis.gohtml,_newspaper_layout.gohtml,_bilder.gohtml
- JavaScript: issue.js(newspaper layout, page navigation, modals, citation generation)
- Template: views/routes/ausgabe/
Agents/Akteure (/akteure/:letter?/:id?)
- Controller: controllers/akteur_controller.go
- URL Structure: /akteure/a,/akteure/person-123,/akteure/autoren
- Components: views/routes/components/_akteur.gohtml,_akteur_header.gohtml,_akteur_werke.gohtml,_akteur_beitraege.gohtml
- JavaScript: akteure.js(AkteureScrollspy web component)
- Template: views/routes/akteure/
Places/Orte (/ort/:id?)
- Controller: controllers/ort_controller.go
- URL Structure: /ort/(overview),/ort/place-123(detail)
- Components: views/routes/ort/overview/,ort/detail/,components/_place_card.gohtml,_place_header.gohtml,_place_pieces.gohtml
- JavaScript: places.js(PlacesFilter web component for search filtering)
- Template: views/routes/ort/
Multi-Issue Pieces (/beitrag/:id)
- Controller: controllers/piece_controller.go
- URL Structure: /beitrag/piece-abc123
- Components: views/routes/piece/body.gohtml,head.gohtml,components/_piece_inhaltsverzeichnis.gohtml,_piece_sequential_layout.gohtml
- JavaScript: main.js(highlighting system, shared with issue view)
- Template: views/routes/piece/
Search (/search)
- Controller: controllers/search_controller.go
- URL Structure: /search?q=term
- Components: views/routes/search/body.gohtml,head.gohtml
- JavaScript: main.js(basic HTMX handling)
- Template: views/routes/search/
Quickfilter (/filter)
- Controller: controllers/filter_controller.go
- URL Structure: /filter(HTMX endpoint)
- Components: views/routes/filter/body.gohtml
- JavaScript: main.js(toggle functionality in_menu.gohtml)
- Template: views/routes/filter/
Page Jump (/jump/:year?/:page?)
- Controller: controllers/page_jump_controller.go
- URL Structure: /jump(form),/jump/1771/166(direct)
- Components: Integrated into filter system
- JavaScript: main.js(auto-scroll functionality)
- Template: Part of filter system
Year Overview (/jahrgang/:year)
- Controller: controllers/year_controller.go
- URL Structure: /jahrgang/1771
- Components: views/routes/year/body.gohtml,head.gohtml
- JavaScript: main.js(basic navigation)
- Template: views/routes/year/
Categories (/kategorie/:id)
- Controller: controllers/kategorie_controller.go
- URL Structure: /kategorie/category-name
- Components: views/routes/kategorie/body.gohtml,head.gohtml
- JavaScript: main.js(basic functionality)
- Template: views/routes/kategorie/
Citation (/zitation)
- Controller: controllers/zitation_controller.go
- URL Structure: /zitation
- Components: views/routes/zitation/body.gohtml,head.gohtml
- JavaScript: main.js(citation link management)
- Template: views/routes/zitation/
Static Pages
- Datenschutz: views/routes/datenschutz/(Privacy policy)
- Kontakt: views/routes/kontakt/(Contact)
- Edition: views/routes/edition/(Edition info)
Template Structure
Templates are embedded in the binary:
- Layouts: views/layouts/- Base page structures
- Routes: views/routes/- Page-specific templates
- Assets: views/assets/- Compiled CSS and static files
Shared Components
- views/routes/components/_unified_piece_entry.gohtml- Universal piece display component
- views/layouts/components/_header.gohtml,- _footer.gohtml,- _menu.gohtml- Layout components
Frontend Assets
JavaScript Stack:
- HTMX: Core interactivity and AJAX requests - IMPORTANT: Content swapping requires careful event handling
- Web Components: Custom elements for self-contained functionality with proper lifecycle management
- Build Tool: Vite for module bundling and development server
- Module Architecture: ES6 modules with focused responsibilities for different page types
CSS Stack:
- Tailwind CSS v4: Utility-first CSS framework
- PostCSS: CSS processing pipeline
- RemixIcon: Icon font library
HTMX Considerations:
- Links swap content dynamically, requiring proper cleanup of event listeners
- Web components must handle HTMX page swaps with cleanup and re-initialization
- JavaScript modules need to be HTMX-safe with proper memory management
- Event delegation and component lifecycle management are critical
JavaScript Modules (views/transform/):
- main.js: Entry point, imports all modules, HTMX event handling, citation link highlighting
- issue.js: Newspaper layout, page navigation, modal functions, citation generation
- akteure.js: AkteureScrollspy web component for agents/authors navigation
- places.js: PlacesFilter web component for real-time place search filtering
- single-page-viewer.js: Modal component for full-screen page viewing
- scroll-to-top.js: ScrollToTopButton web component for floating scroll button
- inhaltsverzeichnis-scrollspy.js: Table of contents highlighting system
- search.js: Search functionality and result handling
- error-modal.js: Error display modal component
- helpers.js: Utility functions and shared helpers
Citation System
Universal Citation Format: Used throughout the application for consistent newspaper references
Citation Template (views/routes/components/_citation.gohtml):
- Format: DD.MM.YYYY/ISSUE, S. PAGE-PAGE(orBeil. PAGEfor supplements)
- Input: xmlmodels.IssueRefwith date, issue number, page range, optional supplement
- Output: Clickable links to specific pages with current page highlighting
- Auto-detection: Automatically highlights citations referring to the currently viewed page
Example Citations:
- Regular pages: 1.2.1765/9, S. 33-34
- Single page: 15.3.1771/42, S. 166
- Supplement: 1.5.1766/15, Beil. 2-3
Usage: {{ template "_citation" $issueRef }} - Used in table of contents, agent pages, place listings, search results
Template Structure & Format
Standard Template Pattern: Almost all views follow a consistent two-file structure:
Standard Files
- head.gohtml: Page-specific- <title>and meta information
- body.gohtml: Main page content using layout system
Layout System
- Base Layout: views/layouts/default/root.gohtmlprovides HTML structure
- Shared Components: Header, footer, navigation in views/layouts/components/
- Responsive Design: Mobile-first with Tailwind CSS classes
- Three-column pattern: Many views use sidebar + content + navigation layout
Template Features
- Go Template Syntax: Standard Go templates with custom helper functions
- HTMX Integration: hx-*attributes for dynamic content loading
- Component Reuse: Shared components like _unified_piece_entry.gohtmlfor consistency
- Conditional Rendering: Based on data availability and user context
- Typography: Serif fonts for names/titles, sans-serif for UI, appropriate text sizing
Development Workflow
- Backend changes: Modify Go files, restart server
- Template changes: Edit templates in views/, automatic reload if watching enabled
- CSS changes: Run npm run cssornpm run tailwindin views directory
- JavaScript changes: Edit transform/main.js, runnpm run build
- Full rebuild: go buildfor backend,npm run buildfor frontend assets
Note: The user runs a dev server in the background rebuilding assets & go code on file changes
