initial commit
This commit is contained in:
134
README.md
Normal file
134
README.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user