EmailTimer.App

Changelog

Dated entries for work that reached production. Fixes nobody outside the code would notice are left out.

16 September 2026

Every marketing page now has a way in. "Start free" and the plan buttons go to sign-up instead of back to the pricing page, and the header carries a sign-in link.

Account email works in production. Verification links, invitations, quota warnings and payment notices are delivered by Cloudflare Email Sending.

15 September 2026

Security updates to the two internet-facing services, for three critical advisories in Next.js, Astro and the image codec.

14 September 2026

Photoshop timer import. Open one of the two template PSDs, move the layers, save, and upload it. The flattened composite you designed becomes the image and the engine contributes only the animating numerals, so your pixels survive byte for byte. Every import is proved against your own composite before it can be applied, and a file that does not match is refused rather than published wrong.

Recipient CSV uploads now import. Source files for an import nobody came back for are deleted after 14 days.

7 September 2026

The published ESP snippets were unusable and are fixed, along with structured data across the site and a machine-readable copy of the docs.

Plan catalogue, invoices and revenue reporting, so a charge has a document behind it. The operator panel was rebuilt at the same time.

6 September 2026

All five services deployed and verified end to end: the marketing site, the API, the dashboard, the image service and the background jobs.

4 September 2026

Billing and settings screens on both gateways. Dollars go through Stripe, rupees through Razorpay, and rupee customers get first-party plan-change and cancel screens because Razorpay has no hosted portal.

Invitation links now land somewhere, deleting a thing deletes it, and notification preferences are respected.

1 September 2026

Conditional rules, with a plain-language builder. Show a layer, swap a text, swap an image or change a colour depending on a merge value, the country or the date.

White-label image domains, so the URL in a client's email reads as their own hostname.

Recipient lists with upload and a per-row error report you can download, plus API key screens, team roles, and a plan override an operator can set.

28 August 2026

The public REST API at /v1, with per-workspace keys, read and write scopes, rate limits and a generated OpenAPI document.

Audit log and operator admin: who published what, who invited whom, who changed billing. The six timer controls in the editor also started reaching the rendered image, and the editor now measures the renderer's own output instead of its own approximation.

27 August 2026

Recipient sets, CSV import, opaque per-recipient tokens and batch URL generation, so a subscriber's name never has to travel in a query string.

Analytics: opens over time, by template and by email client family, with the caveat about proxy detection stated on the screen rather than in a footnote. The font catalogue moved into object storage in the same release, so timer digits render in the typeface you picked.

25 and 26 August 2026

Accounts, workspaces, roles and email verification. Template gallery, editor, publish, and a ready-made snippet for each platform in the directory. The editor preview became the production renderer, so the image you approve is the image that gets sent.

The marketing site went live at emailtimer.app with pricing in dollars and rupees.

24 August 2026

First commit. The render engine: timer maths across timezones and daylight saving, eight timer families, signed URLs, GIF assembly with sub-frame encoding, and the rule that the image endpoint always returns a valid image.

What happens when something breaks

Anything that affected rendering gets a dated entry here. The status page says what is monitored, what is not, and how you hear about an incident.