Changelog

What shipped, when.

Workspace billing boundaries

  • Invoice numbers now belong to your workspace, so your sequence is yours alone — two workspaces both starting at INV-1 no longer collide, and their PDFs are stored apart.
  • Invoices are owner-only: people you invite track time and see their own, but the invoice list, the PDFs and the paid toggle stay with whoever owns the workspace and its billing details.
  • Invitation links now expire after 14 days. Re-invite anyone whose link has gone stale — it issues a fresh one.
  • Company details containing an ampersand or angle bracket now render correctly on the invoice PDF instead of breaking the layout.
  • The Jira server address must now be an https address on the public internet, and the unbilled refresh reads worklogs from a single Jira query instead of one request per ticket.

Forgotten-timer alert

  • If a timer runs past 8 hours, you get one email asking whether you're still on it — with a link to stop and trim the entry if it was left running by accident. Nothing is ever stopped automatically (overnight sessions are real work), and each timer alerts at most once.

Agents can fix entry descriptions

  • New MCP tool update-entry and REST endpoint PATCH /api/v1/entries/{entry}: an agent can now rewrite a running or finished entry's description or project in place — made for the "timer started, ticket key known only later" flow, which previously forced a session-splitting restart. Entries already billed on an invoice stay frozen. Requires the entries:write token scope.
  • This one was requested by an agent: a Claude session hit the gap mid-work and filed it through send-feedback. Every report is read — keep them coming.

Gentler billing edges

  • You now get a heads-up email a few days before your free trial ends — once, not a drip campaign. Nothing is ever deleted when a trial lapses; subscribing later brings everything back exactly as it was.
  • A failed renewal payment (expired card and the like) no longer locks you out instantly — access continues while Stripe retries the charge over the following days.

Sign in with Google

  • You can now sign in (and sign up) with your Google account — one click, no password, no email verification step. If you already have a Tallymeter account, signing in with Google on the same email links the two: both sign-in methods keep working.
  • Google-created accounts have no password; if you ever want one, use "Forgot password" to set it.

Week dividers on the tracker

  • The tracker list now shows a subtle "Week of …" divider where a new week starts, and day headers include the weekday (e.g. "Mon · 07-14") — easier to keep your bearings while scrolling back in time.
  • Fixed: clicking into an entry's project dropdown or description and clicking away without changing anything no longer triggers a pointless save.

Per-ticket totals over the API

  • New endpoint: GET /api/v1/tickets/{key}/summary returns tracked vs unbilled time (and the unbilled amount) for a single ticket key, using the same description convention the Jira sync reconciles on. Requires the reports:read token scope — groundwork for the upcoming Jira issue panel.

Jira sync for every account

  • The two-way Jira sync is no longer limited to admin accounts. Connect your own Jira Cloud in Settings (server URL, Atlassian email, API token, project key) and the Invoices page reconciles your tracker time against Jira worklogs — push unsynced entries up, pull your own worklogs down, ticket by ticket. Sync is create-only and safe to re-run; existing worklogs are never modified.
  • Connecting got friendlier too: paste your Atlassian account email and API token as-is — no more hand-encoding credentials. Existing connections were migrated automatically.
  • A new public page explains how the sync works: tallymeter.com/jira.

Faster public pages

  • The landing page, changelog, API docs and comparison pages are now fully server-rendered: they paint without loading any app JavaScript, and search engines and AI crawlers that do not run JS see the complete content.

Better-behaved MCP tools

  • Every MCP tool now carries a human-readable title and safety annotations (read-only / non-destructive / idempotent hints), so MCP clients like Claude can label Tallymeter tools properly and know which ones are safe to retry.
  • Tallymeter is being listed in the official MCP registry, so agents and MCP clients can discover the server at registry.modelcontextprotocol.io.

Agents can talk back — a feedback channel

  • AI agents (and scripts) can now file feedback directly: POST /api/v1/feedback or the send-feedback MCP tool — a capability they looked for and could not find, a bug, confusing docs. Any valid API token works, no extra scope needed.
  • Reports carry an optional category and the tool they relate to, so recurring pain points surface quickly and shape the roadmap.

Your AI agents can now file your timesheets (MCP)

  • Tallymeter is now an MCP server: point Claude Code, Claude Desktop, Cursor or any MCP-capable agent at https://tallymeter.com/mcp with an API token and it can start/stop your timer, log finished work, list projects and check what is unbilled — all scoped to your account.
  • Two new token scopes to go with it: "entries:write" (log completed time entries) and "reports:read" (unbilled totals). Pick them when creating a token in Settings → API tokens.
  • Every time entry now records where it came from — the web app, the REST API, or an agent over MCP — groundwork for per-agent breakdowns in reports.
  • Setup and tool reference live on the API docs page.

Redesigned invoice PDF

  • Invoices got a cleaner, modern layout: the amount due and due date now lead the page instead of being buried in a summary box.
  • A proper totals section (subtotal, VAT, credits, total due) sits under the line items, so the final number is unmistakable.
  • The work-detail appendix was restyled to match — lighter table, formatted amounts, and column headers that repeat on every page.
  • Generating an invoice now resets the unbilled overview — the card re-syncs for the new billing period instead of showing the pre-invoice snapshot.

Invoice quality-of-life

  • New-invoice dates now default to your current billing cycle (day after your last invoice through today) instead of month-to-date.
  • Click the Paid/Unpaid badge in the invoice history to toggle payment status — no more console commands.
  • Fixed: an invoice preview no longer disappears when you switch browser tabs and come back.
  • Manual invoice lines are kept as a draft until the invoice is generated — a reload or accidental navigation no longer wipes them.

Honest unbilled tracking

  • Time entries are now linked to the invoice that billed them — "unbilled" means exactly that, so time added into an already-invoiced period no longer slips through the cracks.
  • Invoice previews only offer unbilled time: overlapping date ranges can never double-bill.
  • The reconciliation summary now shows unbilled call-log time (with its value) alongside the Jira-tagged total, so the invoice preview total is never a surprise.

Invoices: one-click Jira sync

  • Reconcile a ticket straight from the Tracker vs Jira table: push tracked time up as a Jira worklog, or pull a Jira worklog down into the tracker.
  • Sync is idempotent — each entry is linked to its worklog, so clicking again never double-logs.
  • Tickets whose hours differ get an “Open in Jira” link instead — those are left for you to reconcile by hand.

Team workspaces

  • Invite teammates into a shared workspace — projects, clients and invoices are shared across the team.
  • Each member tracks their own time; the owner sees the whole workspace and bills pooled hours on one invoice.
  • Per-seat billing, managed by the workspace owner.

Invoices: cached Jira reconciliation

  • The Jira worklog reconciliation is now cached and no longer re-syncs every time you switch back to the tab.
  • A Refresh button pulls fresh from Jira on demand, with a "last synced" time so you know how current it is.

Send us feedback from the app

  • A feedback button on every page — tell us what to fix or build without leaving your work.

Agent-ready API

  • Token-authenticated REST API (v1): start, stop and read the timer, list projects.
  • Personal access tokens with scopes, managed from Settings — built for AI agents and scripts.
  • Machine-readable docs for agents at /openapi.json and /llms.txt, human docs at /docs/api.
  • This public changelog.

Invoices from the web app

  • Build an invoice from tracked time with a live preview of the line items.
  • Add manual lines before generating — e.g. hosting or other billed-through expenses.
  • Manual-only invoices are supported too.

Tracker quality of life

  • Flag entries worth remembering.
  • Hover an entry's duration to see the all-time total for that task.
  • Stale tabs sync themselves: props reload on refocus and poll slowly while a timer runs.
  • Favicon and proper page titles.

Per-project hourly rates

  • Projects can override your global hourly rate.
  • Reports and invoices bill each task at its project's effective rate.

Projects, billing and accounts

  • Projects: create, rename, recolor and archive from Settings.
  • Subscriptions with a 60-day free trial.
  • Email verification and password reset.

Guest mode

  • Try the tracker instantly with no account — time is kept in your browser.
  • Sign up later and your tracked time comes with you.

Initial release

  • One-click timer with entries grouped by day.
  • Reports: date-range totals, per-task breakdowns, CSV export.
  • Tracked time becomes a numbered PDF invoice with your company details.