EU AI Act: How formexposed Uses AI

This document is published in several languages. In the event of any discrepancy between the language versions, the Polish version is binding.

Version 1.1 · Last updated: 23 October 2026

What Regulation (EU) 2024/1689 (the “AI Act”), as amended by Regulation (EU) 2026/1744, means for formexposed, where the service uses artificial intelligence, where it expressly does not, what data a model gets to see and how we assess the Regulation’s obligations as they apply to us. This page describes the current state of the service and our legal assessment; it is not a contract document, and what we owe Customers is governed by the Terms of Service and the Data Processing Agreement. It forms part of our legal documents alongside the Privacy Policy and the Records of Processing Activities.

1. The short version

The AI Act entered into force on 1 August 2024. Its prohibitions and the AI literacy obligation have applied since 2 February 2025, the obligations for general-purpose models since 2 August 2025, and the transparency obligations of Art. 50 since 2 August 2026 (Art. 113).

formexposed uses a language model in three places: as an aid to classify a form that our rules do not recognise, to summarise scan findings as a prioritised action plan for paid accounts, and in “Fix it for me”, where, at your request, it builds our protection module into your form code. In all three cases the model runs on our own server in Poland; no input goes to an AI provider. Score, verdict, alerts, abuse prevention and the spam protection in the plugin are not AI but rules that we have written and that can be recalculated by hand. No AI output decides anything about a person.

2. Where formexposed uses AI

2.1 Classifying forms in the check service

In every check, the crawler needs to know what kind of form it is looking at: contact form, login, order, search, newsletter and so on. This determines whether a form is assessed at all. Classification takes place in two stages:

  1. Rules first. Field types, field names, labels, button texts and the text around the form are matched against fixed word lists in German, English and Polish. This handles the vast majority of forms.
  2. The language model only if the rules say “unknown”. It then receives a description of the form and responds with a type and a confidence between 0 and 1. If it does not respond, responds with nothing or with something unknown, the form remains “unknown”. If the model fails, the check continues without this stage.

What the model may do is narrowly limited, and in the code, not just as an intention:

  • A form classified by the model is never submitted. Test submissions exist only for contact forms that the rules have recognised with high confidence, and, for customers, only on domains with proof of control.
  • A form classified by the model does not count towards score and verdict. It remains visible in the list of forms found, but is never treated as the domain’s relevant contact form, to which monitoring, visual comparison, client portal and “Fix it for me” attach. If the model considers something a contact form, the code reduces its confidence to at most 0.6, because in our tests it took search fields and insurance calculators for contact forms.
  • Next to each form, the report states where its classification comes from: “rules” or “AI”, with the confidence as a percentage.

2.2 “Fix it for me”: building the protection module into your code

On the paid plans, owners and admins of a workspace receive a ready-made protection module for PHP, Node.js or Python. The module itself is a fixed template without AI; only your host name and the field names from the last check are inserted. Optionally, you can paste in the code of your form, and the language model builds the module into it. You receive the modified file and, except for very large files, a patch. Before you see the result, our code checks two things without AI:

  • whether the call to the module has actually been built in – if it is missing, the interface says expressly: do not deploy like this;
  • whether the syntax is correct (php -l, node --check or py_compile); your code is checked, not executed.

With every result, the interface says that it comes from an AI, that an AI can make mistakes and that the syntax check does not test your logic. We deploy nothing: we have no access to your server and do not ask for any. The next check shows whether the change works.

2.3 Third-party AI assistants via our MCP interface

On the Business plan, you can connect your own AI assistant (such as Claude, ChatGPT or Cursor) to your account via the Model Context Protocol to query your domains, checks and incidents. This is not AI of ours: we supply the assistant with data, just as the REST API does. Which provider does what with the data is determined by your choice and your contract with that provider. Via the interface, the assistant can only read and start a check.

2.4 Google reCAPTCHA on our own forms

Our own forms (free check, header tool, opt-out, login, registration, password, support and contact) are protected by Google reCAPTCHA v3. For this, Google calculates a value between 0 and 1 using its own methods; we see only this value and reject a submission below a fixed threshold. The method is Google’s, not ours. Anyone who is rejected can try again or reach us by e-mail. Details are in the Privacy Policy.

2.5 Prioritised action plan in paid reports

For eligible checks of domains in paid accounts, the same local model also writes a short prioritised action plan from the hostname, overall result and score, CMS, relevant form type and page address, any identified plugin and selected failed or unclear findings. It does not receive screenshots or submitted form values for this purpose. The plan is labelled as an AI summary; the individual findings remain authoritative. It does not change the website or the scan result.

The model is instructed to produce 3 to 5 short numbered steps, or 1 to 2 steps when protection is already good. These are instructions to the model, not a guarantee of correct recommendations. The output is shortened and cleaned as plain text; no check of its factual correctness is implemented.

3. Where formexposed does not use AI

The following parts are based exclusively on rules set by humans. They infer nothing from data, learn nothing and are therefore not AI systems within the meaning of Art. 3(1), as explained in Recital 12:

  • Score and verdict: a weighted sum of missing protection measures (CAPTCHA, trap field, token, timestamp and others) from 0 to 100; above fixed thresholds “Exposed”, “Partially protected” or “Protected”. We set the weights; they do not change based on the data checked.
  • Detection of protection measures, third-party scripts, cookie banners, accessibility: matching against known characteristics in the page source and in the behaviour of the page.
  • Monitoring and alerts: comparison with the previous check; response times against a baseline from the median of the first measurements, with fixed thresholds.
  • Abuse prevention for the free check: counts per IP address, session and period with fixed limits. Anyone who exceeds a limit is rejected for the current period, for at most 24 hours. Anomalies are flagged and resolved by a human.
  • Visual comparison of forms: screenshots from successive checks are compared using brightness profiles of their rows and columns with fixed thresholds, in order to report a shifted or hidden form.
  • Swarm protection: a domain from links in blocked messages is added to the shared list if it appears on a minimum number of different websites within a fixed period; large services are exempt, and every block ends up in quarantine, not in oblivion.
  • Spam protection in the WordPress plugin and the TYPO3 extension: trap field, signed token, minimum completion time, proof of interaction, arithmetic puzzle, checks for line breaks and for a mail domain capable of receiving e-mail, rate limiting, lists of disposable addresses, writing systems by Unicode classes, custom word lists and countries. The check itself runs on the Customer’s website. While the website is connected to an account, all we receive are counts, names and versions of extensions and, while it takes part in swarm protection (enabled by default in the WordPress plugin), the domains of links in blocked messages – no messages and no addresses.

4. What data the model receives, and where it runs

FunctionInput to the modelOutputWhat is stored
Classifying formsTitle and address of the page, text of the submit buttons, for each field its type, name, label, placeholder and whether it is required or hidden, at most 400 characters of visible form text. No values entered.Form type and confidenceType, confidence, origin “AI” and the name of the model with the check result, subject to its retention period; not the request itself
“Fix it for me”the code you paste in (at most 30,000 characters) and our protection module with your host name and your field namesthe modified filenothing of the code (for the syntax check, the modified file is held on our web server as a temporary file only for the duration of that check); in the activity log only language, length, whether it succeeded, whether the call was built in, and the result of the syntax check
Prioritised action plan in paid reportsHostname, overall result and score, CMS, relevant form type and page address, any identified plugin, and at most 18 distinct failed or unclear findings with keys, results and notes shortened to 200 characters each; no screenshots or submitted field valuesA short prioritised plan in the selected language, limited to 1,500 charactersRequest and response temporarily in the internal job queue; the collected plan text, language, status and timestamp with the scan result under its retention period
  • No data outflow. The model runs on our own check server in Poland. The crawler reaches it from within its isolated environment, our web server via our internal network. No input goes to an AI provider or any other third party. The application and worker code do not establish whether the model service logs request content. The model-host logging configuration has not been verified by this review; we therefore do not claim here that all model-service logs contain only technical metadata.
  • No training. We do not train or modify the model and use neither check results nor your code to improve it. Each request stands on its own.
  • Personal data. These functions do not require visitor messages or actual submitted form values for their intended purposes. This does not mean that their inputs are anonymous. Exceptionally, a name may find its way into the form text of a third-party page, for example that of a contact person next to the form. In “Fix it for me” we ask you to remove passwords, API keys and personal data before pasting; the interface reminds you of passwords and API keys at the input.
  • Action-plan storage. The request is temporarily stored in our internal job queue. After the result is collected, the queue entry is deleted; scheduled cleanup also deletes queue entries more than one hour old. The generated text, language, status and timestamp are stored with the scan result and follow its retention period, including retention of the last completed check for each domain and deletion when the domain is deleted.
  • Action-plan inputs. Hostnames, page addresses and finding notes may incidentally contain personal information. The action-plan prompt does not request visitor messages or entered field values.
  • Usage limits: “Fix it for me” with AI is limited to a number of requests per workspace per day, so that the server remains available for the checks.

5. Our role under the AI Act

The model: We use a freely available general-purpose language model with open weights from a third-party provider. The obligations for the model itself (Art. 53 et seq.) are borne by its provider. Because we neither train nor modify it, we do not ourselves become the provider of such a model.

The systems: We built the form classification, the action-plan function and “Fix it for me” and operate them under the name formexposed. In our assessment, we are the provider of these AI systems (Art. 3(3)), because we developed them ourselves and put them into service under our own name. We also operate the form classification and the action-plan function ourselves and are, to that extent, the deployer (Art. 3(4)). Simply receiving or reading an action plan does not by itself make a Customer a deployer. “Fix it for me” is used by our customers in the course of their professional activity; in doing so, they are, in our assessment, deployers.

Risk classification: None of these three functions, for the intended purposes described here, falls within the high-risk areas of Annex III (such as biometrics, critical infrastructure, education, employment, essential services, law enforcement, migration, administration of justice) or is a safety component of a product under Annex I. They classify forms, summarise technical scan findings as advisory steps and edit program code; they do not assess people. They are therefore not high-risk AI systems under Art. 6; the requirements for such systems and the obligations of their providers and deployers (Chapter III) do not apply to them. They are subject to the AI literacy obligation (Art. 4) and, where its conditions are met, the transparency obligations of Art. 50.

Prohibited practices (Art. 5): formexposed does not carry out emotion recognition, biometric categorisation or identification, social scoring, prediction of criminal offences or manipulative or subliminal techniques.

6. Transparency (Art. 50)

  • No chatbot. Nobody converses with an AI at formexposed. Art. 50(1) concerns AI systems intended to interact directly with natural persons. The action plan is generated in the background and is visibly identified as AI-generated in the report. The form classification does not come into contact with anyone; “Fix it for me” takes in code and returns code, and the interface expressly states that the result comes from an AI. Anyone using the function therefore knows in any case that they are dealing with an AI.
  • Generated code. “Fix it for me” generates program code and identifies it as AI output. Its intended change is to insert our protection module; that can change the behaviour and meaning of the code. We therefore do not assume that the exception for standard editing or unchanged semantics in Art. 50(2) applies in every case. The applicability of that provision and any exception must be assessed for the actual output. A patch shows changed lines where available, but does not itself demonstrate an exemption or machine-readable marking. For very large files, there is no patch; in that case, compare the file yourself.
  • Action-plan text and machine-readable marking. The action plan creates a summary and prioritised recommendations from findings. For this purpose we treat it as generated text within Art. 50(2), rather than as standard editing that leaves the meaning unchanged. That provision requires machine-readable marking and detectability, subject to its conditions and the state of the art. A visible AI notice alone does not establish fulfilment of that technical requirement. The current code review confirms the visible notice and plain-text storage and display; it does not establish effective machine-readable marking across the generation and output pipeline. We therefore do not claim that this requirement has been fully verified.
  • Report context. The plan is generated in the background as advice for a website operator. It is not produced for the purpose of informing the public on matters of public interest under Art. 50(4). Reports can nevertheless be opened without signing in by anyone who has their random link. A later publication for a public-interest purpose requires its own assessment; access by a bearer link is not a general exemption from the transparency rules.
  • Classifications in the report are labelled “AI” whenever they come from the model.
  • Action plans in paid reports are labelled as summaries by our AI on our own servers. The notice states that the individual findings are authoritative.
  • We do not generate images, audio or video content, nor deepfakes.

7. Human oversight and no automated decisions

The model’s outputs are aids, not decisions. The form classification cannot trigger anything on its own: no submission, no verdict, no alert. “Fix it for me” changes nothing on your server; you read the result, decide and deploy it yourself. The action plan is advisory text only: displaying it changes neither the website nor the score or verdict; the user decides which steps to take. In our assessment, no function of formexposed makes a decision that produces legal effects concerning a person or similarly significantly affects them (Art. 22 GDPR). If reCAPTCHA or one of our fixed limits automatically rejects an input, you can try again or write to us; a human will then look at the case. Our assessments concern websites and forms, not people.

If you think a classification is wrong, write to us with the report link. We will look at it and improve the rules.

8. AI literacy (Art. 4) and quality

  • The owner built the AI functions of formexposed himself and operates them himself; no other persons currently work with them. Before every change of model, he familiarises himself with how it works and its limits, and with the current state of the Regulation. If employees or service providers who work with these functions are added, they will be instructed in how the functions work, their limits and risks before they first use them; we record the instruction in writing.
  • Before we deploy or change a model, we test it on a collection of test forms for response time, valid responses and misclassifications. This is a working step carried out by the owner, not a process enforced in the code. The limits in section 2.1 are based on such measurements.
  • Art. 4 also applies to you as a Customer if you use “Fix it for me” professionally. This page and the notices in the interface are intended to help you with that.

9. Changes and contact

We will update this page as soon as an AI function is added, changes significantly or is removed; significant changes are listed under Changes to the Contract Documents. Please send questions and concerns about our use of AI to contact@lukaswojcik.com, via the contact page or the support window. Complaints follow the procedure under Complaints. This does not affect the right to lodge a complaint with the competent market surveillance authority (Art. 85).

Provider: LW IT Solutions Company Lukas Wójcik, al. Tadeusza Kościuszki 80/82, lok. 301, 90-437 Łódź, Poland.