Changelog

Everything that has shipped in Dueted, newest first, with the dates it actually shipped on.

9 – 11 August 2026

Failure states that tell the truth

  • A failed read no longer renders as an empty result. A list that could not load says so, in red, instead of looking like having no data.
  • Light is the default theme for everyone. It used to follow the operating system, so a visitor with dark mode on met a dark product without asking for one.
  • A send stranded by a dead queue job can be listed and requeued from the campaign screen, without touching SQL. A plan that may already have delivered is still listed, with the reason it cannot be retried.
  • The per-campaign lifetime send ceiling is gone. It had been wired to a per-sweep batching setting, which silently stopped every campaign at its fifth message ever.
  • Company identity is read from the relational record rather than inferred from research prose, so a researched note can no longer mint a second version of the same company.
  • Multi-step threaded sending verified end to end against real mailboxes: four recipients, two steps each, exactly one message per recipient and step, every follow-up threaded onto its parent.

7 – 10 August 2026

The audience is a rule, not a list

  • A campaign now targets an audience rule: scope it to one domain or the whole portfolio, cap it per company, require a verified contact, exclude anything on legal hold.
  • The rule is re-evaluated daily while a campaign is active, so newly researched contacts join without a re-import. Removing someone writes an exclusion, so rebuilding the list never puts them back.
  • Approval covers the rule and the copy together rather than a frozen roster of names. Editing either makes the approval stale, and nothing enrols against a stale approval.
  • The rule and the number of people it reaches are shown before you approve, which is the moment that count actually matters.
  • Mailboxes can be pinned per campaign, and a mailbox that has stopped sending now says which of the gates stopped it.
  • A domain is the prospect root it was always modelled as: domain, then company, then contact, with a drill-down through all three and provenance back to the agent run that created a lead.
  • Contacts hold their own verification and MX check, and unverified research stays unverified instead of being promoted on the way into a send.

4 – 6 August 2026

The interface rebuilt around the work

  • Navigation is grouped the way the job is: Pipeline, Outbound, Sourcing. Mailboxes became its own area rather than a card buried in settings.
  • A named type scale and a shared layout vocabulary replaced hundreds of one-off sizes and hand-rolled panels, so screens read as one product instead of a set of pages.
  • Lead Generation is a workspace of its own: run an agent, watch it work, and keep the full history. Runs used to persist and then be invisible, so closing the tab lost the results.
  • A run now shows every source it used. The old panel printed the first three and let them stand for all of them.
  • Sequence steps can be reordered, with the threading rule enforced so a follow-up cannot end up first.
  • Campaign screens stopped hiding what they knew: how many eligible leads a picker is filtering out, which tabs a draft has not earned yet, and how a campaign reaches completion.

2 – 3 August 2026

Sending infrastructure

  • Several sending mailboxes, rotated least-recently-used with a race-safe claim so two sends cannot take the same mailbox.
  • Sending windows, a per-campaign pacing gap, and timezone-aware scheduling. Reaching a limit defers the send to the next window rather than failing it.
  • Warmup ramps, bounce-rate health scoring, and automatic pausing. A mailbox that crosses the threshold stops and stays stopped until the cause is fixed.
  • Bounces are detected from delivery-status notifications, so a hard bounce is counted as one rather than read as silence.
  • The automation worker moved to an external scheduler, and the safety gates were fixed before any of this was allowed to scale.

24 – 31 July 2026

Campaigns, threaded

  • Multi-step campaigns with idempotent execution plans, an activation boundary, and pause and resume.
  • Follow-ups send as replies inside the same conversation, resolved against the real message id at send time, so a sequence reads as one thread to the recipient.
  • Draft, approve, activate and return to draft is repeatable. A campaign that has already mailed someone stays frozen.
  • Replies are attributed to the right lead by email thread.
  • A cross-tenant authorization defect was found and fixed: a queued job could claim and send another workspace’s plan, because the tenant check compared against a record that had not been loaded yet.
  • Refusals now carry a reason rather than a bare failure, so it is possible to tell which safety gate stopped a send.
  • Dead letters are persisted as an audit trail and stale worker transitions are rejected.

Before July 2026

The foundation

  • Multi-tenant workspaces with four roles enforced in the database, invites, comments, assignment and an activity trail.
  • A threaded inbox with reply, reply all and forward, templates, merge variables, an appended signature, attachments and snooze.
  • Notifications: an in-app bell, per-user preferences, instant and digest email, and native Slack and Discord messages.
  • A REST API v1 over leads, domains, conversations and messages, with scoped keys stored as hashes, and HMAC-signed webhooks.
  • AI drafting, lead briefs, price suggestions and pipeline questions, running server-side on a managed model chain.
  • Buyer research, deal tracking with ask, offer and floor, analytics from the real send log, for-sale pages and a public storefront.

All of it is on right now.

Nothing above is behind a plan or a waitlist. Create a workspace and the whole list is what you get on the first day.

Start freeFree while in beta · no card required