A modern user interface for timetracker - serving statistics and analytics.
- Vue 3.5.22 - Progressive JavaScript framework
- Vite 7.1.11 - Next generation frontend tooling
- Pinia 3.0.3 - Official Vue state management
- Bootstrap 5.3.8 - Modern UI framework
- Node 22.21.0 LTS - JavaScript runtime
- pnpm 10+ - Fast, disk space efficient package manager
- Node.js 22+ (LTS "Jod")
- pnpm 10+
# Install Node 22 via nvm
nvm install 22
nvm use 22
# Install pnpm
corepack enable# Automated setup (recommended)
./setup-dev.sh
# Or manual setup:
pnpm install
cp static/config.json.dist static/config.json# Start dev server with hot reload
TIMETRACKER_URL=https://timetracker.example.com pnpm dev
# Dev server will start at http://localhost:8080# PowerShell
$env:TIMETRACKER_URL="https://timetracker.example.com"; pnpm dev
# CMD
set TIMETRACKER_URL=https://timetracker.example.com && pnpm dev# Build for production
pnpm build
# Preview production build locally
pnpm preview
# Lint code
pnpm lint# Build image
docker build -t timetracker-ui .
# Run container
docker run -d -p 8080:8080 \
-e TIMETRACKER_URL=https://timetracker.example.com \
timetracker-uiEdit static/config.json (copy from static/config.json.dist):
{
"state": "sn",
"defaultHoursPerDay": 8,
"timetrackerUrl": "/tt"
}state: German state code for holiday calendardefaultHoursPerDay: Default working hourstimetrackerUrl: API endpoint (proxied to actual backend)
src/
├── assets/ # SCSS styles
├── components/ # Vue components
├── composables/ # Reusable composition functions
├── pages/ # Route pages
├── plugins/ # Vue plugins
├── router/ # Vue Router configuration
└── stores/ # Pinia state stores
- ⚡ Dev server: 250ms startup (32x faster than webpack)
- ⚡ HMR: Instant updates
- ⚡ Production build: ~6 seconds
- 📦 Optimized bundles with tree-shaking
- 🎯 Code splitting for optimal loading
See LICENSE file