Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions CHANGELOG_v0.4.1Beta.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Changelog - Project RawHorse v0.4.1 Beta

**Release Date:** February 2026

## Summary

v0.4.1 Beta adds the dedicated FOIA Targets page, UX quick wins (ErrorBoundary, TableSkeleton, EmptyState), a cyberpunk neon UI aesthetic overhaul, UI bug fixes, and screenshot management.

## Added

- **FOIA Targets Page** at `/analysis/foia` with sortable table, filters, pagination, expandable quality notes
- **ScoreBadge** shared component
- **TableSkeleton** shared component for table pages
- **EmptyState** shared component
- **ErrorBoundary** wrapping all route pages
- Loading spinners on NetworkGraph and SankeyDiagram
- Export FOIA Targets (CSV) button
- Dashboard stat cards click-through to Browse tabs
- Screenshots directory with placeholder images
- README updated to use relative screenshot paths
- **Cyberpunk Neon UI Overhaul** (dark mode): deep blue-black backgrounds; neon purple/cyan/gold accents; neon border glow on cards and stat-card values; glitch/retro hover effect on cards; sidebar and tab/button neon treatments; subtle CRT scanline overlay; neon cyan focus outlines. Primary colors (logo purple/gold) unchanged.
- **Analysis Overview card icons** — Distinct gradients per card: Entity Network Graph (purple), Sankey Flow Diagram (gold), Intelligence Stack Pyramid (red-orange), FOIA Targets (green-teal).
- **PRH Development Roadmap** — `docs/development/PRH_DEVELOPMENT_ROADMAP.md`: codebase audit findings organized by priority (P0–P3); immediate fixes, refactoring, TypeScript/React, security, testing, performance, infrastructure.

## Fixed

- Browse FOIA tab: added score columns
- Browse Entities: View Network column width
- Light mode contrast on cards
- Search dropdown truncation (min-width, title tooltips)
- Network Graph center panel squeeze (min-width)
- Browse tab not syncing from URL on load (activeTab initialized from searchParams)
- FOIA Targets page table columns overflow (table-layout: fixed, column widths)
29 changes: 21 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,26 @@ To remove Project RawHorse and free disk space: **Windows** — double-click `UN

---
## Screenshots of Applications UI
<img width="1904" height="953" alt="PRHScreenshot_7" src="https://github.com/user-attachments/assets/71df00eb-2c17-42c1-b2f4-16212c8a507a" />

<img width="1906" height="952" alt="PRHScreenshot_1" src="https://github.com/user-attachments/assets/9b8c04a2-3dc2-4ac0-99a4-39385f314dda" />
![Dashboard](screenshots/dashboard-overview.png)

<img width="1903" height="952" alt="PRHScreenshot_6" src="https://github.com/user-attachments/assets/3b6c65f8-a9ee-4db8-9cee-a8351cc08c17" />
![Browse Entities](screenshots/browse-entities.png)

<img width="1905" height="953" alt="PRHScreenshot_5" src="https://github.com/user-attachments/assets/bb8410f5-8be8-4d12-ac95-b5ff2fdf099b" />
![Browse FOIA](screenshots/browse-foia.png)

<img width="1919" height="951" alt="PRHAnalysisScreenshot_1" src="https://github.com/user-attachments/assets/1f582c78-2bb5-407f-b359-b6a2f29aeca0" />
![Analysis Overview](screenshots/analysis-overview.png)

<img width="1900" height="948" alt="PRHIntelStackPyramidScreenshot_1" src="https://github.com/user-attachments/assets/4745091f-f60e-4921-90ee-fd847e152465" />
![Network Graph](screenshots/network-graph-3panel.png)

<img width="1904" height="946" alt="PRHIntelStackPyramidScreenshot_2" src="https://github.com/user-attachments/assets/6ebd4ca9-d345-499a-b31e-d22666105e97" />
![Network Graph Proximity](screenshots/network-graph-proximity.png)

<img width="1906" height="954" alt="PRHScreenshot_3" src="https://github.com/user-attachments/assets/138009a8-301b-4777-a880-321e3de28b8b" />
![Sankey Diagram](screenshots/sankey-diagram.png)

![Intelligence Stack Pyramid](screenshots/pyramid-visualization.png)

![FOIA Targets Page](screenshots/foia-targets-page.png)

![Search Suggestions](screenshots/search-suggestions.png)


## Features
Expand Down Expand Up @@ -413,6 +418,14 @@ Built on publicly available data from:

## Version History

### v0.4.1 (2026-02)
- **FOIA Targets Page**: Dedicated `/analysis/foia` with sortable table, filters, quality scoring
- **UX Quick Wins**: ErrorBoundary, TableSkeleton, EmptyState; loading spinners on Network Graph and Sankey
- **UI Fixes**: Dashboard stat cards click-through, Browse FOIA score columns, Export FOIA, light mode contrast, search truncation, network graph min-width
- **Screenshots**: Version-controlled screenshots in `screenshots/` directory
- **Code review**: Analysis Overview card icon gradients (purple/gold); development roadmap (`docs/development/PRH_DEVELOPMENT_ROADMAP.md`)
- See [CHANGELOG_v0.4.1Beta.md](CHANGELOG_v0.4.1Beta.md) for full details

### v0.4.0 (2026-02)
- **Data Enrichment**: 26 new entities from UAPGerb's "The Hidden Wing" transcript (Air Force SAF hierarchy)
- **Intelligence Stack Pyramid**: Hierarchical L1–L6 visualization with chain-of-command tracing
Expand Down
33 changes: 33 additions & 0 deletions backend/routers/export_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,39 @@ async def export_awards_csv(
)


@router.get("/csv/foia-targets")
async def export_foia_targets_csv(
db: Session = Depends(get_db)
):
"""Export FOIA targets to CSV"""
targets = db.query(FOIATarget).order_by(FOIATarget.priority_score.desc().nullslast()).all()

output = io.StringIO()
writer = csv.writer(output)

writer.writerow([
'id', 'agency', 'record_request', 'timeframe', 'relevance', 'notes',
'priority_score', 'specificity_score', 'likelihood_score', 'quality_notes'
])

for t in targets:
writer.writerow([
t.id, t.agency, t.record_request, t.timeframe or '', t.relevance or '',
t.notes or '',
t.priority_score if t.priority_score is not None else '',
t.specificity_score if t.specificity_score is not None else '',
t.likelihood_score if t.likelihood_score is not None else '',
t.quality_notes or ''
])

output.seek(0)
return StreamingResponse(
iter([output.getvalue()]),
media_type="text/csv",
headers={"Content-Disposition": "attachment; filename=foia_targets.csv"}
)


@router.get("/json/entities")
async def export_entities_json(
db: Session = Depends(get_db)
Expand Down
1 change: 0 additions & 1 deletion backend/static/assets/index-CzXLV2a0.css

This file was deleted.

1 change: 1 addition & 0 deletions backend/static/assets/index-DMND3IlI.css

Large diffs are not rendered by default.

550 changes: 550 additions & 0 deletions backend/static/assets/index-DdSfhAxn.js

Large diffs are not rendered by default.

525 changes: 0 additions & 525 deletions backend/static/assets/index-DqLKpvHk.js

This file was deleted.

4 changes: 2 additions & 2 deletions backend/static/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#5B4FFF" />
<title>Project RawHorse</title>
<script type="module" crossorigin src="/assets/index-DqLKpvHk.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CzXLV2a0.css">
<script type="module" crossorigin src="/assets/index-DdSfhAxn.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DMND3IlI.css">
</head>
<body>
<div id="root"></div>
Expand Down
1 change: 1 addition & 0 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ This document describes the high-level architecture, data flow, and key design d
| `/analysis/network` | `NetworkGraphPage` | Force-directed entity relationship graph |
| `/analysis/sankey` | `SankeyDiagramPage` | Financial flow Sankey diagram |
| `/analysis/pyramid` | `PyramidPage` | Intelligence Stack pyramid (L1–L6) |
| `/analysis/foia` | `FoiaTargetsPage` | FOIA targets with quality scoring and filters |
| `/export` | `Export` | CSV, JSON, PDF download |
| `/contribute` | `Contribute` | GitHub PR contribution form |
| `/about` | `About` | Project info, attribution, data sources |
Expand Down
57 changes: 57 additions & 0 deletions docs/RELEASE_NOTES_v0.4.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Release Notes - Project RawHorse v0.4.1

**Release Date:** February 2026
**Type:** Beta

## Summary

v0.4.1 adds the dedicated FOIA Targets page, UX quick wins (loading states, error boundaries, empty states), a cyberpunk neon UI aesthetic overhaul, and UI bug fixes from a live review.

## Highlights

### For Users

- **FOIA Targets Page** - Browse and prioritize FOIA targets at `/analysis/foia` with quality scoring, filters, and sortable columns
- **Dashboard Stat Cards** - Click Total Entities, Money Flows, Federal Awards, or FOIA Targets to jump to the corresponding Browse tab
- **Export FOIA** - Download FOIA targets as CSV from the Export page
- **Error Handling** - Graceful error boundaries with "Try Again" and "Go Home" when something goes wrong
- **Loading Feedback** - Spinners on Network Graph and Sankey Diagram; skeleton loaders on table pages
- **Light Mode** - Improved contrast for card components (WCAG AA)
- **Search Results** - Wider dropdown and tooltips on truncated names
- **Cyberpunk Neon UI** - Dark mode: deep blue-black backgrounds, neon purple/cyan/gold glows on cards and sidebar, glitch hover on cards, subtle scanline overlay, neon focus outlines. Logo purple and gold retained.

### For Researchers

- **FOIA Quality Scoring** - Priority, Specificity, and Likelihood scores visible in both Browse FOIA tab and dedicated FOIA Targets page
- **Expandable Quality Notes** - Click a row to see full quality notes

### Technical

- **Shared Components** - ScoreBadge, TableSkeleton, EmptyState, ErrorBoundary
- **Screenshot Management** - Version-controlled screenshots in `screenshots/` directory
- **Network Graph** - Center panel min-width to prevent layout squeeze
- **Theme** - `theme.css`: neon variables and dark blue-black palette; `App.css`: card glows, glitch keyframes, sidebar/tabs/buttons neon; `index.css`: neon cyan focus in dark mode
- **Analysis Overview card icons** - Unique gradients per card: Entity Network Graph (purple), Sankey (gold), Intelligence Stack Pyramid (red-orange), FOIA Targets (green-teal)
- **Development Roadmap** - `docs/development/PRH_DEVELOPMENT_ROADMAP.md` with audit findings by priority (P0–P3)

## New Routes

| Route | Description |
|-------|-------------|
| `/analysis/foia` | FOIA Targets page with sortable table and filters |

## Files Added

- `frontend/src/pages/FoiaTargetsPage.tsx`
- `frontend/src/pages/FoiaTargetsPage.css`
- `frontend/src/components/ScoreBadge.tsx`
- `frontend/src/components/ScoreBadge.css`
- `frontend/src/components/TableSkeleton.tsx`
- `frontend/src/components/EmptyState.tsx`
- `frontend/src/components/EmptyState.css`
- `frontend/src/components/ErrorBoundary.tsx`
- `frontend/src/components/ErrorBoundary.css`
- `screenshots/*.png` (placeholder screenshots)
- `CHANGELOG_v0.4.1Beta.md`
- `docs/RELEASE_NOTES_v0.4.1.md`
- `docs/development/PRH_DEVELOPMENT_ROADMAP.md`
56 changes: 56 additions & 0 deletions docs/development/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,62 @@ Complete list of features implemented in Project RawHorse.

---

### FOIA Targets Page ✅ (v0.4.1)
**Component:** FoiaTargetsPage
**Files:**
- `frontend/src/pages/FoiaTargetsPage.tsx`
- `frontend/src/pages/FoiaTargetsPage.css`

**Feature:**
- Dedicated route `/analysis/foia`
- Sortable table: Agency, Record Request, Timeframe, Priority, Specificity, Likelihood scores
- Filters: text search, agency dropdown
- Pagination with page size selector (10/25/50/100)
- Expandable quality notes on row click
- Uses ScoreBadge, TableSkeleton, EmptyState

**Impact:** Dedicated FOIA target prioritization with quality scoring

---

### ScoreBadge, ErrorBoundary, TableSkeleton, EmptyState ✅ (v0.4.1)
**Components:** Shared UI utilities
**Files:**
- `frontend/src/components/ScoreBadge.tsx`
- `frontend/src/components/ErrorBoundary.tsx`
- `frontend/src/components/TableSkeleton.tsx`
- `frontend/src/components/EmptyState.tsx`

**Feature:**
- **ScoreBadge**: Color-coded score display (priority, specificity, likelihood) for Browse and FoiaTargetsPage
- **ErrorBoundary**: Graceful error handling with "Try Again" / "Go Home" and collapsible details
- **TableSkeleton**: Reusable skeleton loader for table pages
- **EmptyState**: Reusable empty state with icon, title, description, optional action

**Impact:** Consistent UX and error handling across the app

---

### Cyberpunk Neon UI ✅ (v0.4.1)
**Components:** Theme system and global styles
**Files:**
- `frontend/src/styles/theme.css`
- `frontend/src/App.css`
- `frontend/src/index.css`

**Feature:**
- **Dark mode palette**: Deep blue-black backgrounds (#0A0A12, #111118, #1A1A24, #141420); primary purple and gold (logo) unchanged; neon cyan (#00F0FF) and golden yellow (#FFD700) accents; neon glow variables (--glow-purple, --glow-cyan, --glow-gold)
- **Cards**: Neon purple border and box-shadow on .card and .stat-card; neon text-shadow on stat values (purple for odd, gold for even)
- **Glitch hover**: Brief channel-split animation (::before cyan, ::after gold) and glitchSlice keyframes on card hover
- **Sidebar**: Neon border, "Project RawHorse" title glow, active nav glow and left accent, nav hover cyan tint
- **Tabs and buttons**: Neon hover box-shadow, active tab bottom-border glow, focus outlines in neon cyan (dark mode)
- **Scanline overlay**: Subtle CRT-style horizontal lines on .main-content in dark mode (pointer-events: none)
- **Light mode**: Subtle neon-tinted borders only; no heavy effects

**Impact:** Cohesive neon/retro cyberpunk aesthetic in dark mode while preserving brand colors and readability

---

### Custom Branding ✅
**Component:** Icon and logo system
**Files:**
Expand Down
27 changes: 11 additions & 16 deletions docs/development/FEATURE_ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
# Project RawHorse - Feature Roadmap & Next Steps

**Last Updated**: February 2026
**Current Version**: v0.4.0
**Current Version**: v0.4.1
**Status**: Active Development

---

## ✅ Completed (v0.2.0 – v0.4.0)
## ✅ Completed (v0.2.0 – v0.4.1)

### v0.4.1 (February 2026)
1. **FOIA Targets Page** - Dedicated `/analysis/foia` with sortable table, filters, pagination, expandable quality notes
2. **ScoreBadge** - Shared component for Browse and FoiaTargetsPage score display
3. **UX Quick Wins** - ErrorBoundary, TableSkeleton, EmptyState components; loading spinners on Network Graph and Sankey
4. **UI Bug Fixes** - Browse FOIA score columns, Export FOIA, dashboard click-through, light mode contrast, search truncation, network graph min-width
5. **Screenshot Management** - Version-controlled screenshots, README relative paths
6. **Cyberpunk Neon UI Overhaul** - Dark mode: deep blue-black palette, neon purple/cyan/gold glows on cards and sidebar, glitch hover on cards, scanline overlay, neon focus outlines. Primary colors (logo) unchanged. Browse tab URL init and FOIA table column layout fixes.
7. **Code review (v0.4.1)** - Analysis Overview card icon gradients (Entity Network purple, Sankey gold); `PRH_DEVELOPMENT_ROADMAP.md` with audit findings by priority (P0–P3).

### v0.4.0 (February 2026)
1. **Data Enrichment** - 26 new entities from UAPGerb's "The Hidden Wing" transcript
Expand Down Expand Up @@ -37,20 +46,6 @@

## 🎯 High Priority Features (Ready to Implement)

### 0. **Dedicated FOIA Targets Page** (v0.4.1) 📋 PLANNED NEXT
**Goal**: Browse and manage FOIA targets in a dedicated Analysis sub-page

**Features to Add**:
- **Route**: `/analysis/foia` — linked from Analysis sidebar
- **Browse-style table** with sorting and pagination
- **Filters**: agency, priority score, specificity score
- **Integration** with existing FOIA quality scoring system

**Implementation Complexity**: Low-Medium
**User Impact**: Medium-High
**Estimated Time**: 1-2 days

---

### 1. **Enhanced Financial Visualizations** ⭐ RECOMMENDED AFTER v0.4.1
**Goal**: Make money flows visual and intuitive
Expand Down
Loading