Changelog
What changed in DoneWell, newest first. Every entry corresponds to a release that reached
production, tagged vYYYY.MM.DD (a second release on the same day gets .2, .3, …).
DoneWell is a hosted product, so there is one version — the one that is live. The public REST API
is versioned separately by its own path (/api/v1) and does not move with these releases.
The format follows Keep a Changelog: Added for new capabilities, Changed for behaviour that already existed, Fixed for defects.
v2026.10.26 — 2026-10-26
Changed
- No user-facing changes — internal platform administration, release and deployment tooling, and dependency updates.
v2026.10.25 — 2026-10-25
Added
- Social publishing: connect several Facebook Pages and Instagram Business accounts per company, write posts with per-platform captions and autosaved drafts, publish now or schedule, edit or cancel a scheduled post, and post photos, carousels, Instagram Reels and Facebook videos. Images are converted, cropped to each platform's ratios and stripped of location data. An expired connection is checked daily, flagged with a banner and a notification, and can be reconnected without losing missed posts.
- Blog articles: write articles in an editor, save drafts and schedule them.
- Inbox: client history split into channel tabs (Messenger, Instagram, Email, SMS, each with its own composer; "All" is read-only), delivery and read receipts on outgoing messages, private replies to Facebook and Instagram post comments, notices above the composer explaining each channel's limits (reply window, STOP, character and attachment limits), and the ability to switch individual Facebook and Instagram pages on or off.
- Calls: if the app does not answer within a set number of seconds, the call rings the employee's mobile number instead (company setting).
- Expenses with tax: pick a tax rate, split the gross amount into tax components automatically, adjust to match the receipt, and record the vendor. The expenses list gains totals for the current filter, Category/Wallet/Status columns and filters, and CSV export.
- Reports: a simple monthly profit and loss, a GST/HST return worksheet (lines 101–109 plus QST/PST), expenses by category (net, recoverable and non-recoverable tax, gross), and a period and write-off date on the bad-debt report.
- Accountant archive: download a ZIP for a period with invoices, payments and refunds, expenses with tax, payroll, mileage and receipt files.
- Dashboard: hide, add, reorder and resize tiles, set the data period for the whole dashboard or per tile, and let an admin set a default layout per role in Settings → Roles.
- Wallets: a warning before a transfer or refund takes a wallet below zero.
Changed
- Period picker in finances: adds quarter, year and future presets, and choosing a preset no longer changes the sort order.
- Mileage approval: the amount is visible before approving, rejecting asks for a reason, and approvals send notifications.
- Report CSVs show dates as on screen, readable statuses, amounts with two decimals and totals.
- Browser icon: the DoneWell mark is now used as the favicon and app icon.
Fixed
- Inbox: voice messages and other non-image attachments from Messenger, Instagram, WhatsApp and MMS are no longer lost or shown as "[attachment]"; incoming emails display correctly; replies to Instagram conversations no longer fail.
- Calls: incoming calls to the softphone are no longer rejected as busy; missed calls when nobody is on shift show "Nobody on shift" instead of "Failed".
- Mobile app push: Android calls now ring the app even when it is closed.
- Expenses: the expense page no longer shows 404, receipts can be deleted, a linked job can be unlinked, a double click on Create no longer resets the form, and colleagues' payroll entries are hidden from users without payroll access.
- Numbering: EXP and TRF numbers are no longer reused after a deletion, and a deleted expense leaves a trace in the ledger.
- Saving forms no longer silently replaces an inactive wallet type, vehicle or category.
- Odometer, payroll and wallet screens: lists refresh after changes, deletions ask for confirmation, and several silent actions now show feedback.
- Technicians no longer see invoices, balances or other technicians' jobs they are not assigned to.
- Gift card buyers are no longer subscribed to SMS marketing by default.
- Dashboard charts: Revenue by Month scales correctly, and Top Customers, Quote Conversion and Average Rating match their tiles.
- Small screens: reports, Team Pay Rates, trips and wallet transactions are readable at phone width.
- Security: updated the web framework and error-reporting libraries to versions that close published vulnerabilities.
v2026.10.19.3 — 2026-10-19
Added
- Inbox: one "New" menu in the conversation header replaces the "Call back" and "Create request" buttons that appeared under every missed call.
Changed
- Voicemail: incoming calls now ring for 90 seconds before going to voicemail (companies still on the old 20-second default are moved to the new one), and a voicemail is no longer cut off mid-sentence by a pause.
Fixed
- Outbound calls from the keypad: the call is filed in the client's conversation in the inbox, and its recording shows up in Calls.
- Inbound calls: an answered call no longer stays on "Ringing" after the recording finishes.
v2026.10.19.2 — 2026-10-19
Fixed
- Scheduling on iPhone: the start date, start time and end time fields on the visit schedule form no longer run past the edge of the card or underneath the Anytime switch.
v2026.10.19 — 2026-10-19
Added
- Calls settings: one Settings → Calls page, with a configurable action for calls that arrive outside business hours.
- Outbound calls: choose whether calls go out from the browser or ring your own phone first. Calling an unknown number now creates a client for it.
- Call buttons everywhere a client's number appears: client pages, contacts, property contacts, visits, the schedule and the dashboard place calls the same way, and if calling is not set up or is refused, a panel explains why and offers "Call from this device".
- Stripe account on Settings → Payments: the Stripe Connect card shows the connected account name and an "Open Stripe Dashboard" button.
Changed
- Inbox: a conversation opens on its newest message and loads earlier history as you scroll up. Calls appear on the side of whoever placed them, and the first person to reply or answer a call becomes the owner of an unassigned conversation.
- Website: on phones the header shows Sign In instead of Get Started, and wide tables in the documentation no longer stretch the page.
Fixed
- Call recordings are now transcribed; before this, every transcription failed.
v2026.10.17.2 — 2026-10-18
Changed
- No user-facing changes — build and test tooling only. This release completes the deployment of v2026.10.17, which stopped in the automated checks before reaching staging.
v2026.10.17 — 2026-10-17
Added
- Wiki: a knowledge base with a page tree, a rich editor with autosave, revisions and restore, page links and backlinks, full-text search, file attachments, templates, review schedules and public/private access by members and roles.
- Import and export: move in from Jobber or any CSV/XLSX source with a step-by-step wizard (clients, catalog, requests, quotes, jobs, invoices, visits), and export the whole company as a zip.
- Salon appointments: online self-booking (service, then staff, then time slot), deposits and no-show policy, reminders at 48 h, 24 h and 2 h with confirm or cancel by SMS, point-of-sale checkout and gift cards.
- Split a job or a visit: move part of a job's line items (and unfinished visits) into a separate new job, and spread a job's items across visits by drag-and-drop.
- Taxes by component: GST and QST (and other components) are listed separately on documents and PDFs, with province presets and a second tax number for the company.
- Interac e-Transfer payments: payment instructions on the invoice, automatic matching of bank notification emails and an e-Transfers queue.
- Calls and Inbox: incoming calls ring only the people on shift, with ring strategies, business hours and a fallback; call back from a missed call, assign a thread owner, and send SMS campaigns with opt-in and scheduling.
- Reports and exports: CSV export for quotes, invoices, payouts, the Transactions ledger and the Tax report, and a line-by-line Tax report.
- Visits: a "Send booking confirmation" button, Create Invoice after completing a visit, and visit time kept as separate intervals so reopening a visit no longer deletes hours.
- Recurring jobs: "every 2 weeks", "day of the month", and "Never ends" now keeps a rolling six-month horizon.
- Invoicing per visit or per month, and payment schedules with an overpayment-safe full invoice on top.
- A permission to see prices, a separate permission for cost and margin, and a per-role "takes calls" setting.
- Mobile app support: a large set of API v1 endpoints for jobs, visits, quotes, invoices, payments, expenses, inbox, calls and wiki.
Changed
- Technicians see only their own crew's visits by default, and the schedule visibility is configurable.
- Clients move from Lead to Active automatically on an approved quote, an assigned visit or a sent invoice.
- A job becomes Completed on its own when all visits are done and all invoices are paid.
- Payment receipts are sent by email only, with no automatic SMS.
- Money pages and reports are consistent: Revenue, Transactions, Employees, Jobs and Costing now agree on payments, refunds, VOID and profit.
- Stripe warnings appear wherever a card payment can be switched on while Stripe is not connected.
Fixed
- Aged Receivables and the Invoice report now age invoices from the due date, so an invoice 27 days overdue no longer shows "0 days".
- Payroll: hours no longer pay twice across pay runs, salary is no longer repeated in overlapping runs, and a negative statement no longer keeps a run stuck in Approved.
- Wallets: Balance After recalculates after backdated entries, edits, deletes and voids, and personal wallets are no longer readable or editable by other people.
- Refunds and VOID: Issue Refund defaults to the wallet that received the payment, Void is blocked where it would be wrong, and a failed Stripe refund puts the invoice back to Paid.
- Roles without prices or payment rights no longer see money in dashboards, reports, lists, PDFs or forms, and no longer see buttons that lead to Access Denied.
- Many security hardening fixes: stricter content-security policy, protected file downloads, one-time 2FA codes, safer password and email-link flows, and tighter checks between companies.
- Tax rounding, large amounts (over $1,000,000) and number overflow errors on amounts no longer break totals or pages.
- Dozens of layout, validation and accessibility fixes on the schedule, quotes, invoices, jobs, clients, portal and mobile screens.
v2026.09.11.5 — 2026-09-11
Re-release of v2026.09.11.4: that tag reached main but its deploy was refused by CI on one test-timing defect, so nothing shipped. This one carries the same product changes.
Changed
- No user-facing changes — a test fix only.
v2026.09.11.4 — 2026-09-11
Added
- Help center — a public knowledge base for operators at
/help: fifteen articles across Getting started, Clients & properties, Schedule, Quotes / Jobs / Invoices, Payments, Team & roles and Settings, with screenshots. - Task boards: Select mode — a Select switch on the board with hover checkboxes, shift-click ranges, select-all per column, and a bulk bar for Move to…, Assign, Priority, Due date, Labels, Complete/Reopen, Archive and Delete. Dragging a selected card moves the whole selection.
- Stripe wallet opening balance — the Stripe wallet now opens at what Stripe already holds (including payouts in transit) instead of at zero, so its balance matches your Stripe dashboard from day one.
- Leave a company — a "Your companies" card on your profile lets you leave a company you belong to; the owner and the last active admin are told why they cannot.
Changed
- Invitations — opening an invite link no longer joins you silently: a signed-in invitee sees a "Join ?" confirmation naming the role and the account first, and an invite addressed to another account says so.
- Installment invoices — an installment invoice now prints the parent job's or quote's whole payment plan priced against the parent total, with the row it bills marked "(this invoice)", instead of a percentage of its own amount.
- Client portal — clients no longer see draft or void invoices, or quotes that are not live; a bad-debt invoice reads "Unpaid" rather than exposing the internal label. The portal's "Total due" no longer counts drafts.
- Money pages —
/payments/[id]and/payouts/[id]show the same "Access denied" as their lists for a role without the permission; status filters keep up with fast repeated clicks; validation and refusal messages are worded consistently. - Telnyx phone numbers — the unused "Connection ID (voice)" field is gone; the Phone numbers card now says where voice routing is actually configured.
- Security — a stricter Content Security Policy is rolled out in report-only mode;
/schedule/tasks/newnow requires the schedule permission and shows client contacts only to members who may view clients.
Fixed
- Stripe ledger — the processing fee is booked even when Stripe reports it after the payment succeeded (the wallet no longer sits at the gross amount until a payout); manual and instant payouts are reconciled correctly and land on the company's ledger day; a lost dispute books its fee and a returned platform fee reaches the wallet, and a chargeback is named as one; a signed test-mode event can no longer land in a live environment (and vice versa).
- Quote and invoice PDFs printed "[object Promise]" where the company letterhead belongs — the header renders again in the print view, PDF and email attachment.
- Jobs — "Assigned To" on the job list and the job's Team no longer read "Not assigned" when the crew was set on the visit only (a job converted from a quote): the first visit crew seeds the job roster.
v2026.09.11.3 — 2026-09-11
Re-release of v2026.09.11 (second attempt): one more CI-only test fix; same product changes.
Changed
- No user-facing changes — a test fix only.
v2026.09.11.2 — 2026-09-11
Re-release of v2026.09.11: that tag reached main but its deploy was refused by CI on three test-environment defects, so nothing shipped. This one carries the same product changes.
Changed
- No user-facing changes — CI and test fixes only.
v2026.09.11 — 2026-09-11
Added
- Visit reports for clients — a job's visit can be shared as a report page (photos, notes, what was done) through a link you send from the visit; the visit page also shows a QR code to continue on a phone.
- Visit photos — capture zones with a step-by-step wizard on site, larger stored originals, and a marketing export that only includes photos the client has consented to, with an optional watermark.
- Mobile Today — a "Mine / All" switch, the active visit pinned on top, actions inside the visit card, and a persistent active-visit strip above the tab bar while a visit is running.
- Task boards — nested sub-cards (up to three levels), a tree view of a board, typed "Related items" links between cards, a short card address (
/tasks/T-142) for sharing, drag-to-reorder card sections with per-section "show" and "required" switches, and labels in the card header. Boards can now be configured over the API (section template, required sections, pinned properties); creating a card over the API warns about likely duplicates. - Schedule → card — clicking a task chip on the calendar opens the kanban card itself.
- Profile — change your sign-in email: confirm from the new address, then it swaps; Google sign-in links only to an address you have verified.
- Public documentation — the product changelog at
/changelogand the API reference at/developers.
Changed
- Charts and KPIs follow the company's calendar — dashboard "Revenue by month", the Insights revenue comparison and sliding windows, and the payouts "this month / this week" tiles now bucket by the company timezone instead of the server's.
- Deleting a property that a quote, job or invoice refers to is refused, with a warning in the dialog; a client delete leaves such addresses in place.
- Deleting a phone number keeps its conversations; the default sending number stays consistent across all lines.
- Pending invitations lists only the invitations that currently hold a seat.
- Uploads are stored in object storage and served only to the company that owns them; orphaned files are swept by a scheduled job.
Fixed
- Payment schedules: a percentage installment on a job is billed from the job total (not from earlier invoices), and installments survive converting a quote to a job or duplicating a job.
- Multi-line email templates can be reset to the shipped default again.
- Blank equipment names are rejected on both the equipment form and the equipment-purchase expense.
- Date pickers no longer accept six-digit years, and every date field has an upper bound.
- Mobile: the email-templates page no longer scrolls sideways; deep-linked dialogs open as bottom sheets at phone width; a refund confirmation no longer disappears if the dialog closes; a false "Discard unsaved changes?" after creating a visit is gone.
- Dashboard tiles measure the current status, not the events of the period.
- Defect sweeps across Clients, Requests, Quotes, Jobs, Invoices, Payments, Schedule and Visits (dozens of small fixes found by the regression audit).
- Security: a company administrator can no longer set a password or change the email of a person who also belongs to another company (a reset link is sent instead); re-enabling an HQ staff account needs the same permission as disabling it; the job PDF route checks the job permission; a card on a private board no longer reveals its title through a link from another board; complaint photos from the review funnel are served privately.
v2026.09.01 — 2026-09-01
Baseline. This is the first tagged release; releases before it were not recorded, so this entry describes what the product does as of this date rather than what changed to get here. Everything after it is a real diff.
Added
- Clients, requests, quotes, jobs and invoices — the full document chain, with line items, discounts, promo codes, per-location pricing and fees, tax charged inside or on top of the price, deposits and payment schedules.
- Scheduling — a team calendar with visits, recurring jobs, crews with a named lead, availability and double-booking warnings, business hours, and a subscribable calendar feed.
- Payments — card and manual payments, refunds, wallets and a ledger, payouts, and a public payment page customers can open from an emailed invoice.
- Payroll — hourly, commission, hybrid and salary pay, time entries recorded when a visit is completed, pay runs and payouts.
- Client portal — customers sign in through a magic link to see their documents, approve a quote and pay an invoice.
- Inbox — SMS, email and in-app conversations with clients, on the company's own phone number.
- Public pages — every company gets its own address: a home hub, quick links, a price-list calculator that turns an estimate into a request, and a review funnel.
- Task boards — kanban boards with cards, sub-cards, checklists, notes, labels, dependencies and attachments.
- Marketing — email campaigns, review collection, referrals.
- Equipment and rentals, mileage logging, expenses and accounting codes, reports and dashboards.
- Public REST API v1 — scoped
dw_live_…keys over/api/v1; see the API reference. - Plans, modules and roles — per-plan feature modules, per-company overrides, custom roles and granular permissions.