HIGH PRIORITY: Fixes production 404 error on research inquiry form Research Inquiry API: - Add POST /api/research-inquiry endpoint for form submissions - Add admin endpoints for inquiry management (list, get, assign, respond, delete) - Create ResearchInquiry model with MongoDB integration - Add to moderation queue for human review (strategic quadrant) - Include rate limiting (5 req/min) and CSRF protection - Tested locally: endpoint responding, data saving to DB Umami Analytics (Privacy-First): - Add Docker Compose config for Umami + PostgreSQL - Create nginx reverse proxy config with SSL support - Implement privacy-first tracking script (DNT, opt-out, no cookies) - Integrate tracking across 26 public HTML pages - Exclude admin pages from tracking (privacy boundary) - Add comprehensive deployment guide (UMAMI_SETUP_GUIDE.md) - Environment variables added to .env.example Files Created (9): - src/models/ResearchInquiry.model.js - src/controllers/research.controller.js - src/routes/research.routes.js - public/js/components/umami-tracker.js - deployment-quickstart/nginx-analytics.conf - deployment-quickstart/UMAMI_SETUP_GUIDE.md - scripts/add-umami-tracking.sh - scripts/add-tracking-python.py - SESSION_SUMMARY_ANALYTICS_RESEARCH_INQUIRY.md Files Modified (29): - src/routes/index.js (research routes) - deployment-quickstart/docker-compose.yml (umami services) - deployment-quickstart/.env.example (umami config) - 26 public HTML pages (tracking script) Values Alignment: ✅ Privacy-First Design (cookie-free, DNT honored, opt-out available) ✅ Human Agency (research inquiries require human review) ✅ Data Sovereignty (self-hosted analytics, no third-party sharing) ✅ GDPR Compliance (no personal data in analytics) ✅ Transparency (open-source tools, documented setup) Testing Status: ✅ Research inquiry: Locally tested, data verified in MongoDB ⏳ Umami analytics: Pending production deployment Next Steps: 1. Deploy to production (./scripts/deploy.sh) 2. Test research form on live site 3. Deploy Umami following UMAMI_SETUP_GUIDE.md 4. Update umami-tracker.js with website ID after setup 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
50 lines
1.5 KiB
Bash
Executable file
50 lines
1.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Script to add Umami tracking to all public HTML pages
|
|
# Excludes admin pages (tracking should not be on admin interface)
|
|
|
|
set -e
|
|
|
|
# Tracking script snippet to insert
|
|
TRACKING_SCRIPT=' <!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->\n <script src="/js/components/umami-tracker.js"><\/script>'
|
|
|
|
# Find all HTML files excluding admin and koha directories
|
|
HTML_FILES=$(find public -name "*.html" -not -path "public/admin/*" -not -path "public/koha/*" | sort)
|
|
|
|
echo "========================================="
|
|
echo " Adding Umami Tracking to Public Pages"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
COUNT=0
|
|
|
|
for file in $HTML_FILES; do
|
|
# Check if tracking script already exists
|
|
if grep -q "umami-tracker.js" "$file"; then
|
|
echo "✓ Skipping $file (already has tracking)"
|
|
continue
|
|
fi
|
|
|
|
# Check if file has </head> tag
|
|
if ! grep -q "</head>" "$file"; then
|
|
echo "⚠ Skipping $file (no </head> tag found)"
|
|
continue
|
|
fi
|
|
|
|
# Insert tracking script before </head>
|
|
sed -i "s|</head>|$TRACKING_SCRIPT\n</head>|" "$file"
|
|
|
|
echo "✓ Added tracking to: $file"
|
|
((COUNT++))
|
|
done
|
|
|
|
echo ""
|
|
echo "========================================="
|
|
echo " Summary"
|
|
echo "========================================="
|
|
echo "Files updated: $COUNT"
|
|
echo "Tracking script: /js/components/umami-tracker.js"
|
|
echo ""
|
|
echo "NOTE: Update website ID in umami-tracker.js after Umami setup"
|
|
echo " Current: REPLACE_WITH_ACTUAL_WEBSITE_ID"
|
|
echo "========================================="
|