Files
timmal/README.md
2025-12-10 01:56:30 +01:00

135 lines
4.1 KiB
Markdown

# Tímmál
**A privacy-first work time tracking application**
Track time spent on tickets, generate Excel-compatible reports, and streamline your work report workflow. Built for developers and consultants who need accurate time tracking with data integrity guarantees.
## Features
- **Smart Timer**: Start/stop timers on tasks with automatic persistence across page refreshes and browser crashes
- **Ticket Organization**: Link tasks to ticket IDs (PROJECT-123 format) with version tracking and categorization
- **Manual Time Entry**: Add forgotten work sessions with automatic overlap detection
- **Excel-Compatible Reports**: Generate time grid reports showing percentages of your workday (0.0-1.0 format)
- **Privacy-First**: OAuth authentication with Pocketbase backend - your data stays yours
- **Data Integrity**: Automatic validation prevents overlapping entries, enforces duration limits, and ensures accurate time data
## Tech Stack
- **[Nuxt 4](https://nuxt.com/)** - Vue 3 meta-framework with auto-imports and file-based routing
- **[Nuxt UI](https://ui.nuxt.com/)** - Component library with Nord-inspired color scheme
- **[Pocketbase](https://pocketbase.io/)** - Backend-as-a-Service for auth, database (SQLite), and real-time updates
- **[Pinia](https://pinia.vuejs.org/)** - State management
- **[TypeScript](https://www.typescriptlang.org/)** - Type safety throughout
- **[Vitest](https://vitest.dev/)** - Unit testing with happy-dom
- **[Playwright](https://playwright.dev/)** - E2E testing
## Setup
### Prerequisites
- Node.js 22+
- pnpm 10.23.0
- Nix with devenv (for Pocketbase management)
### Installation
```bash
# Install dependencies
pnpm install
```
### Pocketbase Setup
Pocketbase runs automatically via devenv (nix shell):
```bash
# Enter development environment
nix develop
# Pocketbase will be available at:
# - API: http://localhost:8090
# - Admin UI: http://localhost:8090/_/
# - Data stored in: pb_data/
```
Configure OAuth providers (Google, Microsoft) in the admin UI.
## Development
Start the development server:
```bash
pnpm dev
```
The application will be available at `http://localhost:3000`.
### Available Commands
```bash
# Development
pnpm dev # Start dev server
pnpm build # Build for production
pnpm preview # Preview production build
# Code Quality
pnpm lint # Run ESLint
pnpm typecheck # Run TypeScript type checking
# Testing
pnpm test # Run unit tests
pnpm test:watch # Run tests in watch mode
pnpm test:coverage # Run tests with coverage report
pnpm test:e2e # Run E2E tests
pnpm test:e2e:ui # Run E2E tests in UI mode
```
## Project Structure
```
timmal/
├── app/ # Nuxt 4 app directory
│ ├── app.config.ts # Nuxt UI configuration
│ ├── app.vue # Root layout
│ ├── components/ # Vue components (auto-imported)
│ ├── composables/ # Vue composables (auto-imported)
│ ├── layouts/ # Nuxt layouts
│ ├── middleware/ # Route middleware
│ ├── pages/ # File-based routing
│ ├── server/ # Server API routes
│ ├── stores/ # Pinia stores (auto-imported)
│ └── utils/ # Utility functions (auto-imported)
├── pb_data/ # Pocketbase data (gitignored)
└── nix/ # Nix development environment
```
## Configuration
### ESLint
ESLint is configured with Nuxt's recommended settings plus stylistic rules:
- `commaDangle: 'never'`
- `braceStyle: '1tbs'`
### TypeScript
Strict mode is enabled. Type checking runs via `pnpm typecheck`.
### Nuxt UI Theme
Color scheme configured in `app/app.config.ts`:
- Primary: green
- Neutral: slate
## Deployment
The application is designed to be deployed with:
- **Frontend**: Cloudflare Pages (or any static hosting)
- **Backend**: Pocketbase on a VPS or cloud provider
Check out the [Nuxt deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
## License
This repository is under the AGPL-3.0 licence.