Trilho

Data Protection Impact Assessment (DPIA)

Trilho · Version 1.1 · 2026-09-11 · Prepared under GDPR Art. 35 and CNPD Regulation No. 1/2018 (Portugal) · Portuguese version: /privacy/dpia

1. Controller

2. Description of the processing

Trilho is a multimodal mobile app for planning journeys on Portuguese public transport. To improve the product we collect anonymous, aggregated events — no personal identifier is processed.

Data collected

CategoryItemSourcePurpose
Anonymous identifieranon_device_id (UUID v4 generated on the device)AppDe-duplicating events per device, with no link to identity
Geographicsim_country (2-letter ISO code, e.g. “PT”)Operating systemDistinguishing resident vs. visitor use in the aggregate
Temporalday_bucket_iso (YYYY-MM-DD, Europe/Lisbon)Device clockAggregated daily trends
Behaviouralevent_type (fixed vocabulary: app_open, search, chain_selected, ticket_buy_tap, push_received, push_opened, saved_route_created, onboarding_completed) + props (low-cardinality buckets: operator code, persona, fare option)AppUnderstanding which features are used

Data not collected (explicit commitment)

3. Legal basis (GDPR Art. 6)

Consent (Art. 6(1)(a)), presented on first use with clear information and revocable at any time in Settings → “Anonymous · share usage”. When withdrawn, the local event queue is deleted immediately and no new events are generated. Choosing consent over legitimate interest is deliberate: we prefer a clear opt-in even if it reduces telemetry coverage.

4. Principles applied (GDPR Art. 5)

PrincipleHow we comply
LawfulnessExplicit consent and one-tap opt-out.
Purpose limitationEvents serve internal product analysis only. No resale of individual events. Any aggregated export to third parties respects a minimum of 25 devices per cell.
Data minimisationFixed event vocabulary, low-cardinality buckets, no free text, no specific identifiers.
AccuracyNot applicable — anonymised data cannot be reviewed by the data subject.
Storage limitationEvents aggregated once a cell reaches 25 devices; raw records deleted after 90 days; server technical logs after 7 days.
Integrity and confidentialityTLS in transit. The server is hosted by Hetzner Online GmbH (Nuremberg, Germany, EU). No persistent database of personal data: aggregations live in memory only until the 25-device threshold. Aggregated export, when enabled, goes to PostHog EU Cloud (Frankfurt), where raw data is deleted after 90 days.
AccountabilityThis DPIA, the consent state kept locally, and server-side audit logs.

5. Processors

ProcessorRoleLocationStatus
Hetzner Online GmbHServer hostingNuremberg, DEActive
Cloudflare, Inc.DNS, hosting of trilhoapp.com, e-mail forwardingEU / globalActive (does not see app traffic)
Sentry (Functional Software, Inc.)Crash reportsFrankfurt, DE (EU region)When enabled; no PII, no location
PostHog Inc.Aggregated analyticsFrankfurt, DE (EU Cloud)When enabled; DPA available

6. Risk assessment

RiskLikelihoodImpactMitigation
Re-identification by cross-referencing other sourcesLowMediumNo PII, no GPS, no precise time, no stop identifiers. The tuple (anon_device_id, day_bucket, event_type) cannot identify an individual without access to the physical device.
Leak through server logsLowLowHTTP logs kept only 7 days; the identifier is logged truncated (8 characters), with no reversibility.
Re-identification by grouping rare operatorsVery lowLow25-device threshold before any aggregation is exported; cells with fewer data are suppressed.
Analytics processor (PostHog EU)LowMediumData-processing agreement; data in the EU; declared in this DPIA.

Residual risk: low. The processing profile is classified as “not high-risk” under the CNPD framework — this DPIA is documented as good practice, not by obligation.

7. Data-subject rights (GDPR Arts. 15–22)

By design, there is no identifiable personal data linked to a specific user. Consequently: access, rectification and portability have no object (no identity to reconcile); erasure and objection are exercised locally — turning the toggle off in Settings deletes the local queue immediately and suspends processing. Questions: [email protected], answered within 30 days at most (Art. 12(3)). Complaints: CNPD.

8. Commitments

  1. Republish this DPIA whenever the event vocabulary grows or a processor is added.
  2. Notify the CNPD only if a breach affects the anon_device_id together with another datum enabling re-identification — considered unlikely given the minimisation.
  3. Keep this document at trilhoapp.com/en/privacy/dpia while the app is available, in Portuguese and English.

History