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)), by opt-in: collection is off by default and only starts if the user turns on the “Share anonymous usage statistics” switch on the initial setup screen or in Settings → “Anonymous · share usage”. Revocable at any time: 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: feedback@trilhoapp.com, 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