- JavaScript 53.9%
- Svelte 24.3%
- TypeScript 17.5%
- CSS 2.4%
- Shell 1.8%
| .forgejo/workflows | ||
| content | ||
| docs | ||
| evidence-keeper | ||
| news-pipeline | ||
| scripts | ||
| src | ||
| static | ||
| tests/e2e | ||
| .env.example | ||
| .gitignore | ||
| .lighthouserc.json | ||
| .pa11yci.json | ||
| collections.config.ts | ||
| content.config.ts | ||
| package.json | ||
| playwright.config.ts | ||
| pnpm-lock.yaml | ||
| README.md | ||
| site.config.ts | ||
| svelte.config.js | ||
| tags.config.ts | ||
| tsconfig.json | ||
| vite.config.ts | ||
| vitest.config.components.ts | ||
argand-archive
A comprehensive, open-source template for building forensic-grade archival sites. Ships with automated news monitoring, evidence preservation, LLM-powered editorial pipelines, and full-text search — all local-first, no cloud dependencies.
Built for journalists, researchers, human rights organizations, and anyone who needs to document events with verifiable evidence that can't be scrubbed or tampered with.
Quick Start
git clone git.argand.org/nicweyand/argand-archive my-archive
cd my-archive
pnpm install
# Edit site.config.ts with your site details
# Add markdown files to content/entries/
pnpm dev # Development server at localhost:5173
pnpm build # Production build to build/
pnpm preview # Preview production build
What Ships
Display & Navigation
- Full-text search — Argand Mini Search (WASM, client-side, instant)
- Map — Leaflet map with severity-colored markers and location data
- Timeline — Day-based chronological timeline with filters and view modes
- Statistics — SVG chart dashboard (severity, category, temporal, tags)
- Citations — Chicago, APA, Bluebook, BibTeX, RIS export per entry
- Collections — Curated entry groupings
- Tag definitions — Described tags with index page
- Download — Site archive as tar.gz + ZIP with SHA-256 checksums
Data Feeds & API
- RSS / JSON / CSV — Standard export feeds
- Researcher API — Structured JSON endpoints (
/api/entries,/api/stats,/api/export/bibtex,/api/export/ris)
Automated News Pipeline (news-pipeline/)
A 7-stage LLM-powered editorial pipeline that monitors news sources, corroborates facts, and publishes entries — all via local Ollama models:
- Intake — RSS feeds, GDELT news API, social media, watchlist monitoring, CC-News
- Triage — Small model classifies relevance (biased toward inclusion)
- Extract — Mid-range model extracts structured claims from articles
- Verify — Large model corroborates across multiple independent sources with circular source detection
- Draft — Large model generates publication-ready markdown
- Review — Different model performs 5 editorial checks (factual, sources, schema, legal, style)
- Publish — Validation battery, random deep audit, deploy
Configure in news-pipeline/pipeline.config.mjs. Run with pnpm pipeline.
Evidence Preservation (evidence-keeper/)
Forensic-grade evidence capture and cryptographic proof:
- Capture tools — WARC (wget), HTML (monolith), media (yt-dlp) — auto-detected, progressive enhancement
- Cryptographic proofs — SHA-256 hashing + RFC 3161 timestamps (FreeTSA) + Sigstore/Rekor transparency log
- Account monitoring — RSS/Atom → ActivityPub → Bluesky AT Protocol → generic API → scraping (priority order)
- Scrub detection — Monitors watchlisted URLs for changes, classifies severity, submits to Wayback Machine on deletion
- Storage adapters — Local filesystem + rsync replication (extensible interface for S3, SFTP, etc.)
- GPG-signed manifests — Batch audit trail, publishable to git
Configure in evidence-keeper/evidence.config.mjs. Run with pnpm evidence.
LLM Analysis Tools
On-demand analysis powered by local Ollama models:
- Pattern detection — Cross-entry pattern analysis, escalation trends, clustering (
pnpm analyze:patterns) - Legal framework mapping — Maps entries to applicable statutes, treaties, case law (
pnpm analyze:legal) - Source reliability scoring — Tracks publisher accuracy over time (
pnpm analyze:sources)
Editorial & Collaboration
- Decap CMS — Web-based editor at
/admin/with Forgejo/Gitea OAuth - Multi-editor workflow — Draft → Review → Published status, editorial dashboard, Decap editorial workflow (branch-per-draft + PR review)
- FOIA tracking — Track FOIA requests and legal holds per entry
- Verification transparency — Per-entry provenance display showing pipeline audit trail
Source Health & Quality
- Source URL checker — Scans all entries, verifies every source URL, reports dead/redirected/live (
pnpm check:sources) - Auto-repair —
--fixfollows redirects and searches Google News / DuckDuckGo for replacement URLs (tier-1 outlets only) - Source health dashboard —
/source-healthroute showing URL status across all entries
Resilience & Security
- Threat model — Formal threat model document (
docs/threat-model.md) - Deployment guide — Single server, multi-region, Tor hidden service (
docs/deployment-guide.md) - Mirror support — Configure mirror URLs and .onion address in footer
- Warrant canary — Optional canary URL in site config
- Accessibility — pa11y-ci WCAG 2.1 AA testing (
pnpm test:a11y)
Internationalization
- i18n — Locale system with translation keys, RTL support, content language tagging
- Extensible — Add locale files in
src/lib/i18n/locales/
Configuration
Everything is configured in site.config.ts:
export default {
name: 'My Archive',
tagline: 'Documenting what matters',
description: '...',
url: 'https://my-archive.org',
author: 'Your Name',
startDate: '2024-01-01',
contentUnit: { singular: 'incident', plural: 'incidents', slug: 'incidents' },
categories: { /* your categories */ },
severityLevels: { /* your severity scale */ },
theme: { /* colors */ },
features: {
search: true, citations: true, collections: false,
map: true, timeline: true, statistics: true,
download: true, tagDefinitions: true, evidence: true,
rss: true, json: true, csv: true,
},
// nav, footer, i18n, resilience...
}
Features are opt-in. Disabled features don't appear in navigation and their routes return 404.
Content
Entries go in content/entries/ as markdown with YAML frontmatter:
---
title: "Entry Title"
date: 2025-01-01
lastUpdated: 2025-01-01
description: "One-line description"
summary: "2-3 sentence summary"
category: your_category
severity: your_level
ongoing: true
tags: [tag1, tag2]
sources:
- url: https://reuters.com/article
title: "Article title"
publisher: Reuters
---
Your markdown content here.
Optional fields: location (lat/lng for map), timeline (event array), legalHold, foiaRequests, language, status (draft/review/published), relatedEntries.
Scripts
| Command | Description |
|---|---|
pnpm dev |
Development server |
pnpm build |
Production build |
pnpm check |
TypeScript/Svelte check |
pnpm test |
Run tests |
pnpm pipeline |
Run news-pipeline |
pnpm evidence |
Run evidence-keeper |
pnpm evidence:monitors |
Run account monitors only |
pnpm check:sources |
Check all source URLs |
pnpm check:sources:fix |
Check + auto-repair dead URLs |
pnpm analyze:patterns |
LLM pattern detection |
pnpm analyze:legal |
LLM legal framework mapping |
pnpm analyze:sources |
Source reliability scoring |
pnpm build:archive |
Generate downloadable site archive |
pnpm test:a11y |
Accessibility testing (WCAG 2.1 AA) |
pnpm quality |
Full quality gate |
Template Sync
Archives built from this template can pull upstream updates:
bash scripts/sync-from-template.sh
This merges template changes while preserving site-specific config, content, and customizations. A convenience script syncs all downstream archives at once: bash ~/RustroverProjects/sync-all-archives.sh.
Tech Stack
SvelteKit 2, Svelte 5, TypeScript, Tailwind v4, adapter-static, Zod, Vitest, Argand Mini Search WASM, Ollama (local LLM), gray-matter, rss-parser, pa11y-ci
Tests
176 tests across 21 test files:
- News pipeline: 75 tests (queue, ollama, dedup, config, RSS, triage, extract, verify, draft, review, publish, integration)
- Evidence keeper: 101 tests (tools, config, storage, hashing, timestamps, capture, scrub detection, monitors, integration)
Documentation
docs/threat-model.md— Formal threat modeldocs/deployment-guide.md— Deployment and hardening guidedocs/editorial-workflow.md— Multi-editor workflow guidedocs/i18n.md— Internationalization guidedocs/api.md— Researcher API referencedocs/accessibility.md— Accessibility testing guide
License
Public domain. No copyright restrictions.