What changed in each release of Ilena.
promtool, not just checked for their shape, so a rule that stops firing is caught in CI.common/ai can submit a batch of prompts to OpenAI's Batch endpoint rather than one at a time.ilena.app/blog — the article that was asked for, not a listing to search it out of.ilena.app/blog, and now wears the same header, footer and language menu as the rest of the site. Choosing a language from an article takes you to that article in the language you chose, not back to a home page — and a language an article does not have yet leads to the English version rather than disappearing from the menu.Everything before 5 September 2026, one line per heading. The full entries are in the repository’s history.
| Version | Date | In the product | Under the hood |
|---|---|---|---|
| 1.3.5 | Seven writing guides went live in English, French and Spanish, the dictionary stopped offering words that don't actually rhyme, public pages were rewritten to read like they were written by a person, and the 27 solution pages got clean, language-written addresses. | Search-engine signals were fixed at the site's root, and every page a crawler called too thin was documented rather than padded. | |
| 1.3.4 | A public FAQ page launched with eighteen answers, every page gained its own heading, description and search-friendly title, addresses were cleaned up across the site, and each page now declares its language alternates. | Structured data, sitemap freshness, llms.txt and a registry of pages kept out of search were put in place for search engines and AI assistants. |
|
| 1.3.3 | The home page says what Ilena is for before it says what runs underneath: the mention of the kind of model has left the top of the page, and the section explaining why Ilena exists opens on Ilena rather than on what other tools do badly. | The search-position measurements moved to a new source before the previous subscription ended, under a single project covering the whole domain; and each service identifies itself to the writing engine with its own credential, one per service and per environment. | |
| 1.3.2 | Nine fixes around signing out and returning — a shared eight-hour idle timeout, a fixed account-window sidebar, Settings failing with a message instead of silently, the comparison tables growing to seven competitors, the user guide brought back in step with the product, and shorter French blog titles. | Nighttime alerts stopped firing on empty queues recovering, deliberate probe failures and starting containers; our own visits stopped being counted as traffic; and a timing-flaky test stopped deciding releases. | |
| 1.3.1 | The blog began asking for cookie consent before measuring anything, and moved behind the same shield as the rest of the site, answering on one address instead of two. | Reaching preproduction or production became a sign-in that expires within the hour instead of a long-lived key, on an encrypted workstation. | |
| 1.3.0 | The blog began publishing new articles on its own every day, each one appearing in both English and French. | Articles arrived from a new writing partner, were rebuilt onto Ilena's own pages and passed a set of checks before publishing, with nothing changing when a check failed. | |
| 1.2.3 | Blog articles stopped loading a tracking script from another company: the same page, one fewer request leaving your browser to somewhere that is not us. | The blog moved to Ilena's own storage and delivery network — every article, image and feed is our copy, and nothing on the page reaches the previous provider. | |
| 1.2.2 | The account screens became part of the product rather than a page beside it — the editor's menu bar, footer and tool column, a sessions list that names each device, a questionnaire that keeps its text box in view, and a pricing card whose annual saving is a ribbon. | The two web applications began sharing one copy of what talks to the server, and the build that checks every change lost a minute and forty-eight seconds. | |
| 1.2.1 | Nine corrections around leaving and returning: Quit no longer signs you out, the site stopped offering Sign In to someone already signed in, a chosen language followed the account across browsers, synonyms came back fuller, and the nine Solutions pages answered the questions a reader arrives with. | A change to how the monitoring dashboards read the database began reaching the running service on the deploy that carried it. | |
| 1.2.0 | The Privacy Policy and the GDPR page began saying plainly what reaches Google when you refuse analytics. | What each author's model calls cost became a ledger — per lookup, in the billed currency, surviving the account's deletion — and a reporting dashboard carried the three figures a web analytics tool structurally cannot produce. | |
| 1.1.11 | A lookup became three requests running side by side: definitions, synonyms and antonyms appear as each one finishes, under a single loading animation, and a visitor with JavaScript disabled met the three-language menu instead of being sent into English. | Three quiet defects: documentation anchors a crawler can read, a parse failure that says where it failed, and a log shipper that stopped warning at every start about a setting written under a name it had never had. | |
| 1.1.10 | A dictionary lookup stopped changing shape partway through, and clicking a multi-word synonym stopped failing. | profiles began retrying its call to invoicing instead of falling an author back to the free tier on a single hiccup, and the dictionary and rhyme skills each gained their own reasoning settings. | |
| 1.1.9 | The backend moved to Spring Boot 4.1 on Spring Framework 7 — Jackson 3 throughout — and twelve hand-pinned dependencies were brought up to their latest release. | ||
| 1.1.8 | Five corrections a reader meets: a phone-sized screen is told Ilena needs a computer, a suspended account is told so in its own language, the footer stopped pushing French and Spanish pages wider than the screen, and a misspelling now caches the correction too. | Twenty changes underneath — a memory ceiling for the cache, two caches removed with the feature that justified them, a deletion that reaches all four services, alerting on a rebuilt preproduction node, /api/ closed to crawlers, and six investigations recorded rather than acted on. | |
| 1.1.7 | The site's images, fonts and textures began being kept for a day by your browser instead of re-checked on every page. | Ilena started measuring itself: metrics and timed model calls from the six services, structured logs carrying a correlation id and queryable by field, email alerts on what the cluster can see, traffic measured at the front door, all on a disk that survives a machine being replaced — and machines that boot from a chosen, recorded image. | |
| 1.1.6 | Account management moved into an application of its own at /account/ — password, sessions, subscription and billing — reachable from a single header menu that replaced Sign In once you are signed in, returning you to the page you came from, in your light or dark mode, with a reminder email for an unfinished signup and a monthly-to-yearly switch. | Backend tests began building their schema with Liquibase the way production does, the deleted-role guard moved into the module every service depends on, and seventy orphaned preproduction rows were cleaned up. | |
| 1.1.5 | A foot count can be set by hand, verse lines fully support emoji through editing and version history, and a work exports as plain text or Markdown beside PDF. | ||
| 1.1.4 | The product comparison gained LyricStudio, MasterWriter and Lyrcs, and its grid moved with them. | ||
| 1.1.3 | The Privacy Policy and Your data pages began naming Google Analytics and what it keeps, and a full refund now ends the subscription and freezes the account the way an unpaid invoice does. | The sixteen signup screens, the trial, the payment and the cancellation each became a measurement taken once, from Stripe's own confirmation, with a trial no longer counted as a sale until a card is charged — and staging began billing against Stripe's real test mode. | |
| 1.1.2 | An artist can be given Ilena for free and for good: a demo account writes exactly as a Solo one does, with no subscription behind it. | Where a visitor first came from began being kept at signup — and nothing at all when cookies were declined — measurement learned that a phone and a laptop can be one author, every event gained a written definition, and the account type that decides what an author may reach was written once instead of copied into four services. | |
| 1.1.1 | A word already looked up comes back faster and stays that way for longer. | A machine AWS takes back now leaves the cluster on its own in ninety-one seconds, reaching production takes a sign-in of its own, the monitoring dashboards moved behind a single door, and prices are named by a stable label rather than by their identifier. | |
| 1.1.0 | Updating Ilena stopped interrupting it: every service runs two copies on separate machines, and one keeps answering while the other is replaced. | Preproduction took production's three-machine shape, what every service writes began being kept for fourteen days on storage of its own, and twelve of eighteen libraries were raised. | |
| 1.0.16 | Memory use across every service, in both environments, was recorded — the figures the next sizing decision would be made on. | ||
| 1.0.15 | Five corrections to titles and links: translated pages stopped sharing a title with their category, Solutions pages gained a tab title of their own, every link said where it leads, and the documentation build stopped dirtying the repository. | ||
| 1.0.14 | Three new pages for people searching for a French rhyming dictionary, a Spanish syllable counter or an English rhyming dictionary. | Shared images moved into one source directory, changelog dates began being filled from the release's Git tag, milestone output moved under .tmp/, and a reported redirect problem turned out to be already fixed. | |
| 1.0.13 | Every email was rebuilt on one shared template, an invitation stopped emailing a temporary password, the "invoice paid" email stopped showing the word null where its link belonged, signing in with an unregistered Google account said so, and the dictionary began returning up to ten synonyms. | Connections began requiring TLS 1.2, the servers behind the site started refusing anything not carrying Cloudflare's certificate, preproduction monitoring went from six services to seventeen, and the end-to-end suite halved its running time. | |
| 1.0.12 | The site and the API became reachable only through the content network, the public site stopped answering on the host's own address, the DNS and edge configuration moved into code, and working on preproduction stopped requiring production credentials. | ||
| 1.0.11 | A work's emotions began describing the whole work read in one pass, emptying a line cleared its analysis, and the dictionary settled at ten synonyms and ten antonyms. | Analysing a line stopped paying for two model calls every time. | |
| 1.0.10 | Releases moved to GitHub — a tag deploys preproduction, production is a separate decision — production images began replicating instead of being copied by hand, administrative access moved behind a portal with multi-factor authentication, the dashboards' database credential was proven read-only, and four critical vulnerabilities were patched. | ||
| 1.0.9 | Invoice status began reading in your own language, the Spanish rhyme page stopped describing something it did not offer, the footer's social links gained readable names, and the site began measuring how visitors move through signup and checkout under the cookie choice you make. | A request carrying no credentials began getting the same answer from every service. | |
| 1.0.8 | The syllable-counter and Spanish rhyme pages stopped offering anonymous lookup and led into Ilena instead, the English songwriting page was rewritten, and two French guides were added. | Eleven changes underneath: hreflang made consistent, valid structured data on the three homepages, minified shared chrome, a rotated Stripe test key with the command that printed it now refused, per-service log levels, and two skills recorded. | |
| 1.0.7 | Opening the editor began requiring an active subscription. | A malformed request began getting a plain 404 or 400, and creating several items at once stopped being able to make two share an identifier. | |
| 1.0.6 | The billing address became enterable and correctable, the project tree's icons appeared, re-inviting someone worked again, and an item still being created could no longer be dragged into a broken state. | Six corrections: a mistyped request refused plainly, no unintended default administrator, a deployment that replaces what it claims to, the client address read from the header Cloudflare sets, notification failures no longer swallowed, and a hand-edited generated page failing the build. | |
| 1.0.5 | Billing email began arriving for a failed payment, a paid invoice and a cancellation, a declined card stopped being a dead end, invitations reached their recipient, a frozen account could be unfrozen, and the Solutions pages were split into more specific ones. | Stripe's events were processed again without a queue retry creating a second subscription, configured prices began being checked at startup, the site gained a rehearsal environment before production, and continuous integration started publishing to the registry deployments actually use. | |
| 1.0.4 | Sign in, verify, forgot and reset password became standalone pages, one sign-in page began serving all three applications, signing in and being admitted became two steps, and every device where you are signed in became visible and endable. | The forgot-password page stopped revealing whether an address has an account, dead role checks and an inert quota mechanism were removed, and the end-to-end suite passed in full against the deployed build. | |
| 1.0.3 | The ideas basket began reporting its failures and keeping your draft, four actions on a project or work began checking that it belongs to you, and seven pages took the site's own dark background, menus and header. | Three corrections to the guards and the shared partials. | |
| 1.0.2 | The ideas basket began surviving a reload, login and recovery followed your browser's language, two keyboard-shortcut defects were fixed, the header became dropdown menus, and five pages were added — this Change Log, the product comparison, Solutions, Referral and Partner. | Coverage below 80 % began failing the build, and the end-to-end suite gained the ability to run against a deployed build. | |
| 1.0.1 | Duplicating a work began producing a real independent copy, the suggestion setting became two, AI-assisted suggestions gained a badge, the line-variants picker was removed, and the three legal texts came from a single source. | AI Transparency was recorded as informational rather than consent-bearing, and the frontend suite began running on every push. |