Timify is a self-hosted, offline-first time tracking application inspired by Toggl. It is designed for individuals and teams who want full ownership of their data — no third-party cloud, no subscriptions, no telemetry. Every interaction is engineered to feel instant, with a target response time under 100 milliseconds, and the app remains fully usable even without an active network connection.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Aking16/timify/llms.txt
Use this file to discover all available pages before exploring further.
Key Capabilities
Projects
Organise work into colour-coded projects, each with an optional hourly rate for earnings tracking.
Time Entries
Log time manually or with a real-time running timer. Each entry supports a title, description, billable flag, and a per-entry hourly rate override.
Tags
Attach multiple colour-coded tags to any time entry for flexible cross-project categorisation.
Reports
Review tracked hours and earnings across projects and time ranges with built-in reporting powered by Recharts.
Design Goals
Timify is built around two non-negotiable principles:- Offline-first — the SQLite database lives on your own server (or laptop). There is no external API call needed for ordinary use; data is always local and immediately available.
- Sub-100 ms responses — the combination of local SQLite, React 19’s compiler optimisations, and Next.js 16’s App Router caching keeps every interaction feeling synchronous.
Internationalisation & RTL Support
Timify ships with right-to-left layout support enabled by default. The authentication layer usesbetter-auth-localization with a default locale of fa-IR (Persian/Farsi), making it immediately usable for Persian-speaking users without any additional configuration.
Tech Stack
Full dependency breakdown
Full dependency breakdown
| Layer | Technology |
|---|---|
| Framework | Next.js 16.2.6 — App Router |
| UI library | React 19.2 with React Compiler enabled |
| Styling | Tailwind CSS v4 (@tailwindcss/postcss, no tailwind.config.ts) |
| Component system | shadcn/ui v4, radix-nova style, Hugeicons |
| Database ORM | Drizzle ORM + @libsql/client (SQLite / libsql) |
| Authentication | better-auth v1.6 with email & password |
| Data-fetching | SWR v2 |
| Charts | Recharts v3 |
| Animation | Motion v12 |
| Date handling | date-fns v4 + date-fns-jalali (Jalali calendar support) |
reactCompiler: true in next.config.ts) automatically memoises components, eliminating the need for manual useMemo / useCallback calls. Next.js component caching (cacheComponents: true) further reduces re-render overhead at the framework level.
Database Schema at a Glance
The core data model consists of four application tables alongside the four better-auth system tables (user, session, account, verification):
| Table | Purpose |
|---|---|
projects | Named projects with colour, hourly rate, and active flag |
time_entries | Individual tracked intervals with start/end timestamps and duration |
tags | User-defined colour-coded labels |
time_entry_tags | Many-to-many join between time entries and tags |
created_at / updated_at timestamps stored as Unix epoch integers via Drizzle’s { mode: "timestamp" } column option.
Explore the Docs
Quickstart
Clone the repo, set up your environment, and run Timify locally in under five minutes.
Self-Hosting
Build for production, persist your SQLite database, and configure auth for your domain.
Configuration
Environment variables, auth options, and database settings explained.
Reference
Schema tables, server actions, and Drizzle migration commands.
