Skip to main content

Basic work hour tracking tool for freelancers

Project description

freetracker

A command-line application for freelancers to track working hours per client/project.

Features

  • Client Management: Add, edit, delete, and list clients
  • Project Management: Create projects with hours quoted and due dates
  • Time Tracking: Start/stop timers with active timer notifications, manual time entry
  • Tab Completion: Auto-complete client and project names while typing
  • Progress Reports: Visual progress bars showing project completion
  • Data Export: Export reports as CSV or view in terminal
  • Beautiful UI: Rich terminal formatting with tables and progress bars
  • Local Storage: All data stored locally using TinyDB

Installation

Prerequisites

  • Python 3.12 or higher
  • uv package manager

Setup

  1. Clone the repository:
git clone https://github.com/tensorturtle/freetracker.git
cd freetracker
  1. Install dependencies:
uv sync

Usage

Getting Started

  1. Add a client:
uv run freetracker client add
  1. Add a project for the client:
uv run freetracker project add
  1. Start tracking time:
uv run freetracker start
  1. Stop tracking time:
uv run freetracker stop
  1. View reports:
uv run freetracker report

Client Management

# Add a new client
uv run freetracker client add

# List all clients
uv run freetracker client list

# Edit a client
uv run freetracker client edit

# Delete a client (and all its projects)
uv run freetracker client delete

Project Management

# Add a new project
uv run freetracker project add

# List all projects
uv run freetracker project list

# List projects for a specific client
uv run freetracker project list --client <client_id>

# Edit a project
uv run freetracker project edit

# Delete a project
uv run freetracker project delete

Time Tracking

# Start timer for a project
uv run freetracker start

# Stop the active timer
uv run freetracker stop

# Check timer status
uv run freetracker status

# Manually add hours (if you forgot to start timer)
uv run freetracker add

# View time entry log
uv run freetracker log

# View time entries for specific project
uv run freetracker log "Project Name"

Reports and Export

# Generate visual report with progress bars
uv run freetracker report

# Export report as CSV
uv run freetracker report --csv

# Export to specific file
uv run freetracker report --csv --output my_report.csv

Data Structure

  • Clients: Simple name-based client records
  • Projects: Each project has:
    • Name
    • Hours quoted (integer)
    • Due date
    • Associated client
  • Time Entries:
    • Automatic tracking of start/stop times
    • Manual time entry for forgotten sessions

Pro Tips

  1. Use names, not IDs: When adding projects or starting timers, just enter the client/project name
  2. Tab completion: Press Tab to auto-complete client and project names when prompted
  3. Active timer notification: The app shows your active timer on every command
  4. Progress visualization: The report command shows beautiful progress bars
  5. Data location: All data is stored in ~/.freetracker/db.json (or custom path via FREETRACKER_DB_PATH)
  6. Case insensitive: Client and project name matching is case insensitive

Configuration

Database Location

By default, freetracker stores its database at ~/.freetracker/db.json. You can customize this location using the FREETRACKER_DB_PATH environment variable:

# Use a custom database location
export FREETRACKER_DB_PATH=/path/to/your/database.json
uv run freetracker client list

# Use a temporary database for testing
export FREETRACKER_DB_PATH=/tmp/freetracker_test.json
uv run freetracker client add

# Use cloud storage (e.g., Dropbox)
export FREETRACKER_DB_PATH="$HOME/Dropbox/freetracker/db.json"
uv run freetracker start

This is useful for:

  • Development: Use a separate test database without affecting production data
  • Cloud Sync: Store your database in Dropbox, Google Drive, or other cloud storage
  • Multiple Profiles: Maintain separate databases for different contexts

Technology Stack

  • Package Manager: uv - Fast Python package manager
  • CLI Framework: Click - Command-line interface creation
  • UI Library: Rich - Beautiful terminal formatting
  • Database: TinyDB - Lightweight document database

Development

See CLAUDE.md for detailed development instructions and project structure.

License

MIT License - Copyright (c) 2025 Jason (Janghyup) Sohn

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

freetracker-0.1.0.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freetracker-0.1.0-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file freetracker-0.1.0.tar.gz.

File metadata

  • Download URL: freetracker-0.1.0.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.13

File hashes

Hashes for freetracker-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0f40170e52ab7b02bd5d703027fcfa4a6b6384fa2175b2af32c6bdefd55279ce
MD5 365afc3a01fc16e4eea383c6c65a520c
BLAKE2b-256 e84a7f38b95440af434aab70343e984808890c025651c05c0ba77eb0c838ba5e

See more details on using hashes here.

File details

Details for the file freetracker-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for freetracker-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 282b4d1deeff75c769d74e8e7a0383828de69fb3394e28f3527f4cb255eebf65
MD5 74c65670b23bc9bdfaae7899eed2fd82
BLAKE2b-256 9ad50c3fe1e7de656b962baa7f95c65c78c952e55b9369be123bb6d0aa1ab148

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page