A Progressive Web App for tracking and managing meter readings for electricity, water, gas, and more. Built with Vue 3, fully client-side by default - your data stays with you!
- Dynamic Meter Types: Create custom types (Electricity, Water, Gas, Heating Oil, Solar, etc.)
- Unlimited Meters: Manage any number of meters per type
- Detailed Readings: Record values with timestamps and notes
- Simple and fast
- No configuration required
- Works offline
- Data stays on this device only
- Automatic synchronization
- Secure authentication (Authentik, Keycloak, Auth0, Google, etc.)
- Available across devices
- No manual file management
- Works on all devices (iOS, Android, Desktop)
Workflow:
1. Settings → Cloud Sync → "Sign in"
2. Log in with OAuth provider (e.g., Authentik)
3. Data syncs automatically
4. Sign in on another device → Data instantly available!
- Automatic login when cloud sync session is active
- Dashboard as default start page
- Seamless user experience
- Warning on decreasing meter values
- Prevents accidental incorrect entries
- Confirmation dialog for unusual values
- Interactive charts with ECharts
- Touch-optimized for mobile
- Zoom & Pan support
- History display
- JSON Export: Complete backup
- CSV Export: For Excel/LibreOffice
- JSON Import: Restore backup
- Installable on desktop & mobile
- Works offline
- Native app experience
For production deployment with OAuth and cloud sync, configure these environment variables:
| Variable | Description | Required |
|---|---|---|
OIDC_ISSUER |
OAuth provider URL (e.g., https://auth.example.com) |
Yes |
OIDC_CLIENT_ID |
OAuth client ID | Yes |
OIDC_CLIENT_SECRET |
OAuth client secret | Yes |
REDIS_HOST |
Redis server hostname | Yes |
REDIS_PORT |
Redis port (default: 6379) |
No |
REDIS_DB |
Redis database number (default: 0) |
No |
See docs/OAUTH_SETUP.md for provider-specific setup instructions and backend/README.md for detailed backend configuration.
Images are automatically built via GitHub Actions:
ghcr.io/kallistox/stathaus:latest- Frontend (nginx + Vue PWA)ghcr.io/kallistox/stathaus-backend:latest- Backend (Node.js + Express)
Available tags:
latest- Latest main branchv1.x.x- Semantic version tagsmain-abc123- Commit SHA
- Docker Desktop (for Mac)
- VSCode (recommended)
- Clone repository (or open folder)
cd stathaus- Start Docker container
docker-compose up- Open app
http://localhost:5173
The app automatically reloads on code changes (Hot Reload)!
# Build production image
docker build -t stathaus:latest .
# Start container
docker run -p 8080:80 stathaus:latestApp available at http://localhost:8080
npm installnpm run devnpm run buildnpm run previewFrontend:
- Framework: Vue 3 (Composition API)
- Build Tool: Vite
- State Management: Pinia
- Routing: Vue Router
- Styling: Tailwind CSS
- Charts: Apache ECharts
- PWA: vite-plugin-pwa
- Storage: IndexedDB + File System Access API + Cloud Sync
Backend:
- Runtime: Node.js 20 (Alpine)
- Framework: Express.js
- Authentication: openid-client (OAuth2/OIDC)
- Database: Redis (ioredis client)
- Validation: Joi
- Logging: Winston
- Security: Helmet
- Deployment: Multi-stage Docker builds
- OAuth2/OIDC Cloud Sync
- Auto-Login
- Dashboard Entrypoint
- Continuous Meter Validation
- Conflict Resolution
- Logo Header
- PWA Icons
- Dark Mode
- PDF Reports
- Dashboard Widgets
- Cost Calculation (Tariff management)
- Usage Predictions (Consumption forecasting)
- Meter Grouping (Group by location/property)
MIT License - use it however you want!
PRs are welcome! For questions or issues, open an issue.
Happy Metering!