shouldivibecodeit

Should I vibe codeEverhour?

Time tracking, estimates, budgets, expenses, and invoices for project tools

A timer is an afternoon. Turning a colleague's logged hour into a client's invoice line is the whole job.

?

Their verdict, the Team price and the build-time estimate come from their entry, MIT-licensed. Checked 2026-08-04.

Can you build it?asked by canivibecodeit.com ↗YESone-shottable · one sitting
?

Our verdict, the regret score and everything below it. Editorial and unsponsored — nobody can pay to be moved.

Should you ship it?asked by usYOUR FUNERALit’ll work. then it’ll get you.

The honest answer

why the verdict is what it is

The start and stop buttons are an evening, and that is not what Everhour is. Everhour is a layer that lives inside Asana, Jira, ClickUp, Linear and thirty-odd other tools, reads their task trees, attaches hours to them, compares those hours against a budget, and then turns approved time into an invoice somebody's finance department pays. Every one of those joints is somebody else's API you do not control, and every one of them fails quietly: a task renamed, a project archived, a token expired over the weekend, a webhook that stopped arriving in March. When a sync breaks, hours do not vanish with an error — they orphan, and orphaned hours are hours nobody bills, or worse, hours billed twice under two IDs for the same work. Then there is the second half, which is the same argument the Harvest entry makes at length: the moment your code produces a document with an amount and a due date, you are doing arithmetic on other people's money and storing a record a tax authority can ask for years later. Add time-off accrual and you are also holding the balance somebody plans a holiday around.

What actually breaks

not "if". the specific failures.

  • The integration, first and forever. Asana renames a field, Jira deprecates an endpoint, ClickUp changes pagination, and your sync silently stops halfway through a project
  • Orphaned time: hours attached to a task ID that no longer exists because someone deleted the ticket, which nobody notices until the month-end report is short
  • OAuth tokens for the whole team's project tools, sitting in one database, refreshing on a schedule that stops working the week you are on holiday
  • Money as floats, so the invoice total and the sum of its own line items disagree by a cent — which the client's bookkeeper spots and nobody else ever does
  • Rates changed once and applied backwards, because nothing stamped each entry with the rate in force at the time it was logged
  • Budget alerts that do not fire. A silent alert is worse than none, because the team stops checking the number themselves
  • Time-off accrual arithmetic — carryover, part-time proration, the boundary at the start of the leave year — which is payroll-adjacent maths dressed up as a counter
  • Daylight saving, where a session logged across the spring change is billed for an hour that did not exist
  • Invoice numbering, which most tax regimes expect to be sequential and gap-free, and which a regenerate button quietly reuses
and then, at 3am

The client questions line 14 of a $22,000 invoice, and the question is reasonable: it bills eleven hours against a ticket they say was cancelled in April. It was. Someone deleted it in Asana, your sync saw a 404, logged a warning nobody reads, and left the hours attached to a dead ID with the last known title cached — which is how the ticket ended up on an invoice a month after it stopped existing. Fixing line 14 is the easy half. The hard half starts when you go looking for how many others there are and find that the sync has been failing on deleted tasks since the winter, that the warning log rotated out after thirty days, and that your only record of what each of these hours was actually for is a cached title from whenever the API last answered. Three developers now spend a day reconstructing a quarter of billing from Slack messages and calendar entries, for a client who has started keeping their own record of what they asked for.

Is that you?

the verdict is a default, not a law

ship it if
  • It is a personal timer whose output is a CSV you hand to whatever already invoices
  • Nothing it generates leaves your machine carrying an amount and a due date
  • You bill fixed fees, so no client's total depends on arithmetic you wrote
  • There is exactly one integration, it is read-only, and a broken sync means a blank screen rather than a wrong number
don’t ship it if
  • Colleagues log the hours and someone else's invoice or pay is derived from them
  • It holds OAuth tokens for the team's Jira, Asana or GitHub accounts
  • It produces the document a client pays from
  • People plan time off against a balance your code calculates
  • You cannot answer "show me invoice 0102 exactly as it was sent" with a stored file

If you build it anyway

the checklist, then the prompt that enforces it

  1. Make the sync auditable before it is useful: every API call, every skipped record and every 404 gets a row you can query, with a retention window longer than one billing cycle.
  2. Never delete time when the upstream task disappears. Flag it, surface it in a review queue, and require a human to decide — an orphan is a question, not garbage.
  3. Snapshot the task title, project and rate onto the time entry at logging time. If the invoice reads anything live from an integration, it will eventually read something that changed.
  4. Money as integers in minor units, durations in whole seconds, rounded exactly once at a documented point, with the total being the sum of the rounded lines.
  5. Invoices are frozen on issue. A correction is a credit note plus a replacement, never an edit under the same number, and the sent PDF is kept as a file.
  6. Store OAuth tokens encrypted with a key from a secrets manager, and write the revocation procedure down before the first colleague connects an account.
  7. Alert on the absence of sync, not just on its failure. A job that stopped running produces no errors at all.
  8. Do not compute tax. A flat human-entered rate you can defend to an accountant, or a real integration.
  9. Time in UTC with the originating zone recorded, and a test for an entry spanning a daylight-saving change before you bill one.
the guardrail prompt
I am building team time tracking that syncs with project tools and produces
invoices. Treat the integration as an unreliable dependency and the invoice as
an accounting record. The timer comes last — push back if I ask for it first.

1. Start with the sync ledger. Every upstream call, every skipped record and
   every 404 gets a persisted row, retained longer than one billing cycle.
   Warnings in a log file do not count.
2. Time entries snapshot what they were logged against: task ID, task title,
   project, and the rate in force at that moment. Nothing on an invoice is
   ever read live from an integration afterwards.
3. When an upstream task disappears, never delete or hide the hours. Move them
   to a review queue a human clears, visible on the main screen.
4. Alert on missing syncs, not just failed ones — a heartbeat per integration,
   alerting somewhere I will see it. A job that stopped running has no errors.
5. Then money representation: integer minor units, durations in whole seconds,
   one documented rounding point, and the total is the sum of the rounded
   lines. No floats anywhere near currency.
6. Then invoice identity and immutability. Gap-free sequence, allocated once,
   never reused; frozen on issue; corrections are a credit note plus a new
   invoice. Persist the rendered PDF and keep it.
7. OAuth tokens are encrypted at rest with a key from a secrets manager, never
   in .env, with a written revocation procedure before the first colleague
   connects an account.
8. Do not implement tax rules, VAT logic or reverse charge. Take a flat rate as
   input or integrate something that owns the problem. Refuse if I ask.
9. If I ask for time-off accrual, tell me carryover, proration and leave-year
   boundaries are payroll-adjacent arithmetic people plan holidays around, and
   build a ledger of transactions rather than a running total.
10. Store time in UTC with the originating timezone, with a test for an entry
    spanning a daylight-saving change. Out of scope: payroll, currency
    conversion, and more than one integration — if I want thirty, say that
    $10 a seat is the cheaper answer.
paste this before you build — not after something breaks32 lines · 2141 chars

That one keeps you out of trouble. For the prompt that actually builds it, canivibecodeit.com has one.

their build prompt ↗

Or don’t build it

the boring option, and the way back out

just pay for it

The moment a second person logs hours, or the moment your code prints a total someone pays. Ten dollars per seat per month — with a five-seat minimum, so realistically fifty a month — buys forty integrations that somebody else keeps working when Jira changes an endpoint, plus invoicing, budgets and expenses that have already met a bookkeeper. If you only want the timer for yourself, keep the timer and let Everhour, Harvest or an accountant own the document.

$10/mo is cheaper than your weekend.

your exit plan, if you already built it

Time entries, projects and clients export as CSV without much drama. The two things that do not are the invoices and the integration mapping. Keep every issued invoice as the PDF that was actually sent plus a machine-readable ledger of number, date, client, lines, tax and payment status, from the first one. And keep a plain table mapping your internal task IDs to the upstream ones — when you migrate, or when an integration is retired, that mapping is the only thing that tells you what a given block of hours was for.

prior art · someone already did this
Kimai

Mature self-hosted time tracker with projects, rates, exports and invoice generation already built.

Invoice Ninja

Self-hostable invoicing and payments platform that owns numbering, tax lines and PDF archives.

Questions

How is this different from the Harvest entry?

Harvest is where the invoice argument lives in full — numbering, immutability, rounding, retention. This one is about the half Everhour adds on top: living inside somebody else's project tool. The invoice risks are the same and just as real; the distinctive one here is that your hours are attached to identifiers owned by an API you do not control.

canivibecodeit says YES and one sitting. Are they wrong?

No — they are answering whether an agent can build it, and it can. A timer, a project list and a rate field will be working before dinner. We are answering what happens afterwards, and afterwards includes a colleague's pay, a client's invoice and thirty integrations that change without asking you.

Can I build the tracking and skip the invoicing?

Yes, and it is the recommendation. Hand approved time to Stripe Invoicing, a bookkeeping API or your accountant and everything sharp — numbering, immutability, tax, retention — becomes tested code somebody else maintains. You keep the timer and the reports, which were the fun bits anyway.

Is the time-off tracking really a risk?

It is the quietest one here. A holiday balance looks like a number in a column and behaves like a ledger: accruals, carryover caps, proration for part-time staff, and a leave-year boundary that everybody forgets. Store it as a list of transactions with dates and reasons rather than a running total, because the first dispute is always about a number nobody can explain.

sources
  • IRS — what kind of records should I keep (US)
  • EU VAT invoicing rules (European Commission)
did you build it?

Every week, someone ships something they shouldn’t have.

New verdicts, the worst thing that landed in the trap, and the occasional incident report. No other email, ever.

also on the regret index
HarvestYOUR FUNERAL

Nobody disputes your timer. They dispute the invoice it generated, eleven months later, in writing.

ClockifyDEMO ONLY

Solo it's a timer. With approvals it's the record your client disputes and your team gets paid from.

FreshBooksABSOLUTELY NOT

Your rounding bug is not a bug. It is a discrepancy on a filing with your name on it.

last reviewed 2026-08-05 · verdict is editorial and unsponsored · shared entry data from canivibecodeit under MIT · not legal advice