File size: 9,233 Bytes
896453f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
# Impact-Driven Navigation Guide

The frontend has been transformed from a technical data audit to a **citizen mobilization tool** with persona-based navigation.

## Quick Start

```bash
cd /home/developer/projects/open-navigator/frontend/policy-dashboards
npm start
```

Opens at `http://localhost:3000` with the new impact-focused interface.

---

## Navigation Structure

### 1. Home Page: "Tuscaloosa Decision Pulse"

**Purpose:** Big picture context that mobilizes citizens

**Components:**
- **City Pulse** - Visual comparison: $28M capital vs $2.4M health
- **Accountability Alert** - Scrolling ticker of deferrals (e.g., "152 days in limbo")
- **Persona Cards** - Find your impact by audience
- **Topic Cards** - Browse by domain

**Key Feature:** Moves from "agendas" to "impact stories"

### 2. Persona-Based Navigation (Impact Stories)

Click a persona card to see targeted impact:

#### 🏠 Parent β†’ Student Dental Health
**Shows:** "The Learning Barrier Map"
- Left: School map with dental pain absence rates (red = high)
- Right: Veto chain flowchart (1,200 petitions β†’ blocked by 1 memo)
- Bottom: Key fact (0 liability suits in 35 states with programs)

#### πŸ“’ Advocate β†’ Transparency & Vetoes
**Shows:** "The Influence Radar"
- Who has veto power
- Public input vs bureaucratic influence
- Name the blocker directly

#### 🚰 Resident β†’ Water & Infrastructure
**Shows:** "The Lifetime Health Tax"
- Coming soon (template provided)

### 3. Browse by Topic (Filterable View)

**Primary Navigation (Topic/Domain):**
- βœ… Public Health (Dental, Water, Mental Health)
- πŸ“š Education & Youth (School Board, Pre-K)
- πŸ—οΈ Infrastructure (Roads, Utilities, Construction)
- 🚨 Public Safety (Police, Fire, EMS)

**Secondary Filters (Pattern):**
- [ ] Technocratic Veto (legal/risk managers blocking)
- [ ] Sequential Deferral (repeated "tabling for study")
- [ ] Performance Rationale (rhetoric not matching funding)

**Tertiary Filters (Resource Type):**
- [ ] Video Recap
- [ ] Budget PDF
- [ ] Impact Dashboard
- [ ] Summary Notes

### 4. Analysis Dashboards (Original Technical View)

The original accountability dashboards are still available:
- Summary
- They cut health spending while praising wellness
- Delayed 6 months and counting
- What got funded instead
- One memo beat 240 residents

### 5. All Decisions (Searchable List)

Complete searchable list of decisions with:
- Policy domain badges
- Speakers and rationales
- Vote results
- Tradeoffs discussed
- Evidence cited

---

## How Citizens Use This

### Parent Journey:
1. **Lands on Home** β†’ Sees "$28M capital vs $2.4M health"
2. **Clicks "Parent" card** β†’ Views dental screening veto story
3. **Sees map** β†’ Their kid's school is in red zone
4. **Sees veto chain** β†’ Patricia Johnson blocked it with 1 memo
5. **Key fact** β†’ 0 lawsuits in 35 states = memo has no basis
6. **Action** β†’ Knows exactly who to call and what to ask

### Advocate Journey:
1. **Lands on Home** β†’ Sees "152 days in limbo" alert
2. **Clicks "Advocate" card** β†’ Views influence radar
3. **Sees data** β†’ 92% influence from 1 memo vs 4% from 240 citizens
4. **Action** β†’ Names veto holder in public meeting

### Journalist Journey:
1. **Browses by Topic** β†’ Filters for "Public Health"
2. **Filters by Pattern** β†’ Selects "Sequential Deferral"
3. **Finds story** β†’ Dental clinic tabled 4 times with shifting excuses
4. **Clicks dashboard** β†’ Gets full analysis with benchmarks
5. **Action** β†’ Headline: "One Risk Manager Blocked 240 Residents"

---

## Data Flow

### Current (Example Data)
The app currently shows **example/placeholder data**. All numbers (e.g., $28M, 152 days, 1,200 petitions) are illustrative.

### Real Data Integration

To populate with actual Tuscaloosa data:

```bash
# Run Python analysis (auto-exports to frontend)
cd /home/developer/projects/open-navigator
source .venv/bin/activate
python examples/tuscaloosa_accountability_report.py
```

This updates: `frontend/policy-dashboards/src/data/dashboardData.js`

### Adding New Impact Stories

1. **Create component** in `src/components/ImpactDashboard.jsx`
2. **Add persona mapping** in the component logic
3. **Update HomePage** persona cards with new option

Example:
```javascript
// In ImpactDashboard.jsx
if (persona === 'business-owner' && topic === 'economic-development') {
  return <EconomicImpactStory />;
}
```

---

## Customization

### Change Metrics on Home Page

Edit `src/components/HomePage.jsx`:

```javascript
// Update "City Pulse" numbers
Capital Projects: $28M  // Change this
Health: $2.4M           // And this

// Update accountability alert
West Alabama Dental Clinic... 152 consecutive days  // Update days
```

### Add New Topics

Edit `src/components/TopicNavigation.jsx`:

```javascript
const topics = [
  { id: 'environment', label: 'Environment', sublabel: 'Parks, Recycling', color: '#2C7A7B' },
  // Add more...
];
```

### Add New Patterns

```javascript
const patterns = [
  { id: 'grant-chasing', label: 'Grant Chasing', description: 'Decisions driven by available grants' },
  // Add more...
];
```

---

## Visual Design Philosophy

### Before (Technical Audit)
- Tab navigation with abstract names ("Rhetoric Gap Monitor")
- Focus on methodology and metrics
- Audience: Data analysts

### After (Citizen Mobilization)
- Persona-first navigation ("I am a Parent")
- Focus on impact stories and actionable insights
- Audience: Parents, advocates, residents

### Key Changes

1. **Language:** "Bricks over Biological Needs" not "Capital vs Health Allocation"
2. **Visuals:** Maps and flowcharts not just bar charts
3. **Framing:** "The Veto" not "Decision Pattern Analysis"
4. **Action:** "Call Patricia Johnson" not "Observe governance trend"

---

## Technical Architecture

### Components

```
src/components/
β”œβ”€β”€ HomePage.jsx              # Landing page with personas
β”œβ”€β”€ ImpactDashboard.jsx       # Impact stories by persona
β”œβ”€β”€ TopicNavigation.jsx       # Topic/pattern/resource filters
β”œβ”€β”€ WordsVsDollars.jsx        # Original dashboards (still available)
β”œβ”€β”€ EndlessStudyLoop.jsx      
β”œβ”€β”€ WhereMoneyWent.jsx        
β”œβ”€β”€ WhoIsInCharge.jsx         
└── shared/
    β”œβ”€β”€ FilterPanel.jsx       # Legacy search/filter
    β”œβ”€β”€ DecisionCard.jsx      # Individual decision cards
    └── DashboardTile.jsx     # Tile-based navigation
```

### State Management

```javascript
viewMode: 'home' | 'impact' | 'browse' | 'dashboards' | 'decisions'
selectedPersona: 'parent' | 'advocate' | 'resident' | null
selectedTopic: string | null
selectedTopics: string[]      // Filter by domain
selectedPatterns: string[]    // Filter by pattern
selectedResources: string[]   // Filter by resource type
```

---

## Next Steps

### 1. Add Real Maps

Replace placeholder with actual Leaflet maps:

```bash
npm install leaflet react-leaflet
```

```javascript
// In DentalHealthImpact component
import { MapContainer, TileLayer, CircleMarker } from 'react-leaflet';

<MapContainer center={[33.2098, -87.5692]} zoom={12}>
  <TileLayer url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" />
  {schools.map(school => (
    <CircleMarker
      center={[school.lat, school.lng]}
      radius={school.dentalPainRate * 10}
      color={school.dentalPainRate > 0.4 ? 'red' : 'blue'}
    />
  ))}
</MapContainer>
```

### 2. Add Video Recaps

```bash
npm install react-player
```

```javascript
import ReactPlayer from 'react-player';

<ReactPlayer url="meeting-video.mp4" controls />
```

### 3. Add Budget PDFs

Link to actual budget documents:

```javascript
<a href="/budgets/fy2026-tuscaloosa.pdf" download>
  Download FY2026 Budget
</a>
```

### 4. Add Scrolling Ticker

For the "Accountability Alert":

```javascript
// Auto-scroll through multiple alerts
const alerts = [
  "Dental clinic: 152 days",
  "Water quality study: 89 days",
  // ...
];

// Rotate every 5 seconds
```

---

## Deployment

Same as before:

```bash
npm run build
# Deploy build/ folder
```

Or use GitHub Pages, Netlify, Vercel (see main README).

---

## FAQ

### Why persona-based navigation?

**Technical dashboards** appeal to researchers. **Impact stories** mobilize citizens. A parent doesn't care about "rhetoric gap metrics" - they care that their kid can't get dental care.

### What happened to the original dashboards?

Still available! Click "Analysis Dashboards" in the top menu. Power users and researchers can still access all the technical analysis.

### Can I add more personas?

Yes! Edit `HomePage.jsx` and `ImpactDashboard.jsx`. Examples:
- Business Owner β†’ Economic Development
- Teacher β†’ Classroom Resources
- Senior β†’ Healthcare Access

### How do I update the numbers?

Run the Python analysis pipeline - it auto-exports to `dashboardData.js`. Or edit that file directly for quick updates.

---

## Support

Questions? See:
- `frontend/policy-dashboards/README.md` - Technical setup
- `docs/FRONTEND_INTEGRATION_GUIDE.md` - Python integration
- `docs/ACCOUNTABILITY_DASHBOARD_STRATEGY.md` - Strategy guide

---

**The goal:** Move people from *awareness* to *action* by showing them exactly how decisions affect their lives and who's making those decisions.