Changelog

What shipped, when.

A board where the estimate and the hours are the same record

  • Tallymeter now has a kanban board. Tickets carry an estimate, time is logged straight against them, and the header answers the question a client asks daily: how many tickets and how many hours are left. Remaining is the estimate minus the time logged, clamped per ticket so one overrun cannot cancel out another ticket's real remaining work, and tickets with no estimate are counted as tickets but never quietly as zero hours.
  • Drag a card and the column reorders under the cursor, so the board shows where the card will land while it is still in the air. Releasing outside a column puts everything back.
  • A ticket opens in a side panel with its description, labels, comments, attachments and the time logged against it, and a button that starts the timer on that ticket.
  • A nightly snapshot records each board's totals, so the board can also say what moved: "up 16h and 10 tickets since Monday", not just what is left today.
  • Workspace members can be invited as clients: they get the board and nothing else, no tracker, reports, invoices or settings.
  • Agents get the board too, through six new MCP tools and a /api/v1/board/remaining endpoint, under two new token scopes (board:read and board:write).

See the app before signing up

  • The homepage now shows the actual tracker, reports, and invoicing screens with fictional data, plus a sample PDF generated by Tallymeter. You can open the screenshots at full size and inspect the invoice before creating an account.
  • The guided example is clearly labeled as a simplified walkthrough and now uses the same dollar amounts as the app.
  • If you have not connected Jira, the invoice screen explains that Jira is optional instead of showing a connection warning. You can invoice your tracked time directly.

A fresh receipt-inspired look

  • A new folded-receipt logo and deep green palette connect the website, time tracker, and billing screens. The website takes its cues from paper receipts and printed ledgers.
  • Updated navigation accents and matching browser icons make Tallymeter easier to recognize in light and dark mode.

Entries that run past midnight

  • You can now edit the times of an entry that crosses midnight. A timer left running overnight shows as "23:59–08:56", and until now any attempt to correct that end time was rejected with "End time must be after start time" – the end was read as belonging to the start's day, so 08:56 looked like it came nine hours before 23:59. The end is now understood as the next morning, and shortening the entry to 00:30 works.
  • Adding an entry by hand across midnight works the same way: 22:00 to 01:30 is a three-and-a-half-hour entry instead of an error. A backwards end that could only mean the future – say 09:00 to 08:00 on today's date – is still rejected as the typo it is.

Tallymeter on a phone

  • The navigation no longer runs off the side of a phone screen. It collapses into a menu button, so Reports, Invoices, Team, Billing and Settings are all reachable instead of being cut off past the right edge.
  • The timer gives the description field a full row of its own on a narrow screen, rather than squeezing it into a box too small to read what you typed.
  • Time entries are laid out as two lines on a phone – what you worked on, then the clock times, duration and amount – instead of a desktop table crammed into 390 pixels. The row actions (resume, flag, split, delete) are now visible and big enough to tap; they used to appear only on mouse hover, which a touchscreen never triggers.
  • Reports and the invoice history no longer force the whole page to scroll sideways: the chart fits the screen, and the invoice table scrolls on its own.

Invoice PDFs can spell your address

  • Invoice PDFs now render the euro sign and accented letters properly. The PDF used a font limited to a Western-European character set, so "€5.26" came out with the symbol printed on top of the digit, and anything outside that set — Lithuanian, Polish, Czech, Turkish letters — was replaced by a question mark. A company address or a client name could reach the client misspelled.
  • The work-detail page had the same problem independently, which affected ticket summaries. Both pages now use a font that covers the full Latin range.

Your clock, your format

  • Settings now has a Time format choice: 24-hour (17:42) or 12-hour (5:42 PM). It applies everywhere a time of day appears — the tracker rows, the start/end fields you edit, and the long-timer reminder email. New accounts start on 24-hour.
  • Editing an entry's start and end no longer hands you the browser's own time picker, which ignored the app and showed AM/PM based on your computer's region. The fields now follow your setting and take whatever you type — "930", "9:30", "21:30" or "9:30 pm" all land correctly.
  • Agents can now correct times, not just text: update-entry (and PATCH /api/v1/entries/{id}) accept started_at and ended_at. A timer left running long after the work finished can be trimmed in place, and setting an end time on a running timer stops it at that moment instead of now.

Tallymeter for Jira is live on the Atlassian Marketplace

  • The free Tallymeter for Jira app is now published on the Atlassian Marketplace — search for "Tallymeter" or follow the link on tallymeter.com/jira. It adds a timer to the Jira issue view: start and stop against the ticket you have open, with descriptions automatically prefixed with the issue key.
  • Connecting is one OAuth consent — no API tokens to copy around — and the panel shows tracked and unbilled totals for the ticket at a glance. The app itself is free; it pairs with any Tallymeter account.

No more time falling between two invoices

  • Work you logged in Jira a day or two before the current billing period no longer shows up as "not in Jira". The comparison used to check Jira only inside the period while counting all of your unbilled tracked time, so hours that exist in both places could look missing — and the Push button offered to log them a second time. Such tickets now say "in Jira, earlier day" and link to the ticket instead.
  • The new-invoice date range now starts at your oldest unbilled entry when that falls before the current period — time you tracked after the last invoice was generated used to sit outside every default range and quietly never get billed. Moving the start date past it now warns you what would be left off. Already-invoiced time is never billed twice, so the wider range is safe.
  • Push to Jira now covers every unbilled, unsynced entry for a ticket rather than only those inside the current period, so it can actually resolve the rows it is offered on.
  • The difference column no longer invents a minute of drift out of rounding: hours used to be rounded on the Jira side and again on the tracker side before being subtracted, so a ticket that agreed to within a few seconds could still report a one-minute gap.

Invoice totals add up exactly

  • The hours on an invoice are now the sum of the hours on its work-detail lines. Previously the header was rounded from the raw tracked seconds, so on invoices with many lines it could land a hundredth of an hour away from what the lines added up to — hours × rate now matches the amount due exactly.

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.