MODEL
Threat model → personal-data scope.
The model traces personal data, identifies controllers and processors, and maps each finding to the Article that governs it.
GDPR
VibeReview traces personal data through your services and generates guardrails for Article 25 (by design and by default), Article 32 (security of processing), and Article 35 (DPIA inputs). Evidence sits in your audit log, not in a quarterly review meeting.
14-day free trial · No card required
"Add a PATCH endpoint so users can update their profile."
ALLOWED = {"display_name", "locale", "marketing_optin"}
@app.patch("/users/me")
def update_me(
body: dict,
user = Depends(auth),
):
if erasure.is_pending(user.id):
raise Conflict("erasure in progress")
fields = {k: v for k, v in body.items() if k in ALLOWED}
db.update("users", user.id, **fields)
audit.log(
"user.updated",
actor=user.id,
fields=list(fields),
lawful_basis="contract",
) ✓ Minimized fields. Erasure-aware. Lawful basis recorded. Articles 5, 17, and 30 satisfied without a privacy-team review.
MODEL
The model traces personal data, identifies controllers and processors, and maps each finding to the Article that governs it.
ENFORCE
Minimization, lawful processing, encryption, pseudonymization, integrity, resilience. Each guardrail cites the Article it enforces.
EVIDENCE
Every diff that touches personal-data code runs the matching guardrails. Audit log records the Article and the outcome.
REPORT
Per-Article coverage. Useful inputs for Data Protection Impact Assessments and supervisory authority responses.
WHAT'S COVERED
Coverage focuses on Articles directly addressable through code controls.
Bring your DPO. We walk through personal-data scope, Article 25 evidence, and DPIA inputs.