GDPR Policy
Last updated: 17 October 2026 · v3.4 · Changes in v3.4: sections 4.3 and 5 — at the end of the contract the customer is given a complete export of its audit trail before it is deleted, unless it declines it in writing or cannot be reached after reasonable attempts; YARDtwin then keeps audit records only on the customer's written instruction, apart from backups until they expire and its own record of the handover.
Applicable Regulations: EU General Data Protection Regulation (2016/679), Irish Data Protection Act 2018
1. Our Commitment
YARDtwin Ltd is committed to full compliance with the General Data Protection Regulation (GDPR). As both a data controller (for our own customer data) and a data processor (handling operational data on behalf of our customers), we implement appropriate technical and organisational measures to protect personal data at every stage.
2. Roles & Responsibilities
3. Data Processing Agreement (DPA)
All customers can review and accept our Data Processing Agreement via the self-service DPA page. Paid-plan customers can request the Data Processing Agreement for review from dpo@yardtwin.com; the countersigned edition is issued once company registration is complete.
4. Technical Measures (Art. 32 GDPR)
All data encrypted in transit (TLS 1.2+). Passwords hashed with bcrypt (12 rounds). PostgreSQL Flexible Server uses transparent data encryption at rest. Azure Blob Storage encrypted at rest. Driver licence images and signatures are encrypted at rest with AES-256 by Azure Storage and Azure Database for PostgreSQL (Microsoft-managed keys), and access to them is limited by role and organisation. JWT tokens cryptographically signed (HS256). Secrets managed via Azure Key Vault accessed by App Service managed identity — no secrets in code, environment files, or container images.
Role-based access control (RBAC) on authenticated routes, with tenant scoping enforced server-side. Tenant isolation is tested automatically before every release: the release gate’s cross-tenant sweep calls the API as one organisation with another organisation’s record IDs, and the release is blocked if any of that organisation’s data can be read or changed. Single sign-on (SAML 2.0, Google, Microsoft); time-based one-time-password MFA, mandatory for platform administrators and available to all users.
Complete audit logging of user actions: user identity, timestamp, IP address, action verb, entity affected, old and new values. GMP-relevant actions flagged separately (is_gmp_relevant=1). Tamper-evident and append-only, enforced in the database with a hash chain; GMP-relevant entries retained for at least 7 years while the service agreement runs, other audit entries for 365 days. Pseudonymised but not deleted on Art. 17 erasure (Art. 17(3)(b) legal-obligation override). At the end of the contract the customer is given a complete export of its audit trail before it is deleted, unless it declines it in writing or cannot be reached after reasonable attempts; YARDtwin keeps it longer only on the customer's written instruction, apart from backups until they expire and its own record of the handover.
Hosted on Microsoft Azure (Sweden Central + Norway East, EEA). Containerised App Service deployed via Azure Container Registry with staging-slot-then-swap. Traffic reaches the application through Azure Front Door with a Web Application Firewall in Prevention mode; the database accepts connections only from Azure services and an administrator IP allow-list. Application Insights with schema-drift alert on Postgres "column / relation does not exist" errors (15-minute window). End-to-end /health/db-write probe verifies the application can write+read the database on every deploy.
We only collect data necessary for service delivery. Optional driver fields (phone, email) can be left blank where the customer’s process allows. Gate staff may take a face photo of the driver as gate evidence. Where a site turns on AI face comparison, our AI provider (Anthropic) compares that photo one-to-one with the licence photo or the driver’s stored photo to help staff confirm the driver’s identity. The result is advice: gate staff decide, and can admit a driver the comparison did not confirm by giving a reason. Each comparison is recorded on our servers with its result. Where face comparison is off (the default), no face photo is sent to the AI provider and staff compare the driver with the licence photo themselves; licence images are still read by AI where AI reading is on. YARDtwin stores no face templates and performs no one-to-many identification. Newsletter only collects email and optional company name.
Every pull request must pass npm audit (dependency vulnerabilities), Semgrep (static analysis) and gitleaks (secret scanning) before it can be merged, with a Trivy container image scan as an advisory check; these checks also run on every push to master and nightly, together with an advisory OWASP ZAP baseline scan (dynamic testing) of the production site. Dependabot alerts report newly disclosed vulnerabilities in our dependencies.
5. Data Subject Rights (Chapter III GDPR)
We facilitate the exercise of all data subject rights:
POST /api/v1/dsar/erase/by-email which, on a verified request, anonymises the person's own user accounts in the selected customer accounts and deletes their sessions, tokens, notifications, pending invitations, newsletter and sign-up records and own avatar. Operational records held by the customer (bookings, gate and visit records, driver roster, contacts) are the customer's records as controller and are listed for the customer to act on. The audit trail keeps an anonymised actor reference for GMP integrity; GMP-relevant audit data is retained for at least 7 years while the service agreement runs, per Art. 17(3)(b) legal-obligation override, and at the end of the contract is exported to the customer (unless it declines in writing or cannot be reached after reasonable attempts) and then deleted.6. Consent Management
Newsletter: Explicit opt-in consent required. Consent timestamp and IP recorded. Unsubscribe link in every communication. Consent can be withdrawn at any time without affecting service access.
Service Terms: Account creation constitutes acceptance of Terms of Service (contractual basis). Users are informed during signup about data processing.
Cookies: A cookie consent banner is displayed on first visit in compliance with the ePrivacy Directive. Users can choose essential cookies only or all cookies. Preferences stored locally and can be changed at any time.
7. Data Breach Procedures (Art. 33-34)
Automated Detection: A breach-monitor worker checks the audit log every 5 minutes and records the first three anomalies below as potential incidents; the other three are separate Azure monitoring alerts:
- ≥10 failed logins for one email address in 1 hour
- ≥5 distinct source IPs targeting one email in 24 hours
- Successful login from a source IP not previously seen for that user within the last 30 days
- More than 10 server errors (HTTP 5xx) in a 5-minute window
- Postgres "column / relation does not exist" errors (schema-drift, App Insights)
- The website availability test (run every 10 minutes) failing or responding slowly
Breach Register: Every detected anomaly is written to the breach_register table with a state machine (detected → investigating → confirmed → notified → closed), severity, scope, affected data subjects, DPC-deadline countdown, and audit history. Visible in the SuperAdmin "Breach Register" panel.
Alert Routing: Detection events route to Azure Monitor Action Group yardtwin-breach-actions, which emails the founder contact at admin@yardtwin.com. Schema-drift events use the existing yardtwin-schema-drift-actions group.
Assessment: Within 24 hours of detection, the technical team triages the incident in the breach-register panel: scope, affected data subjects, severity (Art. 33(1) "risk to rights and freedoms" criterion), and root cause.
Notification to DPC (Art. 33): Within 72 hours of becoming aware of a breach that poses a risk. The breach-register panel shows a live 72-hour countdown timer once the incident is marked confirmed.
Notification to Data Subjects (Art. 34): Without undue delay if the breach poses a high risk to their rights and freedoms.
Notification to Customers: Affected tenant administrators are notified without undue delay, and in any case within 48 hours of our becoming aware of a personal data breach affecting their tenant's data; an initial notice is given within 24 hours of any confirmed security incident affecting that data.
Documentation: Every entry in the breach register is kept, with no automatic deletion, regardless of whether external notification was required.
8. Sub-Processors
| Sub-Processor | Purpose | Location | Safeguards |
|---|---|---|---|
| Microsoft Azure | Hosting, database and file storage | EEA — Sweden Central and Norway East (geo-redundant copy of uploaded files in Norway West) | Microsoft Products and Services DPA; data stays in the EEA |
| Anthropic | AI reading of driver licences and documents (on by default; a site administrator can switch it off), one-to-one comparison of a driver’s gate photo with the licence or stored driver photo (off by default; a site administrator can switch it on or off), and the in-app assistant | USA | Standard Contractual Clauses and a transfer impact assessment (not certified under the EU-US Data Privacy Framework); API data is not used for model training and is deleted within 30 days under Anthropic’s standard commercial terms |
| Resend | Transactional e-mail | USA | Standard Contractual Clauses (its EU-US Data Privacy Framework re-certification is under review) |
| Stripe | Billing contact and payment data (YARDtwin stores no card numbers) | EU / USA | Standard Contractual Clauses; PCI DSS Level 1 |
| Twilio | SMS and WhatsApp notifications (only if the customer enables them) | USA | Standard Contractual Clauses |
| Google and Microsoft | Sign-in identity data (only if the customer uses those sign-in options) | EU / USA | Standard Contractual Clauses / EU-US Data Privacy Framework |
| ElevenLabs | Optional text-to-speech: voices the in-app assistant’s replies, which can contain operational details such as vehicle registrations, and the voice on public pages | USA | EU-US Data Privacy Framework + Standard Contractual Clauses |
Customers give general written authorisation for the sub-processors listed above. We give at least 30 days' notice of any new sub-processor; a customer may object on reasonable grounds and, if the objection cannot be resolved, terminate the affected service without penalty.
Website-only services (no customer operational data)
These run on the public website only. They receive no customer operational data and are not sub-processors of it; any that set cookies load only with consent.
| Provider | Purpose | Location | Transfer safeguard |
|---|---|---|---|
| LinkedIn Insight Tag | Marketing measurement on public pages — loads only after marketing-cookie consent, never inside the application or for signed-in users | EU / USA | Consent; LinkedIn DPA with Standard Contractual Clauses |
9. Data Protection Impact Assessment (DPIA)
Customers, as controllers, decide whether their processing in YARDtwin needs a DPIA. A DPIA input pack is available to customers for their own DPIA. YARDtwin processes mainly business operational data (dock schedules, carrier names, vehicle registrations) rather than sensitive personal data.
10. Data Protection by Design & Default (Art. 25)
By Design: Multi-tenant architecture with mandatory tenant isolation. RBAC built into every API endpoint. Passwords never stored in plaintext. Minimal data collection at every stage.
By Default: New accounts have minimal permissions. Optional fields are truly optional. Newsletter requires active opt-in. Data visibility restricted by role.
11. Compliance Status & Continuous Improvement
Resolved (as of May 2026)
- ✓ Migration to PostgreSQL Flexible Server (Azure managed, transparent data encryption at rest, 7-day point-in-time recovery)
- ✓ Migration to Microsoft Azure (Sweden Central + Norway East, EEA) with App Service + ACR + Key Vault
- ✓ Secrets management via Azure Key Vault (no secrets in .env or container images; managed-identity access)
- ✓ Automated DSAR auto-export (POST /api/v1/dsar/export/by-email — Art. 15 / 20)
- ✓ Automated DSAR auto-erasure (POST /api/v1/dsar/erase/by-email — Art. 17 with audit-retention compliance)
- ✓ Cookie banner v2 with four categories (essential / functional / analytics / marketing) and Reject / Customise / Accept-all
- ✓ Cross-tenant isolation audit automated cross-tenant sweep in the release gate, before every release: it calls the API as one organisation with another organisation’s record IDs, and the release is blocked if any of that organisation’s data can be read or changed
- ✓ CI/CD security pipeline: npm audit + Trivy + Semgrep + gitleaks + ZAP DAST
- ✓ Schema-drift alerting on Application Insights (15-minute window)
- ✓ End-to-end /health/db-write probe verifying writable DB on every deploy
- ✓ App Insights schema-drift Action Group emails the founder contact at admin@yardtwin.com on Postgres "column / relation does not exist" errors
- ✓ Driver licence images and signatures (signature_data) protected by AES-256 encryption at rest in Azure Storage and Azure Database for PostgreSQL (Microsoft-managed keys), with access limited by role and organisation
- ✓ Automated data retention purge (configurable per site; pii-cleanup worker)
- ✓ 30-day trial harmonised everywhere (signup, marketing site, terms, emails)
- ✓ 5,000-truck end-to-end regression test covering every Site Admin endpoint with yard-view fidelity assertions at every transition (53,650/53,651 = 100%)
- ✓ Data inventory and Records of Processing Activities (Art. 30) published
- ✓ Sub-processor register maintained and reviewed annually
- ✓ Privacy by design and by default documented (Art. 25)
- ✓ Web Application Firewall (Azure Front Door WAF, Prevention mode) protecting yardtwin.com with custom rate-limiting rules on the authentication and account-recovery endpoints, plus platform-level L7 DDoS mitigation. A managed OWASP rule set is not attached; that requires the Front Door Premium tier
- ✓ Automated breach detection — breach-monitor worker (failed-login spikes, sign-in attempts on one account from many IP addresses, successful logins from an IP address not seen for that user in 30 days), 5xx-spike alert, schema-drift alert and website availability test
- ✓ Breach register persistent table with full state machine and DPC-deadline countdown, visible in the SuperAdmin panel
- ✓ Action Group
yardtwin-breach-actionsemails the founder contact at admin@yardtwin.com on every detection
Remaining Improvements
No third-party penetration test has been carried out yet; an independent test is planned before the first enterprise go-live. An internal white-box code audit was completed in October 2026 and all Critical findings were fixed. Priority: High. Target: before the first enterprise go-live.
YARDtwin Ltd has not designated a statutory Data Protection Officer: none of the Article 37(1) conditions (public authority; core activities requiring large-scale regular and systematic monitoring; core activities consisting of large-scale special-category processing) applies to its processing. Responsibility for data protection sits with a named person inside YARDtwin Ltd, reachable through the role mailbox dpo@yardtwin.com, which is published in this policy, the privacy policy, the DPA and the Trust Center. We publish the contact address rather than the individual's name. A formal designation, with notification to the Data Protection Commission, will be made if a customer contract or a change in processing requires it. Status: decided 26 September 2026. Reviewed at each ISMS management review.
Certification programme under way; certification audit planned for Q1 2027; certificate targeted Q1 2027. Priority: Medium. Target: Q1 2027.
Not held. Available on request after ISO 27001 certification. Priority: Low. Target: on customer request, after ISO 27001.
Uploaded files are geo-redundant (Norway East → Norway West) since October 2026; database high availability is planned before the first enterprise go-live. Until then a database outage is recovered by point-in-time restore (7-day window). Priority: Medium. Target: before the first enterprise go-live.
Standard Contractual Clauses are in place for every transfer outside the EEA; transfer impact assessments are being completed (target November 2026). Priority: Medium. Target: November 2026.
A private bug bounty programme (HackerOne / Intigriti) is planned after the second clean external pen test, providing continuous external coverage between annual tests. Priority: Low. Target: 2027.
12. Contact & Data Protection
Data-protection contact: dpo@yardtwin.com — a role mailbox monitored by the person responsible for data protection at YARDtwin Ltd (see 11.2). We publish the contact address rather than an individual's name.
General queries: admin@yardtwin.com
Data Subject Requests: Submit via our DSAR Portal
Data Processing Agreement: Review and accept at /dpa
Supervisory Authority: Data Protection Commission (DPC), Ireland · www.dataprotection.ie · +353 (0)761 104 800