Woop Art
A digital art space that presents artworks impressively and guides visitors effortlessly through the gallery.


For our web applications we developed a central consent engine that manages consent, consent-dependent services and declared storage values.
Three separate layers: the engine in the middle owns how the system works, the data source below it is interchangeable, and the interface above belongs to the individual project.
central consent engine
consent categories in the reference project
declared services
managed cookies
fully integrated languages
external CMP scripts in the loading path
These figures describe the consent definition of the reference project woop-art.de. They are an order of magnitude, not a limit: categories, services and cookies are data, and the engine imposes no ceiling on them. The last figure is the important one – no third-party script is loaded for the consent system itself.
Web applications frequently embed external services such as analytics, maps, videos or appointment booking. That creates additional data flows and raises the question of the conditions under which those services may load at all.
Many consent solutions are integrated into a website afterwards, as a system of their own. That creates additional dependencies: configuration and interface sit outside the actual application, external scripts become part of the technical loading path, and control over individual integrations is spread across several systems.
For our projects we therefore wanted to integrate consent directly into the application architecture.
The solution had to
The result is a standalone consent engine that is used today as a shared technical module.
The consent system deliberately separates the central functional logic from project-specific data and the visible interface.
As a result, the same technical foundation can be used in applications that are built very differently, without having to reimplement consent state, versioning or script gating for every project.
The same engine can therefore be used in an art platform and on a corporate website, even though the two interfaces are designed differently.
The central engine is responsible for everything that stays the same across projects:
This logic is maintained centrally and provided as a shared module.
The engine receives all project-specific information through a defined interface. This includes, among other things:
Where that information comes from is not decisive for the engine. It can live in the project itself or be provided by another data source.
Banner and settings dialog belong to the respective project. The presentation receives the data it needs and a fixed set of actions from the central engine.
This means the visual appearance can change completely without the underlying consent logic having to be adjusted.
A central requirement was not merely to disable consent-dependent services before consent is given. They should not load in the first place.
Several mechanisms work together to achieve this.
So that declared storage values and the actual implementation are not maintained independently of one another, the engine uses a central registry. Technical properties are defined for every storage value managed through the consent infrastructure.
These include, for example
Language-dependent information such as purpose and description is maintained separately from this.
If application code attempts to write an unregistered value through the consent infrastructure, the operation is rejected. The registry is therefore not just documentation but part of the technical control.
Every consent configuration carries a version.
What is stored includes
On a subsequent visit the engine compares the stored version with the version currently in use. If the configuration has changed accordingly, the existing selection can be discarded and a new decision requested.
A newly added service can therefore be handled through a new consent version, without developing migration logic for every individual website.
Consent can be adjusted at any time through the consent settings. If a previously accepted category is deselected, more changes than just the stored consent state.
The engine
The rebuild matters because third-party scripts that have already run cannot be reliably undone by removing their script element alone.
After withdrawal, the state should therefore match that of a visitor who never released the category in question.
Google Consent Mode v2 is initialised with the corresponding denied storage states on the first page view. If a valid decision exists, or once consent is granted, that state can then be updated deliberately.
The engine only provides integrations whose associated consent category has actually been accepted. In the reference project this means, for example: without analytics consent, no Google Analytics script is embedded.
The decision is therefore not distributed across individual components but controlled centrally through the consent state.
A defined interface sits between the consent engine and the configuration. The engine needs certain information but is not tied to where that information is stored.
This makes different models possible.
Cookie names, identifiers, category assignment and storage durations are language-neutral. Everything visitors read, by contrast, can be maintained per language.
This includes, for example
A storage value is therefore defined technically once and then described for every language required.
In the reference project Woop Art, German and English are fully maintained. The Woop Technology website uses the same engine with additional languages.
The engine provides a reusable default interface but does not prescribe its use.
A project can
The consent logic remains unchanged throughout.
The presentation can therefore be adapted to the design system of the respective project without reimplementing central functions such as versioning, registry or withdrawal.
Versioned files can be delivered directly alongside the source code. They need no additional network request and pass through the same build and deployment process as the application.
An API can provide the same consent information centrally for several applications. This makes shared configurations or central administration processes possible.
Editorial content can be maintained through a content system while the technical definition remains independent of it.
Technical configuration and editorial content therefore do not necessarily have to come from the same source.


In addition to the consent state in the browser, every explicitly saved decision can be logged server-side.
In the current system, what is recorded includes
IPv4 addresses are truncated after the second block, IPv6 addresses after the third segment.
The endpoint provided for this accepts requests from its own origin only and sits on a fixed path, so that it can also be restricted deliberately at infrastructure level.
We deliberately call this server-side logging of consent decisions rather than audit-proof archiving. Technical logging supports the traceability of a decision; no further legal assurance is made by it.
The visitor's decision takes effect in the application's consent state first. If the additional server-side storage fails, the website remains usable.
The error is logged server-side instead of exposing technical details in the browser. The consent system's ability to function therefore does not depend on the additional logging being available at every moment.
The consent configuration and the central engine are part of the application itself. No external CMP provider is therefore required for the consent system.
That means
Consent-dependent services remain separate from this and load only once the required consent is in place.
The consent engine exists as a package of its own and is provided through the private package registry of Woop Technology. Versions and changes can therefore be managed as traceably as any other technical dependency.
A new project essentially adds four project-specific areas.
Consent state, versioning, registry, script gating and withdrawal logic, by contrast, come from the shared module.
An improvement to the central engine can therefore reach several projects through a versioned update.
The categories, services, storage values and texts of the respective project.
The desired form of server-side storage for consent decisions.
Analytics, for example, or other consent-dependent external services.
The default interface, or custom banner and settings components.
A consent architecture of your own is not necessary for every project. For a simple website with few external services, an established consent platform can be the faster and more economical solution.
A shared module of your own becomes interesting in particular when several requirements come together
In those cases a shared engine reduces project-specific implementations and makes it possible to develop central functions further in one place.
The central consent state is available to application code as well.
A component can therefore check, for example
This also makes two-click solutions possible. Instead of a third party that has not yet been released, a local component can be shown first, informing about the external service and loading it only after a corresponding decision.
Consent is therefore not limited to banner and settings dialog but can be integrated directly into the flow of an application.
An external consent platform brings an additional provider, its own scripts, its own configuration and usually one more technical dependency. Our own engine, by contrast, is operated together with the existing applications and within the intended infrastructure.
This does not mean that external consent platforms are generally unsuitable. The decision depends on the scope and requirements of the respective project.
No further CMP provider is required for managing consent itself. The corresponding consent data can therefore be processed where the application is operated.
Which other external services a specific project uses, and which data is transferred in the process, is defined and documented project by project, independently of this.
The consent engine is used today as a reusable part of different web applications. Central functions are maintained once, while data, integrations, languages and interface remain project-specific.
State, versioning, registry, script gating and withdrawal are managed together.
The corresponding integrations load only after the required consent.
Stored consent is bound to the respective state of the consent configuration.
Data sources, languages and interfaces can be built differently for each project.
Explicit consent decisions can be stored traceably with version and timestamp.
Improvements to the engine can reach several projects through versioned updates.
A digital art space that presents artworks impressively and guides visitors effortlessly through the gallery.


A clearly structured platform for cycle-based training, nutrition and lifestyle coaching – with offer comparison, appointment requests and booking.


In the initial consultation, we talk through your requirements – from consent management and integrations to the architecture and later operation.