System 04 / 08 · Case study

VellaciEU Cyber Resilience Act compliance for product manufacturers

In production · subscriptions live

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

  1. Product + SBOM
  2. Vulnerability match
  3. Reviewer decision
  4. Article 14 clocks
  5. 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

Vellaci homepage — “Know what’s exposed, what to report, and what evidence you can produce”, with a workspace showing products, SBOM coverage and an early-warning deadline
The three questions the CRA forces, and an illustrative workspace answering them: SBOM coverage per product, open and exploited vulnerabilities, the early-warning clock.
Vellaci CRA Reporting Command Center page — human confirmation first, server-side deadline engine, staged prefilled forms, immutable revisions
The reporting command centre: a named reviewer starts the clock, the deadline engine runs server-side, and every revision is hashed.

04 / 06

Architecture

From input to fulfillment — every stage, its layer, what happens there.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. ENISA SRP submissionIntegrations

    Copy the formatted content or export an evidence package; the submission is recorded with time, submitter, reference and receipt.

  9. 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.

  10. 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.

  11. 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

  1. 01Automate detection, not the legal decision: the system flags, a named reviewer confirms, and the confirmation starts the clock.
  2. 02Persist a deadline with the rule version, the source timestamp and the timezone that produced it.
  3. 03Build one graph and make every screen a view on it: “which products ship this library?” becomes a query.
  4. 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

Related reading

Next system

SponsorsMetrics

A regulatory obligation your customers have to prove?

Technical data ingestion, monitoring, a deadline engine and an evidence vault: when a regulation creates a dated, verifiable obligation, the product is about making it traceable. That is a system I can build end to end.

danilson.daveigaramos.pro@gmail.com · Reply within 24h, Mon–Fri.