<div align="center">

# &#9203; ZeroClock

**Your time. Your data. Your rules.**

A local-first time tracker for freelancers, artists, and anyone who believes the value of their labor belongs to them - not a cloud platform.

![Tauri](https://img.shields.io/badge/Tauri_v2-24C8D8?style=for-the-badge&logo=tauri&logoColor=white)
![Vue](https://img.shields.io/badge/Vue_3-4FC08D?style=for-the-badge&logo=vuedotjs&logoColor=white)
![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)
![Rust](https://img.shields.io/badge/Rust-000000?style=for-the-badge&logo=rust&logoColor=white)
![SQLite](https://img.shields.io/badge/SQLite-003B57?style=for-the-badge&logo=sqlite&logoColor=white)

![WCAG AAA](https://img.shields.io/badge/WCAG_2.2-AAA-228B22?style=for-the-badge)
![No Cloud](https://img.shields.io/badge/100%25_Local-No_Cloud-8B0000?style=for-the-badge)
![No Telemetry](https://img.shields.io/badge/Telemetry-None-4B0082?style=for-the-badge)
![License](https://img.shields.io/badge/License-CC0_1.0-blue?style=for-the-badge)

*No subscriptions. No surveillance. No corporate middleman between you and your work.*

</div>

---

## What is ZeroClock?

ZeroClock is a desktop time tracker that runs entirely on your machine. Every second you track, every invoice you generate, every report you pull - it all lives in a single SQLite database on your own hard drive. No accounts. No sign-ups. No data harvested. No monthly rent for the privilege of knowing how you spend your own time.

It was built for the people who do the work: freelancers juggling five clients, illustrators billing by the hour, developers who want transparency in how their days are spent, and small collectives who refuse to feed their labor data into someone else's growth metrics.

---

## 🎯 Core features

### &#9202; Timer

A big, readable timer front and center. Start it, pause it, stop it. Switch projects mid-session without losing a second. The two-column layout keeps the timer always visible while you scroll through recent sessions.

- **Start / Stop / Pause / Resume** with a single click or a global keyboard shortcut
- **Quick-switch projects** mid-session without stopping the timer
- **Idle detection** - ZeroClock notices when you step away and asks what to do with that time
- **App tracking** - optionally detect which applications are running and associate time with projects
- **Favorites** - save project presets as reorderable chips for one-click tracking
- **Mini timer** - a tiny, always-on-top floating window so the timer is never out of sight

### 📋 Entries

Every tracked session becomes an entry you fully control.

- **Filter and search** by project, client, date range, billable status, or tags
- **Bulk operations** - select multiple entries to change projects, toggle billable, or delete
- **Split entries** - break a long session into multiple entries when you forgot to switch
- **Duplicate entries** - repeat yesterday's work with one click
- **Bulk add** - create several entries at once for retroactive logging
- **Entry templates** - save and reuse common entry patterns
- **Pagination** with smooth loading for thousands of entries

### 👥 Clients and projects

Organize your work however makes sense for you - not how a product manager decided you should.

- **Clients** with name, email, company, and address
- **Projects** with hourly rates, budgets, color coding, and task breakdowns
- **Cascade awareness** - before deleting a client or project, see exactly what depends on it
- **Archive projects** without losing data
- **Group projects by client** or view them flat

### 📊 Reports

Understand where your time goes. Spot the clients who drain you. Find the projects that sustain you.

- **Hours breakdown** - bar charts, tables, daily/weekly/monthly summaries
- **Profitability analysis** - compare hours tracked against budgets, see who pays fairly
- **Expense reports** - track costs alongside time for a complete picture
- **Work patterns** - heatmaps and weekday distributions revealing your natural rhythms
- **Export to CSV or PDF** for sharing with clients or keeping your own records

### 🧾 Invoicing

Generate invoices from your tracked time without leaving the app.

- **Multiple templates** - choose from several professional invoice designs
- **Invoice pipeline** - track invoices through Draft, Sent, Paid, and Overdue stages
- **Automatic line items** from tracked time entries
- **Recurring invoices** - set up repeating invoices on a schedule
- **Payment tracking** - record partial or full payments against invoices
- **Overdue detection** with badge notifications
- **PDF export** - download polished invoices ready to send
- **Business identity** - your name, address, and logo on every invoice

### 💰 Expenses

Time is not the only thing worth tracking.

- **Log expenses** against projects with amounts, dates, and categories
- **Receipt attachments** with a built-in lightbox viewer
- **Link to invoices** - mark expenses as invoiced so nothing slips through
- **Filter by date range** with quick presets (this week, last month, this quarter)

---

## 📅 Views

### Calendar

See your tracked time laid out in a familiar day / week / month calendar grid. Import `.ics` files from external calendars to see everything in one place. Click any slot to create an entry.

### Timesheet

A weekly grid for structured time entry, row by row. Lock completed weeks to prevent accidental edits. Copy last week's structure when your schedule repeats. Add rows for new project-task combinations and fill in hours per day.

### Dashboard

A bird's-eye view of your work: today's hours, weekly progress toward goals, recent entries with one-click replay, and a getting-started checklist for new users.

---

## 🔧 Customization

ZeroClock adapts to you. Not the other way around.

| Setting | Options |
|---------|---------|
| Theme | Dark, Light, or follow your OS |
| Accent color | Amber, Blue, Green, Rose, Purple, Teal |
| UI font | 15+ Google Fonts with live preview |
| Timer font | 16 curated monospace fonts |
| UI scale | 80% to 150% zoom |
| Sound effects | Configurable events, volume, and synthesis mode |
| Reduce motion | System, Always, or Never |
| Dyslexia-friendly mode | OpenDyslexic font throughout the interface |

### System tray

- **Close to tray** - the window disappears but ZeroClock keeps running silently
- **Minimize to tray** - minimize hides to the system tray instead of the taskbar
- Left-click the tray icon to bring the window back

### Keyboard shortcuts

- **Global hotkeys** - toggle the timer or show the app from anywhere on your desktop
- **In-app shortcuts** - navigate, start/stop, and manage entries without touching the mouse
- **Customizable** - remap shortcuts to whatever feels natural

---

## 💾 Data ownership

This is the part that matters. Your data never leaves your machine.

- **Single SQLite file** - your entire history in one portable database
- **Auto-backup** - scheduled backups to a folder you choose, with configurable frequency and retention
- **Manual export** - full JSON export of every table, every entry, every setting
- **CSV export** - pull reports into a spreadsheet whenever you need to
- **JSON import** - bring data in from other tools
- **No cloud sync** - because "we got hacked" emails should not be part of your time-tracking experience
- **No accounts** - nothing to delete because nothing was ever collected

Your labor, your records, your hard drive.

---

## ♿ Accessibility

ZeroClock is built to be usable by everyone. Not as an afterthought, but as a foundation.

### WCAG 2.2 AAA compliance

- **7:1 contrast ratios** on all text throughout the interface
- **Focus indicators** visible on every interactive element
- **Semantic HTML** with proper landmarks, headings, and ARIA roles
- **Screen reader support** - live regions announce timer state changes, meaningful labels on every control
- **Tooltips on every button** - hover or focus any icon button for a description of what it does, with proper `aria-describedby` linking and Escape to dismiss
- **Keyboard navigation** - every feature is reachable without a mouse
- **Reduce motion** - respect your OS preference or override it manually
- **Dyslexia-friendly mode** - switch the entire interface to OpenDyslexic with one toggle
- **UI scaling** - zoom the interface from 80% to 150% without breaking layouts

Accessibility is not a feature. It is a baseline.

---

## 📦 Downloads

Grab the latest release from the [releases page](https://git.lashman.live/lashman/zeroclock/releases).

| Platform | File | Notes |
|----------|------|-------|
| Windows x64 | `zeroclock-v*.exe` | Portable executable, no installer needed |
| Linux x86_64 | `ZeroClock-x86_64.AppImage` | Portable AppImage, no installation needed |

### Linux AppImage

Download, make executable, and run:

```bash
chmod +x ZeroClock-x86_64.AppImage
./ZeroClock-x86_64.AppImage
```

- Built on Ubuntu 24.04 (glibc 2.39) - compatible with most distros from mid-2024 onwards
- Portable - data is stored next to the AppImage file
- Automatically installs a `.desktop` file and icon on first run
- Wayland and X11 supported

**Troubleshooting:**

If you see a black or blank window, try:

```bash
WEBKIT_DISABLE_DMABUF_RENDERER=0 ./ZeroClock-x86_64.AppImage
```

If that does not help:

```bash
WEBKIT_DISABLE_COMPOSITING_MODE=1 ./ZeroClock-x86_64.AppImage
```

NixOS users should run via nixGL:

```bash
nixGL appimage-run ./ZeroClock-x86_64.AppImage
```

---

## 🚀 Building from source

### Prerequisites

- [Node.js](https://nodejs.org/) 18+
- [Rust](https://rustup.rs/) (latest stable)
- Platform-specific Tauri dependencies - see the [Tauri prerequisites guide](https://v2.tauri.app/start/prerequisites/)

### Build and run

```bash
# Clone the repository
git clone https://git.lashman.live/lashman/zeroclock.git
cd zeroclock

# Install frontend dependencies
npm install

# Run in development mode
npx tauri dev

# Build for production
npx tauri build
```

### Building the Linux AppImage

To build a portable AppImage with broad compatibility, use the Docker build script:

```bash
./build-appimage.sh
```

This builds inside an Ubuntu 24.04 container and outputs to `dist-appimage/`. Requires Docker.

The database is created automatically on first launch in the same directory as the executable.

---

## 🏗️ Architecture

```
zeroclock/
  src/                   # Vue 3 frontend
    components/          # Reusable UI components
    composables/         # Shared composition functions
    directives/          # Vue directives (tooltips, etc.)
    stores/              # Pinia state management
    utils/               # Helpers, formatters, audio
    views/               # Page-level components
    styles/              # Tailwind CSS and theme variables
  src-tauri/             # Rust backend
    src/
      commands.rs        # Tauri IPC command handlers
      database.rs        # SQLite schema and migrations
      lib.rs             # App setup, tray, plugins
      seed.rs            # Sample data generator
```

The frontend and backend communicate through Tauri's IPC bridge. The frontend never touches the filesystem directly - all data flows through typed Rust commands that validate, query, and persist to SQLite.

---

## 🤝 Contributing

ZeroClock is built in the open. If you find it useful, you are welcome to help make it better.

- **Report bugs** by opening an issue
- **Suggest features** - especially if they help workers track and own their time more effectively
- **Submit patches** - fork, branch, and open a pull request
- **Improve accessibility** - if something does not work with your assistive technology, that is a bug

Good-faith contributions from people who care about the work are always welcome.

---

## 📝 License

ZeroClock is released under [CC0 1.0 Universal](LICENSE) - dedicated to the public domain. No permissions needed. No conditions. No strings. Take it, use it, change it, sell it, give it away. The work belongs to everyone.

---

<div align="center">

*Built for the people who do the work.*

*No venture capital. No growth metrics. No exit strategy.*

*Just a tool that respects your time.*

</div>
