Changelog
Changes you can see when using Gestrics, version by version. Anything invisible in day-to-day use — refactors, tests, build tweaks — is left out.
This file follows Keep a Changelog and Semantic Versioning.
1.1.2 — 2026-10-28
Added
- Metrics now tells you what each client really pays per hour. The per-word rate is what you agree on, not what you take home: an agency at €0.11/word with awkward material and three rounds of revision can pay you half per hour than one at €0.09 with clean text. Below the average rate by client there is now a table with the hours spent and the income per hour for each one, and a card at the top with the overall figure — which also says how many jobs it is talking about, because the timer gets used when you remember to. It only counts jobs already delivered, invoiced or paid (a quote is not money), and it counts the taxable base, not the total with taxes. Different currencies are never mixed into one figure. Rows are ordered by hours tracked rather than by the figure itself: with a timer it is easy to end up with a €500 job and three minutes logged, and ordering by income per hour would put that one —€10,000/h— at the top of the list.
- The timer, on every job. It used to appear only on jobs charged by the hour, where time decides the amount. That left exactly the per-word jobs —nearly all of them— with no way to measure, and without them there is no way to know what an hour is worth. Tracking time on a per-word job does not change its price or turn it into an hourly job: the time is simply recorded, and what the hour is worth is worked out in Metrics. That is also why it is not frozen when you invoice: if on Tuesday you remember Friday's two hours, you can still log them, and that client's income per hour stays right. Not so on jobs charged by the hour: there the time is the amount, and the invoice is already out.
- The contact search now looks inside your notes too. A note you cannot find is almost a note you never wrote: "pays at 60 days" or "the contact is Marta, extension 204" are no use six months later if you have to open the records one by one. The search already covered name, company, email, country, specialty and language pair; it now covers what you jotted down as well, ignoring accents and case as everywhere else. The subject line of sent emails is deliberately left out: it comes from the template and is identical across the whole list, so searching by it would return everything.
- A contact's history takes dated notes, and stops being just a send log. The app knew what goes out —emails, reminders, quotes, deliveries— and nothing about what happens next: a phone call, what the agency told you, that they asked for rates. That ended up, at best, in the contact's "Notes" field, a loose piece of text with no date where the new overwrites the old. The History tab now has a field to jot things down, and every note carries its date and time and sits among the sends on the same timeline. A send shows its subject, and when it does not fit —a quote's subject ends in the amount— you can read it by hovering over it. A note you have just jotted down always lands in view, even if you were reading something from months back. Notes can be deleted, with a confirmation that shows you which one (a record with several notes has several little crosses in a row, and there is no undo); sends cannot, because they are the record of something the other side already has. Adding a note does not bring the follow-up or re-engagement alerts forward or push them back: those still count from the last email sent. And changing the contact's email address, which clears the sends and puts the record back to Pending, keeps the notes: "pays at 60 days" is about the agency and stays true with someone else at the other end — and so are quotes, deliveries and payment reminders, which are the trace of a real job, not prospecting. Nothing is reset for anyone who replied, is negotiating or is already a client: the record no longer goes back to Pending so the next "Send to pending" can cold-email them with a quote already on the table.
- A new invoice suggests the terms of the last one to the same client. The invoice dialog always opened with taxes at 0 and the due date 30 days out: for an agency that pays at 60 days the date had to be fixed on every invoice, and if forgotten, the payment alert fired while the client was still within terms. It now suggests the rates and payment days of the last invoice to that company (even if another project manager ordered it) and says so in one line; only if it was issued under today's tax profile. Without a previous invoice, nothing changes.
- Expenses carry the supplier's invoice. For the quarterly tax return, the accountant needs each incoming invoice's supplier, tax ID, invoice number, taxable base and input tax, and the app only stored the total. Each expense now takes, optionally, the tax included (named by the tax profile: VAT, GST...), the supplier, their tax ID and their invoice number; the resulting base shows as you type, and a tax equal to or above the total is refused. The expense export (CSV and Excel) adds those columns, with base, tax and total apart. An expense with no tax entered exports base and tax blank, not zero: for one that truly has no tax, such as the self-employed social security fee, enter 0.
- Clients first when choosing a project's client. The dropdown listed the whole contact book from newest to oldest, with the person's name first: after importing 300 agencies to prospect, the two real clients were at the very bottom, and typing "Reed" did not reach "Tom Reed · Reed Legal". Clients (with any project, or marked as active client) now have their own group at the top, with every other contact below; each group is alphabetical, with the company first.
- Time of day on delivery deadlines. Agencies give deadlines with a time ("Monday at 9:00"), and the app only stored the day: at 11 that Monday it still said "Due today". A project now takes an optional time next to the delivery date (typed as it comes: "9", "9:00", "17h30"). Once that time passes, the project page, the notification bell and the calendar show it as overdue ("Was due today at 09:00"), and the calendar shows the time before the title. Alerts now refresh on their own while the app stays open, at that time, at midnight and when you return to the window (with a laptop asleep overnight, midnight arrived late): before, they were only worked out on launch. The same goes for the stale-backup notice.
- One reminder for all of a client's overdue invoices. Agencies are often late with several at once, and the project manager got one email per invoice on the same day. The reminder for one invoice now lists the client's other overdue invoices, with amount, due date and the total outstanding, and once sent they are all marked as reminded: the bell no longer asks for one email each. If any of them carries the previous bank account, the reminder gives the new one even when the main invoice already shows the current one.
- Notice when charging VAT where it does not belong. Charging 21% out of habit to a German agency is a common mistake: a business in another EU country is invoiced without VAT, under the reverse charge, and a client outside the EU is not charged it either. The issue dialog now says so in those two cases, following the same rule that decides the 0% wording on the invoice; it does not warn for a private client in the EU (no tax ID), where VAT does apply.
- Backup notice in the bell. If there is no backup or the last one is a week old or more, the bell says so ("No backups" / "Last backup 12 days ago") and takes you to Settings, where it is downloaded. Before, it only showed inside Settings, which is not opened day to day, and the app holds invoices that must be kept.
- Billing email on the contact record. Many agencies ask for invoices to go to their accounts department rather than to the project manager who places the order. If the contact has a "Billing email", the invoice and the payment reminders go there; quotes and deliveries still go to their usual email. It is optional, validated as a single address, and carried by the backup and by contact export and import.
- BIC/SWIFT notice when invoicing a client outside the EU. A client in the United States or the United Kingdom pays by international transfer, which needs the BIC as well as the IBAN. The invoice already printed it when it was in the profile; now, if it is missing, the issue dialog says so. It does not warn when the client is in the translator's own country, where the transfer is domestic.
- Restore a backup from the welcome screen. Someone setting up a new computer no longer has to fill in their profile and email only for the restore to overwrite them: the first screen of the setup wizard offers "Moving from another computer? Restore a backup", and once it finishes the app starts with their data, without going back to the wizard.
- Fixed price. A new project type for work not charged by the word or the hour: a sworn translation per document, a minimum fee, a flat-rate job. You enter the price, and the quote and the invoice show it as a single line ("Translation EN-ES — fixed price", 1 × price), with no word count or per-word rate.
- Warning for a very high per-word rate. Typing 0.85 instead of 0.085 multiplied the amount by ten with nothing to say so. From 0.50 per word in euros, dollars, pounds and similar currencies, the form now shows a one-line warning ("check the decimals"); it does not block.
- Accounting export also in Excel. CSV is the format Holded, QuickBooks or Xero ask for, but opened with a double click in Excel set to Spanish it put everything in the first column, with broken accents and no amount that could be added up. Invoices and expenses can now also be exported as .xlsx, with amounts as real numbers.
- A warning when issuing an invoice without VAT to a client in Spain. The dialog opens with the tax at 0, which is right for a foreign client, and an invoice to a Spanish company could be issued like that with nothing to flag it. It is a warning, not a block: there are exceptions the app cannot know.
- A warning when issuing without VAT to a client in your own country without having written the reason in the VAT note of your profile (outside Spain, where the warning above applies). This is the case for anyone exempt, such as a French micro-entrepreneur under the franchise scheme: the invoice has to say why there is no VAT.
- 7% IRPF among the one-click rates, next to 0% and 15%: it is the rate for those starting out, and until now it had to be typed in.
- Marking "Paid" asks for the payment date, with today suggested. It used to store the date of the click, and since you mark it whenever you remember, the average payment time in Metrics came out wrong. Future dates are not accepted.
- When creating a first project with no clients yet, the form says where to add them. The drop-down used to come up empty with no explanation.
- The project's purchase order (PO) number is printed on the invoice, under the due date. Agencies ask for it to match the invoice to their order.
- A warning when sending the quote for an hourly project with no hours logged, which would come out at 0.00.
- Correcting an invoice's amount, or cancelling it. Until now an issued invoice could only have its VAT and withholding corrected: an invoice for 5,000 words instead of 3,000, a discount agreed afterwards or a cancelled job had no way out. Editing the invoice now lets you correct the words, hours, rate or price, or tick "Void the invoice" (base to 0). It produces an R- corrective invoice with the corrected line, the reason and the amount corrected, and the project card is brought up to date. A voided invoice no longer shows as overdue.
- Estimated hours on hourly projects. Hours only came from time tracking, so hourly work could not be quoted before starting: the quote showed 0 h and 0.00. A project now takes estimated hours, which the quote, its email and its PDF use ("Estimated hours: 10.00 h", €500.00). The invoice still charges the hours actually logged.
Changed
- For someone who already replied, "Send now" offers the first follow-up. With a contact that had responded, was in negotiation or was an active client, the editor opened the prospecting template, and "Send now" offered the introduction email to someone you had already been talking to. It now opens the first follow-up; if something in the cadence is due, it still opens that, and for everyone else it is prospecting as before.
- The batch says it sends the templates as they were when it started. Fixing a typo mid-batch and seeing "Saved" suggested the rest would go out fixed, and it didn't: what you confirmed goes out. It now says so under the progress bar; to send the new version, cancel and start it again.
- The second follow-up and re-engagement no longer repeat emails. There was a single follow-up template for both touches, so the same agency got the same text, word for word, at 10 days and at 20. And the 90-day re-engagement resent the original cold email to people who hadn't replied or had said no. The Template menu now has four: Prospecting, First follow-up, Second follow-up and Re-engagement, and each contact gets the one that's due, in batches too (a follow-up batch mixes first and second follow-ups, and each goes out with its own). The two new ones come with their own text: the second follow-up offers a sample and leaves the door open, and re-engagement mentions the first contact. Until you give them a subject, they use the first follow-up's and the prospecting one's, and the empty field says which, so you don't have to write two more subjects to keep sending.
- The send question says which email goes out. With four templates, the one showing in the editor may not be the one that contact is due: changing the menu to look at another after picking them is enough. "Send now" now asks "Send “Re-engagement” to …?", and a batch says which templates it uses (a follow-up batch usually has two).
- The history opens full height while you read it. The timeline lived in a 110-pixel window at the foot of the record: with six or seven entries you had to scroll it to read the lot, which is exactly what nobody does before calling an agency. Clicking "History" now raises the panel until it fills the whole column, and the list takes all of that space; moving the mouse off the panel puts it back, with nothing to click. Clicking "History" again opens it once more. Moving between Details and History is animated too: before, the content swapped at once and the foot jumped in height.
- The note field now reads "Add a note", and its button says "Add". It used to read "Note a call, what they told you…" and "Add note".
- The website opens in the app's language. With the interface in Spanish, Help › outreachstudio.app and the new-version banner's button led to the English home page, and Help › Terms of Use opened the terms in English; they now lead to the Spanish home page, which has had its own address since 2026-10-20, and to the terms in Spanish.
- PDFs are named in English, like the document: the invoice "Invoice-2026-001.pdf", the corrective invoice "Rectificative-Invoice-R-2026-001.pdf", the quote "Quote-12.pdf". They were called "Factura-…" and "presupuesto-…", including in the attachment the client receives.
- The invoice dialog no longer offers withholding in France, where a freelancer's invoice does not carry it. It is only removed for countries that have been checked (France, for now); elsewhere the field stays, because not having researched it does not mean it does not exist. An invoice that already has withholding still shows it when corrected.
- The withholding field uses its name in your country: with the Mexico profile it says "ISR (%)", as the summary and the hint already did, instead of a generic "Withholding (%)".
- The tax ID in your profile and your clients' tax IDs are written in capitals: a "12345678-z" typed that way was printed as such on the invoice.
- Countries on the contact card in the app's language, and sorted in it: with the app in Spanish you had to look for "Alemania" under "Germany". What is stored — and printed on the invoice — is still the English name.
Fixed
- The send questions didn't say which attachments went out. Prospecting attachments are kept and go with every send, including those days later. An invoice attached for one client and forgotten went out in the next batch to every agency, with that client's details. "Send now" and the batch now name them before you confirm.
- "Send now" didn't warn about missing details. The batch already said "one contact has no company, their email will have gaps"; a single send didn't, and a template with
{{empresa}}went out with "… for ." without a word. The question now says so. - A contact marked "Sent" by hand never got a follow-up. Emailing an agency from your own mailbox, or applying through its portal, and marking it "Sent" left it with no contact date: the app never asked for the follow-up, and it showed up neither in the bell nor in any batch. The same with an imported sheet that says "Sent" with no date, and with "Rejected" and re-engagement. With no other date, it now counts from when it is marked or imported.
- Saving a contact's details could put it back to "Pending" and repeat the cold email. The "Edit" form saved the status the contact had when it was opened. With the form open to fix a phone number while a batch ran, the batch emailed the contact and Save put it back to "Pending": the next "Send to pending" sent the first email again. The form's status is now only saved if you changed it there.
- "Send now" could send a second email to someone the batch had just emailed. With the confirmation open while the batch emailed that contact, confirming sent another email; clicking it while the batch's email was going out did the same. It now won't send while an email to them is on its way, and after you confirm it checks the contact again, as the batch does.
- Marking a contact "Responded" while an email was going out didn't stick. Once the send finished, the contact went back to "Sent", and ten days later a follow-up was due for someone who had already replied. The status you set now stays.
- A typo in a template made the contact forget which email was due. Sending with a placeholder that doesn't exist (a
{{nmae}}) left the contact as "Send failed" without logging which touch had failed. Once the typo was fixed, the retry no longer went out as a follow-up but with the open template, which on selecting the contact again is the prospecting one: the cold email all over again. The warning still shows, but the contact now stays as it was, as it already did with an empty subject. - An email-account failure marked the whole batch as failed. With the app password revoked or no connection, the batch carried on and left each contact as "Send failed", one every few seconds, for something that was none of theirs. It now stops at the first account failure, leaves the contact alone and says the rest are left as they were; once the account is fixed, the next batch picks them up with their usual email.
- Importing a list of agencies without people imported nothing. A sheet with just the agency and the email ended in "No contacts imported — could not be saved", without saying why. With no name column, the company name is now used ("Hi Lingua Partners,") and the screen says so; with neither name nor company it won't import, and a stray row with neither is counted as "with no name".
- The change-email warning advised keeping the typo. It said that if you were only fixing a typo you should cancel and leave the address as it was. But what was sent to a misspelt address never arrived: resetting the record and sending the first email to the right address is correct, and cancelling left the broken address with follow-ups still going to it. It now says so, and the count no longer reads "its 1 logged send(s)".
- Closing the app right after saving something lost it. The database is written to disk a second later, and closing the app stopped the internal server abruptly, before that write: a contact added half a second before closing was gone when the app reopened. If it was the last send of a batch, the next batch would have repeated it. The app now waits until everything is saved before closing.
- Closing the app while an email was going out left it unlogged. The email went out but the record never knew, and the next batch would have sent it to that contact again. Now, if you close with an email going out, the app says so, cancels the rest of the batch, waits until that email is logged and then closes on its own. With no email going out, it closes at once.
- "1 send left of the daily limit", not "1 sends left".
- A batch emailed people who had changed while it was sending. The list was taken when the button was clicked and gone through as it was, for minutes. An agency marked "Responded" mid-batch still got the follow-up (and the send took away its "Responded"), and one whose email was corrected got written to at the old address. Each contact is now looked at again just before its email: if it was deleted, changed its email or is no longer due that email, it's left out and the log says so.
- Emailing an active client put them back into prospecting. After any send the contact became "Sent", active clients and negotiations included, and ten days later the app asked you to send them a follow-up. They now keep their status, whether the send works or fails.
- A pending contact could get something other than the first email if it had a last-contact date (a sheet can say "Pending" and carry a date). A pending contact now only ever gets the prospecting email.
- Importing a sheet of agencies you'd already written to left them pending. The status was only recognised as the app stores it internally ("sent", "activeClient"), so a sheet using the on-screen words ("Active client", "Send failed", or the Spanish "Enviado") brought those rows in as Pending, and the next "Send to pending" repeated the cold email. The on-screen word is now recognised too, in English and Spanish, with or without accents. And a row with no status but a last-contact date comes in as Sent, so the cadence carries on from there.
- "Send to pending" could send a follow-up as the first email. Pending contacts got whichever template was open in the editor, and that template switches on its own when you click a contact: looking at someone due for a follow-up and then clicking "Send to pending" sent the follow-up to new contacts, and logged it as one. Now anyone you've never written to only gets the prospecting email.
- Retrying a failed follow-up sent the cold email again. When a send fails because of that email (the server rejects the address or the message), the contact is left as "Send failed", and "Send to pending" retried it with the prospecting template: the follow-up that had failed turned into the first email again. Now it retries what failed: the first email, the first follow-up, the second, or re-engagement. (Account failures, such as an expired password or a dropped connection, no longer mark the contact: see above.)
- Tracking time on a per-word job rewrote its price. A 10,000-word job at €0.11 (€1,100.00) dropped to €3.08 as soon as 28 hours were logged against it, because the amount was recalculated as hours × rate; and the job then counted as an hourly one for the rest of the app. It could not be reached from the screen —the timer only showed on hourly jobs— but it could from the API, and now that the timer is on every job, that was the normal route.
- Exported CSV and TSV files came out with broken accents when opened in Excel. "Agencia Niño" arrived as "Agencia Niño", and "Número factura" as "Número factura": Excel on Windows does not assume a text file is UTF-8, so it opened them with the system's own encoding. All four were affected: the contact export to CSV and to TSV, and the invoice and expense CSVs you send your accountant. All four now carry the marker Excel looks for. The Excel and OpenDocument exports did not need it, because those formats declare their encoding internally. What CSV still cannot fix is the separator: a Spanish Windows expects semicolons, so opening one by double-click still drops every column into the first — that is what the Excel export is for.
- Typing in a template made the contact's record disappear. The moment you typed the first letter in the editor, the bar at the bottom —Details, History, the send button— left the screen entirely, and did not come back until you undid the changes or restarted the app. It was hidden on purpose, to give the editor the height needed to read what you were writing, but the editor has had a fixed height for a while now: measured, it is the same size with the bar and without it, so the whole record was being paid for nothing. And that is exactly when it is needed most: seeing the placeholders filled with real data requires a contact to be selected. What hiding it did prevent was sending an email with a half-written template —what goes out is always the saved version, not what is in the editor— and the "Send?" prompt now says so itself. Also when sending to pending contacts, which was never hidden and sent the saved version without saying a word.
- Pressing Enter twice in a row jotted the note twice. A repeating key or a double tap created two identical history entries a millisecond apart; two quick clicks on "Add" did the same. The lock meant to prevent it did not take effect in time.
- One broken line in a history made the app unusable. If a contact's history carried a corrupt entry —only possible by importing a sheet with the "history" column edited by hand— opening its record did not just fail in that tab: it took down the whole app with "Unexpected error". That line is now skipped and the rest of the history shows normally; the data is still stored and still travels in the backup. And deleting a healthy note that had one of those lines above it no longer fails either. The same went, and worse, for a line that was a proper entry but whose text or subject was not text: merely SELECTING the contact —without even opening the tab— was enough to lose the app. Only text is drawn now and the rest stays quiet, and an unreadable date no longer shows as "Invalid Date" twice per line. That same line also left the "Send to pending" button MUTE: the daily-limit count walks every contact's history, so one broken entry in any of them was enough for the button to do nothing at all —no batch, no warning, no error.
- A note that failed to save looked saved. With the server down, jotting something in the history left it drawn on the timeline and cleared the field: the text vanished from the screen, the note looked saved, and only a short-lived warning said it had failed. On reload it was gone. Now, if the save fails, the entry is withdrawn and what you typed stays in the field so you can retry. This applies to any change to the record, not just notes. And withdrawing it removes only what that save had added: if you jotted another note meanwhile —or the batch sent an email— that stays put instead of vanishing from the screen along with it.
- A batch send could undo whatever you did while it was sending. The run took a snapshot of the contacts when it started and wrote from it as each one's turn came: with 50 agencies at 8-second intervals, the last one was written with its state from nearly seven minutes earlier. Anything that had happened to it meanwhile —a note jotted down, a quote sent from Projects, a correction to its record— vanished with no error and no trace when its turn arrived. The same happened, in shorter windows, with payment reminders, deliveries and quotes. Every write is now composed against the contact as it is at that moment, not against the caller's copy.
- A sheet with European dates shifted the cadence by months, silently. The "last contact" and "first contact" columns were imported as-is, while the rest of the app expects YYYY-MM-DD. A
05/09/2026—5 September across much of Europe— was read as 9 May: four months out, looking like good data, with no warning at all. Those dates drive the follow-up (10 days) and re-prospecting (90 days) reminders, so the app ended up telling you to re-prospect an agency you wrote to last month. With a day above 12 (25/09/2026) the record simply read "Invalid Date". From an .xlsx the dates now come through correctly, whatever format the sheet displays them in: the file knows that cell is a date, and that is what gets used. From a CSV there is no way to tell —a date there is just text— so only YYYY-MM-DD comes in; what is ambiguous is not guessed (05/09 is 5 September here and 9 May in the United States) and the import says so when it finishes, asking for that format. No unreadable date shows as "Invalid Date" anywhere again. - A sheet with a "status" column left those contacts in limbo. The import normalised the country but not the status: whatever the column held went in as-is. A contact imported as "Nuevo" or "New lead" was drawn in the list as Pending —icon and all, indistinguishable from a real one—, its record read "Status: NuevoStatus", it counted in no funnel figure, it showed under no filter but "All statuses", and "Send to pending" did not pick it up. With three hundred agencies imported that way, the button still said you had one pending and the rest were never written to. Anything that is not one of the app's own statuses now comes in as Pending, and the import says so when it finishes.
- The history called prospecting emails "Follow-up", and that switched the reminders off. The app decided twice, by different rules: which template to send went by the ten days a contact has to have gone without replying, while how to record it went by another rule —"already in Sent"— that holds from day one. So clicking "Send now" on someone you wrote to three days ago sent the cold email and recorded it as a follow-up. What you could not see is that it also raised the follow-up count, and that count is what switches the reminder off at two and opens re-prospecting at ninety days: insisting twice by hand was enough for the app to stop reminding you about the follow-up you never sent. The type now comes from the template that actually goes out, and the count only rises when what goes out is a follow-up.
- Saving a contact's form could wipe its history. The pencil opens the form without closing the record's footer, so both are visible at once; the form kept a copy of the contact from the moment it opened and wrote the whole thing back on save. Anything recorded in the history meanwhile vanished with no warning. The form now saves only the fields it actually edits.
- No purchased licence key could be activated. The 1.1.2 clean-up that strips the full stop or quotes picked up when copying the key from the email also stripped the "==" every key ends with, and the app reported it as non-existent. That ending is now kept, and stray punctuation is still stripped.
- On Mac, invoices to Japanese, Chinese or Indian clients no longer show gaps in the name. For those scripts the PDF uses a system font, and on macOS the app looked for fonts that do not exist under those names: the client's name, a required part of the invoice, came out blank or partial. Checked on a GitHub-hosted Mac with clients in Japanese, Chinese, Korean, Hindi and Thai. Nothing changes on Windows.
- The invoice to a client outside the EU with no tax ID cited the wrong article. For any client abroad, the "not subject" wording cited art. 69.Uno.1º of the VAT Act, which only holds when the recipient is a business or professional; a private individual falls under 69.Dos.f, the one that names translation. The app cannot tell whether the client is a business or a private individual, so with no client tax ID it now cites art. 69 alone, which is true in both cases. With a tax ID it still cites 69.Uno.1º.
- A project created for the wrong client could not be fixed. Editing it offered no client field, and the only way out was to delete it, along with its logged time and deliverables. The client can now be changed when editing, as long as the project has no invoice; once invoiced it cannot, since the client is recorded on the invoice: void it with a correction and invoice the work in another project.
- The quote hard-coded the tax names. Its note said "Excludes VAT/withholding tax" for everyone, including a translator in India (who charges GST) and one in France (who has no withholding). It now uses the names of the translator's country, like the invoice: "Excludes VAT/IRPF" in Spain, "Excludes VAT" in France, "Excludes GST" in India.
- Project search did not find by language pair or content type. Searching "DE-ES" or "technical" to look back over a year's work gave nothing. It does now, and content type also by the name the interface shows in each language.
- Searching contacts by country, specialty or language pair found nothing. The country is stored in English even when the record shows it in Spanish, so "alemania" gave no results; and specialty ("legal") and language pair ("DE-ES") were not searched. They are now, and since batch sending works on the filtered list, it can send a campaign only to agencies in one country or specialty.
- Expenses had no place for the most common items, and it was unclear which project they belonged to. Paying a colleague or a reviser, the accountant, phone and internet and professional associations ended up under "Software" or "Other"; they now have their own category. And when linking an expense to a project, the dropdown, the table and the CSV for the accountant showed only the title, which repeats ("User manual" for two clients): they now say "title · client", with archived projects last and marked.
- After changing bank, an unpaid invoice sent the client to the old account. The invoice keeps the IBAN it was issued with, like the rest of its details, but when resending it or chasing payment the client paid into that account, which might be closed. Now, if the invoice is unpaid and its IBAN is not the one in the profile, the invoice email and the reminder add a line with the new bank details, and the dialog says so before sending.
- After changing tax country, earlier invoices were shown with the new profile. Someone moving from Spain to France saw a Spanish invoice with "Withholding" instead of IRPF, and the correction dialog offered the French VAT rates (0 and 20%) instead of the Spanish ones. The PDF was already right; the project page and the correction dialog now also use the country each invoice was issued in.
- A short sending interval made the batch slower, not faster. Settings allowed 3 seconds between emails, but the app only sends 12 per minute: after the 12th the batch paused for 65 seconds, and the announced duration did not count those pauses. The minimum is now 5 seconds, and a lower value saved earlier is raised automatically.
- On a day with many deliveries, the calendar hid the rest. Only three showed, and "+5 more" was text that did nothing: the others could not be seen or opened from the calendar. "+5 more" now expands the whole day (and "Show less" collapses it), shows their titles on hover, and the three shown first are the most urgent.
- Importing a large contact sheet stopped halfway. Contacts were saved one at a time, and the app's request limit (300 per minute) cut off a sheet of 500 agencies around row 290: the rest showed up as "could not be saved" with no further explanation. The whole sheet now goes in one go, with the same checks as adding a single contact: 500 contacts import in a couple of seconds.
- Two timers could run at once. Starting one project's timer without stopping another's left both running, and the same hour was billed to two clients. "Start" now warns about the one still running and stops it before starting; if it had run for more than 8 hours, it first asks whether to log or discard that time, as when stopping it. A project can no longer be invoiced with its timer running: that time was left off the invoice, and the timer could then be neither stopped nor deleted, which also blocked starting any other project's timer. One left in that state can be discarded from the project page.
- Two texts in the English interface were unclear. The bell notice for delivered work not yet marked said "mark them as Delivered", as if the deliverables were marked rather than the project; the group is now called "Delivered, not marked" ("Entregados sin marcar" in Spanish), short like the others. And the notice about missing client data called the record a "card"; it now says "details", like everywhere else.
- "New project" while editing another one duplicated it. The "new" form came up with the data of the project being edited, and saving it created a copy. It now comes up empty.
- A prospect who had become a client could receive a follow-up email. Creating their first project turns the contact into an "Active client", but Outreach did not notice until a restart: it still showed "Sent" and "Needs follow-up". Worse, the project's next email (the delivery) wrote "Sent" back to the database, and "Send follow-ups" ended up sending a "just following up" to a client whose work had already been delivered. The change now shows at once and sticks.
- Metrics counted each project manager at an agency as a separate client. With two contacts from the same agency it showed "Clients 2", the amount collected split into two bars and the payment days in two rows. The client is now the company (ignoring case and accents) or, when there is no company, the person. The Projects list is still grouped by person, since that is who places the order.
- A corrective invoice could be overdue the moment it was issued. It is dated today but inherited the original invoice's due date: correcting in January an invoice due in December produced a document dated 4 January and due on 20 December, and the notification bell immediately asked for a payment reminder. Now, if the invoice is unpaid, the dialog asks for a due date from today on, as when issuing; and the payment-terms notice counts the days from the corrective invoice's date.
- Searching for an invoice that had been paid gave "No results". Paid work gets archived, and it is exactly what the client or the accountant asks about months later; the project search left archived projects out even when their number was typed. Nor did it find a corrective invoice by its R- number, which is the one the client has. Search now reaches archived projects (shown with their archive icon) and R- numbers; without a search, the list still leaves them out.
- Leaving without saving silently discarded changes, in three places: switching email templates (the postscript being written disappeared), closing the translator profile with Escape or a click outside (a freshly typed IBAN or phone number was lost) and clicking another project in the list with the project form open. With unsaved changes the app now asks before leaving; without them, it leaves as before.
- A client's glossary accepted the same term twice with different translations ("lease → arrendamiento" and, weeks later, "Lease → alquiler"). If the source term is already there (ignoring case and accents), the app now says so, shows its translation and asks before adding it again: a term with two meanings depending on context can be saved twice on purpose.
- The invoice could contradict itself on the payment period. The default terms said "within 30 days", so setting the due date to 60 days for an agency produced an invoice with "Due" at 60 days at the top and "30 days" below. The default terms no longer state a period of their own ("by the due date shown above"), and if yours state a number of days that does not match the chosen due date, the invoice dialog points it out.
- Hours logged in minutes came out unreadable on the invoice and the quote. 80 minutes (1.333… hours) printed as "1.3,333,333,333,333,333". They now show up to four decimals, "1.3333", so the line adds up: 1.3333 × €40 = €53.33, the amount next to it (with two decimals, 1.33 × 40 would give 53.20). The correction dialog shows hours the same way.
- Changing the project type kept a rate that no longer applied. Switching a per-word project to a fixed price left the "Price" field holding the per-word rate (0.10), and the invoice came out at 0.10; switching to hourly, €0.10/word became €0.10/hour. The field is now cleared when the rate's unit changes, and kept between types with the same unit.
- An archived job still showed as late on its card and in the calendar ("2 days late"), although the bell no longer flagged it. Archiving a cancelled job removes it from every delivery notice.
- Deleting a project also deletes its logged time, and the confirmation did not say so. It now does.
- The invoice wrote taxes in two different ways: "VAT 21.0%" with VAT and "VAT (0%)" without it, and "IRPF -15.0%". They are now always in brackets with no padding decimals, as in the invoice dialog: "VAT (21%)", "IRPF (-15%)".
- The notice about details missing from a client's card read badly ("This client has no Tax ID, Address on file"). It now reads "Missing from this client's card: tax ID and address".
- Work already delivered to the client showed as "delivery overdue". Sending the deliverables does not change the status (the status bar is set by hand), so after the deadline the project stayed "In progress" and showed as late in the bell, the project card and the calendar. With the deliverables sent, the notice now reads "Deliverables sent: mark them as Delivered".
- Adding a file again with the same name duplicated it. When delivering, the corrected version of "Novel_ES.docx" was added next to the old one and the client received both; in the Outreach attachments, an updated CV was added next to the old one and every cold email went out with both. The new file now replaces the one with the same name, with a one-line notice. When a corrected version of work already delivered is sent again, the old one is also removed from the saved deliverables: otherwise the next delivery loaded both again.
- An invoice issued before the delivery deadline said the service was provided after the invoice date. The service date came from the project's delivery date, which is the deadline: delivered and invoiced on the 6th with a deadline on the 20th, the invoice read "Service date 20". It is now only set when it is earlier than the invoice date.
- When entering several expenses in a row, the date went back to today after each one. Entering September receipts in October left the second and later ones in October, and in another quarter. The form now proposes the previous expense's date. Also, the "today" it proposed was worked out only once, and fell behind with the app left open for several days.
- The accounting export ordered invoices from the same day wrongly (2026-002 before 2026-001). Same-day invoices are now ordered by number.
- A PO the agency sends after receiving the invoice can now be added. The invoice kept the PO from the moment it was issued, and if there was none, there was no way to add it. Changing the project's PO now also changes it on the issued invoice, without a corrective invoice: it is the client's reference, not tax data. The form says the invoice needs resending. The invoice's title, amounts and client stay unchanged.
- The accounting export (CSV and Excel) showed the client with their current card details, not those on the invoice: if they changed company name, their old invoices came out under the new one. They now appear as on each invoice.
- After reopening the app, an invoice without VAT could carry the French exemption ("VAT not applicable — French Tax Code, Article 293 B") even for a Spanish translator. It happened to anyone who had not written a VAT note in their profile and already had a contact; if they had also skipped the profile in the setup wizard, their tax country became France. These were two migrations meant for a single old installation; they have been removed, and settings already saved do not change.
- Generating a recurring invoice did not say which month it was for. With overdue months there was no telling which one would go out; the dialog now says ("the October 2026 recurring invoice").
- A quote resent after changing it carried the date and expiry of the first one, so a revision sent a month later could arrive already expired, and the client had two "Quote-1.pdf" files with different amounts and nothing saying which one stood. A resend now goes out as "REVISED QUOTE", dated today, in a "Quote-1-rev1.pdf" file, and the email is titled "Revised quote" and says which quote it replaces. Resending it unchanged ("it never arrived") still sends the same quote.
- The quote email did not give the delivery date, which the PDF did. It now includes "Estimated delivery" when the project has a date.
- Pasting an email copied from Outlook or Gmail ("Anna Weber <anna@agency.de>", or with "mailto:") left the contact unable to be saved, and importing a list dropped the row. The address is now kept.
- Sending follow-ups without a subject said "Subject is required" with a subject plainly visible: the missing one belonged to the follow-up template, which was not open. The warning now names the template. When sending to one contact, it also appears before the confirmation rather than after.
- "Send now" to a contact already emailed asked the same question as for a new one. The dialog now says when they were last emailed.
- The quote the client received rounded the rate. A rate of €0.085/word came out as "0.09 EUR/word" next to a total worked out at 0.085, so 12,500 words × 0.09 did not give the €1,062.50 on the line below and the quote looked wrong. The rate is now written with the decimals it has (up to four), in the email, on the project card and in Metrics.
- The language pair of a new project came pre-filled with "EN-ES". Anyone working with another pair clicked and typed theirs, and the project was saved as "EN-ESDE-ES", which is how it then appeared on the quote and the invoice. The field now starts empty, with examples.
- Picking a client suggests their language pair even when it is written with names, as the contact card itself suggests ("German ↔ Spanish"). Only codes ("DE→ES") used to be recognised.
- Importing contacts from a CSV saved by Excel in Spanish or French mangled accented letters: "Inés Peña" came in as "In�s Pe�a" and the "País" column was not recognised. That CSV, the one Excel saves by default, uses a different encoding; it is now detected. CAT analyses in CSV benefit too.
- The country of an imported contact is stored the way the contact card stores it. A sheet with "España" or "Francia" kept the Spanish name, and the invoice, which is in English, said "España". A contact already saved that way is fixed the next time it is saved.
- The email for a corrected invoice quoted the original's number. The attached PDF was the corrective invoice R-YYYY-NNN, but the subject said "Invoice 2026-002". The invoice email and the payment reminders now quote the corrective invoice.
- On an hourly project, the form said "Source words" above the logged hours.
- Without sending the invoice from the app you could not mark "Invoiced" or "Paid". Anyone sending the PDF from their own email — and, without a connected account, everyone — was stuck at "Delivered". Issuing the invoice is now enough; "Paid" then stays pending until you mark it when the payment arrives.
- On opening the app, the bell did not warn about overdue invoices. It said "No pending notifications" until you visited Projects, even with an invoice weeks overdue. It now warns from start-up.
- Long-standing clients counted as replies to outreach. Creating a project moves a client to "Active client", and the Outreach header counted that as a reply even if you had never written to them from the app: with only your existing clients entered it showed "Sent 0 · Rate 100%". Only contacts you actually wrote to count now.
- Attachments with accented names arrived with a broken name. A "CV_Lucía.pdf" reached the agency as "CV_LucÃa.pdf". It happened with any accent, ñ or ç in the file name.
- Importing contacts dropped a row with two addresses in the same cell ("jobs@agency.com; vendor@agency.com", common in agency lists) without saying which. It is now imported with the first address and the rest go to the contact's notes. It never sends to more than one.
- The batch-send confirmation gave odd durations: "~0 min" for one email and "~1 min" for three that take 16 s. It now gives seconds under a minute, and with a single email it just says so.
- Outreach attachment sizes used a decimal point in Spanish ("0.20 MB"), and "0.00 MB" for small files. They now follow the language's format and use B or KB where appropriate.
- A timer left running logged every hour at once when stopped the next day, and those hours go on the invoice. From 8 hours on it now asks before logging them and offers to discard it so the real time can be added by hand.
- The payment link was not in the invoice email. It was generated to send to the client, but had to be copied and pasted by hand. If the invoice has a live link, the invoice email and the payment reminders now include it on a line of its own. Once the invoice is corrected or paid the link is closed, and it is not sent.
- The payment link allowed the same invoice to be paid twice. It stayed active after payment until Paid was marked by hand, so a client reopening the email could pay again. Each link now accepts a single payment and Stripe closes it as soon as it completes. This applies to links generated from now on; earlier ones are closed when Paid is marked.
- With a Stripe test key, Settings just said "Connected to Stripe". It now says it is in test mode and that clients will not be able to pay.
- A licence key copied from the email with the final full stop was reported as non-existent. The full stop, quotes or brackets picked up when copying it from a sentence are now stripped from the ends.
- The backup downloaded as "outreach-backup-…", the old name. It is now "gestrics-backup-…". Old backups can still be restored.
- Changing the title or PO of an invoiced project changed the issued invoice. Downloading the PDF again showed the new title and PO, not the ones the client received. They are now stored when the invoice is issued, like the rest of its data.
- If the free trial ran out with the app open, the strip still said "14 days left" and every action failed with a stray error, with no licence screen until a restart. It now appears as soon as you try something, and the day count updates by itself.
- Deleting a contact with invoices led to a dead end. The message said to delete their projects first, but an invoiced project cannot be deleted. It now says what happens: the contact has issued invoices, which must be kept, so it cannot be deleted.
- "Imported 1 contacts" now reads "Imported 1 contact".
- In the client glossary, clicking a field did nothing. The fields were inert until you pressed "+". Clicking any of them (or starting to type) now opens the row to add the term.
- Client emails could go out unsigned. The signature name was only set by the name step of the setup wizard; anyone who skipped it and entered their name later in the profile sent quotes, invoices and reminders ending in a bare "Best regards,". With no sender name set, the profile name now signs.
- An invoice could be issued with a due date earlier than its issue date. Picking the wrong month in the calendar was enough: the invoice went out already overdue and the payment reminder fired straight away. The generate button is now disabled with a one-line note. Today is still valid (payment on receipt).
- Sending an invoice with no email account said "Failed to send deliverables". It now says "Failed to send the invoice".
- "1 invoices exported", "1 expenses exported", "1 months left to generate" and, when importing contacts, "1 duplicates (already existed)". Now singular.
- Amounts on the invoice and quote PDFs did not follow the English format of the rest of the document. They had no thousands separator and the symbol after the figure ("1062.50 €", "320.00 £"), while the email sent with them said "€1,062.50". The PDFs now use the same format as the email: "€1,062.50", "£320.00", "¥12,000".
- The average rates in Metrics counted the fee of recurring plans as if it were a per-word rate, sending that client's average sky-high. They are now left out, as is the fixed price.
- Searching "2026-007" in Projects found nothing. The search box only looked at the title and the client, while the invoice number and the PO are exactly what clients and accountants quote. It now searches both too.
- With two corrections to the same invoice, the accounting export lost the first one, and each corrective invoice was compared with the original: correcting €450 to €270 and then cancelling gave -€190.80 and -€477.00, a reduction counted twice. All of them are now exported, and each one corrects the previous one ("Rectifies invoice R-2026-001") with its own difference: -€190.80 and -€286.20, which add up to the real reduction.
- A project could be saved with delivery before receipt (picking the wrong month in the calendar), and it showed as overdue from day one. It can no longer be saved, with a one-line note.
- Editing a project with no receipt date gave it today's date on saving, though nobody had entered it. It now stays empty; a new project still proposes today.
- Switching a fixed-price project to per-word translation left "1 word" at the price as the rate (1 × €30/word). The words and rate are now cleared.
- Invoices from a recurring plan had the month in the interface language ("Monthly translation retainer — octubre 2026") on an English document. It is now always in English ("October 2026"). Invoices already issued keep their title.
- Choosing "Paid" in the status field of the edit form left the project paid with no payment date, so Metrics did not count it as collected and the accounting export listed it as pending. It now opens the same payment-date dialog as the "Paid" step.
- Correcting an invoice that had already been paid said nothing about the difference. The dialog now says in one line whether money must be refunded to the client or the client owes more.
- The rate on the PDF did not match the one in the app. The quote and the invoice always printed it with four decimals ("€0.0700") while the project card said "0.07 EUR/word". The PDF now follows the app's rule —the currency's decimals and up to four, with no padding zeros—: "€0.07", "€0.085", and "€0.015" on a CAT category.
- The Outreach response rate used a full stop in Spanish ("0.0%"). It now follows the language's format: "0,0 %".
- A translation over 15 MB only said "File exceeds the 15 MB limit", without saying which one when several were picked or what to do. It now names the file and suggests sending a download link in the message.
- The quote email for a project with a CAT analysis gave an average rate ("Rate: 0.0755 EUR/word", amount ÷ words) that appeared nowhere else and did not add up to the total. It now lists the breakdown, one line per category with the same labels and figures as the attached PDF ("No Match: 3,000 words × 0.10 EUR/word = €300.00").
- The email for a corrected invoice did not say it replaces another one. It carried the corrective invoice but read like a new invoice, so a client who already had the original could pay both. It now adds, after the invoice paragraph: "This corrective invoice R-2026-001 replaces invoice 2026-001; please disregard the earlier one."
- A revision or post-editing project showed the base rate on its card (€0.10/word with 2,000 words and an amount of €100, which does not add up) and nothing said it was a revision; the quote email called it "per CAT analysis". The card now shows the service and the rate actually charged (€0.05/word), the same as the email and the PDF, and the average rates in Metrics count that one, not the base rate.
- Changing a client's email sent them back to "Pending" and wiped their history, as if they were a new contact. When an agency changed project manager, the next "Send to pending" mailed the outreach email to the client itself. For an active client only the email changes now; for a prospect it still asks as before.
- Undoing a "Paid" marked by mistake left the invoice paid. Going back to "Invoiced" from the form kept the invoice's payment date: the accounting export listed it as paid and it never showed as overdue. The payment date is now cleared.
1.1.1 — 2026-10-03
Added
- Invoice payment terms are written once and appear on the PDF. The issuing dialog had an "Invoice notes (optional)" field that started empty, with a grey hint, and whose text was printed at the end of the document under a "Notes" heading — far from the "Payment terms" block, where a fixed "Bank transfer" line could contradict it. There is now a Payment terms field in the translator profile, with a starting text you can change ("Payment by bank transfer within 30 days of the invoice date. Please quote the invoice number as the payment reference."); every new invoice starts from it and can be adjusted for that invoice only; and the PDF prints it where it belongs, right under "Payment terms" and above the IBAN. If you write none, the invoice comes out as before. It is in English because the invoice PDF is entirely in English.
- memoQ analyses can be imported, in all four formats memoQ exports them in. "Import CAT analysis" now reads what the Export button of its Statistics produces: the HTML and the three CSVs — the one reflecting the results on screen, the per-file Trados-compatible one and the per-file one with all the information. Before, its CSV could be picked but fell into a single column — memoQ never separates with commas — and its HTML was turned away with "this is not a Trados report". Rows arrive already assigned to their category — 101% and pre-translated ones as context, repetitions, 100%, each band and the ones with no match — and "Fragments" is shown unassigned, like "Locked" in Trados: whether that is billed is each client's call. If the file holds several analyses one after another, the first one is imported and the dialog says so; if it holds several files, they are added up, without counting the totals row twice. Checked with the same analysis exported in all four formats: all four give 249 words and the same breakdown, and from there €18.10 at €0.09/word, both on screen and in the quote PDF.
- Wordfast Pro analyses can be imported too, in the four formats a translator uses. "Import CAT analysis" reads what its "Export report" produces: its own CSV, the Trados-compatible CSV, the HTML and the XLS. Rows arrive already assigned — context, repetitions, 100%, each band and the ones with no match — and "Ignored" segments are shown unassigned, like "Locked" in Trados. If the report holds several files, they are added up, and its totals table is not counted on top of them. Wordfast writes five more formats, meant to feed other programs: some do not even carry the repetitions or the new words, so they are not recognised and the file goes to the generic importer, where columns are picked by hand. Checked with reports generated by Wordfast itself: all four formats give the same 311 words and the same breakdown, and from there €22.09 at €0.09/word, both on screen and in the quote PDF.
Changed
- Save and cancel on the new-contact form are always in view. The form has thirteen fields in a 340 px panel, so its two buttons sat at the end of a long scroll: saving — or leaving without saving — meant scrolling all the way down. They now stay pinned to the bottom of the panel, with the fields scrolling underneath.
- You mark the status bar yourself, step by step. Issuing the invoice used to move the project to "Invoiced" on its own, and the bar then asked for a click on "Paid": it invited you to treat a brand-new invoice, sometimes not even sent, as already paid. The bar now follows what you actually do: you send the translation and click "Delivered"; the pending step becomes "Invoiced", dashed but not clickable while the client does not have the invoice; you create it and send it with "Send", and only then can it be clicked; clicking it moves the pending step to "Paid", which you click when the money arrives. The project stays in "Delivered" between issuing the invoice and clicking "Invoiced"; that changes nothing that counts: pending invoices, due dates and reminders all look at the invoice, not at the status.
- No tooltips in the status bar. The name of each step is already written under its icon, and what is missing before you can click it is spelled out in the line below — "issue the invoice first with Create invoice", "send the invoice to your client first with Send" — with no need to hover.
- One colour scheme for the status bar. The dashed outline of the pending step is always the same slate grey, the one used by secondary buttons: each step used to paint it in its own colour, so it changed colour as you advanced. And a step you have reached is always the same green — a finished project used to show four green steps and "Paid" in purple, as if it were something else. Each status keeps its own colour where it does tell things apart: the project list and the delivery calendar.
- The invoice card has the same buttons as the quote card. Edit and Download in grey, and Send in amber and twice as wide, just like there. The wide coloured button used to be Download — in blue, a colour no other button on the card uses — and Send was a narrow grey one, so two cards with the same layout suggested different things.
- The translator profile is split in two halves. It mixed what the client sees printed with what only the app uses: the IBAN next to the CAT rate table, the tax ID under "Personal information" and the Metrics currency in between. Now the top holds what appears on your documents — identity and contact, online presence, and billing and payment — and the bottom what the app uses — main currency, CAT rate table, post-editing rates and reminders — each half with a line explaining it. Within billing, the tax country comes first because the name of the tax ID ("NIF", "RFC") and of the tax in the following fields come from it, and the tax note gains an explanation of where it is printed and what it is for.
- A newly created project no longer looks quoted. Until now it started with "Quoted" filled in, as a completed step, and asked for a click on "In progress" even though the quote had not gone out yet. Now the pending step is "Quoted" itself, dashed and unfilled, and the hint reads "Click on Quoted to advance": the quote can be edited and sent as many times as needed, and the click, once the client accepts it, moves the project to "In progress".
- The quote has its own card, like the job and the invoice, instead of sitting inside the status bar. Its buttons read "Edit", "Download" and "Send" (or "Resend", once it has gone out), without repeating "quote" on all three. Once the project moves on, the card keeps the sending date and the download. The Invoice card follows suit: "Edit", "Download" and "Send".
- Dates spell out the month: "Sep 26, 2026" in English and "26 sept 2026" in Spanish, each language's convention (the CLDR medium format that browsers apply). They used to be numeric and switched order with the language (9/26/2026 vs 26/9/2026), so 3/5 could be March or May. This applies across the whole app — detail panels, lists, metrics, history, notices — and to the invoice and quote PDFs, which stay in English: "Sep 26, 2026" with the interface in English, "26 Sep 2026" otherwise.
- A custom calendar for picking dates, in all seven date fields. The Windows/Chromium one showed the date in the format of the Windows language, not the app's, and its mouse wheel scrolled weeks without changing the month in the header. Now the wheel moves between months, days from the previous and next month are greyed out, and there is a "Today" button (plus "Clear" where the date is optional). Keyboard: arrows to move, Page Up/Page Down to change month, Enter to pick, Esc to close.
- "Send deliverables" is locked until the quote is accepted, like "Create invoice" before delivery, and says what is missing: "Mark Quoted before sending deliverables".
- The confirm buttons of the send dialogs just say "Send" for deliverables, invoices and quotes; the dialog title already says what is being sent.
- The note under the invoice tax rates is now a single line that says what to do. It used to be three lines explaining what the buttons proposed — the country's standard rate and the 0% usually applied to a client abroad — buttons that explain themselves, and it never said the one thing that mattered: what to write and who to ask if in doubt. It now reads "Set VAT and Withholding if they apply. If in doubt, seek professional advice.", with both names coming from the fiscal profile rather than fixed: a Mexican translator reads "VAT and ISR", an Indian one "GST and Withholding".
- In English, "Encargo" is now translated as "Assignment" instead of "Job", in the detail panel and in every message.
- "New contact" is no longer a tab, it is a button. The Outreach panel's header had two tabs, "Contacts" and "New contact", and the second one led nowhere: it opened the new-contact form. An action button dressed up as navigation, which also left "Contacts" looking clickable while you were already standing on it. It now works like Projects: at the top sits the section title —"Contacts", "New contact" or "Edit contact", depending on what is below it, with nothing to click— and adding a contact is a button at the foot of the list. The form gains a "Cancel" next to its save button, the way out the tab used to be, and its labels —"Name", "Company"…— no longer sit centred over fields that are left-aligned.
- An empty list now just says "No contacts" again. It used to carry a three-line hint below it naming both doors —"New contact" and "Import contacts"—. With adding a contact turned into a button at the foot of the list, both announce themselves, and the hint was taking up half of a box that is already short on height.
- The contact search box now shares a row with the title, and is a magnifier. It used to have a whole row to itself, leaving the list with 199 of the panel's 652 px: four and a half contacts in view. It now sits to the right of "Contacts" —which moves left until it lines up right under the "T" of "All statuses"— and the "Search contacts…" text gives way to a magnifying glass pinned to the right edge, as in Windows Explorer; while there is something typed, the clear cross takes its place. The list goes from 199 to 262 px: from 4.6 to 6.2 contacts in view without scrolling. With the new-contact form open the search box is not drawn, since there is no list to filter.
- The Projects search box, the same. Same measurements as the Outreach one —a 12.5 px field in a 52 px row, instead of 13 in a 62 px one— and the same magnifier in place of the "Search projects or clients…" text. It also gains the clear cross, which it never had. And the same order: the status filter on top and the search below, as in Outreach, so the panel header is the same in both views.
- Support moves from the translator profile to Settings. It sat at the end of the profile, between the IBAN and the CAT rates: a section that is not configured at all, on the screen where you fill in the details that get printed on the invoice. It now closes the maintenance block, next to the backup, the setup guide and diagnostics, which is what you look at when something is not working.
- Every title in Settings is now left-aligned. All eleven came out centred, and the longer ones —"App password", with its notice beside it— looked differently aligned merely because they were wider. The two backup buttons, on the other hand, really were stuck to the left, and are now centred like the rest.
- The backup leaves the panel for Settings. It used to be a collapsible bar at the foot of Outreach, where it spent 50 px of height on something done once a month and where nobody working in Projects could find it. It now lives next to the setup guide and diagnostics, with both buttons and —this is what could not be lost— the notice of how long since the last one, which the File menu has no way to give. With the room it frees, the contact list reaches 7.4 contacts in view.
- The new-project form no longer explains where clients come from. The "Clients are your Outreach contacts…" hint showed under the dropdown while the list was empty; it has been removed.
- "No projects" now looks like "No contacts". It was a smaller line of text with nothing around it; it now carries the open-folder icon above it —the project icon throughout that view— and the same text size as its Outreach counterpart. The icon follows the reason for the gap: the folder when no project has been created, the magnifier when there are projects but the search box or the filter finds none.
- The interval between sends now lives only in Settings. The Outreach panel carried a twin of the field already there —same setting, same 3 to 300 second range— spending permanent height on a number you set once. Added to everything above, the contact list goes from the 4.6 contacts in view this release started with to 8.3, without dropping a single feature from the panel.
Fixed
- Activating a licence with the trial over left the app empty, and wiped settings on top of that. Entering the key on the "Your free trial has ended" screen got you in with no contacts, every counter at zero and none of your settings. The data was still intact on disk and came back on a restart, but in the meantime the app saved that emptiness over what was stored: the sender name, the email account details, the signature and the sending preferences were really lost, and the first template you touched reverted to the factory one. It happened right after paying. The window now reloads on activation and everything is where it should be. Contacts, projects, invoices and the tax profile were never at risk.
- "Check for updates" was not checking anything. The answer came from a cache that launching the app had just filled, so the menu kept saying "You're already on the latest version" even when a new one had shipped. It now really asks every time you click it, and says so when there is no connection instead of passing off a stale answer as current.
- And with the trial over it did nothing at all: the button stayed clickable and no message appeared. It now answers, and the result shows on the licence screen itself.
- Nor did it do anything once you had hidden the notice with "Not now": the strip stayed hidden and, since there really was a new version, the "you're up to date" message did not come up either. Asking for the check by hand now brings back a notice you had hidden.
- A semicolon-separated CSV is no longer read as a single column. Excel in Spanish and French exports "CSV (semicolon delimited)", and memoQ's statistics are only exported with semicolons or tabs. The app read everything as if it were commas, so the whole file fell into one column: importing contacts showed one very long header and nothing else, and importing an analysis recognised no category at all. The separator is now decided by reading the file itself, not its extension, and a comma inside "Dupont, Marie" is still part of the name.
- "File → Import Backup…" did nothing at all. It has never worked since it existed, and for two reasons at once. It pointed at the "Import contacts" file picker, so it would have asked for a CSV or an Excel file and read your choice as a contact list; and even pointing at the right one it would have opened no window either, because the browser inside the app only opens a file picker when a click of yours asks for it, and a menu command does not count as one. The file-picking window is now opened by the app itself, outside that rule, and the restore carries on as normal: confirmation included.
- Trados analyses now really import, in any of their formats. "Import CAT analysis" now reads the "Analyze Files" report (or the "GroupShare Analyze and Translate" one) just as Trados leaves it: the
.xmlin the project's Reports folder and whatever its "Save As" produces —XML, Excel, HTML or MHT—; the Excel, HTML and MHT ones with Trados in English, German, Spanish, French or Italian. It sorts it by itself: the rows come with the Trados names, in the app's language, and in the same order as in its report, each one already mapped to its category, and all that is left is to check it and confirm. Whatever the report does not make clear whether to charge is left unmapped, for you to decide: "Locked", internal fuzzy matches when the report's total does not prove they are counted apart from the other rows, and categories that the Trados table does not show. If the table in an export is not laid out as expected, the import says so and asks for the XML instead of sorting it wrongly. Before, only the Excel file could be picked, and it was misread: it opens with the title and the analysis settings, repeats every category file by file —so they were added up twice— and, with Trados in French or Spanish, it did not recognise the new words. With a real 862-word analysis, the import suggested 26; now, in any of the four formats, 862. - The rate accepts a decimal comma. Typing "0,09" as a project's rate silently dropped the comma and left "009": nine euros per word, a hundred times more. The comma now counts as a decimal point, and in "Source words" a "1.234" with a thousands dot is 1234 words, not 1.234.
- And the same in the other number fields. In the recurring billing plan, the comma was also dropped as you typed it: an amount of "150,50" became €15,050 a month and "1.500,00" €1.50, and a VAT rate of "5,5", 55%. The amount is now read with a decimal comma or point and with a thousands separator —"150,50", "1.500,00", "1 500", "1,500.00"—, a "1.500" is fifteen hundred, and the amount as it will be invoiced shows under the field; anything that cannot be read without guessing, such as "150 50", is flagged and cannot be saved. An expense amount is read the same way and shows next to the button how it will be saved: it was a browser number field, which never takes a dot as a thousands separator and accepts the comma or not depending on the Windows language. The VAT and withholding rates when issuing or correcting an invoice and the CAT rate weights were fields of that same kind, and every percentage now accepts a comma with any Windows —"5,5"—, pasted with its "%" too. And in manual time entries, "1,5" hours was one hour and the half hour was lost: it is now an hour and a half, and "1:30" and "1h30" work too.
- A PDF no longer opens the importer as if it were a spreadsheet. The file picker lets you choose "All files", and the PDF analysis agencies often send opened the column mapping with the PDF's internals as headers; "Import contacts" did the same with a vCard. Each import now reads only the formats its picker offers, and anything else shows a message saying which ones work.
- With a window open, the keyboard no longer reaches what is behind it. The app's windows let the focus out: pressing Tab from "Import CAT analysis", or from the terms of use on first launch, reached the header buttons behind the overlay, and from there the whole page could be used with the window still open. Pressing "Import contacts" or "Import CAT analysis" again also left the new file with the column mapping —or the row assignment— of the previous one, which fell out of line over it without warning. Now the focus moves into the window when it opens, Tab and Shift+Tab cycle inside it without leaving, and closing it returns the focus to the button it was opened from; and each imported file opens its window from scratch. Escape also closes only the window on top: pressing Escape on the confirmation question when sending deliverables without attachments closed both, and the email being written was lost.
- The menu no longer acts behind an open window either. "New Contact", "New Project", both backup entries and "View Getting Started Guide" still worked with a window in front: Ctrl+N switched view out of sight, and "Import Backup…" could restore the whole database with a half-written email on top. They are now greyed out while a window is open, the way Windows treats the menu of a window that has a dialog in front, and come back as soon as it closes. Copy, paste, zoom and quit stay available: they are needed inside the window.
- The language switchers, the "skip" links and the CAT analysis links work with the keyboard. The "ES | EN" in the header and the one in the terms of use on first launch, the "Skip step" and "Skip tour" links in the getting-started guide, and "Replace analysis" and "Remove analysis" in the project form only responded to the mouse: Tab skipped them, and Enter and Space did nothing. In the terms, which cannot be closed without accepting them and no longer let the focus out, keyboard users had no way to change the language before reading them. Now Tab reaches all of them, with the browser's focus ring, and Enter or Space activates them; they look the same as before. Screen readers can also tell which language is active.
- The CAT breakdown table no longer shows one cent more than the project amount. It added up each category's amount before rounding, while the "Calculated amount" and the PDF add up the rounded ones: two categories were enough to see €49.73 in the table above an amount of €49.72. Its word counts now also follow the app's language: they used the system's, so with the system in another language they did not match the amounts next to them.
- A name containing "$" or braces no longer scrambles the messages it appears in, such as the confirmation for deleting a contact or sending them an email, the one for generating a recurring invoice or the summary of a Trados analysis. The name went through a substitution that interprets certain combinations with "$": "Libro de $'final" duplicated the rest of the sentence and left a
{language}in plain sight, and "$$" became a single "$". And the placeholders were filled in one at a time, so a contact called "Ana {email}" got the email inside their name while the real placeholder was left in plain sight. The name is now copied as is. Emails to clients were not affected: they fill in their variables another way. - Notifications and client folders answer to the keyboard. Every notification in the bell's dropdown and every client row in the projects tree only worked with the mouse: Tab walked straight past them and neither Enter nor Space did anything, so without a mouse there was no way to open a notification or collapse a client. They are now part of the tab order, they fire on Enter and on Space, and tabbing draws a ring around whichever one has focus. The notification of a recurring invoice being generated stays out of the tab order while it lasts, just as it was already out of the mouse's reach. And a screen reader announces each folder as "Client NAME, N projects" instead of reading out everything in the row. Nothing on screen changes.
- The first press on a client folder is no longer lost. In the projects tree, collapsing a client nobody had touched since the app opened took two clicks: the first one was dropped. It now collapses on the first one.
1.1.0 — 2026-09-21
The first release that actually ships. It replaces the installer uploaded on 10 August under this same number: that build was produced before the licensing code existed, so it did not include the activation its own release note announced.
Added
- A proper menu bar (File, Edit, View, Window, Help), with the app's real features instead of Electron's generic default: new contact or project, export and import backup, check for updates, reopen the getting-started guide, download the technical log, terms of use and support contact. In Spanish or English depending on the app's chosen language.
- New-version notice. On startup the app checks whether a later version has been released and, if so, says so in a strip below the header with a download link. It never downloads or installs anything on its own. "Not now" silences that particular version, so the notice comes back when the next one ships. Offline, the strip simply does not appear.
- Licence activation and validation. The app requires an active licence to run, and lets you deactivate the current computer so you can activate it on another one.
- "Send delivery" on the job card. Previously you had to scroll to a separate card at the bottom of the page, upload the files there and then, in a second step, tick them and send; anyone who did not know that card existed could not find how to deliver the work at all. Files are now picked inside the send dialog itself.
- "Send invoice" on the invoice card, with the invoice file visible and the download button beside it. Emailing the invoice was possible before, but only through a path you had to know about in advance.
- CAT category breakdown on the project page. It was previously only visible by reopening the edit form.
- Free-text language pair, with the common combinations offered as suggestions. It used to be six fixed options, all between English, French and Spanish, plus an "Other" that forced a detour on every project.
- Phone, address and tax ID in contact export and import. They were dropped on every export.
- Charts in Metrics: collected per month over the last twelve, and collected per client, largest first. Until now the tab was only figures and tables: you could read how much had been collected in total, but not whether this month is going better than the last, nor which clients the money comes from.
- A configurable main currency in the translator settings. Totals in the header and in Metrics are summarised in it. The most-billed one is suggested, but the choice is the translator's: it is usually the currency they think and pay taxes in, which need not be the one they earn most in.
- A support address inside the application: in the translator profile, next to the technical log download button, on the server-unavailable screen and on the recovery screen after an error. It lived only on the website, so anyone who got stuck inside the program had no one to write to without leaving to look for it.
- The license activation screen now says who to write to. The messages for a suspended or blocked license, or one activated on too many devices, all ask you to contact support, and that screen —the very first one, with the whole app behind it— gave no address at all: the only one in the app lives in the translator profile, on the far side of the door that won't open.
- The setup guide can always be reopened, from Settings. It used to be a header icon that only appeared if you had skipped the profile step, so anyone who filled in their name —most people— lost the wizard and the tour for good. It now sits next to Diagnostics, where the rest of the housekeeping lives, and takes up no room in a header that has none to spare.
- The empty contact list now says where to start. On a fresh install it was the first thing you looked at —an icon, "No contacts" and nothing else— with both doors in plain sight but neither announcing itself as the first step. It now names both: the "New contact" tab above and the "Import contacts" button below. It only shows while the list is genuinely empty, never when it is the search box or the status filter that found nothing.
- The new-project form now says where clients come from when there are none. Anyone who buys the app for the invoicing goes straight to Projects and finds the client dropdown with a single option, "pick one": clients are your Outreach contacts, which is a different tab, under a different name, with nothing tying the two together. The hint only shows while the list is empty.
- The onboarding wizard now explains what the tax country decides, with the same sentence the translator profile already used: that choice drives the name of each tax, the rates offered, the tax ID label and whether the invoice carries Veri*Factu. It was the only one of the two places where you pick it that said nothing — and it is the first one you go through.
- 14-day free trial. The whole application can be used, with no key and no card, for fourteen days from the first time it is opened. A strip under the header shows how many are left, turning from amber to red for the last three; from there you can buy a license or enter one you already have. Once the time is up, the application asks for a license to get back in and says so in those words, instead of pointing you to a purchase email that never existed. Your data stays where it was.
- Gestrics now downloads for Mac too. A single installer that covers both Apple Silicon and Intel, with nothing to choose between. It carries no developer signature, so the first time macOS refuses to open it and you have to allow it from System Settings → Privacy & Security; the website explains this next to the download button.
Changed
- The approximate total in Metrics now converts 24 currencies, not four. Exchange rates were only fetched for the dollar, pound, Swiss franc and Canadian dollar, so invoicing in Swedish krona, Mexican pesos or yen left that money out of the consolidated total. Rates are now fetched for every currency in the dropdown that the European Central Bank publishes. The four it does not — Argentine peso, Chilean peso, Colombian peso and dirham — are still left out, and the screen lists them rather than hiding it.
- The currency dropdown is no longer 159 entries long. Reaching the euro meant scrolling past the Afghan afghani, the Angolan kwanza and the Azerbaijani manat. It is now 28 — the ones a translator with international clients actually gets paid in. A project already saved in any other one keeps it: it still appears in that project's own dropdown, so opening and saving it does not change its currency.
- The Spanish interface no longer mixes "follow-up" with "seguimiento". The English wording is unchanged — there "follow-up" is the right term.
- Shorter, clearer button labels. The two "Show key" buttons in Settings are now "Show"; the Stripe one is "Connect", pairing with the "Disconnect" next to it; "Deactivate this device" is now "Deactivate"; and the getting-started button says what it opens: "Open getting-started guide".
- The privacy policy now also lists the version check. It is the fourth connection the app makes, alongside the mail server, Keygen and the exchange rates, and that list exists in order to be complete. No data is sent — it is a read request for a static file — but it now says so. Because this changes the list of processing activities, the app asks for the legal texts to be accepted again next time it opens.
- The main currency is now picked by name, not by its code. The profile field shows "Euro" or "US Dollar", with the code in the tooltip, and the list is sorted alphabetically by that name. The currency dropdowns on a project still show the code: they sit inline in narrow fields where a long name does not fit.
- The app's English is no longer a literal translation of the Spanish. An audit of all 867 pairs, read one by one: calques were removed ("E.g.:" where "e.g." belongs, Spanish dashes, sentence orders copied across) and terms that had several forms at once were unified — "encargo" was "job" twelve times and "assignment" once, and "factura rectificativa" had three different English words, one of them ("credit note") a different document altogether.
- The "Send delivery" button is now "Send deliverables". It opened a dialog titled "Send deliverables", and what gets sent are the files, not the job.
- The terms of use no longer claim the invoice complies with Spanish Royal Decree 1007/2023. The invoicing section said that, on the Spain profile, the app generates documents "following, in 'No Veri*Factu' mode, the technical requirements" of that decree. That was not accurate: the hash-chained record the app keeps is its own traceability measure, and neither the QR code nor the hash follows the format required by Order HAC/1177/2024. The text now describes what it actually does and states plainly what it does not yet meet, so nobody relies on it with their accountant.
- Full visual overhaul: new wordmark, consistent icons throughout, a shared design for dialogs, skeleton placeholders instead of spinners, custom scrollbars, and a single system of corner radii and shadows.
- Every piece of interface copy rewritten, in both Spanish and English.
- Template editing and preview merged into one screen, instead of two separate modes.
- The email subject saves itself as you type.
- The invoice is no longer stored as a file: it is generated at the moment you download or send it, so it always reflects the current data. Previously a copy frozen at invoice-creation time was kept, which meant anyone generating a payment link afterwards could send the client an invoice without that link.
- Currencies are named by their ISO code — EUR, USD, GBP — in Metrics and in the header, instead of by symbol. Only the euro and the dollar have a symbol in Spanish, so a single list mixed "€" and "US$" with "GBP" and "CHF".
- The header shows a single abbreviated total in the main currency — "EUR 201k" — instead of a list of per-currency amounts that did not fit the cell. The full amount appears on hover, and a negative profit is shown in red.
- A freshly installed Metrics tab no longer greets you with a grid of dashes. Four cards reading "—" and three tables repeating "Not enough data" were the first impression for someone who had just installed the app.
- Tax-number placeholders no longer show a Spanish format. "00000000X" appeared under fields labelled RFC, SIRET or GST depending on the country. In the Spanish interface the client's field was also labelled "CIF / NIF", so a Mexican translator saw Spanish wording above their client's RFC; it now uses the same neutral wording the English interface always had.
- The "Quoted" counter explains what it counts on hover: quotes already sent to the client. It read 0 while the first project sat in the "Quoted" state, and without an explanation that looked like a fault at the most fragile moment of all.
- The project form's examples are prefixed with "E.g." so they do not read as data already entered. The new-contact and new-project buttons lose their "+".
- The rate writes its decimal separator according to the language: "0,11 EUR/word" in Spanish, where it previously read "0.11" right below amounts written with a comma. The quote the client receives stays in English, with a point.
- The "server unavailable" screen no longer asks for a terminal command. It showed
cd server && npm startto someone with no terminal —the local server is started by the application itself— and no folder by that name even exists. It now states the only thing a user can actually do: close Gestrics and open it again, which relaunches the process. - Connecting your email is no longer required to get in. The onboarding wizard's "Connect your email" step could not be skipped, does not close on Escape or on an outside click, and covers the rest of the app — so anyone without an app password to hand was locked out of what they had just installed, even though projects, quotes and invoices work without email. It can now be left for later: while it is still pending, the Settings gear carries an amber dot that explains itself on hover, and any attempt to send says so in the interface language instead of failing against the server.
- The wizard's email step now says which account is connected, not just that one is. A green tick with no address asks you to take its word for it, and that is exactly the doubt that leads to retyping an app password that was fine.
- The wizard's second step was called "Billing details" and collected two of the profile's twenty-seven fields. It is now "Name and tax country" and says where the rest —tax ID, address, IBAN— gets filled in, instead of implying an invoicing setup that stops halfway.
- The Terms of Use now cover the trial period. Section 3 becomes "Trial period, license to use and activation" and describes the fourteen days: every feature, no key and no means of payment, counted on the device itself. It previously said only that use was subject to payment and a license key. Because this is a substantive change, the application asks for the terms to be accepted again the next time it opens.
- The support address is now
contact@outreachstudio.app. It replacessoporte@, and it is the one shown in the translator profile, on the "server unavailable" screen, on the recovery screen after an error, on the licence activation screen and on the line that asks for the send log to be attached. It comes from a single constant, so all five change together; the website advertises the same one.
Fixed
Backup
- Restoring a backup silently dropped eleven columns. The restore writes each table naming its columns one by one, and the ones added later were never added there. Among the losses: the issuer identity frozen at invoicing time — so an old invoice went back to using your CURRENT details — the tax country it was issued under, the date of supply, the payment-reminder state — your client received the whole chasing sequence again for an invoice they may already have paid — the Stripe payment link, and the flag marking a deliverable as already sent. The quietest one: the period of a recurring invoice, which is what stops the same month being invoiced twice; without it, restoring was enough to issue that month's invoice a second time. A backup now returns exactly what it stored, and a check verifies it by exporting, restoring and comparing.
Invoices and quotes
- A recurring plan's card read "Source words 1" and "320.00 EUR/word". A monthly fee is charged neither by word nor by hour, but internally it is stored as one word at a "rate" equal to the fee, and that showed up raw on every retainer. The invoice PDF already handled it; the card now does too, showing the fee under its own label.
- The quote no longer disappears once the job moves on. As soon as the project left "Quoted", the PDF the client is looking at could no longer be downloaded: getting it back meant moving the project to its previous state. Its download button now stays, without the edit and resend options, which no longer apply there.
- A job could charge a cent other than the one its own lines added up to. With a CAT breakdown, the total was worked out by summing raw amounts and rounding at the end, while the PDF prints one already-rounded row per category: at a rate of €0.11, the five rows add up to €145.69 and the total read €145.70. Same for hourly work, where genuine half-cents turn up: a quarter of an hour at €32.50/h is €8.125, an amount that does not exist in money, and it was stored that way every time you stopped the timer. The total is now always the sum of what is printed, and every amount the app CALCULATES — words by rate, hours by rate, CAT breakdown — is rounded to the cent before being stored.
- The invoice ledger filed a number its own signature did not back. The taxable base went into the hash-chained record exactly as it came out of multiplying words by rate — 1,480 × 0.14 gives 207.20000000000002 in floating point — while the hash sealing that record is computed on the rounded figure. None of this showed on screen or in the PDF, which always formatted correctly, but anyone reading the database directly — an audit, a future export — got the dirty value, and base + tax did not match the stored total.
- A quote already sent looked exactly like one never sent. The project card still read “Send the quote to the client or edit it first” weeks after it had gone out: the only place that knew was the “Quotes” counter in the header, so it was easy to send the client the same quote twice. The card now shows the day it was sent and the button becomes “Resend quote”.
- A newly created recurring billing plan did not appear under Alerts until the app was restarted. The dialog itself tells you generation is confirmed from Alerts; you went there following that instruction and found it empty. It now shows up — and disappears when the plan is deleted — without a restart.
- The reason for a correction is printed on the invoice the client receives, and the help text did not say so. It only said it was “recorded alongside the correction”, which reads like an internal filing note. It now warns that it is printed on the client's document and that it should be written in English, like the rest of the invoice.
- A recurring invoice was issued without the project or the invoice showing up anywhere. Confirming it from Alerts while already on the Projects tab, the app reported it had been generated and the list did not change: the new project and its invoice — already recorded in the ledger, with its number — were nowhere to be seen until the app was restarted. The list only reloaded when switching tabs, so it failed on exactly the likeliest path: looking at your projects and confirming the alert. It now refreshes on its own and opens the new project, which is what it meant to do all along.
- One invoice in ten did not add up to its own total. VAT and withholding are rounded to the cent, but the total was computed on the full decimals, so the totals block could contradict itself: on a €50.03 base the invoice read 50.03 + 10.51 − 7.50 with a TOTAL of 53.03 instead of 53.04. Sweeping bases from €50 to €10,000 at the usual rates, 1,160,062 of 11,940,012 combinations failed to add up. Each amount is now rounded to its currency's smallest unit — the yen has no cents, the Kuwaiti dinar has three — and the total is the sum of those figures, which is what gets paid.
- The CAT breakdown lines did not add up to their own total. Each line was rounded on its own while the total came from the exact amounts, so the printed lines could differ from the figure below by a cent: at €0.0333 per word, four lines added up to €43.92 while the total read €43.91. On a quote that invites a question from the client; on an invoice the mismatch was against the taxable base, which is precisely what those lines exist to determine. The difference is now allocated to the largest line and the document adds up.
- An invoice with no issue date vanished from the accounting CSV. It was dropped even when exporting everything with no date range, so an issued invoice could simply never reach your accountant without anything saying so. It now appears in the full listing, with the date column blank so the problem is visible; a quarterly export still leaves it out, since without a date it cannot be assigned to a period.
- A client name in Hindi (or any Indic script) came out as empty boxes. The fallback font meant to cover them was looked up under a filename that does not exist on Windows, so it was never used. It now prints correctly, and the internal warning that reported the lost characters — which did work — stops firing.
- New warning when invoicing a client whose details are in Arabic or Hebrew. The PDF prints those letters reversed and unjoined, because it does not lay out right-to-left text. Since the recipient's name is mandatory on an invoice, the dialog now warns you before issuing instead of letting you find out in the document you already sent.
- A country written without accents left the invoice missing its mandatory wording. The dropdown on the client card stores canonical names, but importing contacts from a spreadsheet stores whatever the file says: "Espana", "Belgica", "Paises Bajos", "Deutschland", "Holanda", "USA"… None were recognised, and an unrecognised country meant the app did not print the reverse-charge wording on an intra-EU invoice. Accents, dots and the most common endonyms now resolve alike. And when the country still isn't recognised, the issuing dialog warns before you issue instead of staying silent.
- Editing a paid invoice wiped its payment date. Just opening the invoice and saving again was enough, even without changing anything: the dialog doesn't send the payment date, and the server blanked it anyway. From then on, the CSV for your accountant reported that invoice as unpaid with an empty payment-date column, it dropped out of "Collected" and out of the average time-to-payment in Metrics, and the job card offered to generate a payment link again for something your client had already paid.
- The default due date counted from today, not from the invoice date. An invoice dated earlier said "30 days" and fell due after 47. The sum was also done in hours: the day daylight saving ends is 25 hours long, so the term landed a day early. It is now 30 days from the invoice date, counted in days.
- Dates were off by one day outside the Madrid time zone. A date stored as
2026-08-20was read as midnight UTC, so in Mexico, the United States, Brazil, Chile, Colombia, Peru, Argentina or Canada it was shown and printed as the 19th. It affected everything at once: the invoice issue and due dates, the quote's validity, the date of supply, and every date in the interface. Writing failed the other way round — the UTC day was used — so invoicing in the afternoon in Mexico issued the document with tomorrow's date, and that date is frozen into the invoice ledger. Alerts were off too: an invoice showed as overdue on its own due date, and the payment reminder reached the client a day early.
- You could issue an invoice without your own tax details. Until now the tax ID and address were optional fields in Settings, so a fresh installation could generate an invoice whose issuer was just a name. Such an invoice is not valid anywhere. The app now refuses to issue it and says exactly which fields are missing and where to fill them in; the rejected invoice consumes no number and leaves no trace. The client's details are not blocked — their tax ID is not always mandatory, and requiring it would prevent invoicing a private individual — but the issuing dialog warns when they are missing and explains when they matter.
- Correcting an issued invoice left two documents in circulation under the same number. When you changed the VAT or withholding on an invoice you had already sent, the app asked for a reason and recorded the correction in its internal ledger, but the PDF still came out with the original number and date and the new amounts: the client ended up with two different pieces of paper both claiming to be invoice 2026-001. The QR code, which did read the right ledger entry, also contradicted the heading printed right above it. The document is now issued as what it is — "RECTIFICATIVE INVOICE #R-2026-001", with its own date, the invoice it corrects, the reason and the rectified amount — and the QR agrees with the heading. The project card and the email attachment use that number too.
- The invoice said two different things about when it was due, and neither was yours. The top right read "Payment due: 30 days end of month" and halfway down the page "Payment due upon receipt": both were hardcoded and contradicted each other, while the due date you actually picked when issuing never appeared anywhere. The invoice now shows that real date, next to the issue date. Leave it blank and nothing is printed, rather than inventing a term.
- "Invoice notes" did not appear on the invoice. The issuing dialog asks for that text under exactly that label and suggests using it for an account number or payment terms; it was then stored and never shown on the document. It now prints below the payment terms, on its own page if needed and without truncation — it is where a legal mention goes, such as the reverse charge on an intra-EU invoice.
- Changing your own details rewrote invoices you had already sent. The issuer's name, tax ID, address and bank details were read from Settings every time a PDF was downloaded, not from what they were at issue time. Moving house, fixing a typo or incorporating changed who appeared as the issuer on every earlier invoice, including the ones the client already had. That identity is now frozen on the invoice, and the QR code likewise stops attributing an old invoice to a new tax ID. Invoices issued before this change behave as they did, since they have nothing frozen to show.
- A foreign client's name was destroyed in the PDF. Both documents were generated with the PDF format's standard fonts, which only cover the Western Latin alphabet. Any other character came out as garbage, with no warning: a Polish agency called "Biuro Tłumaczeń Sp. z o.o." was printed as "Biuro T'VÖ7eB7.". The same went for Czech, Turkish, Romanian, Greek, Cyrillic, Japanese, Chinese and Korean — and the recipient's name is a mandatory invoice detail. Only Spanish accents and the euro sign were spared, which is why invoicing within Spain never showed the problem. Both documents now embed a full font, with automatic fallback for alphabets that font does not cover, and anything no installed font can represent is recorded in the application log instead of silently vanishing.
Onboarding
- Switching email provider in the wizard left the previous provider's error on screen: picking "Custom" after failing with Gmail still showed the notice about the Gmail app password, below a form that was now asking for something else.
- With a "Custom" email provider, the "Use SSL/TLS" checkbox came ticked while the suggested port was 587 — precisely the combination that cannot work, since 465 is TLS from the first byte and 587 is STARTTLS. Anyone who typed their own server and left the suggested port failed on the first attempt without having got anything wrong. The checkbox now starts unticked, matching 587, and follows the port on the two values where the answer is not open to debate; on any other (2525, 25, one of the provider's own) whatever you ticked by hand is respected. This covers both forms, the wizard's and Settings'.
- Connecting your email from the onboarding wizard left the Settings screen looking as if no account existed —provider "Gmail", every field empty— with the email already working. The wizard only wrote where the server reads to send, and that screen is painted from somewhere else that nothing was updating; for the same reason, reopening the wizard asked again for the password of an account that was already connected. The password is still not stored there.
Invoicing and tax
- A recurring plan could skip its own first month, and nobody claimed it. The date a plan is created is stored in universal time, but it was read as if it were the translator's local time. For anyone working west of Greenwich, a plan created early on the 1st was recorded as belonging to the following month: that instalment never showed up among the pending periods, the plan counted as up to date, and the retainer went unbilled with no warning at all. In Spain the bug was invisible, because there both readings agree.
- The e-invoicing notice switched its wording a day early or a day late. The date each country's mandate starts to apply was compared against the universal day instead of the local calendar day, so the notice could move by one day depending on the time zone.
- Withholding tax now appears under the name it has in the issuer's country — ISR in Mexico, IRPF in Spain — in the form, on the invoice card and in the PDF. It previously always said "IRPF", so a Canadian invoice displayed a Spanish tax, and a Mexican one could show four different names for the same tax.
- Negative VAT and withholding rates are rejected on both creation and rectification.
- A rectification that only redistributes VAT and withholding without changing the total is now recorded as such.
- An invoiced project can no longer be deleted.
- The manual project status can no longer mark a project as invoiced when no invoice exists.
- CAT breakdown amounts respect each currency's decimal places.
- A skipped month of recurring billing was lost for good: if the app was not opened for a month, on returning only the current one was generated and the plan was marked as up to date, with no warning and no way to recover the missed month from any screen.
- Restoring a backup could issue the same month's invoice twice, each with its own number and its own ledger entry.
- The label on the profile's tax-note field was hardcoded to "VAT / Tax note": one country's tax names on the same line, whoever was looking. It now comes from the fiscal profile like the rest of the app — "GST note" on an Indian profile, and the translated generic when the country has no term of its own.
- The IBAN placeholder suggested a Spanish-shaped number (
ES00 0000…) whatever the fiscal profile said. It is now neutral (XX00 0000…): it keeps the hint about how an IBAN is grouped without assuming the country, and it matches the BIC placeholder beside it. - The accounting CSV export hardcoded both tax column headers in Spanish ("% IVA", "% IRPF"), ignoring the fiscal profile: a translator with a Mexican profile got an "IRPF" column for what their country calls ISR, contradicting the PDF of that same invoice. With the interface in English, the whole header row, each row's status and the file name still came out in Spanish.
- The "Correction history" for an invoice named the withholding tax generically instead of by the name it has in the translator's country: with a Mexican fiscal profile it read "Withholding" where the rest of the app already said "ISR". The VAT on that same line was already correct.
- The warning about a negative tax rate named IVA and IRPF, two Spanish taxes, regardless of the translator's country: a Mexican user was told the problem was their IRPF, which does not exist there — their withholding is ISR — and an Indian user, who only has GST, got the same. It now refers to "tax rates", naming none of them.
- Withholding was labelled "IRPF" on almost everyone's invoice. Only Spain and Mexico had a name of their own for it, so a Colombian, Argentine or Chilean translator — or anyone from the remaining countries — saw the Spanish tax named where theirs belonged. When a country has no specific name, it now says "Retención" (plain "Withholding" in the English interface). VAT is unchanged: that one really is called the same across the Spanish-speaking world.
- The reason field for a credit note asked for it "when changing VAT/IRPF" and offered "VAT applied incorrectly" as the example, two lines below fields that did call each tax by its own name. Those two sentences now use the country's name as well.
Data and backups
- Restoring a backup kept the contact but lost its entire history. Not any more.
- Restoring no longer loses creation and modification dates either.
- Advancing a project's status deleted every deliverable, including files that had never been sent to anyone. Only files that actually reached the client are removed now.
Metrics
- Opening the tab took the whole app down. Going to Metrics replaced the window with the "Unexpected error" screen, the message at its foot: "Cannot access 'expenseForm' before initialization" — in the installed copy, minified, "Cannot access 'M' before initialization", which tells nobody anything. Reloading brought the app back, but going into Metrics again took it down again. The cause was the very change in this same version that cut the currency dropdown down to 28: so that an expense saved in an uncommon currency keeps its own, the list started reading the currency of the expense being edited — and here it read it before it existed. Of the four currency dropdowns that were touched, this was the only one with the bug. The tab opens again, and editing an expense in a currency outside the short list — Thai baht, say — still keeps its option.
- The header overflowed when several currencies were involved: the amount spilled out of its cell and over the label next to it.
- The "Net profit" card stretched across the full width when it wrapped onto a second row, and stopped looking like one card among others.
- The average-rate table showed rows that looked repeated — two "Technical", two "EN-ES". They were not: rows are grouped by label, currency and unit, because averaging 0.15 € with 0.18 $ would mean nothing. Each row now states what tells it apart from its siblings.
Outreach
- Stray spaces were only trimmed from the email address. A name or company pasted from LinkedIn or a spreadsheet kept its leading and trailing spaces, and those went straight to two places the client sees: the first line of the cold email ("Hi␣␣␣␣Marie Dupont␣␣␣,") and the client block on the invoice. Every field is trimmed now, and anything left blank is stored as properly empty.
- Changing a contact's email address wiped its history without asking. Fixing a typo in the domain destroyed the logged sends, the contact dates and the follow-up count, and sent the contact back to "Pending"; the notice appeared afterwards, once done. You are now asked first, told how many sends will be lost, and only when there is something to lose. Cancelling saves nothing and leaves the form as it was.
- A name made only of spaces got past the form and came back from the server as "failed to save contact", as if the app had broken rather than a field being missing.
- Saving a contact could leave it with no name or an unusable email address. The check existed when creating one but not when editing, and editing an already-deleted contact reported success.
- The daily sending limit was saved and displayed, but never enforced.
- Cancelling a batch send during a retry wait took up to a minute to take effect. It now responds almost immediately.
- The estimated duration of a batch send was overstated, worst of all on small batches.
- Contacts whose last send failed showed up as "Pending", with no way to tell them apart from contacts never contacted at all.
- Contact search ignores accents: "jose" finds "José".
- The 5 MB attachment limit was advertised but never checked; the failure only surfaced on sending, as a confusing email error.
- Email addresses with leading or trailing spaces are trimmed on save.
- Deleting a contact could be blocked with no way out by glossary terms or recurring plans that no screen let you manage.
- The notice that trims a batch send on reaching the daily limit left a literal
{{remaining}}on screen in its second sentence ("Sending to {{remaining}} of 8 contacts"), in both Spanish and English: the placeholder occurs twice in the string and only the first one was being filled in. - Pressing Enter at the end of a template did nothing, and whatever you typed next ended up stuck to your signature. Adding a postscript or a link below "Best regards, [Your name]" was impossible: the new line was never drawn, so the caret fell back to the previous one. It also left an invisible line break at the end of the saved text, which went out with the email.
- The Subject line gave no warning about braces that aren't real variables. Typing something like
{{tarifa}}there raised no warning — the template body did — and still stopped the send, marking the contact in red. The warning now appears next to whichever field causes it, subject or body. - A batch send with one of those braces marked every contact in the batch as failed, one by one, over a problem that belongs to the template and not to any of them. It is now flagged before the batch starts and the contacts are left as they were, the same as already happened with a missing subject, no email account or an empty attachment.
- A contact with no company was marked as failed if the template used that tag, with a message sending you off to check the template — when the template was fine and what was missing was one of their own details. Company is optional, yet it was the only one of the four contact fields treated as required when sending. And since failed contacts re-enter the next batch, it failed again every time. It now comes out blank, as specialty and languages already did, and before a batch starts you are told how many contacts are missing a detail the template uses, so you can cancel and fill it in. The same happened in the Projects emails — payment reminder, quote and delivery — which now also accept all five contact tags instead of just two.
- Undo after inserting a tag deleted something else. The tag went in through a route the browser does not record in its history, so Ctrl+Z skipped it and undid the previous edit instead: a word on another line disappeared and the tag stayed put. Same when pasting.
- Inserting a tag between two words left a double space.
- A tag typed by hand still showed as
{{nombre}}. It now turns into a tag like any other when you leave the editor. - Dragging formatted text into the editor smuggled its HTML in. Pasting already stripped it; dropping did not.
- The Subject line now shows what will go out underneath, with the same tags and the chosen contact's details. Before you only saw raw braces.
- Emptying a template and saving brought the factory one back, silently, and that was the one being sent. You are now told it cannot be left empty.
Sending email
- The "no email account" warning could lie in both directions. The header decided whether an account existed by looking at a copy kept inside the database, while sending uses the real credentials, which live encrypted outside it. The two drifted apart: wipe the database and the warning stayed on forever with email working perfectly; and the other way round — restoring a backup, which carries the username but never the password — the app treated as configured an account every send was going to fail on. And it was not just the warning: the Outreach batch send was gated on that same copy, so with the database wiped it refused to send anything — "no email account configured" — while email worked perfectly, and after restoring a backup it started the batch only to fail contact by contact. All of that now asks the server, which is the side holding the credentials, and it also tells apart a third case that did not exist before: an account that is saved but rejected by the provider, with its own warning in the header and, in Settings, a red dot reading "Saved, but the provider rejects it" instead of the green one reassuring you about a password that does not work. The welcome wizard was taking the same wrong path: it counted an account with a saved address but no password as connected, and now only does so when the server confirms it can send.
- The two emails that ask for money were the only ones not greeting the client by name. The quote and the delivery said “Hi Anke,”; the invoice and the three payment reminders, a bare “Hi,”. And the invoice subject was the only one of the seven carrying no reference at all — “Invoice for Translation Services” — so three invoices to the same client arrived with identical subjects and their mail client stacked them into a single thread, which is the opposite of what chasing an unpaid invoice needs. All four now greet the client by name, and the invoice subject carries its number and the project. If you had already rewritten a template, yours is kept: this only changes the factory defaults.
- Sending an invoice said “Deliverables sent”. The dialog already adapted everything else — title, icon, button and email body — but the confirmation message had been left out.
- The delivery and the invoice could go out promising an attachment that was not there. The email delivering the translation says “Please find attached the completed work”, and the invoice one, “Please find attached the invoice”. If no file was added, or if the PDF was removed from the attachment list before hitting send, the email went out anyway: no warning, no way to undo it, and a client reading the promise of a file that was not enclosed. With no attachment at all, sending now stops and says which file is missing.
- The payment reminder gave the due date in a format the client reads the other way round. These emails always go out in English, and the amount was already formatted for the client, but the date followed the interface language: “€676.00” and “10/8/2026” sat in the same sentence. That date is 10 August to whoever runs the app in Spanish and 8 October to whoever reads the email in English, so the final overdue notice ended up contradicting itself: a due date the client reads as being in the future, in an email chasing them for 39 days of delay. The month is now written out — “August 10, 2026” — which cannot be read two ways in any market. This covers all three reminder stages and the invoice email.
- An already-saved password looked exactly like a field that never had one. The server never returns the email account password, not even encrypted, so the Settings field showed up empty whether or not an account was connected. Anyone coming back months later had no way to tell if their email was still set up. Now, when there is one, a green dot and “One is already saved” appear next to the label, and the field itself says “Leave blank to keep it unchanged”.
- The same email could reach the client three times. If the connection dropped right after the message was handed over — the server already had it queued and only the confirmation was lost — the app treated it as failed and sent it again up to three times, then reported an error. In outreach that means the same cold email repeated to a prospect. Only failures known to have happened before delivery are retried now, such as a temporary rejection of the recipient; everything else is reported without sending again.
- Every refusal from the mail server was announced as "check your app password". An address that does not exist, a message that is too large or one blocked by a spam filter all sent you off to retype a password that was perfectly fine, with no way out: the check in Settings kept saying it was correct. Each case now says what actually happened.
- A server that stalled halfway could leave the app on "Sending…" for up to half an hour — ten minutes per attempt, and it tried three times — with nothing to click and no way to tell whether the email had gone out. Each stage of the connection now has its own timeout.
- The subject line could go out with unresolved variables. If it contained "{{idiomas}}" or "{{especialidad}}" — the body template accepts both, and the unresolved-variable warning treated them as fine — the client received the literal braces in the subject line of a cold email. The contact's history even stored the correctly resolved subject, so it did not show up there either.
- An empty attachment was sent as if nothing were wrong. A 0-byte file — an export that failed halfway, or one the cloud had not finished downloading — was accepted, listed as an attachment, and then silently dropped at send time: the client got the email without the file and the app reported success. It can no longer be added, and if one arrives empty by another route the send stops and names it.
- Saving the email settings when the file could not be written to disk — no free space, no permissions, or an antivirus locking it — silently shut down the app's internal server: the window stayed open and everything else stopped responding without a single warning. It now explains the problem and the app stays up.
- A format that cannot be sent is now flagged when you pick the file, not when you send. An .exe or a .docm was accepted as an attachment — the file dialog's filter is only a hint, and picking "All files" got around it — sat in the list like any other, and the rejection only arrived when you pressed Send; in a batch, once per contact. It is now checked when you pick it and when it is saved, with the same rule deliverables already used.
- The sending warnings that were hardcoded in Spanish now read in the interface language: a malformed recipient address, an attachment that is too large, a format that is not accepted, more than five files, and the send-rate limit. Until now only connection errors with the mail provider were translated.
- Changing the email account without typing the password said "Settings saved" and changed nothing: the screen showed the new address while emails kept going out from the previous one. Since the password is never pre-filled, all it took was reopening Settings and editing the address. It now says the password is needed to verify the account and leaves the dialog open with everything you typed, instead of reporting as saved what was not.
Other
- The browser's spellchecker underlined correct Spanish as misspelt. The app declared itself English to the browser — the document language was fixed and nothing ever changed it — even with the interface in Spanish. Since that is what the spellchecker picks its dictionary from, writing an email subject or body, or notes on a contact or a project, got correctly spelt words underlined in red. The declared language now follows the one chosen in the header. A screen reader also stops reading Spanish with English pronunciation.
- The timer left "0min" entries. Starting and stopping it by mistake — or a double click — created a zero-minute line on the card, with its date and its cross, that only had to be deleted by hand and travelled in the backup too. Under half a minute nothing is stored any more.
- A file under half a kilobyte showed as "0 KB", which looks like an empty file right before sending it to a client. Bytes are now shown.
- The hourly rate suggested "e.g. 0.12", which is a per-word example: under the "Rate per hour" label it was proposing twelve cents an hour.
- The language pair is now suggested when you pick a client, taken from the one that contact already has. It is only a suggestion, and only when the contact holds a recognisable pair: anything already typed is left alone.
- The trial period is now anchored in the data already saved. It previously relied solely on its own record file, so an installation holding contacts, projects and invoices from weeks earlier could still present itself as brand new. Now, if that record is missing, the start is rebuilt from the oldest entry in the database. Nothing new is stored: only dates that were already there are read.
- The main currency dropdown came up completely blank. All 159 currencies were there, but every option rendered with no text and no value: the field was reading two properties the list does not have. On top of that, with no currency saved the browser showed the first one on the list — the UAE dirham — as if it had been chosen; the list now opens with an option that says what the app actually does until you pick one: summarise in whichever currency you bill most.
- “Cancel” in Settings did not revert three fields. The app password, the Stripe key and the licence key are typed outside the settings draft — they are text used to activate or verify something, not a setting that gets saved — so closing with Cancel left them there, still filled in on the next open, as if nothing had been cancelled. The modal now clears them when it opens.
- Response metrics were stuck at 0 after automatic reply detection was removed.
- The file types accepted as attachments are the same everywhere in the app, and include the formats used in translation work.
- Form examples no longer show addresses or numbers that looked like real data already filled in.
- With Windows in dark mode, the application shell appeared flanked by two almost-black bands. A dark-mode block inherited from the scaffolding template had survived, redefining the background, text and border of an interface that deliberately uses a light palette.
- The email templates no longer carry the original installation translator's identity anywhere in the installed application. A migration remained with their name, their degree and their professional profiles written in plain text, inside a file that is installed uncompressed.
- An internal server crash now leaves a record in
send.log. This is a separate path from the error screen, which recorded its own failures before and still does: this is about the process that stores your data. That it had died was recorded nowhere at all, and the reason came down to a race: the log is written through a stream that process shutdown does not wait for, so that last line — the one explaining the crash — arrived or not with nothing to guarantee it, and never arrived at all while the file had yet to be created. It is now written straight to the file before exiting, and the application also records that the internal server has terminated, which until now only went to a console the installed version does not have. - An unexpected server failure no longer takes the last thing you did down with it. The database saves lazily — changes pile up in memory and reach disk a second later — and closing the application properly forces that save before exiting. Crashing did not: there were two uncaught-exception handlers, and the first killed the process before the second, the only one that saved, ever ran. Any uncaught exception, or any unhandled promise rejection, threw away whatever was pending: the contact you had just edited, the hours you had just logged. All four exit paths now save.
- Unexpected interface crashes left no trace in
send.log. There were two nested safety nets, and the inner one —the one that actually caught every failure, being the closer of the two— only wrote to the browser console: the very file the error screen asks you to attach carried not a line about that crash. Only the outer net remains, and it does record the stack trace. - That error screen now appears in the active language. It carried all of its text in Spanish and English at once, one below the other, and was the only screen in the app that did not go through the translation system. On top of that, while no language had been chosen it always fell back to Spanish, even when the system was in English.
- Every warning the app gives you when something cannot be done now reads in the interface language. Until now a good part of them arrived in Spanish even with the app set to English, because the text was written inside the program and shown as-is. There are about fifty: contacts, jobs, invoices, recurring plans, hours, expenses, glossary, deliverables, Stripe, licence and exchange rates. Several also say more clearly what happened — that another contact already uses that email, how many jobs have to go before one can be deleted, or that an already-invoiced job has its amount frozen into its invoice.
Security
The app's first security review, focused on what can realistically happen to a translator: a bad file you open yourself, and a web page open in your browser while Gestrics is running.
- Restoring an incomplete backup no longer deletes issued invoices. Restoring a backup made with an older version — one that did not yet save the invoice ledger — emptied that ledger and reported success. And since invoice numbering is derived from it, the next invoice was named 2026-001 again: a number already sent to another client. The app now stops before touching anything, tells you how many issued invoices would be lost and with which numbers, and only continues if you confirm it explicitly.
- A backup with a tampered invoice ledger is never stored. Ledger entries are hash-chained precisely so that altering one shows; but on restore they were written back as-is, unchecked. A hand-edited backup file could write invented invoices for any amount. The whole chain is now verified before anything is restored, and an entry that does not check out never reaches the disk under any circumstances. If the backup's ledger is damaged, the app tells you and offers to recover everything else - contacts, jobs, invoices - leaving the ledger empty, rather than leaving you unable to restore at all.
- A restore that fails halfway no longer leaves your data halfway. Previously the tables were emptied and then filled row by row, skipping the ones that failed: the result was "restored" with an error count beside it, and an incomplete database. A restore is now a single operation — all of it or none of it — and if something fails it tells you which row, with your data untouched.
- The local server only answers requests addressed to 127.0.0.1. Gestrics runs a server on your machine so the app itself can talk to it. Even though it only listened locally, a web page open in your browser could reach it by pointing its own domain at your machine, and read your contacts, invoices and stored keys from there. The app now checks which name it was called by and turns away anything that is not your own.
- The date of the last licence check is now stored encrypted. The 7-day offline allowance hangs off it, and it sat in plain text inside
license-config.json: a date in a JSON file inviting you to change it in a text editor. It is now encrypted like everything else, and a hand-written date is discarded rather than trusted. This is the same rule already applied to the trial record; this file had simply been left out. If the first launch after updating happens offline, one online check is needed to regain the offline allowance. - An imported contact can no longer smuggle a formula into your exports. Excel and LibreOffice execute a cell that starts with
=,+,-or@. If you imported a contact list from an agency and one of its fields carried a formula, it was stored as-is: exporting your contacts and opening the file ran that formula on your machine. Those cells are now marked as text in CSV and TSV exports. Amounts are left alone, so the CSV for your accountant still adds up, and re-importing one of your own exports into Gestrics gives back the original text. - At 14 days the app now really does close. The end of the trial was enforced by the screen alone: behind it the local server kept answering everything, so there was still a way to go on using the app without a licence. It is now closed from the inside too, and the only thing left open is what you need in order to activate. Your data is untouched: it is all still there, and it comes back the moment you enter your key.
- Starting a fresh data folder no longer grants another trial. The start of the trial is anchored to the oldest trace of your own work, but that was only consulted when the record was missing: starting from scratch and bringing your data over AFTERWARDS gave you fourteen new days losing nothing. It is now always consulted, and the older of the two dates wins. This also fixes the honest case: restoring a backup on a new laptop continues the same trial instead of starting another.
1.0.0 — 2026-08-09
First public release. A desktop CRM for freelance translators, with all data kept on your own machine.
Added
- Outreach: contacts, email templates, batch sending with rate limits, per-contact status tracking and history.
- Projects: jobs with word counts, rates, CAT analysis import, time tracking, deliverables and a per-client glossary.
- Invoicing: invoices with VAT and withholding tax, a purpose-built PDF, a hash-chained ledger compliant with Veri*Factu, rectifications, per-country tax profiles and Stripe payment links.
- Metrics: income, expenses, response rates and a per-client breakdown.
- Full backups, plus contact export and import in CSV, TSV, Excel and ODS.
- SMTP sending with automatic provider detection.
- Spanish and English.