TimeTracker Pro
A modern, feature-rich Progressive Web App (PWA) for time tracking built with React, TypeScript, and Tailwind CSS. Installable on desktop and mobile devices with full offline support. Perfect for freelancers, consultants, and professionals who need to track time, manage projects, and generate invoices.
๐ Table of Contents
For Users:
For Developers:
- Development Setup
- Technical Architecture
- Authentication & Storage
- Development Workflow
- Documentation
Screenshots:
Additional:
๐ฏ What is TimeTracker Pro?
TimeTracker Pro is a professional time tracking application that helps you monitor where your time goes throughout the workday. Unlike complex enterprise tools, TimeTracker Pro focuses on simplicity while providing powerful features for freelancers, consultants, and professionals.
Core Concept:
- Start your day - Click one button to begin tracking
- Create tasks - Add tasks as you work on different projects
- End your day - Review your summary and archive the day
- Export data - Generate invoices, CSV reports, or JSON exports
Works Your Way:
- No Account Required - Start tracking immediately with local storage
- Optional Cloud Sync - Sign in to sync across devices
- Offline First - Full functionality without internet connection
- Install as App - Works like a native app on desktop and mobile
โจ Key Features
Time Tracking Essentials
- Daily Time Tracking - Start/stop your workday with clear boundaries
- Task Management - Create, edit, and delete tasks with real-time duration tracking
- Intuitive Time Selection - Native browser time inputs for familiar, accessible time entry
- Rich Text Support - Add detailed notes with GitHub Flavored Markdown (tables, lists, formatting)
- Automatic Calculations - Duration and revenue calculated automatically
- Archive System - Permanent record of all completed work days
Organization Tools
- Projects & Clients - Organize work by project with hourly rates
- Custom Categories - Flexible categorization with custom colors
- Billable vs Non-Billable - Track which time can be invoiced
- Visual Organization - Color-coded categories for quick identification
Professional Features
- Revenue Tracking - Automatic earnings calculation based on hourly rates
- Invoice Generation - Export invoice-ready data filtered by client and date range
- Multiple Export Formats - CSV, JSON, and invoice formats
- CSV Import - Import existing time data from other tools
- Print Support - Print-friendly archive views for physical records
- Weekly Report - AI-generated work summaries from archived days (standup, client, or retrospective tone); works in both guest and authenticated modes; errors surface specific, actionable guidance (rate limit vs. quota exhaustion vs. overload vs. key issues)
Progressive Web App
- Install Like Native - Add to home screen or applications folder
- Full Offline Support - Continue working without internet
- Mobile Optimized - Touch-friendly with bottom navigation
- Auto-Updates - New versions install seamlessly
- Cross-Platform - Works on Windows, Mac, Linux, iOS, and Android
- Freelancers - Track billable hours and generate client invoices
- Consultants - Organize time by project and client with revenue tracking
- Remote Workers - Submit detailed timesheets to employers
- Students - Track study time and project work efficiently
- Small Businesses - Monitor project time and profitability
- Anyone - Who needs professional time tracking without the complexity
๐ Quick Start
Option 1: Use Online (No installation required)
- Visit the hosted version (if available) or run locally
- Click "Start Day" to begin tracking
- Add tasks throughout your day
- Click "End Day" and archive when finished
Option 2: Install Locally
# Clone the repository git clone https://github.com/AdamJ/TimeTrackerPro.git # Navigate to project directory cd TimeTrackerPro # Install dependencies npm install # Start the application npm run dev
The application will be available at http://localhost:8080
First Time Setup:
- Open the app in your browser
- Click "Start Day" to begin tracking time
- (Optional) Click "Sign In" to enable cloud sync across devices
- (Optional) Set up projects and categories for better organization
That's it! No complex configuration required.
๐ฑ How to Use
Daily Workflow
Morning:
- Click "Start Day" button to begin tracking
- The timer starts automatically
Throughout the Day: 3. Click "New Task" to create a task 4. Fill in task details:
- Title (required) - Brief description of the work
- Description (optional) - Detailed notes with markdown support
- Project (optional) - Assign to a client/project
- Category (optional) - Categorize the work type
- Task duration calculates automatically
- Create new tasks as you switch between different work items
Evening: 7. Click "End Day" when you're finished working 8. Review your day summary (total time, revenue, task breakdown) 9. Click "Post Time to Archive" to save permanently
Ongoing:
- View archived days in the Archive page
- Manage projects and rates in Archive โ Projects
- Customize categories in the Categories page
- Export data via Archive โ Export
Project Management
Setting Up Projects:
- Navigate to Archive page
- Click Projects button
- Click Add Project
- Enter project details:
- Project name
- Client name
- Hourly rate
- Mark as billable/non-billable
- Assign projects to tasks when creating them
Benefits:
- Automatic revenue calculation based on hourly rates
- Filter archives by project
- Generate client-specific invoices
- Track time and earnings per project
Category Management
Customizing Categories:
- Navigate to Categories page from the main menu
- View default categories or create new ones
- Click Add Category to create custom categories
- Customize each category:
- Category name
- Color (for visual identification)
- Billable flag (for invoice generation)
Default Categories:
- Meeting, Development, Design, Research
- Administration, Testing, Documentation
- Client Communication
Data Export & Import
Exporting Data:
- Navigate to Archive page
- Click Export button
- Choose export format:
- CSV - For Excel, Google Sheets, or accounting software
- JSON - For programmatic access or backup
- Invoice - Client-ready invoice format
- Filter by date range, project, or client
- Download the file
Importing Data:
-
Prepare a CSV file using the template format (see CSV Templates)
-
Use the import functionality (coming soon) or test scripts:
Markdown in Task Descriptions
Task descriptions support GitHub Flavored Markdown (GFM) for rich formatting:
Supported Features:
- Bold and italic text
- Lists (bulleted and numbered)
- Task lists with checkboxes
- Tables
Strikethrough- Links
- Code blocks
- Headings
- Automatic line breaks
Example:
## Client Meeting Notes **Attendees:** John, Sarah, Mike **Topics Discussed:** 1. Q1 project timeline 2. Budget approval 3. Design mockups **Action Items:** - [ ] Send meeting minutes - [ ] Update project roadmap - [ ] Schedule follow-up **Next Meeting:** 2024-02-15
This renders beautifully in the task view with proper formatting and styling.
๐ฒ Progressive Web App
Installing as an App
Desktop (Chrome/Edge/Firefox):
- Open TimeTracker Pro in your browser
- Look for the install icon (โ) in the address bar
- Click "Install" when prompted
- The app opens in its own window
- Find it in your Applications folder or Start menu
iOS (Safari):
- Open TimeTracker Pro in Safari
- Tap the Share button (โกโ)
- Scroll and tap "Add to Home Screen"
- Tap "Add" to confirm
- Toggle "Open as Web App" to "On"
- Find the app icon on your home screen
Android (Chrome):
- Open TimeTracker Pro in Chrome
- Tap the menu (โฎ) in the top-right
- Tap "Install app" or "Add to Home screen"
- Follow the prompts
- Find the app in your app drawer
PWA Features
Offline Capability:
- Continue tracking time without internet
- All features work offline
- Data syncs automatically when connection restored
- Service worker caches app for instant loading
Mobile Optimized:
- Bottom navigation for easy thumb access
- 44ร44px minimum touch targets (accessibility compliant)
- Safe area support for notched devices (iPhone X+)
- Responsive design adapts to any screen size
- Landscape and portrait orientations supported
Seamless Updates:
- New versions install automatically
- Update notification prompts you to refresh
- No data loss during updates
- Version management handled transparently
Native-Like Experience:
- Standalone window without browser UI
- Professional app icon
- Splash screen on launch
- Fast, responsive interactions
๐ง Development Setup
Prerequisites
- Node.js 18+ and npm
- Git for version control
- (Optional) Supabase account for cloud sync features
Installation
# Clone the repository git clone https://github.com/AdamJ/TimeTrackerPro.git # Navigate to project directory cd TimeTrackerPro # Install dependencies npm install
Environment Setup (Optional)
Cloud sync and authentication require Supabase credentials:
# Copy environment template cp .env.example .env # Edit .env and add your credentials # VITE_SUPABASE_URL=https://your-project.supabase.co # VITE_SUPABASE_ANON_KEY=your_anon_key_here
Getting Supabase Credentials:
- Create a free account at supabase.com
- Create a new project
- Go to Settings โ API
- Copy the Project URL and anon/public key
- Paste into your
.envfile
โ ๏ธ Security Note: Never commit .env to version control!
Development Server
# Start development server npm run dev # Open in browser # http://localhost:8080
Available Commands
# Development npm run dev # Start dev server (localhost:8080) npm run build # Build for production npm run build:dev # Build with development mode npm run preview # Preview production build # Code Quality npm run lint # Run ESLint for code quality npm run test # Run Vitest unit tests # PWA Screenshots npm run screenshots:install # Install Playwright browsers (first time) npm run screenshots # Capture PWA screenshots (headless) npm run screenshots:headed # Capture screenshots with visible browser # CSV Import Testing npm run test-csv-import # Test standard CSV import npm run test-full-import # Test full CSV import functionality npm run test-error-handling # Test CSV error handling
๐ Technical Architecture
Technology Stack
Core Framework:
- React 18 - Modern UI framework with hooks and concurrent features
- TypeScript 5.8 - Type safety and enhanced developer experience
- Vite 5 - Lightning-fast build tool with SWC for optimal performance
UI & Styling:
- Tailwind CSS 3 - Utility-first CSS framework
- @tailwindcss/typography - Beautiful markdown rendering
- shadcn/ui - Accessible component library built on Radix UI
- Radix UI - Unstyled, accessible component primitives
- Radix Icons - Icon library (primary)
- Lucide React - Icon library (fallback)
State & Data:
- React Context API - Global state management
- React Hook Form - Form state management with validation
- Zod - Schema validation for forms and data
- Local Storage - Browser storage for offline data persistence
- Supabase (optional) - PostgreSQL database and authentication
PWA & Performance:
- Vite PWA Plugin - Service worker and manifest generation
- Workbox - Advanced service worker caching strategies
- React Router 6 - Client-side routing with lazy loading
- Code Splitting - All pages lazy loaded for optimal performance
Development & Testing:
- Playwright - Automated screenshot generation and E2E testing
- Vitest - Unit testing framework
- @testing-library/react - Component testing utilities
- ESLint 9 - Code quality and style enforcement
Architecture Patterns
1. Context-Driven Architecture
App.tsx
โโโ AuthProvider (authentication state)
โโโ TimeTrackingProvider (time tracking state)
โโโ OfflineProvider (offline queue)
โโโ Pages & Components
2. Service Layer Pattern
Data persistence is abstracted through a service interface with two implementations:
interface DataService { loadCurrentDay(): Promise<DayData> saveCurrentDay(data: DayData): Promise<void> loadArchivedDays(): Promise<ArchivedDay[]> saveArchivedDays(days: ArchivedDay[]): Promise<void> // ... other methods } // Factory pattern selects implementation const service = createDataService(isAuthenticated) // Returns: LocalStorageService OR SupabaseService
Benefits:
- Seamless switching between localStorage and Supabase
- No code changes when user signs in/out
- Easy to test with mock implementations
- Clean separation of concerns
3. Custom Hooks Pattern
Complex logic extracted into reusable hooks:
useAuth()- Authentication state and methodsuseTimeTracking()- Time tracking operationsuseOffline()- Offline queue management
4. Component Architecture
src/
โโโ components/
โ โโโ ui/ # Base components (49 files)
โ โโโ Feature components # Domain-specific components
โ โโโ Layout components # Navigation, menus
โโโ pages/ # Route-level components (lazy loaded)
โโโ contexts/ # Global state providers
โโโ hooks/ # Custom React hooks
โโโ services/ # Data persistence layer
โโโ lib/ # Shared utilities
Data Flow
Standard Operation Flow:
User Action
โ
Component Event Handler
โ
Context Method (useTimeTracking)
โ
State Update (React setState)
โ
UI Re-render
โ
(On critical events only)
โ
DataService.save()
โ
localStorage OR Supabase
Critical Save Events:
- Day end (
postDay()) - Window close (
beforeunload) - Manual sync button (
forceSyncToDatabase())
Why Manual Sync?
- Optimized for single-device usage
- Reduces unnecessary database calls
- Prevents rate limiting issues
- User controls when data is saved
Progressive Web App Implementation
Service Worker Strategy:
// Caching Strategies NetworkFirst: Supabase API calls (fresh data preferred) CacheFirst: Google Fonts (static assets) Precache: App shell (HTML, CSS, JS, icons)
Manifest Configuration:
- App name, icons, theme colors
- Display mode: standalone
- Orientation: any
- Icons: 8 sizes (72px to 512px)
- Screenshots: Desktop (1920ร1080) and Mobile (750ร1334)
Offline Queue:
- Actions queued when offline
- Automatic sync when connection restored
- Conflict resolution for data updates
- User notification of sync status
Project Structure
TimeTrackerPro/
โโโ src/
โ โโโ components/ # UI Components
โ โ โโโ ui/ # Base components (49 files)
โ โ โโโ ArchiveEditDialog.tsx
โ โ โโโ ArchiveFilter.tsx
โ โ โโโ ArchiveItem.tsx
โ โ โโโ AuthDialog.tsx
โ โ โโโ CategoryManagement.tsx
โ โ โโโ DaySummary.tsx
โ โ โโโ DeleteConfirmationDialog.tsx
โ โ โโโ ExportDialog.tsx
โ โ โโโ InstallPrompt.tsx
โ โ โโโ MarkdownDisplay.tsx
โ โ โโโ MobileNav.tsx
โ โ โโโ Navigation.tsx
โ โ โโโ NewTaskForm.tsx
โ โ โโโ ProjectManagement.tsx
โ โ โโโ StartDayDialog.tsx
โ โ โโโ SyncStatus.tsx
โ โ โโโ TaskEditDialog.tsx
โ โ โโโ TaskItem.tsx
โ โ โโโ UpdateNotification.tsx
โ โ โโโ UserMenu.tsx
โ โโโ config/ # Configuration
โ โ โโโ categories.ts # Default categories
โ โ โโโ projects.ts # Default projects
โ โโโ contexts/ # React Context Providers
โ โ โโโ AuthContext.tsx
โ โ โโโ TimeTrackingContext.tsx
โ โ โโโ OfflineContext.tsx
โ โโโ hooks/ # Custom Hooks
โ โ โโโ useAuth.tsx
โ โ โโโ useTimeTracking.tsx
โ โ โโโ useOffline.tsx
โ โ โโโ use-toast.tsx
โ โโโ lib/ # Utilities
โ โ โโโ supabase.ts # Supabase client
โ โ โโโ utils.ts # Helper functions
โ โโโ pages/ # Route Components
โ โ โโโ Index.tsx # Home / Time tracker
โ โ โโโ Archive.tsx # Archived days
โ โ โโโ ProjectList.tsx # Project management
โ โ โโโ Categories.tsx # Category management
โ โ โโโ Report.tsx # AI weekly summary generator
โ โ โโโ Settings.tsx # App settings
โ โ โโโ NotFound.tsx # 404 page
โ โโโ services/ # Data Layer
โ โ โโโ dataService.ts # Persistence abstraction
โ โโโ utils/ # Utilities
โ โ โโโ timeUtil.ts # Time formatting
โ โ โโโ reportUtils.ts # Report grouping, formatting, and DayRecord adapter
โ โโโ App.tsx # Root component
โ โโโ main.tsx # Entry point
โโโ public/
โ โโโ icons/ # PWA icons (8 sizes)
โ โโโ screenshots/ # PWA screenshots
โ โโโ pwa.css # PWA styles
โ โโโ print.css # Print styles
โโโ docs/ # Documentation
โโโ tests/ # Test files
โโโ supabase/ # Database schema
โโโ package.json
โโโ vite.config.ts # Vite + PWA config
โโโ tailwind.config.ts # Tailwind config
โโโ tsconfig.json # TypeScript config
Code Conventions
Critical Requirements:
- Indentation: Tabs only (never spaces), 2-space width display
- Quotes: Double quotes (
"") always, never single quotes - Imports: Use
@/alias for src imports (never relative paths like../../)
Naming Conventions:
- Components: PascalCase (e.g.,
TaskItem.tsx) - Hooks: camelCase with
useprefix (e.g.,useAuth.tsx) - Utilities: camelCase (e.g.,
timeUtil.ts) - Constants: UPPER_SNAKE_CASE (e.g.,
STORAGE_KEYS)
TypeScript Usage:
- Loose type checking enabled (
noImplicitAny: false) - Use types where helpful, not strictly enforced
- Interface definitions in context files
Styling:
- Follow Radix UI design system
- Use shadcn/ui components (don't create custom equivalents)
- Use Tailwind utility classes
- Avoid custom colors (use theme variables)
See CLAUDE.md for comprehensive development guidelines.
๐ Authentication & Storage
Storage Modes
Guest Mode (Default):
- No account required
- All data stored in browser localStorage
- Full functionality available
- Data persists between sessions
- Limited to single device
Authenticated Mode (Optional):
- Sign in with email/password via Supabase
- Data synced to PostgreSQL database
- Access from multiple devices
- Automatic data migration from localStorage
- Cloud backup of all data
How Data Storage Works
Data Persistence Strategy:
TimeTracker Pro uses a manual sync approach optimized for single-device usage:
- In-Memory First - All changes update React state immediately
- Critical Event Saves - Data persists only on:
- Day end (when you archive the day)
- Window close (before you navigate away)
- Manual sync (clicking the sync button)
- No Auto-Save - Prevents unnecessary database calls and rate limiting
Why Manual Sync?
- Reduces API calls (cost-effective)
- Prevents rate limiting issues
- Optimized for single-device usage
- User controls when data is saved
- Faster UI interactions
Data Migration:
When you sign in, your localStorage data automatically migrates to Supabase:
- Compares timestamps to prevent overwriting newer data
- Merges local and cloud data intelligently
- Preserves all archived days and tasks
- No data loss during migration
When you sign out, Supabase data syncs back to localStorage for offline access.
Setting Up Cloud Sync
1. Create Supabase Project:
1. Visit https://supabase.com
2. Create free account
3. Create new project
4. Wait for project to initialize (~2 minutes)2. Get API Credentials:
1. Go to Project Settings โ API 2. Copy Project URL 3. Copy anon/public key
3. Configure Environment:
# Copy template cp .env.example .env # Edit .env file VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_ANON_KEY=your_anon_key_here
4. Set Up Database:
# Database schema is in supabase/migrations/ # See docs/SCHEMA_COMPATIBILITY.md for details
5. Restart Development Server:
Authentication Flow
Sign Up:
- Click "Sign In" in user menu (top-right)
- Click "Sign Up" tab
- Enter email and password
- Verify email (check inbox)
- Sign in with credentials
Sign In:
- Click "Sign In" in user menu
- Enter email and password
- Data automatically migrates from localStorage
Sign Out:
- Click user menu (top-right)
- Click "Sign Out"
- Data syncs back to localStorage
- Continue using in guest mode
Security
Password Requirements:
- Minimum 8 characters
- Handled securely by Supabase Auth
Data Security:
- All API calls over HTTPS
- Row-level security (RLS) enabled on Supabase
- Users can only access their own data
- Passwords hashed and salted by Supabase
- No sensitive data stored in localStorage
Best Practices:
- Never commit
.envfile to version control - Keep Supabase keys secure
- Use strong passwords
- Enable MFA on Supabase account (recommended)
See docs/AUTHENTICATION.md for detailed setup. See docs/SECURITY.md for security guidelines.
๐ง Development Workflow
Getting Started
# Install dependencies npm install # Start development server npm run dev
Development Process
Before Making Changes:
- Read relevant context file (
TimeTrackingContext.tsxorAuthContext.tsx) - Check existing patterns in similar components
- Review CLAUDE.md for conventions
Making Changes:
- Follow existing patterns (don't reinvent)
- Use tabs and double quotes (enforced)
- Use
@/import alias - Test in both guest and authenticated modes
Before Committing:
# Run linter (must pass) npm run lint # Run build (must succeed) npm run build # Manual testing required # Test your changes in browser
Git Workflow
Branch Naming:
feature/your-feature-name fix/bug-description refactor/area-name
Commit Messages:
# Format: <type>: <description> git commit -m "feat: add billable category option" git commit -m "fix: resolve data recovery issue" git commit -m "refactor: improve data service caching" # Types: feat, fix, refactor, docs, style, test, chore
Pull Requests:
- Title:
[TimeTrackerPro] Descriptive Title - Clear description of changes
- Wait for CI checks to pass
- See agents/pull_requests.md for full guidelines
Testing
Manual Testing Checklist:
- Test in guest mode (no authentication)
- Test in authenticated mode
- Test on mobile viewport (DevTools)
- Test data persistence (refresh page)
- Test export/import functionality
- Verify no console errors
- Check responsive design
PWA Testing:
- Service worker registers (DevTools โ Application โ Service Workers)
- App works offline (DevTools โ Network โ Offline)
- Install prompt appears (wait 30 seconds)
- App installs correctly
- Bottom navigation on mobile viewports
- Update notification works
Automated Testing:
# Unit tests npm run test # CSV import tests npm run test-csv-import npm run test-full-import npm run test-error-handling # PWA screenshots npm run screenshots:install # First time only npm run screenshots # Capture screenshots
Customizing Markdown Styles
TimeTracker Pro uses @tailwindcss/typography for markdown rendering. Three ways to customize:
1. Utility Classes (Recommended):
<MarkdownDisplay content={text} className="prose-p:text-blue-500 prose-headings:underline" />
2. Global Theme Overrides:
// tailwind.config.ts export default { theme: { extend: { typography: { DEFAULT: { css: { color: '#333', a: { color: '#3182ce', '&:hover': { color: '#2c5282' }, }, }, }, }, }, }, }
3. Component-Specific Overrides:
// src/components/MarkdownDisplay.tsx <ReactMarkdown components={{ a: ({ href, children }) => ( <a href={href} className="custom-link-style"> {children} </a> ), }} > {content} </ReactMarkdown>
Adding Features
Adding a New Component:
// 1. Create component in src/components/ // 2. Follow existing patterns // 3. Use shadcn/ui components // 4. Import in parent component import { MyFeature } from "@/components/MyFeature";
Adding a New Page:
// 1. Create page in src/pages/ // 2. Add lazy load in App.tsx const MyPage = lazy(() => import("./pages/MyPage")); // 3. Add route <Route path="/mypage" element={<MyPage />} /> // 4. Add navigation link in Navigation.tsx
Adding Context Method:
// 1. Define in context interface // 2. Implement in provider // 3. Export in context value // 4. Use in components via hook
๐ Documentation
For Users
- This README - Complete user and developer guide
- CSV Templates - Import/export format documentation
- Screenshots - PWA screenshot documentation
For Developers
Essential Reading:
- CLAUDE.md - START HERE - Comprehensive codebase guide
- AGENTS.md - Quick agent instructions and workflows
- Styles - UI/UX style guidelines
- Pull Requests - PR creation and review rules
Technical Documentation:
- Authentication - Auth setup and configuration
- Data Persistence - Persistence implementation
- Schema Compatibility - Database schema history
- Migration Guide - Supabase data migration
- Security - Security configuration and practices
Additional Resources:
- Features - Feature requests and improvement notes
- Chatbot Notes - AI interaction development records
- Lovable README - Project origin and history
External References
- Radix UI - Component primitives and design system
- shadcn/ui - Component library documentation
- Tailwind CSS - CSS framework documentation
- React Router - Routing documentation
- Supabase Docs - Backend documentation
- Vite - Build tool documentation
๐ Changelog
For a detailed list of changes, new features, and bug fixes, see CHANGELOG.md.
Recent Updates:
- Improved Weekly Report error messages to distinguish Gemini API failure modes (rate limit, quota, overload, key issues)
- Fixed Weekly Report for authenticated users (data now sourced from Supabase, not localStorage only)
- Native HTML5 time inputs for intuitive, accessible time selection
- Consistent UX with date inputs across all dialogs
- Mobile-optimized with browser-native time pickers
- Full keyboard navigation and screen reader support
๐ฑ iOS Screenshots
| View | Image |
|---|---|
| Dashboard | |
| Time Entry - Markdown | |
| Time Entry - Preview | |
| Active Tasks | |
| Day Ended | |
| Archive |
๐ License
This project is open source and available under the MIT License.
๐ Credits
- This project originally began as a Lovable prompt - Learn more
- Badges from markdown-badges
- UI components from shadcn/ui built on Radix UI
- Icons from Radix Icons and Lucide
- Built with React, Vite, and Supabase
๐ Ready to Get Started?
For Users:
- Clone the repository or visit the hosted version
- Click "Start Day" to begin tracking
- Add tasks throughout your day
- Review and archive when finished
For Developers:
- Clone the repository:
git clone https://github.com/AdamJ/TimeTrackerPro.git - Install dependencies:
npm install - Start developing:
npm run dev - Read CLAUDE.md for comprehensive guidelines
See where your hours really go with TimeTracker Pro.