Changelog
What we shipped, and when
A dated log per module, taken from the repositories themselves.
The most useful thing a smaller supplier can show is not a feature list — it is that the list keeps growing. This page exists so you can check that yourself, including the quarters where it slows down.
How this list is kept
Entries are written from commit history and release notes, not from a content calendar. Where a date exists, it is the date the work landed. Where it does not — a WordPress plugin ships as a version, not as a day — the version number stands in its place, because a date invented to look tidier is still an invented date.
The list is not exhaustive. Bug fixes, refactors and internal tooling are left out unless they change something you would notice. What is here is what a customer would recognise as new.
Commerce
The online shop, its catalogue, its warehouse and everything that leaves the door.
-
Intra-Community VAT: reverse charge, OSS and VIES
Cross-border B2B sales apply reverse charge, OSS thresholds are followed per country, and a VAT number is checked against VIES before the invoice is issued rather than after an accountant notices.
-
Goods receipt, with weighted average cost
Stock now carries a cost, not only a count. Margin reports stop being an estimate the moment the same product arrives twice at two prices.
-
Paying in instalments, and shipping in instalments
Part payment and partial dispatch on the same order, each with its own document, because in B2B the two rarely happen on the same day.
-
Locker and pick-up point delivery
Easybox and pick-up points chosen at checkout from the carrier’s live list, with the chosen point travelling through to the label.
-
eMAG Marketplace
Catalogue, stock and orders synchronised with the marketplace from the same product records that feed the shop — not a second catalogue to keep in step.
-
Gift cards, product questions, comparison, and editing an order after it is placed
Four things buyers ask for constantly, and one — editing after placement — that support teams ask for even more often.
-
GDPR for buyers: a copy of the data, or anonymisation
A buyer’s request is answered from the shop admin, by a person who does not need a developer and does not need to touch the database.
-
Several warehouses, and prices per customer group
Stock per location, and B2B group pricing on top of the same catalogue, so a distributor and a walk-in buyer see different numbers on the same page.
-
Payment providers and refunds through the gateway
PayU and Twispay, payment notifications verified against the provider, and refunds issued through the gateway instead of by bank transfer and a note in a spreadsheet.
-
Couriers: Sameday and Cargus
Labels, tracking and status back into the order, from the systems Romanian shops actually ship with.
-
Reviews, wishlists and back-in-stock alerts
Product reviews with a Google review feed, plus the two smallest features that recover the most abandoned intent.
-
Feeds: Google Merchant, Meta, Compari.ro and Price.ro
Four channels generated from the same product row, so a price change does not need to be repeated in four places.
-
Landing pages generated from filters
A filter combination that people actually search for becomes an indexable page, with its own rules for what may be indexed and what may not.
-
Catalogue import from CSV and XLSX, through a queue
With a preview before anything is written, and a queue so a ten-thousand-row file does not depend on a browser tab staying open.
Content and websites
The CMS, the page builder and everything that reaches a public page.
-
Automations: when X, do Y
Rules built in the panel — when a page is published, when a form arrives, when a scan finishes — without a developer writing a job for each one.
-
A conversational assistant in the panel
It works over the same MCP tools an external agent would use, which is why it cannot do anything a person could not do through the interface.
-
Translation at scale
The backlog per language, what has gone stale since the source changed, and bulk translation — the three things that decide whether a second language survives its first month.
-
Releases: several pages published at once
A campaign lands as one act, and rolls back as one act, instead of eleven pages published in an order nobody agreed on.
-
Fields and block types defined per site
Your content model can differ from everyone else’s without becoming a fork that nobody can upgrade.
-
Strict CSP with nonce, and GraphQL next to REST
The security header that actually stops injected scripts, and a second read API with a capped query cost, contract-checked against REST.
-
A/B tests on a block, with a verdict
Two versions of the same section, measured on the public site, and a result that says which one won rather than leaving it to taste.
-
Analytics without cookies, with Web Vitals
Enough to see what people read and how fast the page was for them, without a consent wall in front of the measurement.
-
Backups off the server, to any S3-compatible store
A backup that lives on the same machine as the site is a backup for the wrong kind of accident.
-
Site cloning, and WordPress import
A second client in minutes rather than from scratch; and WXR, media and redirects brought over from WordPress in one pass.
-
Visual editing, next to the real page
Blocks edited beside the page they produce, not in a form that only resembles it.
-
An MCP server: the CMS as a tool for an agent
An external agent can draft, translate and prepare content through the same guarded operations a person has. It cannot publish.
-
Approval flow, edit locking, recycle bin, restore
The four things a team of more than two people needs before the first accident, not after it.
-
llms.txt and Markdown mirrors of every page
So a model that quotes your site quotes what the page says, rather than what it managed to scrape out of the layout.
CRM and sales
From the first contact to the signed contract.
-
The agent’s “Today” screen, and prospecting cadences
One screen with what is overdue, what is scheduled and who has not been called — and cadences that make sure a touched lead always has a next action, instead of a reminder somebody forgot to set.
-
The lead card: a company’s whole history on one screen
Calls, emails, offers, contracts and notes in one place, so nobody opens four tabs to answer one question.
-
Four lead states, and a pipeline that only counts offers
A pipeline inflated with hopes is a pipeline nobody trusts. Only what has an offer on it counts as pipeline.
-
Communication history: every email sent stays on the company
Including what was actually delivered and the full message, not just a line saying that something was sent.
-
Import, duplicate detection and custom fields
A large prospect base can be brought in without importing the same company three times under three spellings.
-
Source attribution, capture through the API, and ROI per client
Which channel produced a client, and what that client was worth afterwards — the two halves of the same question, finally in the same system.
Invoicing and finance
Documents, payments and what they mean for the month.
-
Oblio: issued documents mirrored into the internal ledger
Read-only, deliberately: the platform never writes into the accounting account, so an import can never damage the books it is reading.
-
Payments recorded in Oblio update the invoice status here
The question “has it been paid?” stops having two answers depending on which screen you look at.
-
A daily digest of what falls due
Scheduled, so the first person who learns about an overdue invoice is not the client.
-
VAT, real costs and profitability per client
Revenue per client was always visible. Cost per client was the half that made the number mean something.
-
Expiry alerts for contracts and hosting, on thresholds
At thirty days, at seven, and on the day — for the two things that expire quietly and are noticed loudly.
The platform itself
Security, languages and the parts every module stands on.
-
Audit log, and permissions by capability
Who changed what, and a permission model where access is granted to an ability rather than to a job title.
-
Two-factor sign-in, an integration API, and rehearsed backups
Backups are verified and restored on a schedule against a separate database, because most organisations discover their backups do not restore on the day they need them.
-
Documents keep the language they were issued in
An offer sent in German is still in German when it is reprinted a year later, whatever language the panel is set to that day.
-
Statuses became technical keys, shown translated
A status stored as a translated word breaks the moment somebody switches language. Stored as a key, it survives.
-
A Romanian geographic nomenclature, with address autocomplete
County, city and street completed from a real list, so addresses arrive in a shape that carriers accept.
Valenys Accessibility
The scanner, the widget, the client portal and the compliance documents.
-
We ran the scanner on ourselves, and fixed what it found
The accessibility platform had its own WCAG issues. They were remediated, and the documentation and dashboards became multilingual in the same pass — a scanner that is not accessible itself is a difficult thing to sell, and a worse thing to defend.
-
Public documentation, a proper 404, and a partner-domain fix
Documentation readable without an account, and a bug where a partner’s domain resolved to the wrong tenant.
-
Baseline: audit engine, widget, client portal, partner panel
Six phases delivered together: scanning with axe-core and a real browser, the visitor widget, the client portal with reports and badge, and the white-label panel for agencies.
Valenys Chatbot
The WordPress plugin and the licence server behind it. Versions, not dates — a plugin ships as a number.
-
Licence enforced in the backend, not only in the interface
An unlicensed installation stops answering at the API, not just in the admin screen — including the instant greeting path, which was the one way around it.
-
Indexing with no page limit, on any plan
The queue processes in batches with retries and recovers from stuck locks, so a large site on modest hosting finishes indexing instead of timing out halfway.
-
55 interface languages, right-to-left included
The widget interface is translated once per language and then cached, and the bot answers in the language the visitor picked. Arabic, Hebrew, Persian and Urdu switch the widget to right-to-left.
-
WPML and Polylang: the widget follows the page language
Content is indexed separately per language and retrieval is routed per language, so an English page does not answer from Romanian content.
-
Premium voice, and webhooks for captured leads
Text-to-speech through ElevenLabs or Google Cloud, with a browser fallback; and captured contacts posted to Zapier, Make or a CRM endpoint directly.
-
Licensing that is not tied to WordPress
Every activated domain records its platform — WordPress, OpenCart, PrestaShop, Magento, Shopify or a custom build — so the modules that follow do not need a second licence server.
-
Rate limits on the public endpoints, and no error disclosure
Lead and feedback endpoints are rate-limited per IP, and production stops printing PHP warnings into public responses.
If something here is what you need, say so
Half of this list exists because a client asked for it and the request turned out to be general.