iran-intel

Static intelligence portal for Iran war investigation signals, powered by the Intelligence Briefing Toolkit.

https://github.com/davidbmar/iran-intel  ·  private  ·  shipped

What it is

A Layer A static site that renders multi-source intelligence on the Iran conflict as readable, footnoted narrative briefs and analytical panels. It aggregates signals from the 'iran_war_investigation' project, filters them by recency and topic relevance, and presents them through daily briefs, wire feeds, and multi-perspective panel debates.

Features

Quickstart

git clone https://github.com/davidbmar/iran-intel.git
cd iran-intel
npm install
export IBT_ROOT=/path/to/intelligence-briefing-toolkit
export TOOL_RAG_ROOT=/path/to/tool-RAG-for-split-personalities
npx tsx scripts/build-homepage-data.ts
npx tsx scripts/build-daily.ts
npx tsx scripts/build-panel-data.ts
npx tsx scripts/build-panel-debates.ts
npm run dev

Architecture

flowchart TD
    subgraph ExternalSources["External Data Sources"]
        IBT["Intelligence Briefing Toolkit\n(signals.json, pipeline_status)"]
        RAG["tool-RAG\n(personas, debate MDs)"]
    end

    subgraph BuildScripts["Build Scripts (tsx)"]
        BuildDaily["build-daily.ts"]
        BuildHome["build-homepage-data.ts"]
        BuildPanel["build-panel-data.ts"]
        BuildDebates["build-panel-debates.ts"]
        BuildSignals["build-signals.ts"]
    end

    subgraph StaticSite["Next.js Static Site"]
        PublicAPI["public/api/*.json"]
        Pages["Next.js Pages (SSG)"]
        Out["./out/ (Static HTML)"]
    end

    IBT --> BuildDaily
    IBT --> BuildHome
    IBT --> BuildSignals
    RAG --> BuildPanel
    RAG --> BuildDebates

    BuildDaily --> PublicAPI
    BuildHome --> PublicAPI
    BuildPanel --> PublicAPI
    BuildDebates --> PublicAPI
    BuildSignals --> PublicAPI

    PublicAPI --> Pages
    Pages --> Out

How it's built

Built with Next.js for static site generation. Custom TypeScript build scripts (run via tsx) extract data from external JSON sources (IBT signals, graph configs, and RAG persona files), transform them into API-ready JSON structures in the public directory, and then Next.js SSG renders the pages using this pre-computed data.

How it runs

sequenceDiagram
    participant Dev as Developer
    participant Build as Build Scripts (tsx)
    participant IBT as IBT Repo
    participant RAG as Tool-RAG Repo
    participant Next as Next.js
    participant FS as File System (public/api)

    Dev->>Build: Execute build scripts
    Build->>IBT: Read signals.json
    IBT-->>Build: Return raw signals
    Build->>IBT: Read graph_config.json
    IBT-->>Build: Return topic/source config
    Build->>RAG: Read persona/domain files
    RAG-->>Build: Return persona metadata
    Build->>RAG: Read PANEL_DEBATE*.md
    RAG-->>Build: Return debate transcripts
    Build->>Build: Filter & Transform Data
    Build->>FS: Write homepage.json, daily-brief.json, etc.
    Dev->>Next: Run npm run dev/build
    Next->>FS: Read generated JSON
    FS-->>Next: Return structured data
    Next->>Next: Generate Static HTML
    Next->>Dev: Serve/Output Static Site

How to apply & reuse

Clone the repo, ensure the Intelligence Briefing Toolkit (IBT) and tool-RAG repositories are available locally, set environment variables for their paths, run the build scripts to generate API data, and then build/deploy the static site.

At a glance

CapabilitiesSignal aggregationTopic filteringRecency weightingSource tier classificationMulti-perspective renderingStatic site generationData transparency metrics
ComponentsDaily Brief PageWire Feed PagePanel Debate PageSignals Statistics PageHomepage DashboardBuild ScriptsSource Tier Classifier
TechTypeScriptNext.jstsxJSONMarkdown
Depends onintelligence-briefing-toolkittool-RAG-for-split-personalities
Integrates withS3CloudFront
PatternsStatic Site GenerationBuild-time Data TransformationSeparation of Data and PresentationFail-fast Build Integrity
Reuse tagsintelligence-portalstatic-sitedata-journalismnextjstypescript

Repo hygiene

✓ all on main — nothing unmerged.