Vellaci is the EU Cyber Resilience Act compliance infrastructure for European software and connected-product manufacturers. The regulation turns product security into three questions with legal deadlines — what is exposed, what must be reported inside 24 and 72 hours, what evidence can be produced — and Vellaci is the system that answers each one with a name, a timestamp and evidence behind it. The product was repositioned in 2026: the domain previously carried an unrelated personal tool, retired in favour of this market.
01 / 06
Problem
Context
The Cyber Resilience Act (EU regulation 2024/2847) applies to anyone placing a product with digital elements on the European market — software, firmware, a connected device. Since 11 September 2026 a manufacturer must report an actively exploited vulnerability or a severe incident to its CSIRT and to ENISA: an early warning within 24 hours, a notification within 72 hours, a final report after that.
The regulation does not ask for good intentions; it asks for dates, names and documents. A manufacturer that cannot produce the SBOM of the shipped version, the trace of the reporting decision and the evidence of what was submitted is not compliant, however good its actual security is.
Problem
Most manufacturers answer those questions today from spreadsheets and ticket timestamps. That fails on three specific points, and each one is fatal in an audit.
- Exposure is a project, not a query: finding out which products ship a vulnerable library means reopening builds instead of asking an inventory.
- The clock has no defensible start: a ticket timestamp is not awareness, and nobody signed the decision to report.
- Evidence is reconstructed afterwards: without immutable revisions and an audit log, what was submitted is no longer distinguishable from what was corrected later.
02 / 06
Constraints
- Legal deadlines: early warning within 24 hours, notification within 72 hours, final report after that — in force since 11 September 2026.
- The clock starts from the manufacturer’s awareness, not from an advisory’s publication: it has to come from a named human decision.
- Immutable evidence: the original SBOM kept with its SHA-256, historical facts never rewritten, a hash-chained audit log.
- Clocks that keep running server-side, even when nobody has the tab open.
Hardest part
The core of the product is a clock a regulator will accept. The engineering temptation is to start the countdown automatically as soon as an exploited vulnerability is detected — it is measurable, it is clean, and it is wrong: the regulation speaks of the manufacturer’s awareness, not of the publication date of an advisory.
So the product decision was to require human confirmation before any clock. Vellaci may flag a vulnerability as potentially reportable — for example because a component you ship is listed in the CISA KEV catalogue — but a named reviewer confirms or rejects it, with a rationale, and it is that decision that starts the countdown.
The rest follows. The deadline is persisted with the rule version that produced it, its source timestamp and its timezone; statuses and alerts are computed by background jobs, never only in the browser, so a clock keeps running when nobody has the tab open. And the final-report triggers are two, not one: for an exploited vulnerability, fourteen days from the moment a corrective measure is available; for an incident, one calendar month after the 72-hour notification.
03 / 06
System
The product as a system
- Product + SBOM
- Vulnerability match
- Reviewer decision
- Article 14 clocks
- Submission + evidence
Product decisions
Three decisions shape the product more than the stack does.
- Rank by exploitation signal, not alphabetically and not by CVSS alone: KEV and EPSS first, because a 9.8 that is never exploited deserves less of your week than a 7.5 being actively exploited on a component you ship.
- Show the gap map before asking for an e-mail address: sixteen questions, eight minutes, a banded result rather than a score — a manufacturer discovering the CRA needs to understand its exposure before entering a sales funnel.
- Sell the software self-serve and the setup as a service: the Vellaci Readiness engagement configures scope, products, SBOMs, workflows and the evidence structure with the customer, because the first configuration is where compliance is won or lost.
Screens


04 / 06
Architecture
From input to fulfillment — every stage, its layer, what happens there.
- Free assessmentClient
Sixteen questions, about eight minutes. The gap map — preliminary scope, gaps by area, the highest-risk missing capability — is shown before an e-mail address is asked for.
- SBOM ingestionData
Upload → validate → parse → normalise → persist. CycloneDX 1.2–1.6 and SPDX 2.2–2.3, plus GitHub dependency-graph exports and CI-generated documents (Syft, Trivy, cdxgen). Size, MIME type and magic bytes are checked; an invalid document is rejected with its reason, never silently dropped.
- Component catalogueDomain
One schema regardless of source format: name, version, purl, CPE, supplier, ecosystem, licences, hashes, direct/transitive status and dependency relationships. Deduplicated by canonical purl across the organisation with product/version links preserved — “which products ship log4j-core 2.14.1?” becomes one query.
- Vulnerability intelligenceIntegrations
Every parsed SBOM is matched against OSV and GitHub advisories, enriched with CISA KEV and EPSS, and re-checked daily: new exploitation evidence reaches the product page without a re-upload.
- Triage and human decisionDomain
Triage requires a reason, a remediation owner and a VEX state. The CRA review asks the Article 14 question explicitly: a named reviewer confirms or rejects reportability with a rationale. No clock starts before that decision.
- Deadline engineDomain
Deadlines are persisted with the rule version, the source timestamp and the timezone. Statuses — upcoming, due soon, critical, overdue — and alerts are computed by background jobs, never only in the browser.
- Staged formsClient
The 24-hour early warning, the 72-hour notification and the final report share the facts already recorded, and required, recommended and missing fields are labelled against the Article 14 content requirements.
- ENISA SRP submissionIntegrations
Copy the formatted content or export an evidence package; the submission is recorded with time, submitter, reference and receipt.
- Immutable revisionsData
Every save creates a hashed revision. The one marked as submitted is frozen: later edits never alter it, and amendments are linked to it.
- Evidence vault and audit logOperations
Private, checksummed files and links tied to products, requirements, vulnerabilities, incidents and cases, with review dates and legal hold; an append-only, hash-chained audit trail, exportable at any time.
- Roles and external accessOperations
Seven server-enforced roles, invitations, configurable external-advisor access, enforceable MFA and SSO, API tokens and webhooks.
Architecture
The system is organised around a single graph: Organisation → Product → Version → Release → SBOM → Component → Vulnerability → Assessment → Remediation → Incident → CRA Notification → Evidence. Every screen is a view over that graph, and every record connects back to a product that is actually on the EU market.
Ingestion is the foundation: an SBOM is validated, parsed into a normalised component model and bound to a product version — the original file preserved with its SHA-256 checksum, and historical facts never rewritten when a newer SBOM arrives. Deduplication happens by canonical purl at the organisation level while product/version relationships are preserved, which turns “which products ship this library?” into a one-line query.
Above that, intelligence is continuous rather than episodic: components are matched against OSV and GitHub advisories, enriched with CISA KEV and EPSS, and re-checked daily. A component shipped six months ago that enters the KEV catalogue today surfaces on the product page without anyone re-running a scan.
Domain model
- Organisation → Product → Version
- A first-class registry: lifecycle states, classification reasoning, owners, support periods, immutable version history.
- Release → SBOM
- The document stays attached to the version it describes; the original file is preserved with its SHA-256 and historical facts are never rewritten when a newer SBOM arrives.
- Component
- A catalogue deduplicated by canonical purl, with product usage, dependency relationships, licences and exposure counts.
- Vulnerability → Assessment → Remediation
- Triage with a mandatory reason, a remediation owner, a VEX state, and the CRA review that asks the Article 14 question.
- Incident
- Separate records for exploitation, compromised devices and update-infrastructure compromise — each with its confirmed awareness timestamp.
- CRA Notification
- The case: type, product, owner, server-computed deadlines, staged forms, submission record.
- Evidence
- A checksummed file or link tied to a product, a requirement, a vulnerability, an incident or a case, with a review date and legal hold.
05 / 06
Business result
Exposure, reporting and evidence answered from one system instead of spreadsheets and ticket timestamps; sold as a self-serve subscription, with a free workspace that carries a real case end to end, and a fixed-price implementation from €4,900.
Current status
In production, subscriptions live through Stripe. Published pricing (September 2026): a free Evaluation workspace (1 product, 3 seats, 10 SBOMs/month), Readiness €490/month, Growth €990/month, Enterprise under contract, and Vellaci Readiness implementation from €4,900. Article 14 reporting obligations have been in force since 11 September 2026.
Business and operating model
A free workspace that is not a demo: one real product, three seats and the full reporting workflow — enough to carry a genuine case end to end. The subscription starts when the number of products, seats or SBOMs outgrows that, which is the moment a manufacturer actually puts its portfolio under the CRA. Beside it sits a fixed-price implementation engagement: scope, products, SBOMs, workflows and evidence structure configured with the customer. The software sells self-serve; the setup sells as a service, because a manufacturer discovering the regulation is not buying a tool — it is buying a way out of uncertainty.
What shipped
- SBOM ingestion (CycloneDX, SPDX) with continuous matching against OSV, GitHub advisories, CISA KEV and EPSS — exposure becomes a query, not a project
- Article 14 clocks computed server-side from a confirmed awareness time, with the rule version, source timestamp and timezone persisted; statuses and alerts run as background jobs
- Human confirmation before any timer: a named reviewer confirms or rejects reportability with a rationale, so the deadline has an owner and a defensible start
- Immutable revisions — every save is a hashed revision, the submitted one is frozen, amendments link back to it — plus a checksummed evidence vault exportable at any time
- Vulnerabilities ranked by exploitation signal (KEV + EPSS), not alphabetically
- A free 16-question readiness assessment as the top of the funnel: the gap map is shown before an e-mail address is asked for
Acquisition
Acquisition is built on the intents of a manufacturer discovering the regulation: scope (“is my product in?”), product categories, the Article 14 deadlines, the difference between an incident and a vulnerability, the Annex VII technical documentation, the conformity assessment routes, the support period. Free tools sit alongside them — a CRA deadline calculator, a security.txt generator — answering a real question without an account.
Every page leads to the same door: the sixteen-question assessment. It is the site’s only conversion point, and it gives its result before asking for anything.
06 / 06
Lessons
- 01Automate detection, not the legal decision: the system flags, a named reviewer confirms, and the confirmation starts the clock.
- 02Persist a deadline with the rule version, the source timestamp and the timezone that produced it.
- 03Build one graph and make every screen a view on it: “which products ship this library?” becomes a query.
- 04Sell the software self-serve and the setup as a service: the first configuration is where compliance is won or lost.
What I owned
- Regulatory research — CRA 2024/2847, Article 14, Annex I, product scope
- Product and journey — from the free assessment to a recorded submission
- Domain model and the SBOM ingestion pipeline
- Server-side deadline engine and the immutable revision model
- Evidence vault, hash-chained audit log, server-enforced roles
- Stripe payments, plan packaging and the implementation engagement
- Search acquisition architecture across CRA intents
Capabilities proven here
The matching service
- SaaS developer — A complete SaaS product — auth, roles, data, payments, admin, deployment — built for its first real customer.
- Custom web application — Internal tools, client portals, eligibility engines, back offices — the software that replaces the spreadsheet and the emails.
- Architecture and product audit — The paid diagnostic before the build: v1 scope, target architecture, risks, plan and budget. CHF 2’400, seven working days, 100% credited against the build.
Related reading
- Next.js architecture for a production SaaS: the decisions I make on every productWhat separates a Next.js project that holds from one that gets rewritten after a year comes down to about ten decisions. Here are mine, as applied on Atamatax, Horvera, Wabiro, SponsorsMetrics — and on this site.Next.js & full-stack9 minRead →
- Prototype or v1: the difference that decides your launchA prototype impresses in a demo. A v1 survives the first real customer. Confusing them is expensive.Building products5 minRead →
Next system
SponsorsMetrics