Skip to content

Commit f2859cb

Browse files
jasdumasclaude
andcommitted
Add Program Impact Dashboard with tabbed interface and Data Governance Toolkit preview
- Implement comprehensive Program Impact Dashboard tool with: * Tabbed interface (Impact Overview, Statistical Impact, Community Context) * Multiple outcome metrics per program type with reactive dropdown * CausalImpact Bayesian analysis for statistical significance testing * Live Connecticut Census data integration via tidycensus API * Interactive geographic mapping with service area visualization * Enhanced plotly charts with download functionality * Professional UI with custom styling and brand colors - Update GitHub Actions workflow: * Add program-impact-dashboard deployment configuration * Upgrade R version to 4.5.2 for CausalImpact compatibility * Include required packages: CausalImpact, tidycensus, zoo, bsts * Add Census API key handling for secure deployment - Update documentation: * Add Program Impact Dashboard to README.md and index.html * Include technical stack additions (CausalImpact, tidycensus) * Document new tool features and capabilities - Add Data Governance Toolkit preview: * Coming soon tile in index.html with data privacy focus * Features: data inventory, privacy policy generator, consent management * Professional styling for preview state 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
1 parent e6da6bf commit f2859cb

File tree

5 files changed

+908
-192
lines changed

5 files changed

+908
-192
lines changed

.github/workflows/deploy-shinyapps.yml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ on:
1313
- capital-campaign-forecaster
1414
- board-packet-generator
1515
- grant-research-assistant
16+
- program-impact-dashboard
1617
push:
1718
branches: [ main ]
1819
paths:
1920
- 'donor-retention-calculator/**'
2021
- 'capital-campaign-forecaster/**'
2122
- 'board-packet-generator/**'
2223
- 'grant-research-assistant/**'
24+
- 'program-impact-dashboard/**'
2325

2426
jobs:
2527
deploy-shinyapps:
@@ -32,7 +34,7 @@ jobs:
3234
- name: Set up R
3335
uses: r-lib/actions/setup-r@v2
3436
with:
35-
r-version: '4.4.1'
37+
r-version: '4.5.2'
3638

3739
- name: Install system dependencies
3840
run: |
@@ -41,7 +43,7 @@ jobs:
4143
4244
- name: Install R dependencies
4345
run: |
44-
R -e "install.packages(c('rsconnect', 'shiny', 'bslib', 'dplyr', 'lubridate', 'DT', 'shinyjs', 'tidyr', 'plotly', 'jsonlite', 'scales', 'leaflet', 'httr2', 'tidygeocoder'))"
46+
R -e "install.packages(c('rsconnect', 'shiny', 'bslib', 'dplyr', 'lubridate', 'DT', 'shinyjs', 'tidyr', 'plotly', 'jsonlite', 'scales', 'leaflet', 'httr2', 'tidygeocoder', 'tidycensus', 'CausalImpact', 'zoo', 'bsts', 'base64enc', 'purrr'))"
4547
4648
- name: Determine app to deploy
4749
id: determine-app
@@ -58,6 +60,8 @@ jobs:
5860
echo "app_name=board-packet-generator" >> $GITHUB_OUTPUT
5961
elif git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -q "grant-research-assistant/"; then
6062
echo "app_name=grant-research-assistant" >> $GITHUB_OUTPUT
63+
elif git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -q "program-impact-dashboard/"; then
64+
echo "app_name=program-impact-dashboard" >> $GITHUB_OUTPUT
6165
else
6266
echo "app_name=donor-retention-calculator" >> $GITHUB_OUTPUT
6367
fi
@@ -72,6 +76,12 @@ jobs:
7276
run: |
7377
R -e "rsconnect::setAccountInfo(name='${{ secrets.SHINYAPPS_ACCOUNT }}', token='${{ secrets.SHINYAPPS_TOKEN }}', secret='${{ secrets.SHINYAPPS_SECRET }}')"
7478
79+
- name: Set up Census API key for program-impact-dashboard
80+
if: steps.determine-app.outputs.app_name == 'program-impact-dashboard'
81+
run: |
82+
cd ${{ steps.determine-app.outputs.app_name }}
83+
echo "CENSUS_API_KEY=${{ secrets.CENSUS_API_KEY }}" > .Renviron
84+
7585
- name: Deploy to shinyapps.io
7686
run: |
7787
cd ${{ steps.determine-app.outputs.app_name }}
@@ -85,6 +95,8 @@ jobs:
8595
APP_NAME="board-packet-generator"
8696
elif [ "${{ steps.determine-app.outputs.app_name }}" = "grant-research-assistant" ]; then
8797
APP_NAME="grant-research-assistant"
98+
elif [ "${{ steps.determine-app.outputs.app_name }}" = "program-impact-dashboard" ]; then
99+
APP_NAME="program-impact-dashboard"
88100
fi
89101
90102
R -e "rsconnect::deployApp(appName='$APP_NAME', account='${{ secrets.SHINYAPPS_ACCOUNT }}', forceUpdate=TRUE)"

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ Stop paying expensive monthly subscriptions for generic software. These tools ar
3737
- Animated scenario sliders for interactive what-if analysis
3838
- Risk assessment with strategic recommendations
3939

40+
### [📈 Program Impact Dashboard](https://dalyanalytics.shinyapps.io/program-impact-dashboard/)
41+
- Measure program effectiveness with causal impact analysis
42+
- Bayesian structural time-series modeling (CausalImpact)
43+
- Live Census data integration for Connecticut communities
44+
- Multiple outcome metrics per program type
45+
- Interactive geographic mapping of service areas
46+
- Statistical significance testing with confidence intervals
47+
4048
## 🌟 Try All Tools
4149
**👉 [Launch Tool Suite](https://dalyanalytics.github.io/nonprofit-analytics-tools/)**
4250

@@ -54,6 +62,8 @@ These tools also serve as examples of the kinds of custom solutions I can build
5462
- **Plotly** for interactive visualizations
5563
- **DT** for data tables
5664
- **Leaflet** for interactive maps
65+
- **CausalImpact** for Bayesian causal inference
66+
- **tidycensus** for live demographic data
5767

5868
## 📈 Want Custom Solutions?
5969

index.html

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,19 @@
9696
font-size: 0.85rem;
9797
margin-bottom: 1rem;
9898
}
99+
.badge.coming-soon {
100+
background: #ffc107;
101+
color: #333;
102+
}
103+
.btn.disabled {
104+
background: #6c757d;
105+
color: white;
106+
cursor: not-allowed;
107+
transform: none;
108+
}
109+
.btn.disabled:hover {
110+
transform: none;
111+
}
99112
footer {
100113
margin-top: 3rem;
101114
padding-top: 2rem;
@@ -170,6 +183,34 @@ <h2>📈 Capital Campaign Forecaster</h2>
170183
</ul>
171184
<a href="https://dalyanalytics.shinyapps.io/capital-campaign-forecaster/" class="btn" target="_blank">Launch Tool →</a>
172185
</div>
186+
187+
<!-- Program Impact Dashboard -->
188+
<div class="tool-card">
189+
<span class="badge">✅ Live Now</span>
190+
<h2>📊 Program Impact Dashboard</h2>
191+
<p>Measure program effectiveness with causal impact analysis and statistical significance testing.</p>
192+
<ul>
193+
<li>Bayesian causal inference (CausalImpact)</li>
194+
<li>Live Census data for CT communities</li>
195+
<li>Multiple outcome metrics per program</li>
196+
<li>Interactive geographic mapping</li>
197+
</ul>
198+
<a href="https://dalyanalytics.shinyapps.io/program-impact-dashboard/" class="btn" target="_blank">Launch Tool →</a>
199+
</div>
200+
201+
<!-- Data Governance Toolkit - Coming Soon -->
202+
<div class="tool-card">
203+
<span class="badge coming-soon">🚧 Coming Soon</span>
204+
<h2>🔐 Data Governance Toolkit</h2>
205+
<p>Comprehensive data management and privacy compliance tools for nonprofit organizations.</p>
206+
<ul>
207+
<li>Data inventory and classification</li>
208+
<li>Privacy policy generator</li>
209+
<li>Donor consent management</li>
210+
<li>Data retention scheduling</li>
211+
</ul>
212+
<div class="btn disabled">In Development</div>
213+
</div>
173214
</div>
174215

175216
<footer>

0 commit comments

Comments
 (0)