{"id":37230909,"url":"https://github.com/plattnum/where-did-the-time-go","last_synced_at":"2026-01-15T03:40:50.625Z","repository":{"id":331830011,"uuid":"1125727221","full_name":"plattnum/where-did-the-time-go","owner":"plattnum","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-11T08:34:51.000Z","size":1055,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T14:24:21.984Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plattnum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"plattnum"}},"created_at":"2025-12-31T08:39:10.000Z","updated_at":"2026-01-11T08:34:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/plattnum/where-did-the-time-go","commit_stats":null,"previous_names":["plattnum/where-did-the-time-go"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/plattnum/where-did-the-time-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plattnum%2Fwhere-did-the-time-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plattnum%2Fwhere-did-the-time-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plattnum%2Fwhere-did-the-time-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plattnum%2Fwhere-did-the-time-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plattnum","download_url":"https://codeload.github.com/plattnum/where-did-the-time-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plattnum%2Fwhere-did-the-time-go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442318,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-15T03:40:49.999Z","updated_at":"2026-01-15T03:40:50.616Z","avatar_url":"https://github.com/plattnum.png","language":"TypeScript","funding_links":["https://buymeacoffee.com/plattnum","https://www.buymeacoffee.com/plattnum"],"categories":[],"sub_categories":[],"readme":"# Where Did The Time Go?\n\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/plattnum)\n\n**A visual time tracking plugin for Obsidian.** An infinite-scroll timeline to log your hours, hierarchical reports to see where they went, and one-click invoicing to bill for them. Your data stays in your vault as plain markdown tables - no cloud, no sync, no subscriptions.\n\n## Why This Exists\n\nI got tired of:\n- SaaS time trackers that take 10 seconds to load\n- Monthly subscriptions for what amounts to a fancy spreadsheet\n- Google Sheets (it works, but it's not fun)\n- Apps that include \"team collaboration features\" when I just work alone\n- Syncing conflicts, server outages, and \"we're updating our privacy policy\" emails\n\nI wanted something **simple**: click, enter time, done. Data lives in my vault as plain markdown. Works offline. Loads instantly. No account required. No telemetry. No upsells.\n\nIf you need Gantt charts, resource allocation, task managment, or enterprise reporting - this isn't for you. If you just want to track where your hours went so you can bill clients or finally answer \"wait, what did I actually do yesterday?\".\n\n**No timer feature.** I don't track my work by hitting start/stop on a stopwatch - it just doesn't fit how I work. I enter my time after the fact. If you need a running timer, this plugin isn't for you.\n\n**Not a task manager.** This is purely time tracking - logging hours after the fact. My tasks live in external systems (Jira, Linear, GitHub Issues, etc). I didn't want to integrate with Obsidian Tasks or other task plugins that scan your entire vault. This plugin stays in its lane: you tell it what you worked on and when, it writes that to a table. That's it.\n\n## Features\n\n### ∞ Timeline\nVisual day-by-day timeline that scrolls infinitely in both directions. Drag to create entries, drag to move them, resize to adjust duration. Click to edit.\n\n\u003cimg src=\"docs/infinite-timeline-view-sshot.png\" width=\"50%\" alt=\"Timeline View\"\u003e\n\n### Simple Data Model\n- **Clients** - Who you're billing (or \"Personal\" if you're tracking for yourself)\n- **Projects** - What you're working on\n- **Activities** - Type of work (dev, meeting, admin, etc.)\n- **Linked Notes** - Optional wikilink to related notes in your vault\n\nThat's it. No tags, labels, priorities, estimates, story points, or whatever else PM tools have invented to justify their existence.\n\n### Plain Markdown Storage\nYour data lives in `TimeTracking/YYYY-MM.md` files as markdown tables:\n\n```markdown\n| Start            | End              | Description     | Client | Project | Activity | Notes |\n| :--------------- | :--------------- | :-------------- | :----- | :------ | :------- | :---- |\n| 2024-01-15 09:00 | 2024-01-15 10:30 | Morning standup | acme   | webapp  | meeting  |       |\n| 2024-01-15 10:30 | 2024-01-15 12:00 | Fix login bug   | acme   | webapp  | dev      |       |\n```\n\nOne file per month. Human-readable. Git-friendly. Portable - if this plugin dies, your data doesn't.\n\n### Reports View\nSee where your time actually went. Select a date range and get a hierarchical breakdown: **Client → Project → Activity**, with hours and billable amounts at each level. Expand any level to drill down. Export to CSV or JSON when your accountant asks for timesheets.\n\n\u003cimg src=\"docs/time-report-view-sshot.png\" width=\"50%\" alt=\"Reports View\"\u003e\n\n### Invoice Generation\nGenerate markdown invoices directly from the Reports view. Each client row shows an **Invoice** button when there's billable time. Click it to:\n\n1. Enter invoice number, issue date, and payment terms\n2. Due date auto-calculates based on payment terms\n3. Generate a markdown invoice with:\n   - Your \"Bill From\" info (configured in Settings)\n   - Client's billing address\n   - Line items grouped by project (hours × rate)\n   - Subtotal and total in the client's currency\n\nInvoices are saved to your invoice folder (default: `TimeTracking/Invoices/`) as `{invoice-number}.md`. The generated markdown renders nicely in Obsidian and can be exported to PDF.\n\n### Overlap Detection\nWon't let you accidentally double-book yourself. The timeline shows conflicts in real-time.\n\n### Midnight-Spanning Entries\nWorking late? Entries can cross midnight without breaking. The plugin handles multi-day entries correctly.\n\n## Installation\n\n### From Obsidian Community Plugins *(pending approval)*\nOnce approved:\n1. Open Settings → Community Plugins\n2. Search for \"Where Did The Time Go\"\n3. Install and enable\n\n### Manual Installation\n1. Download `main.js`, `manifest.json`, and `styles.css` from the latest release\n2. Create folder: `\u003cvault\u003e/.obsidian/plugins/where-did-the-time-go/`\n3. Copy the files into that folder\n4. Enable the plugin in Settings → Community Plugins\n\n### Using BRAT\n1. Install the [BRAT plugin](https://github.com/TfTHacker/obsidian42-brat)\n2. Open BRAT settings → Add Beta Plugin\n3. Enter: `https://github.com/plattnum/where-did-the-time-go`\n4. Enable the plugin in Settings → Community Plugins\n\n## Usage\n\nAfter enabling, you'll see two icons in the left sidebar:\n\n\u003cimg src=\"docs/left-sidebar-icons.png\" width=\"60\" alt=\"Sidebar Icons\"\u003e\n\nClick to open the **∞ Timeline** or **Reports** view.\n\n### Creating Entries\n- **Click + drag** on the timeline to create an entry\n- **Click** the + button in the toolbar\n- **Command palette** (`Ctrl/Cmd + P`) → \"Create Time Entry\"\n- Fill in the details, hit Save\n\n### Editing Entries\n- **Click** an entry card to edit\n- **Drag** entries to move them\n- **Drag edges** to resize (change duration)\n\n### Entry Modal Fields\n\n\u003cimg src=\"docs/new-time-entry-modal.png\" width=\"50%\" alt=\"Entry Modal\"\u003e\n\nWhen creating or editing an entry, you'll see these fields:\n\n| Field | Description |\n|-------|-------------|\n| **Start** | Date and time the entry begins. 🧲 magnet button appears if there's an adjacent entry - click to snap to previous entry's end time. |\n| **Duration** | Calculated automatically from start/end. You can also type directly (e.g., \"1h 30m\", \"90m\", \"1.5h\") and end time updates. |\n| **End** | Date and time the entry ends. 🧲 magnet button snaps to next entry's start time if one exists. |\n| **Client** | Required. Who you're billing. Configure clients in Settings. |\n| **Project** | Optional. Filtered to show only projects belonging to the selected client. |\n| **Activity** | Optional. Type of work (dev, meeting, etc.). Filtered by client. |\n| **Description** | What you worked on. Character limit configurable in Settings. |\n| **Linked Note** | Optional path to a related note. Use \"Browse\" to search existing notes or \"Create New\" to make one. |\n\n**Overlap detection**: If your entry overlaps with an existing one, the conflicting times highlight red and Save is disabled until you fix it.\n\n### Command Palette\n- `Create Time Entry` - Open entry form directly (pre-fills current time)\n- `Open Timeline` - Open the timeline view\n- `Open Reports` - Open the reports view\n\n## Settings\n\n| Setting | Description |\n|---------|-------------|\n| **Time tracking folder** | Where to store monthly files (default: `TimeTracking`) |\n| **Hide tables in preview** | Wrap tables in `%%` comments. If you open a monthly file directly, Obsidian won't try to render a large table - improves performance for busy months |\n| **Hour height** | Pixels per hour in timeline (200-240) |\n| **Day start/end hour** | Visible range in timeline |\n| **Week start** | Monday or Sunday |\n| **24-hour format** | Toggle 24h vs 12h time display |\n| **Description max length** | Character limit for descriptions (0 = unlimited) |\n| **Bill From name** | Your name or business name for invoices |\n| **Bill From address** | Your billing address (multi-line) for invoices |\n| **Invoice folder** | Where generated invoices are saved (default: `TimeTracking/Invoices`) |\n\n## Clients, Projects \u0026 Activities\n\nConfigure in Settings:\n\n- **Clients** - Each has a name, color, hourly rate, currency, billing address, and payment terms (for invoicing)\n- **Projects** - Belong to a client, can override the client's hourly rate\n- **Activities** - Work types (dev, meeting, review, etc.) per client\n\nColors appear as left-border indicators on timeline entries.\n\n## Data Format\n\nMonthly files follow this structure:\n\n```markdown\n%%\n⚠️ WARNING: This file is managed by the \"Where Did The Time Go\" plugin.\nDo not edit manually - your changes may be overwritten.\n%%\n\n# 2024-01\n\n| Start            | End              | Description | Client | Project | Activity | Notes |\n| :--------------- | :--------------- | :---------- | :----- | :------ | :------- | :---- |\n| 2024-01-15 09:00 | 2024-01-15 10:30 | Standup     | acme   | webapp  | meeting  |       |\n```\n\nThe `%%` markers hide the table in Obsidian's reading view (configurable in settings).\n\n## FAQ\n\n**Q: Can I edit the markdown files directly?**\nA: You can, but the plugin may overwrite your changes. Use the Timeline view.\n\n**Q: Does it sync across devices?**\nA: It's just .md files. If your vault syncs (Obsidian Sync, iCloud, Dropbox, Git), your time entries sync.\n\n**Q: Can I query entries with Dataview?**\nA: No. Dataview doesn't parse markdown tables. Your data is portable plain text, but you'll use the Reports view for analysis.\n\n**Q: What happens if I uninstall the plugin?**\nA: Your data stays. It's just markdown files.\n\n## Development\n\nThe repo includes a test vault at `vaults/where-did-the-time-go-vault/` with:\n- 3 fictitious clients (Acme Rocket Supplies, Umbrella Corporation, Weyland-Yutani)\n- 9 projects and 18 activities\n- 74 test time entries across Nov-Dec 2025\n- Edge cases: midnight-spanning entries, month boundaries, rapid 15-min entries\n\nRun `npm run dev` to build in watch mode - output auto-copies to the test vault. See `docs/DEVELOPMENT.md` for details.\n\n## Contributing\n\nThis is my side project - something I hack on when I have spare time. Not accepting pull requests for now, but feel free to open issues for bugs or feature ideas.\n\n## License\n\nMIT - Do whatever you want with it.\n\n## Support\n\nIf this plugin saves you time, consider buying me a coffee.\n\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/plattnum)\n\n---\n\n*Built because I needed it, shared because maybe you do too.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplattnum%2Fwhere-did-the-time-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplattnum%2Fwhere-did-the-time-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplattnum%2Fwhere-did-the-time-go/lists"}