Forensic web capture · chain of evidence

TT Festival — Evidence Index

Timestamped, reproducible snapshots of public web pages collected for the TT Festival privacy investigation. Each snapshot preserves the exact server response, the JavaScript‑rendered page, full‑page screenshots, response headers, tool versions, and a SHA‑256 integrity manifest. The bulky full‑site mirrors/clones live in a private companion repo (GraafG/tt-festival-app-evidence); this repo keeps their checksums.

Snapshots: 3 web + 1 app‑cohort Sources: assen.nl · appmiral.com · ttfestival.nl · 140 installed apps (APKs) Integrity: SHA‑256 per file · bytes preserved (.gitattributes * -text) Index generated: 2026‑06‑28 (CEST)

00 The evidence chain

How a visitor is routed from the municipal website to a third‑party app and its English‑only privacy policy.

Gemeente Assen — official municipal website www.assen.nl/heeft-u-nog-vragen │ "Download de officiële TT Festival App via app.ttfestival.nl" ▼ app.ttfestival.nl ──301──▶ ttfestival2026.deeplink.appmiral.com (Appmiral / AWS — a third party) │ │ │ ├─▶ Google Play com.appmiral.ttfestival │ └─▶ Apple App Store id 6744364695 ▼ app.appmiral.com/ttfestival2026/privacy-policy • "All data … stored within the EU (AWS eu-west-1)" ← testable vs. this repo's us-east-1 finding • "location shared … with Crowd Connected (UUID, coordinates, push token)" • English-only — no Dutch version (GDPR Art. 12 transparency concern)

The municipality presents the app as “the official TT Festival App” under its own banner, while the app and its data processing are run by a separate party (the organising stichting / Appmiral). Each snapshot’s README.md holds the full reasoning and verbatim quotes.

01 Gemeente Assen — assen.nl

Municipal website. Three pages where the city promotes the festival and its “official” app.

assen.nl — municipal site

evidence/assen.nl_2026-06-26_231242/
Captured 2026-06-26 23:12 CEST 3 pages Next.js · Varnish · Azure Front Door
#PageStatusNote
1www.assen.nl/200Municipal homepage
2www.assen.nl/tt200TT campaign landing page
3www.assen.nl/heeft-u-nog-vragen200“Download de officiële TT Festival App via app.ttfestival.nl”
assen.nl home
01 · home
assen.nl/tt
02 · /tt
heeft u nog vragen
03 · heeft-u-nog-vragen

Reason for capture

  • The municipality blurs who actually runs the app — the “official” framing sits under the city’s banner, but the app is operated by a third party (Appmiral / the organising stichting).
  • Because Gemeente Assen actively directs the public to the app while (per this investigation) being aware of the processing concerns, the endorsement is evidence relevant to the municipality’s position.

02 Appmiral — the app & its privacy policy

The third party the municipality links to: the deeplink/download landing page and the app’s privacy policy.

appmiral.com — app vendor

evidence/appmiral.com_2026-06-26_232241/
Captured 2026-06-26 23:22 CEST 2 pages AWS · CloudFront · Cloudflare
#PageStatusNote
1ttfestival2026.deeplink.appmiral.com/200Deeplink / app download landing (app.ttfestival.nl redirects here)
2app.appmiral.com/ttfestival2026/privacy-policy200“TT Festival 2026 – Privacy Statement”. English-only (see below)
deeplink root
01 · deeplink landing
privacy policy
02 · privacy policy

Reason for capture

  • EU‑only storage claim is testable. The policy states data is stored in the EU (AWS eu-west-1, Ireland) — this repo’s investigation documents location streaming to AWS us-east-1 (USA).
  • Crowd Connected location sharing is admitted (UUID + coordinates + push token).
  • English‑only — no Dutch version. Served as <html lang=en>; requesting with Accept-Language: nl-NL,nl returns identical English text; 0 hreflang/alternate links and no language switcher. For a Dutch event/audience this is a GDPR Art. 12(1) transparency concern. Proof: logs/language-check_privacy-policy.txt.

03 ttfestival.nl — full site mirror

Complete capture of the official festival website, seeded from its sitemap index.

ttfestival.nl — full mirror

evidence/ttfestival.nl_2026-06-26_234242/
Captured 2026-06-26 23:42 CEST sitemap‑verified WordPress · Elementor · Yoast

A full wget --mirror capture (page requisites, link conversion, adjusted extensions) seeded from sitemap_index.xml. Completeness is cross‑checked against the 174 URLs listed across the six sub‑sitemaps (posts, pages, artists, editions, categories, authors). Coverage and tool versions are recorded under meta/ and logs/.

ttfestival.nl home
01 · home
programma / artiesten
02 · programma → artiesten
huisregels
03 · huisregels
nieuwe app announcement
04 · nieuwe app
veelgestelde vragen
05 · FAQ

⬇ The full 1 GB+ website clone (every page + all media) lives in the private companion repo GraafG/tt-festival-app-evidence. This public folder keeps the readable highlights above plus mirror-manifest.sha256 — the SHA‑256 of every mirrored file — so the private bytes remain verifiable from here.

04 App cohort — APK harvest, integrations & live tracking config

Not a web page but the installed Android apps themselves: every Appmiral/Appstrakt app on the phone, pulled as APKs, scanned against Appmiral’s advertised integrations, and read for each location app’s live km‑range + remote kill‑switch.

Appmiral app cohort — 140 apps

evidence/appmiral-apks_2026-06-28_154246/
Captured 2026-06-28 15:42 CEST 140 apps · 375 APKs · ~7.08 GB Pixel 10a · Android 16 · root bytes in private repo
IntegrationApps /140Note
Instagram · Firebase · Google Fused Location140platform baseline — in every app
AWS Cognito · Kinesis Firehose · CM.com · Beatswitch · YouTube · Maps SDK139near‑universal (the tracking pipeline)
Permutive36variable adoption
Mapbox16variable adoption
Crowd Connected (literal pkg/host)9obfuscated away in most; capability still bundled fleet‑wide
TikTok · Azure · Eventim · SeeTickets · WeezEvents · PwC · Halo · …0advertised but absent in every installed app

Live config — km range + remote kill‑switch (6 apps with a populated Crowd Connected DB)

  • com.appmiral.ttfestival — 🔴 kill‑switch ON, 60 km ring centred on Assen (52.99, 6.56), SDK in BACKGROUND mode.
  • mdlbeast 60 km · rockforpeople 40 km · teamnl 50 km · museumnachtamsterdam 80 km · dutchgp — all armed but toggled OFF by Crowd Connected’s backend.
  • The on/off is server‑pushed, not a local setting: identical SDK, different remote switch. Every app requests fine+coarse location; 30 also request background location.
  • Advertised ≠ embedded. Many “integrations” are baked into ~all 140 apps by the shared template (over‑stating per‑festival use), while 19 advertised partners appear in 0 installed apps.

05 Email correspondence — notice to the responsible parties

The emails that put Gemeente Assen and Stichting TT Festival on notice of these findings — and the replies they sent.

email correspondence

evidence/email-correspondence/
2026-06-07 → 06-25 10 messages · 3 threads .eml byte-exact

Beyond the web captures, the repo preserves the correspondence in which both the municipality (s.gils2@assen.nl, info@assen.nl) and the organisation (ranco@ttfestival.nl) were told, in writing, what the app actually does — and how they replied. Each message is kept byte-exact as the original .eml plus a readable .txt rendering and extracted attachments.

DateFrom → ToWhat it shows
06-16Gemeente Assen newsletter → residents“Download de TT Festival App” — the municipal promotion that the rest of the chain responds to.
06-16Geert → info@assen.nl, s.gils2@assen.nlNotifies the municipality: 60 km location collection sent to the USA, contradicting the “EU-only” policy; advises pausing promotion.
06-16Sebas van Gils (Assen, openbare orde en veiligheid) → GeertAcknowledges: “…dan moeten wij hier zeker iets mee.” Will escalate internally and follow up.
06-23Ranco van Bergeijk (ttfestival.nl) → GeertAdmission: Crowd Connected confirms location data is processed via AWS us-east-1 (USA); says the privacy statement is being re-checked.
06-25Geert → Ranco, info@ttfestival.nlLegal rebuttal (pseudonymised ≠ anonymous; Dutch-language; Art. 12) and a formal GDPR Art. 15 access request; controllership question to the stichting.

Reason for capture

  • The responsible parties were demonstrably notified — dated, written notice with a link to this repository, before and during the festival.
  • The US transfer is admitted in writing. The operator concedes processing in AWS us-east-1 (Virginia, USA) — the exact point the app’s own privacy policy denies.
  • The municipality acknowledged it must act, then is assessable against its own words.
  • Controllership is squarely put to Stichting TT Festival (GDPR Art. 4(7)/24) as the publisher named in the app stores.

06 Verify integrity

Every artifact is hashed. Bytes are preserved exactly in git (no line‑ending rewrites), so checksums recomputed after cloning will still match.

Run inside any snapshot folder (public lightweight artifacts):

sha256sum -c SHA256SUMS.txt

Each folder’s own README.md and SHA256SUMS.txt are the only files not listed in its manifest (they are the capture log and the manifest itself). The repo ships evidence/.gitattributes with * -text so git never alters captured bytes.

To verify the full‑site clones in the private companion repo GraafG/tt-festival-app-evidence, run sha256sum -c SHA256SUMS.txt inside its snapshot folder and compare against this repo’s <snapshot>/mirror-manifest.sha256 — the two lists are identical, so the public repo independently attests to the private bytes.

07 Method (common to all snapshots)

curlExact, unmodified server response bodies plus full response headers and redirect chains.
GNU Wget--mirror --page-requisites --convert-links --adjust-extension — a browsable offline clone with assets. These bulky clones are stored in the private companion repo; their checksums stay here.
Google ChromeFull‑page PNG screenshots and the JavaScript‑rendered DOM at a desktop viewport (1440×900), via Chrome DevTools.
User‑AgentA single consistent desktop browser UA across all tools, so every artifact reflects the same rendering path. Exact tool versions: each snapshot’s logs/tool-versions.txt.

These captures mirror public pages for fixed‑point, reproducible reference. URLs are preserved unmodified. This evidence set is separate from the large local‑only ttfestival.nl notes in ../SITE-MIRROR.md.