How it works
Mark your fields. Keep your forms. Inkwell handles the review.
Add one versioned browser script and a field attribute to the text fields you already have, then use a small submission hook to ensure review happens first. Inkwell detects personal and sensitive information commonly found in UK records, asks the user to review the findings, and applies the confirmed redactions before your application submits the text.
-
Register your website
Enter the production origin where Inkwell will run, such as
https://app.example.com. We normalise the address to its protocol, hostname and any non-default port, then issue a public application ID.Free registration needs no card. Product and Scale offer monthly or annual subscriptions completed in the secure on-site Stripe form.
-
Add the Inkwell script
Use the versioned browser bundle with its matching model configuration. This prevents incompatible bundle and model revisions being combined. The model remains browser-local and every suggestion requires review.
Script tag <script defer src="https://www.studentradar.com/inkwell/embed/semantic-breadth-v6-browser-portable-hybrid-v19-reviewed-ui-selector-managed-ensemble-v1-controlled-apply-v1-modal-pointer-v1-runtime-a454c9851e0f/inkwell-embed.global.a454c9851e0f.js" integrity="sha384-GaVlArtsFYbgzgBLXbhLMCwxLRwJASXbXv4BtsS3PNNzYAQkH+nHtOAGq+rNyCK6" crossorigin="anonymous" ></script>Matching configuration:
https://www.studentradar.com/inkwell/embed/semantic-breadth-v6-browser-portable-hybrid-v19-reviewed-ui-selector-managed-ensemble-v1-controlled-apply-v1-modal-pointer-v1-runtime-a454c9851e0f/config.json -
Mark the text fields
Add one data attribute to an ordinary textarea. Your existing form and styling stay under your control.
Ordinary HTML form <form id="support-note" action="/submit" method="post"> <textarea id="note" name="note" data-inkwell-redact required></textarea> <button type="submit">Send</button> </form> -
Add the submission hook
Production forms need a small JavaScript submission gate. It waits for the local scan to finish and, when Inkwell finds personal or sensitive information, asks the user to review the proposed redactions before the form can submit the redacted value.
Small submission gate <script> window.addEventListener("DOMContentLoaded", async () => { const form = document.querySelector("#support-note"); const field = document.querySelector("#note"); let reviewPassed = false; const configUrl = "https://www.studentradar.com/inkwell/embed/semantic-breadth-v6-browser-portable-hybrid-v19-reviewed-ui-selector-managed-ensemble-v1-controlled-apply-v1-modal-pointer-v1-runtime-a454c9851e0f/config.json"; const response = await fetch(configUrl, { credentials: "omit" }); const config = await response.json(); const baseUrl = new URL("./", response.url); const resolveAsset = (asset) => ({ ...asset, url: new URL(asset.url, baseUrl) }); const members = config.localModelEnsemble.members.map((member) => ({ id: member.id, client: window.InkwellEmbed.createLocalModelClient({ ...member.localModel, worker: resolveAsset(member.localModel.worker), onnxRuntimeModule: resolveAsset(member.localModel.onnxRuntimeModule), onnxRuntimeWasm: resolveAsset(member.localModel.onnxRuntimeWasm), manifestUrl: new URL(member.localModel.manifestUrl, baseUrl) }) })); const localSpanProvider = window.InkwellEmbed .createSafeguardingConceptExpansionThreeMemberEnsembleClient({ modelVersion: config.localModelEnsemble.modelVersion, acceptedTypes: config.localModelEnsemble.acceptedTypes, members }); await localSpanProvider.prepare(); const inkwell = window.InkwellEmbed .attachInkwellRedactionTriggers(document, { trigger: "manual", localSpanProvider, onConfirm() { reviewPassed = true; form.requestSubmit(); } }); form.addEventListener("submit", async (event) => { if (reviewPassed) { reviewPassed = false; return; } event.preventDefault(); const findings = await inkwell.scanElement(field); if (findings.length === 0) { inkwell.close(); reviewPassed = true; form.requestSubmit(); } }); window.addEventListener("pagehide", () => { inkwell.destroy(); localSpanProvider.dispose(); }, { once: true }); }); </script>This example protects one textarea. Repeat the scan for every field that can carry free text before allowing a multi-field form to submit.
The privacy boundary
The detector stays local. Licensing stays separate.
No document text leaves the user's browser or is sent to Student Radar. Detection and redaction run locally in the browser.
A licence check sends only the public application ID, current website origin and bundle version—never text, findings, snippets or identifier counts.
For deployed-site registration, Student Radar stores the business contact email, company (if supplied), registered origin, public application ID, licence tier, registration date, status, and last-seen Inkwell bundle version.
Student Radar does not receive or store document text, pupil data, findings, redaction labels, snippets, hashes, or counts as part of registration or licence checks.
Inkwell runtime evaluation licence Detector data sources and licences
What you need
A small frontend change, not a new data pipeline.
- Permission to add one external script to your Content Security Policy.
- The production website origin you want to license.
- A textarea or supported text field to mark for review.
- A small submission gate that waits for human confirmation before sensitive text is submitted.