7.6 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)
- View Models: Data structures for template rendering (
viewmodels/) - XML Models: Data structures for parsing source XML files (
xmlmodels/) - Providers: External service integrations (Git, GND, XML parsing, search)
- Templating: Custom template engine with Go template integration
- Views: Frontend assets and templates in
views/directory
Key Components
- Data Sources: XML files from Git repository containing historical newspaper metadata
- Search: Full-text search powered by Bleve search engine
- External Integrations: GND (Gemeinsame Normdatei) for person metadata, Geonames for place data
- Template System: Custom engine supporting layouts and partials with embedded filesystem
Development Commands
Go Backend
# Run the application in development mode
go run kgpz_web.go
# Build the application
go build -o kgpz_web kgpz_web.go
# Run tests
go test ./helpers/xsdtime/
# Format code
go fmt ./...
# Check for issues
go vet ./...
Frontend Assets (from views/ directory)
cd views/
# Development server with hot reloading
npm run dev
# Build production assets
npm run build
# Build CSS with Tailwind
npm run tailwind
# Build CSS with PostCSS
npm run css
# Preview built assets
npm run preview
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 datagit_branch: Branch to use for datawebhook_endpoint: GitHub webhook endpoint for auto-updatesdebug: Enable debug mode and loggingwatch: Enable file watching for template hot-reloading
Data Flow
- Startup: Application clones/pulls Git repository with XML data
- Parsing: XML files parsed into structured models (agents, places, works, issues)
- Enrichment: External APIs (GND, Geonames) enrich metadata
- Indexing: Full-text search index built using Bleve
- Serving: HTTP server serves templated content with HTMX interactions
Key Dependencies
- Web Framework: Fiber (high-performance HTTP framework)
- Search: Bleve (full-text search engine)
- Git Operations: go-git (Git repository operations)
- Frontend: HTMX + Tailwind CSS for progressive enhancement
- Build Tools: Vite for asset bundling, PostCSS for CSS processing
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
The template system supports nested layouts and automatic reloading in development mode when watch: true is enabled.
Views Directory Structure
The views/ directory contains all frontend templates, assets, and build configuration:
Directory Layout
views/
├── layouts/ # Base templates and layouts
│ ├── components/ # Shared layout components (_header, _footer, _menu)
│ └── default/ # Default layout (root.gohtml)
├── routes/ # Page-specific templates
│ ├── akteure/ # Agents/People pages (body.gohtml, head.gohtml)
│ ├── ausgabe/ # Issue pages with components
│ │ └── components/ # Issue-specific components (_inhaltsverzeichnis, _bilder, etc.)
│ ├── components/ # Shared route components (_akteur.gohtml)
│ ├── datenschutz/ # Privacy policy
│ ├── edition/ # Edition pages
│ ├── kategorie/ # Category pages
│ ├── kontakt/ # Contact pages
│ ├── ort/ # Places pages
│ ├── search/ # Search pages
│ └── zitation/ # Citation pages
├── assets/ # Compiled output assets
│ ├── css/ # Compiled CSS files
│ ├── js/ # JavaScript libraries and compiled scripts
│ ├── fonts/ # Font files
│ ├── logo/ # Logo and favicon files
│ └── xslt/ # XSLT transformation files
├── public/ # Static public assets
├── transform/ # Source files for build process
│ ├── main.js # Main JavaScript entry point
│ └── site.css # Source CSS with Tailwind directives
└── node_modules/ # NPM dependencies
Template System
Layout Templates (layouts/):
default/root.gohtml: Base HTML structure with head, HTMX, Alpine.js setupcomponents/_header.gohtml: Site header with navigationcomponents/_footer.gohtml: Site footercomponents/_menu.gohtml: Main navigation menu
Route Templates (routes/):
Each route has dedicated head.gohtml and body.gohtml files following Go template conventions:
- Pages use German naming:
akteure(agents),ausgabe(issues),ort(places), etc. - Component partials prefixed with
_(e.g.,_akteur.gohtml,_inhaltsverzeichnis.gohtml) - HTMX-powered interactions for dynamic content loading
Template Features:
- Go template syntax with custom functions from
app/kgpz.go - Block template inheritance system
- HTMX integration for progressive enhancement
- Conditional development/production asset loading
Frontend Assets
JavaScript Stack:
- HTMX: Core interactivity and AJAX requests
- Alpine.js: Lightweight reactivity for UI components
- Custom Extensions: HTMX plugins for response targets, client-side templates, loading states
- Build Tool: Vite for module bundling and development server
CSS Stack:
- Tailwind CSS v4: Utility-first CSS framework
- PostCSS: CSS processing pipeline
- RemixIcon: Icon font library
- Custom Fonts: Typography setup in
assets/css/fonts.css
Build Process:
- Source:
transform/main.jsandtransform/site.css - Output: Compiled to
assets/scripts.jsandassets/style.css - Vite Config: Production build targeting ES modules
- PostCSS Config: Tailwind CSS processing
Asset Loading Strategy
The root template conditionally loads assets based on environment:
- Development: Uses dev favicon, enables hot reloading
- Production: Optimized assets, production favicon
- Module imports: ES6 modules with
setup()function from compiled scripts - Deferred loading: HTMX and Alpine.js loaded with
deferattribute
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