Implement comprehensive analytics and monitoring system with PostHog integration, complete observability stack (Prometheus, Grafana, Loki, Promtail), and CI/CD workflows for automated builds. Features: - Add PostHog telemetry integration with privacy-focused event tracking - Implement installation flow for opt-in telemetry configuration - Add telemetry management UI in admin panel with detailed transparency - Track key user events across all major features (projects, tasks, timer, etc.) Infrastructure: - Set up Prometheus for metrics collection - Configure Grafana for visualization dashboards - Integrate Loki and Promtail for log aggregation - Add separate analytics docker-compose configuration CI/CD: - Add GitHub Actions workflows for building and publishing Docker images - Implement separate dev and production build pipelines - Configure automated image publishing to registry Documentation: - Restructure documentation into organized docs/ directory - Add comprehensive guides for telemetry, analytics, and local development - Create transparency documentation for tracked events - Add CI/CD and build configuration guides Code improvements: - Integrate telemetry hooks across all route handlers - Add feature flags and configuration management - Refactor test suite for analytics functionality - Clean up root directory by moving docs and removing test artifacts Breaking changes: - Requires new environment variables for PostHog configuration - Docker compose setup now supports analytics stack Changes: 73 files changed, 955 insertions(+), 14126 deletions(-)
7.3 KiB
Local Development with Analytics
Running TimeTracker Locally with PostHog
Since analytics keys are embedded during the build process and cannot be overridden via environment variables, here's how to test PostHog locally during development.
Option 1: Temporary Local Configuration (Recommended)
Step 1: Get Your Development Keys
-
Create a PostHog account (or use existing):
- Go to https://posthog.com (or your self-hosted instance)
- Create a new project called "TimeTracker Dev"
- Copy your Project API Key (starts with
phc_)
-
Create a Sentry account (optional):
- Go to https://sentry.io
- Create a new project
- Copy your DSN
Step 2: Temporarily Edit Local File
Create a local configuration file that won't be committed:
# Create a local config override (gitignored)
cp app/config/analytics_defaults.py app/config/analytics_defaults_local.py
Edit app/config/analytics_defaults_local.py:
# Local development keys (DO NOT COMMIT)
POSTHOG_API_KEY_DEFAULT = "phc_your_dev_key_here"
POSTHOG_HOST_DEFAULT = "https://app.posthog.com"
SENTRY_DSN_DEFAULT = "https://your_dev_dsn@sentry.io/project"
SENTRY_TRACES_RATE_DEFAULT = "1.0" # 100% sampling for dev
Step 3: Update Import (Temporarily)
In app/config/__init__.py, temporarily change:
# Temporarily use local config for development
try:
from app.config.analytics_defaults_local import get_analytics_config, has_analytics_configured
except ImportError:
from app.config.analytics_defaults import get_analytics_config, has_analytics_configured
Step 4: Add to .gitignore
Ensure your local config is ignored:
echo "app/config/analytics_defaults_local.py" >> .gitignore
Step 5: Run the Application
docker-compose up -d
Or without Docker:
# Activate virtual environment
source venv/bin/activate # or venv\Scripts\activate on Windows
# Run Flask
python app.py
Step 6: Enable Telemetry
- Access http://localhost:5000
- Complete setup and enable telemetry
- Or go to Admin → Telemetry Dashboard → Enable
Step 7: Test Events
Perform actions and check PostHog:
- Login/logout
- Start/stop timer
- Create project
- Create task
Events should appear in your PostHog dashboard within seconds!
Option 2: Direct File Edit (Quick & Dirty)
For quick testing, directly edit app/config/analytics_defaults.py:
# Temporarily replace placeholders (DON'T COMMIT THIS)
POSTHOG_API_KEY_DEFAULT = "phc_your_dev_key_here" # was: "%%POSTHOG_API_KEY_PLACEHOLDER%%"
⚠️ IMPORTANT: Revert this before committing!
# Before committing, revert your changes
git checkout app/config/analytics_defaults.py
Option 3: Use Docker Build with Secrets
Build a local image with your dev keys:
# Create a local build script
cat > build-dev-local.sh <<'EOF'
#!/bin/bash
# Your dev keys
export POSTHOG_API_KEY="phc_your_dev_key"
export SENTRY_DSN="https://your_dev_dsn@sentry.io/xxx"
# Inject keys into local copy
sed -i "s|%%POSTHOG_API_KEY_PLACEHOLDER%%|${POSTHOG_API_KEY}|g" app/config/analytics_defaults.py
sed -i "s|%%SENTRY_DSN_PLACEHOLDER%%|${SENTRY_DSN}|g" app/config/analytics_defaults.py
# Build image
docker build -t timetracker:dev .
# Revert changes
git checkout app/config/analytics_defaults.py
echo "✅ Built timetracker:dev with your dev keys"
EOF
chmod +x build-dev-local.sh
./build-dev-local.sh
Then run:
docker run -p 5000:5000 timetracker:dev
Option 4: Development Branch Build
Push to a development branch and let GitHub Actions build with dev keys:
-
Add development secrets to GitHub:
POSTHOG_API_KEY_DEV SENTRY_DSN_DEV -
Push to
developbranch - workflow builds with keys -
Pull and run:
docker pull ghcr.io/YOUR_USERNAME/timetracker:develop docker run -p 5000:5000 ghcr.io/YOUR_USERNAME/timetracker:develop
Verifying It Works
Check PostHog Dashboard
- Go to PostHog dashboard
- Navigate to "Events" or "Live Events"
- Perform actions in TimeTracker
- Events should appear immediately:
auth.logintimer.startedproject.created- etc.
Check Application Logs
# Docker
docker-compose logs app | grep PostHog
# Local
tail -f logs/app.jsonl | grep PostHog
Should see:
PostHog product analytics initialized (host: https://app.posthog.com)
Check Local Event Logs
# All events logged locally regardless of PostHog
tail -f logs/app.jsonl | grep event_type
Testing Telemetry Toggle
Enable Telemetry
- Login as admin
- Go to http://localhost:5000/admin/telemetry
- Click "Enable Telemetry"
- Perform actions
- Check PostHog for events
Disable Telemetry
- Go to http://localhost:5000/admin/telemetry
- Click "Disable Telemetry"
- Perform actions
- No events should appear in PostHog (but still logged locally)
Best Practices
For Daily Development
Use Option 1 (local config file):
- ✅ Keys stay out of git
- ✅ Easy to toggle
- ✅ Revert friendly
For Testing Official Build Process
Use Option 3 (Docker build):
- ✅ Simulates production
- ✅ Tests full flow
- ✅ Clean separation
For Quick Testing
Use Option 2 (direct edit):
- ✅ Fast
- ⚠️ Easy to accidentally commit
- ⚠️ Need to remember to revert
Common Issues
Events Not Appearing in PostHog
Check 1: Is telemetry enabled?
cat data/installation.json | grep telemetry_enabled
# Should show: "telemetry_enabled": true
Check 2: Is PostHog initialized?
docker-compose logs app | grep "PostHog product analytics initialized"
Check 3: Is the API key valid?
- Go to PostHog project settings
- Verify API key is correct
- Check it's not revoked
Check 4: Network connectivity
# From inside Docker container
docker-compose exec app curl -I https://app.posthog.com
# Should return 200 OK
"Module not found" Errors
Make sure you're in the right directory and dependencies are installed:
# Check location
pwd # Should be in TimeTracker root
# Install dependencies
pip install -r requirements.txt
Keys Visible in Git
If you accidentally committed keys:
# Remove from git history (if not pushed)
git reset --soft HEAD~1
git checkout app/config/analytics_defaults.py
# If already pushed, rotate the keys immediately!
# Then force push (careful!)
git push --force
Clean Up
Before Committing
# Make sure no dev keys are in the file
git diff app/config/analytics_defaults.py
# Should only show %%PLACEHOLDER%% values
# If you see actual keys, revert:
git checkout app/config/analytics_defaults.py
Remove Local Config
rm app/config/analytics_defaults_local.py
Summary
Recommended workflow:
- Create
analytics_defaults_local.pywith your dev keys - Add to
.gitignore - Modify
__init__.pyto import local version - Run application normally
- Enable telemetry in admin dashboard
- Test events in PostHog
Remember:
- ✅ Never commit real API keys
- ✅ Use separate PostHog project for development
- ✅ Test both enabled and disabled states
- ✅ Revert local changes before committing
Need help? Check:
- PostHog docs: https://posthog.com/docs
- TimeTracker telemetry docs:
docs/all_tracked_events.md