MySecretCrush dog

Vertrouwen & Privacy

Alles over hoe wij met jouw gegevens omgaan

AVG · DSA · NIS2-klaar · PCI-DSS via Stripe · EAA · WCAG 2.1 AA
🐾 Hoe werkt het? 📋 Verwerkingsregister 🔍 DPIA 👤 Functionaris ⚠️ Risico's 📜 Regels 💪 Jouw rechten 🔐 Beveiliging 💳 Betalen 🏢 Leveranciers 🔞 Leeftijd ♿ Toegankelijkheid
Uitleg voor iedereen

Hoe werkt het allemaal? 🐾

We leggen het zo simpel mogelijk uit — alsof je het aan je oma uitlegt (met liefde ❤️)

🐕
De simpele versie

Stel je voor: je bent in een café. Je hebt een geheime crush op iemand, maar je durft het niet te zeggen. MySecretCrush is als een discreet hondje dat tussen jullie heen en weer loopt — alleen als jullie allebei interesse tonen, brengt het een berichtje over. Geen GPS, geen namen, geen gedeelde gegevens totdat er een match is. Punt.

Stap 01 👤

Profiel aanmaken

Naam, leeftijd, foto, voorkeuren. Versleuteld & beveiligd in de EU via Supabase.

Stap 02 📡

Beacon Mode aan

Je telefoon zendt een anonieme Bluetooth-code. Geen naam, geen GPS. Wisselt elke 5 min.

Stap 03 💘

Stuur een crush

Zie je iemand op de radar? Stuur een geheime crush. Zij weten het niet — tenzij zij jou ook crusen.

Stap 04

Match! Dan chatten

Alleen bij wederzijdse interesse worden jullie gekoppeld. Pas dán kun je berichten sturen.

Stap 05 🔒

Jij blijft de baas

Account verwijderen? Één tik in Settings. Alles weg, direct. Abonnement annuleren inbegrepen.

AVG Artikel 30

Verwerkingsregister (RoPA) 📋

Elke wet zegt: schrijf op wat je met gegevens doet. Hier is ons eerlijke overzicht.

Wat is een verwerkingsregister?

Stel je een dagboek voor waarin je elke dag opschrijft: "Vandaag heb ik X gedaan met Y's gegevens, omdat Z." Dat dagboek is een verwerkingsregister. De wet (AVG, artikel 30) zegt dat wij dat verplicht moeten bijhouden. Dus dat doen we. Hier is het.

WatWaaromRechtsgrondHoe lang
E-mailadres, wachtwoordhashOm je account te maken en in te loggenContractAccount-duur + 2 jaar
GeboortedatumControleren dat je 18+ bentContractAccount-duur
Push-token (voor meldingen)Jou een notificatie sturen bij een matchContractTot uitloggen of verwijderen
IP-adres bij inlogpogingenFraudedetectie, beveiligingLegitiem belang12 maanden
WatWaaromRechtsgrondHoe lang
Naam/bijnaam, leeftijd, bio, foto'sJouw profiel tonen aan potentiële matchesContractZolang account actief
Geslacht, voorkeur (looking for)Relevante matches tonenToestemmingZolang account actief
Crush-acties (sturen/ontvangen)Wederzijdse matches bepalenContractZolang account actief
⚠️ Bijzondere categorie: De "looking for" voorkeur (mannen/vrouwen/iedereen) kan seksuele oriëntatie onthullen. Dit is een bijzondere categorie onder AVG Artikel 9. Wij verwerken dit alleen op basis van jouw expliciete toestemming bij registratie.
WatWaaromRechtsgrondHoe lang
Anoniem BLE-token (willekeurig, wisselend)Jouw aanwezigheid detecteren zonder identiteitToestemmingSessieduur (max 15 min)
Beacon aan/uit tijdstempelWanneer je actief was in de buurtContractZolang account actief
Hoe werkt BLE dan precies?

Je telefoon fluistert elke 5 minuten een ander willekeurig woord (token). Andere telefoons in de buurt horen dat woord, maar weten niet van wie het is — pas als er een match is, koppelt onze server de namen aan elkaar. Jij bent volledig anoniem tot het moment van een wederzijdse match. Geen GPS. Nooit.

WatWaaromRechtsgrondHoe lang
Berichtinhoud (tekst, gif's)Communicatie tussen matchesContract365 dagen actief, daarna gearchiveerd
Leesbevestigingen, tijdstempelsTonen wanneer bericht gelezenContractZolang chat actief
WatWaaromRechtsgrondHoe lang
Stripe klant-ID, abonnementsstatusBeheer van premium toegangContract7 jaar (belastingwet)
Betaalbedragen, transactie-IDBoekhouding en facturatieWettelijke plicht7 jaar
En mijn betaalgegevens?

Wij zien nooit jouw creditcardnummer. Dat gaat rechtstreeks naar Stripe, een gecertificeerd betaalbedrijf (PCI-DSS Level 1 — de hoogste graad). Wij slaan alleen een klantreferentie op. Als Stripe gehackt wordt, hebben ze niet jouw kaartgegevens van ons — want wij hebben ze zelf niet.

AVG Artikel 35

Gegevensbeschermingseffectbeoordeling (DPIA) 🔍

Een DPIA is een verplichte risicoanalyse. Wij hebben hem uitgevoerd. Hier zijn de resultaten.

Wat is een DPIA?

Stel je voor dat je een nieuw recept wil koken, maar je vraagt je af: "Kan iemand allergisch zijn? Kan er iets misgaan met het fornuis?" Een DPIA is exact dat — maar dan voor privacy. Je vraagt: "Wat kan er fout gaan met de gegevens van gebruikers, en wat doen we eraan?" De wet verplicht dit voor apps die gevoelige gegevens verwerken — zoals een dating-app. Dus wij deden het gewoon.

We verwerken alleen wat strikt noodzakelijk is voor de dienst:

  • ✅ Geen GPS — we gebruiken BLE (Bluetooth) met anonieme tokens
  • ✅ Geen contacten — we lezen je telefoonboek nooit
  • ✅ Geen analytics-SDK's — we volgen je gedrag niet voor advertenties
  • ✅ Geen microfoon (RECORD_AUDIO permission verwijderd — april 2026)
  • ✅ Profielgegevens zijn enkel wat jij zelf invult
Hoog risico

Datalek profielen

Mitigatie: bcrypt wachtwoorden, HTTPS, Supabase RLS, cascadegewijs verwijderen bij account-delete

Middel risico

BLE locatie-inferentie

Mitigatie: token wisselt elke 5 minuten, geen GPS, anoniem tot match

Middel risico

Ongeautoriseerde admin-toegang

Mitigatie: verplichte TOTP 2FA, account lockout na 10 pogingen, volledige audit-log

Middel risico

Berichten als platte tekst

Mitigatie: HTTPS versleuteling onderweg, auth vereist. End-to-end encryptie staat op de roadmap.

Laag risico

Minderjarige gebruikers

Mitigatie: 18+ bevestiging bij registratie (frontend) + backend API-controle (age < 18 → HTTP 400). Twee-laags technische handhaving geïmplementeerd (april 2026).

Laag risico

Verlopen inactieve accounts

Mitigatie: zelf-verwijder knop beschikbaar, jaarlijkse beoordeling van inactieve accounts.

Na de beoordeling concluderen we dat:

  • De verwerking noodzakelijk en proportioneel is voor de dienst
  • Passende maatregelen zijn getroffen voor de geïdentificeerde risico's
  • Geen voorafgaande raadpleging bij de AP vereist — resterende risico's zijn aanvaardbaar
  • Leeftijdsverificatie is technisch geïmplementeerd (frontend + backend, april 2026) — niet langer open
  • Eén openstaand roadmap-item: end-to-end berichtversleuteling — wordt in 2026 opgepakt

Volgende DPIA-review: april 2027, of eerder als de gebruikersbasis 10.000+ bereikt.

AVG Artikel 37

Functionaris Gegevensbescherming (FG/DPO) 👤

Hebben we een FG nodig? We zochten het uit. Hier is het eerlijke antwoord.

Wat is een FG?

Een Functionaris Gegevensbescherming (FG, of DPO in het Engels) is als een interne politieagent voor privacy. Ze controleren of het bedrijf zich aan de regels houdt, zijn aanspreekpunt voor gebruikers en de toezichthouder (de AP), en mogen niet ontslagen worden voor het doen van hun werk. De wet verplicht een FG bij bepaalde organisaties — maar niet alle.

Criterium (Artikel 37)Van toepassing?Reden
Overheidsinstelling❌ NeePrivaat bedrijf
Grootschalige syst. monitoring❌ NeeGeen tracking, geen gedragsprofilering
Bijzondere categorieën op grote schaal⚠️ GedeeltelijkSeksuele oriëntatie-data WEL aanwezig, maar gebruikersbasis is <1.000 — niet 'op grote schaal'
📌 Conclusie: Een FG is op dit moment niet wettelijk verplicht. We verwerken wel bijzondere categoriegegevens (seksuele voorkeur), maar de omvang is te klein om als "grootschalig" te gelden per EDPB-richtlijnen. We herbeoordeelen dit bij 5.000+ actieve gebruikers.

Privacyvragen, inzageverzoeken, of klachten stuur je naar:

E-mail: info@mysecretcrush.app

We reageren binnen 30 dagen. Ben je het niet eens met ons antwoord? Dan kun je een klacht indienen bij de Autoriteit Persoonsgegevens (autoriteitpersoonsgegevens.nl).

Roadmap

Beveiligingsvoortgang 🛡️

Wat hebben we al gedaan, en wat staat er nog op de lijst?

Wachtwoordbeveiliging (bcrypt)100%
Tweestapsverificatie admin (TOTP)100%
Zelf-verwijder account (AVG Art. 17)100%
Gegevensexport (AVG Art. 20)100%
Beveiligingslogging & audit trail100%
Cookie-toestemmingsbanner (website)100%
Technische leeftijdsverificatie (18+)100%
WCAG 2.1 AA Toegankelijkheid (EAA)100%
Berichtversleuteling (end-to-end)30%
Compliance overzicht

Welke wetten gelden er? 📜

Elke wet die voor ons geldt, plus hoe we eraan voldoen.

RegelgevingWat is het?StatusHoe wij voldoen
AVG / GDPR
EU 2016/679
Europese privacywet voor persoonsgegevens ✅ Actief Toestemming bij registratie, RoPA, DPIA, FG-beoordeling, zelf-verwijder, dataportabiliteit
ePrivacy Richtlijn
2002/58/EG
Regels voor cookies en elektronische communicatie ✅ Actief App heeft geen cookies. Website-cookie-toestemmingsbanner geïmplementeerd (april 2026).
DSA
EU 2022/2065
Digital Services Act — transparantie voor online platforms ✅ Actief Transparantierapport gepubliceerd, moderatiebeleid, contactpunt voor autoriteiten
NIS2 / Cyberbeveiligingswet
Verwacht Q2 2026
Cybersecurityverplichting voor bedrijven in kritieke sectoren ✅ NIS2-aligned Buiten verplicht bereik (<50 medewerkers, <€10M). Beveiligingsbeleid, incidentrespons, BCP/DR en leveranciersbeoordeling zijn NIS2-aligned geïmplementeerd.
PCI-DSS
via Stripe
Beveiligingsstandaard voor betaalgegevens ✅ Via Stripe Stripe is PCI-DSS Level 1 gecertificeerd. Wij slaan geen kaartgegevens op. SAQ-A voltooid (april 2026).
Consumentenrecht / BW
ACM toezicht
B2C-abonnement, herroepingsrecht, prijstransparantie ✅ Actief 14 dagen herroepingsrecht, duidelijke prijsstelling (€4,95/maand), abonnementsbeheer via Stripe Portal
App Store beleid
Apple / Google
Vereisten van platformen voor permissies en dataveiligheid ✅ Actief Overbodige RECORD_AUDIO permission verwijderd (april 2026). Data Safety formulier ingevuld.
EAA / WCAG 2.1 AA
EU 2019/882 · In werking juni 2025
European Accessibility Act — digitale diensten toegankelijk voor mensen met een beperking ✅ Actief Schermlezer-labels (VoiceOver/TalkBack) op alle schermen. Kleurcontrastproblemen opgelost (min. 4,5:1). WCAG-auditrapport beschikbaar.
DSA Art. 28
Bescherming minderjarigen
Technische maatregelen om minderjarigen te beschermen op onlineplatforms ✅ Actief 18+ bevestiging bij registratie (frontend) + harde leeftijdscontrole op API (backend). Twee-laags handhaving.
SOX
Sarbanes-Oxley Act (VS)
Financiële verslagleggingswet voor beursgenoteerde VS-bedrijven N/A Niet van toepassing — Nederlands privaat bedrijf, niet beursgenoteerd in VS.
AVG Hoofdstuk III

Jouw rechten 💪

Je hebt meer rechten dan je denkt. En je kunt ze allemaal uitoefenen — in de app of via e-mail.

7
AVG-rechten die jij hebt
30
Dagen maximale reactietijd
0
Kosten voor een verzoek
Account-delete: direct

Je kunt altijd opvragen welke gegevens wij van je hebben. Gebruik de "Download mijn gegevens" knop in de app (Settings → Jouw Gegevens), of mail ons.

Pas je profiel aan in de app, of mail ons als er iets in onze systemen niet klopt. We corrigeren het binnen 30 dagen.

In de app: Settings → Jouw Gegevens → Account verwijderen. Je account, profiel, berichten en crush-geschiedenis worden direct en permanent verwijderd. Je Stripe-abonnement wordt automatisch opgezegd.

Gebruik "Download mijn gegevens" in de app. Je krijgt een JSON-bestand met alle gegevens die we van je hebben: profiel, berichten (laatste 12 maanden), crush-geschiedenis, instellingen.

AVG Artikel 28

Verwerkersovereenkomsten (DPA's) 🤝

We werken samen met externe partijen die jouw gegevens verwerken. Hier is wie ze zijn, wat ze doen, en hoe we ze aan de AVG houden.

Wat is een verwerkersovereenkomst?

Als wij een ander bedrijf inschakelen om iets met jouw gegevens te doen (e-mails versturen, betalingen verwerken, de server draaien), dan zijn zij een "verwerker". De wet zegt: maak een afspraak op papier (of digitaal) dat zij ook netjes met die gegevens omgaan. Dat papier heet een verwerkersovereenkomst (DPA in het Engels). Hier zijn al onze verwerkers.

VerwerkerRolWelke dataCertificatenDPA-status
Stripe Inc.
stripe.com
Betalingsverwerking Stripe klant-ID, abonnementsstatus. Geen kaartgegevens bij ons. PCI-DSS Level 1 ✅
SOC 2 Type II ✅
ISO 27001 ✅
Geaccepteerd via ToS
Supabase Inc.
supabase.com
Database hosting (alle gebruikersdata) Profielen, berichten, matchgeschiedenis, instellingen SOC 2 Type II ✅ Geaccepteerd via ToS
Railway Corp.
railway.app
Serverhosting (backend API) Applicatielogs, omgevingsvariabelen SOC 2 in progress Gedekt door ToS
Resend Inc.
resend.com
Transactionele e-mail E-mailadres, naam, e-mailinhoud SOC 2 ✅ Geaccepteerd via ToS
Expo / EAS
expo.dev
App-bouw & pushmeldingen Push-tokens, meldingspayloads Gedekt door ToS
Giphy Inc.
giphy.com
GIF-zoekfunctie (server-naar-server) Zoektekst — geen gebruikers-IP doorgestuurd Eigen privacybeleid
📌 Geen dataverkoop. Geen van deze partijen mag jouw gegevens gebruiken voor eigen doeleinden of doorverkopen. Ze mogen ze uitsluitend gebruiken voor de taak waarvoor wij ze hebben ingeschakeld — en niets anders. Alle partijen zijn gebonden aan de AVG via hun gebruiksvoorwaarden (gelijk aan een DPA onder artikel 28).
NIS2 · GDPR Art. 32 · ISO 27001-principes

Beveiliging van jouw gegevens 🔐

Welke technische en organisatorische maatregelen nemen wij om jouw data te beschermen?

ELI5: beveiliging in gewone taal

Stel je voor dat jouw gegevens in een kluis zitten. Wij zorgen dat: (1) alleen jij de sleutel hebt, (2) iedereen die de deur wil openen eerst bewijst wie hij is, (3) we bijhouden wie er wanneer bij de kluis was, en (4) als er iets misgaat, we het repareren en jou én de overheid vertellen wat er gebeurde. Dat is in de kern wat beveiliging betekent.

MaatregelHoe wij dit doenWettelijke basis
Wachtwoordbeveiligingbcrypt hashing (kostenfactor 12) — wachtwoorden zijn nooit leesbaar opgeslagenGDPR Art. 32
Versleutelde verbindingenTLS 1.2+ op alle endpoints — data in transit is versleuteldGDPR Art. 32 · NIS2
Database versleutelingAES-256 at rest via Supabase (Frankfurt datacenter)GDPR Art. 32
Toegangsbeveiliging adminVerplichte TOTP multi-factor authenticatie — geen uitzonderingenNIS2 Art. 21 · GDPR Art. 32
Account lockoutAccount geblokkeerd na 10 mislukte inlogpogingenGDPR Art. 32
Rate limitingInlogpogingen, crush sturen en MFA zijn beperkt per tijdseenheidNIS2 Art. 21
BeveiligingslogboekAlle login-activiteit, accountwijzigingen en admin-acties worden gelogdNIS2 Art. 21 · GDPR Art. 32
Minimale dataopslagGeen GPS, geen tracking SDK's, geen advertentienetwerkenGDPR Art. 5(1)(c)
LeveranciersbeveiligingAlle leveranciers beoordeeld op risiconiveau; hoog-risico leveranciers jaarlijks herzienNIS2 Art. 21(2)(d)
IncidentresponsGedocumenteerde procedure; AP-melding binnen 72 uur bij datalekGDPR Art. 33 · NIS2 Art. 23
ContinuïteitsplanHersteltiiddoel: 4 uur (RTO). Maximaal dataverlies: 24 uur (RPO)NIS2 Art. 21(2)(c)
🛡️ NIS2 gereedheid. De NIS2-richtlijn (Cyberbeveiligingswet) is naar verwachting van toepassing op grotere organisaties (>50 medewerkers of >€10M omzet). Wij vallen momenteel buiten het verplichte toepassingsgebied, maar hebben de beveiligingsprincipes van NIS2 proactief geïmplementeerd ter voorbereiding op groei.
PCI DSS SAQ-A · Stripe Level 1

Betaalbeveiliging 💳

Hoe beveiligen wij jouw betalingen? (Antwoord: dat doet Stripe — kaartgegevens komen nooit op onze servers)

ELI5: hoe werkt betalen bij ons?

Als jij een abonnement afsluit, sturen wij je door naar de beveiligde betaalpagina van Stripe. Jij typt je kaartgegevens in bij Stripe, niet bij ons. Het is net alsof we zeggen: "Ga je IDpas maar tonen aan de bank — wij kijken bewust niet mee." Wij zien alleen dat de betaling gelukt is, niet hoe jij hebt betaald.

PCI DSS Level 1
Stripe

Stripe verwerkt alle kaartdata en is gecertificeerd als de hoogste PCI-beveiligingsklasse ter wereld

SAQ-A Conform
Wij

Als merchant vallen wij in SAQ-A: wij slaan, verwerken of verzenden zelf geen kaartgegevens

Webhook Verificatie
Elke betaalmelding

Betalingsmeldingen van Stripe worden cryptografisch geverifieerd — nep-events worden geblokkeerd

iDEAL · SEPA
NL Betaalmethoden

iDEAL en SEPA mandaten worden verwerkt via Stripe Checkout — volledig conform PSD2

NIS2 Art. 21(2)(d) · Leveranciersbeveiliging

Leveranciersbeoordeling 🏢

Wij beoordelen al onze technische leveranciers op beveiligingsrisico. Hier is een samenvatting.

Waarom doen we dit?

De NIS2-richtlijn zegt: het is niet genoeg om zelf veilig te zijn — je moet ook controleren of de bedrijven waarmee je samenwerkt veilig zijn. Wij beoordelen elk kwartaal onze leveranciers op vier factoren: hoe gevoelig zijn de data die ze verwerken, hoe kritisch zijn ze voor onze dienst, hoe gemakkelijk kunnen we overstappen, en welke beveiligingscertificaten hebben ze?

LeverancierRisicoDataKritisch?Certificaten
SupabaseHOOGAlle gebruikersdataJa — databaseSOC 2 Type II
RailwayHOOGLogs, secretsJa — backend APISOC 2 (in progress)
StripeLAAGFactureringsdataNeePCI-L1 · SOC 2 · ISO 27001
ResendMIDDENE-mailinhoudNeeSOC 2 Type II
Expo/EASMIDDENPush-tokensGedeeltelijkSOC 2 (beschikbaar op aanvraag)
NetlifyLAAGGeen persoonsdataNee — alleen websiteSOC 2 Type II
GiphyLAAGZoektekst (server-server)Nee
🔄 Jaarlijkse herziening. Hoog-risico leveranciers (Supabase, Railway) worden jaarlijks herbeoordeeld op beveiligingscertificaten, incidentgeschiedenis en mogelijke alternatieven. Volgende beoordeling: april 2027.
DSA Art. 28 · App Store Policy · 18+

Leeftijdsverificatie 🔞

MySecretCrush is uitsluitend bedoeld voor personen van 18 jaar of ouder. Wij handhaven dit op twee niveaus.

Waarom 18+?

Romantische intenties, expliciete profielfoto's en betaalde abonnementen zijn niet geschikt voor minderjarigen. De Digital Services Act (DSA) en de App Store-beleidsregels verplichten ons om dit technisch af te dwingen — niet alleen in onze algemene voorwaarden te vermelden.

Tijdens de registratie moet elke nieuwe gebruiker drie vakjes aanvinken voordat het account wordt aangemaakt:

  • ✅ Ik ga akkoord met het Privacybeleid
  • ✅ Ik ga akkoord met de Algemene Voorwaarden
  • Ik bevestig dat ik 18 jaar of ouder ben

De "Account activeren"-knop blijft uitgeschakeld totdat alle drie vakjes zijn aangevinkt. Dit blokkeert de oproep naar onze betalingsverwerker volledig — er wordt geen Stripe-sessie aangemaakt voor een onbevestigde gebruiker.

Onze API weigert profielwijzigingen als een opgegeven leeftijd onder de 18 ligt, ongeacht wat de app stuurt:

  • Leeftijd < 18 ingevoerd → HTTP 400 "Je moet 18 jaar of ouder zijn om deze service te gebruiken"
  • Geen leeftijd opgegeven → bestaande profielgegevens worden niet aangeraakt (bestaande gebruikers worden niet geblokkeerd)
  • Leeftijd ≥ 18 → opgeslagen zoals normaal

Deze controle staat in de backend onafhankelijk van de frontend — een aangepaste app of API-client kan de controle niet omzeilen.

⚖️ Wettelijke grondslag. Leeftijdsverificatie is vereist onder DSA artikel 28 (bescherming van minderjarigen), de App Store Review Guidelines (sectie 1.3) en de Google Play Developer Policy. Onze Algemene Voorwaarden vermelden 18+ als minimumleeftijd; de technische handhaving maakt dit afdwingbaar in de praktijk.
EAA 2019/882 · WCAG 2.1 AA · In werking juni 2025

Toegankelijkheid ♿

MySecretCrush streeft naar WCAG 2.1 AA-naleving overeenkomstig de European Accessibility Act (EAA), die in juni 2025 van kracht is geworden.

Waarom toegankelijkheid?

De European Accessibility Act verplicht digitale diensten in de EU om toegankelijk te zijn voor mensen met een handicap — inclusief gebruikers van schermlezers (blind), gebruikers met een laag gezichtsvermogen en gebruikers met motorische beperkingen. WCAG 2.1 AA is de internationale maatstaf die hieraan invulling geeft.

Alle interactieve elementen in de app zijn voorzien van beschrijvende toegankelijkheidslabels die worden uitgesproken door VoiceOver (iOS) en TalkBack (Android):

  • Registratie-scherm: checkboxen aangekondigd als "Privacybeleid accepteren", "Algemene voorwaarden accepteren", "Bevestig dat je 18 jaar of ouder bent"
  • Inlogscherm: e-mail- en wachtwoordvelden, knop voor tonen/verbergen wachtwoord, taalwisselaars
  • Profielscherm: fotoslots ("Fotoslot 1–6, foto toevoegen"), genderknoppen aangekondigd als radioknoppen
  • Radar-scherm: Beacon-schakelaar met statusbeschrijving ("Beacon-modus is aan — je bent vindbaar")
  • Instellingen: alle schakelaars, abonnementskaart, actieknoppen met volledige labels

Labels zijn beschikbaar in zowel Nederlands als Engels, overeenkomstig de taalinstelling van de gebruiker.

Wij hebben een volledige contrastaudit uitgevoerd op alle kleurparen in de app. Drie tekstparen voldeden niet aan de WCAG AA-eis van 4,5:1 voor normale tekst (wit op de primaire rode achtergrond #C02A37). Alle drie zijn opgelost:

LocatieOud contrastNieuw contrastStatus
Registratie — prijsbanner subtitel3,23:1 (rgba 0,65)4,72:1 (rgba 0,87)✅ Geslaagd
Registratie — activeer-knop subtitel3,65:1 (rgba 0,70)4,72:1 (rgba 0,87)✅ Geslaagd
Juridische documenten — documentbadge2,70:1 (rgba 0,55)4,72:1 (rgba 0,87)✅ Geslaagd

Alle visuele wijzigingen zijn minimaal (kleine verhoging van de opacity) en visueel nauwelijks merkbaar voor ziende gebruikers, terwijl ze een significante verbetering vormen voor gebruikers met een laag gezichtsvermogen.

📋 Volledige auditrapport. Ons gedetailleerde WCAG-contrastauditrapport is intern beschikbaar als legal/compliance/wcag_audit.md. Neem contact op via info@mysecretcrush.app voor inzage of voor vragen over toegankelijkheid.
Explained for everyone

How does it all work? 🐾

We explain it as simply as possible — like telling your grandma (with love ❤️)

🐕
The simple version

Imagine you're in a café. You have a secret crush on someone, but you don't dare say it. MySecretCrush is like a discreet little dog running between you — only if you both show interest does it carry a message across. No GPS, no names, no shared data until there's a match. Simple.

Step 01 👤

Create a profile

Name, age, photo, preferences. Encrypted & secured in the EU via Supabase.

Step 02 📡

Enable Beacon Mode

Your phone broadcasts an anonymous Bluetooth code. No name, no GPS. Rotates every 5 min.

Step 03 💘

Send a crush

See someone on the radar? Send a secret crush. They don't know — unless they crush you back.

Step 04

Match! Then chat

Only mutual interest creates a match. Only then can you send messages. No one-sided actions visible.

Step 05 🔒

You stay in control

Want to leave? One tap in Settings. Everything deleted instantly. Subscription cancellation included.

GDPR Article 30

Processing Register (RoPA) 📋

The law says: write down what you do with data. Here's our honest overview.

What is a processing register?

Think of it like a diary where you write down every day: "Today I did X with Y's data, because Z." That diary is a records of processing activities. The law (GDPR Art. 30) says we must keep this. So we do. Here it is.

WhatWhyLegal basisHow long
Name, age, bio, photosShow your profile to potential matchesContractWhile account active
Gender, preference (looking for)Show relevant matchesConsentWhile account active
Crush actions (sent/received)Determine mutual matchesContractWhile account active
⚠️ Special category: The "looking for" preference (men/women/everyone) may reveal sexual orientation. This is a special category under GDPR Art. 9. We only process this based on your explicit consent given at registration.
What about my payment details?

We never see your credit card number. It goes directly to Stripe, a certified payment company (PCI-DSS Level 1 — the highest grade). We only store a customer reference. If Stripe were hacked, they would not have your card data from us — because we never had it.

GDPR Article 35

Data Protection Impact Assessment (DPIA) 🔍

A mandatory risk analysis — we did it. Here are the results.

What is a DPIA?

Imagine you want to cook a new recipe and you ask yourself: "Could someone be allergic? Could something go wrong with the stove?" A DPIA is exactly that — but for privacy. You ask: "What could go wrong with user data, and what do we do about it?" The law requires this for apps handling sensitive data — like a dating app. So we simply did it.

High risk

Profile data breach

Mitigation: bcrypt passwords, HTTPS, Supabase RLS, cascade-delete on account removal

Medium risk

BLE location inference

Mitigation: token rotates every 5 minutes, no GPS, anonymous until match

Medium risk

Messages as plaintext

Mitigation: HTTPS in transit, auth required. End-to-end encryption on the roadmap.

Low risk

Minor users

Mitigation: 18+ confirmation at registration (frontend) + backend API guard (age < 18 → HTTP 400). Two-layer technical enforcement implemented (April 2026).

GDPR Article 37

Data Protection Officer (DPO) 👤

Do we need a DPO? We looked into it. Here's the honest answer.

What is a DPO?

A Data Protection Officer is like an internal police officer for privacy. They check that the company follows the rules, are the point of contact for users and the regulator (the AP), and cannot be fired for doing their job. The law requires a DPO at certain organizations — but not all.

📌 Conclusion: A DPO is currently not legally required. We do process special category data (sexual preference), but the scale is too small to qualify as "large-scale" per EDPB guidelines. We will re-assess at 5,000+ active users. Privacy contact: info@mysecretcrush.app
Compliance overview

Which laws apply? 📜

Every regulation that applies to us, plus how we comply.

RegulationWhat is it?StatusHow we comply
GDPR / AVG
EU 2016/679
European privacy law for personal data ✅ Active Consent at registration, RoPA, DPIA, DPO assessment, self-delete, data portability
DSA
EU 2022/2065
Digital Services Act — transparency for online platforms ✅ Active Transparency report published, moderation policy, authority contact point
NIS2 / Cyberbeveiligingswet
Expected Q2 2026
Cybersecurity obligations for companies in critical sectors ✅ NIS2-aligned Outside mandatory scope (<50 employees, <€10M). Security policy, incident response, BCP/DR plan, and supplier risk register are NIS2-aligned and documented.
PCI-DSS
via Stripe
Payment data security standard ✅ Via Stripe Stripe is PCI-DSS Level 1 certified. We store no card data. SAQ-A completed (April 2026).
Consumer Rights / BW
ACM supervision
B2C subscription, withdrawal rights, price transparency ✅ Active 14-day withdrawal right, clear pricing (€4.95/month), subscription management via Stripe Portal
ePrivacy Directive
2002/58/EC
Rules for cookies and electronic communication ✅ Active App has no cookies. Website cookie consent banner implemented (April 2026).
EAA / WCAG 2.1 AA
EU 2019/882 · In force June 2025
European Accessibility Act — digital services must be accessible to people with disabilities ✅ Active Screen reader labels (VoiceOver/TalkBack) on all screens. Colour contrast issues resolved (min. 4.5:1). WCAG audit report available.
DSA Art. 28
Protection of minors
Technical measures to protect minors on online platforms ✅ Active 18+ confirmation at registration (frontend) + hard age check on API (backend). Two-layer enforcement implemented.
SOX
Sarbanes-Oxley (US)
Financial reporting law for US-listed companies N/A Not applicable — Dutch private company, not US-listed.
GDPR Chapter III

Your Rights 💪

You have more rights than you think — and you can exercise all of them in the app or by email.

7
GDPR rights you have
30
Days max response time
€0
Cost for a request
Account-delete: instant

You can always ask what data we hold about you. Use the "Download My Data" button in the app (Settings → Your Data), or email us.

In the app: Settings → Your Data → Delete Account. Your account, profile, messages and crush history are immediately and permanently deleted. Your Stripe subscription is automatically cancelled.

Use "Download My Data" in the app. You receive a JSON file with all data we hold: profile, messages (last 12 months), crush history, settings.

GDPR Article 28

Data Processor Agreements (DPAs) 🤝

We work with external parties that process your data. Here's who they are, what they do, and how we keep them GDPR-compliant.

What is a data processor agreement?

When we hire another company to do something with your data (send emails, process payments, run our server), they are a "processor". The law says: make a written agreement (digital counts) that they also handle that data properly. That agreement is called a Data Processing Agreement (DPA). Here are all our processors.

ProcessorRoleWhat dataCertificationsDPA status
Stripe Inc.
stripe.com
Payment processing Stripe customer ID, subscription status. No card data with us. PCI-DSS Level 1 ✅
SOC 2 Type II ✅
ISO 27001 ✅
Accepted via ToS
Supabase Inc.
supabase.com
Database hosting (all user data) Profiles, messages, match history, settings SOC 2 Type II ✅ Accepted via ToS
Railway Corp.
railway.app
Server hosting (backend API) Application logs, environment variables SOC 2 in progress Covered by ToS
Resend Inc.
resend.com
Transactional email delivery Email address, name, email content SOC 2 ✅ Accepted via ToS
Expo / EAS
expo.dev
App build & push notifications Push tokens, notification payloads Covered by ToS
Giphy Inc.
giphy.com
GIF search (server-to-server) Search query text — no user IP forwarded Own privacy policy
📌 No data selling. None of these parties may use your data for their own purposes or resell it. They may only use it for the task we hired them for — nothing else. All parties are bound by GDPR via their terms of service (equivalent to a DPA under Article 28).
NIS2 · GDPR Art. 32 · ISO 27001 principles

How We Protect Your Data 🔐

The technical and organisational measures we take to keep your data safe.

ELI5: security in plain English

Imagine your data lives in a vault. We make sure: (1) only you have the key, (2) anyone trying to open the door has to prove who they are, (3) we keep a log of who touched the vault and when, and (4) if something goes wrong, we fix it and tell you — and the regulator — what happened. That's the core of what "security" means here.

MeasureHow we implement itLegal basis
Password securitybcrypt hashing (cost factor 12) — passwords are never stored in readable formGDPR Art. 32
Encrypted connectionsTLS 1.2+ on all endpoints — data in transit is encrypted end-to-endGDPR Art. 32 · NIS2
Database encryptionAES-256 at rest via Supabase (Frankfurt data centre)GDPR Art. 32
Admin access controlMandatory TOTP multi-factor authentication — no exceptionsNIS2 Art. 21 · GDPR Art. 32
Account lockoutAccount blocked after 10 failed login attemptsGDPR Art. 32
Rate limitingLogin, crush sending, and MFA attempts are throttled per time windowNIS2 Art. 21
Security audit logAll login activity, account changes, and admin actions are loggedNIS2 Art. 21 · GDPR Art. 32
Data minimisationNo GPS, no tracking SDKs, no advertising networksGDPR Art. 5(1)(c)
Supplier securityAll suppliers assessed on risk level; high-risk suppliers reviewed annuallyNIS2 Art. 21(2)(d)
Incident responseDocumented procedure; AP notification within 72 hours of a data breachGDPR Art. 33 · NIS2 Art. 23
Business continuityRecovery time target: 4 hours (RTO). Maximum data loss: 24 hours (RPO)NIS2 Art. 21(2)(c)
🛡️ NIS2 readiness. The NIS2 Directive (Cyberbeveiligingswet) is expected to apply to larger organisations (>50 employees or >€10M revenue). We currently fall outside the mandatory scope, but have proactively implemented NIS2 security principles in preparation for growth.
PCI DSS SAQ-A · Stripe Level 1

Payment Security 💳

How do we secure your payments? (Short answer: Stripe does — card data never touches our servers)

ELI5: how does payment work here?

When you subscribe, we redirect you to Stripe's secure payment page. You type your card details directly into Stripe — not into our app. It's like we say: "Go show your card to the bank yourself — we deliberately don't look." We only see that payment succeeded, not how you paid.

PCI DSS Level 1
Stripe

Stripe handles all card data and holds the highest PCI security certification in the world

SAQ-A Compliant
Us

As a merchant we qualify for SAQ-A: we never store, process, or transmit card data ourselves

Webhook Verification
Every payment event

Stripe payment notifications are cryptographically signed and verified — fake events are rejected

iDEAL · SEPA
NL Payment Methods

iDEAL and SEPA mandates are processed via Stripe Checkout — fully PSD2 compliant

NIS2 Art. 21(2)(d) · Supplier Security

Supplier Risk Assessment 🏢

We assess all our technical suppliers on security risk. Here's a summary.

Why do we do this?

NIS2 says: it's not enough to be secure yourself — you also need to check that the companies you work with are secure. We assess each supplier on four factors: how sensitive is the data they process, how critical are they to our service, how easy is it to switch, and what security certifications do they hold?

SupplierRiskDataCritical?Certifications
SupabaseHIGHAll user dataYes — databaseSOC 2 Type II
RailwayHIGHLogs, secretsYes — backend APISOC 2 (in progress)
StripeLOWBilling dataNoPCI-L1 · SOC 2 · ISO 27001
ResendMEDIUMEmail contentNoSOC 2 Type II
Expo/EASMEDIUMPush tokensPartialSOC 2 (on request)
NetlifyLOWNo personal dataNo — website onlySOC 2 Type II
GiphyLOWSearch text (server-server)No
🔄 Annual review. High-risk suppliers (Supabase, Railway) are reassessed annually on security certifications, incident history, and alternative options. Next review: April 2027.
DSA Art. 28 · App Store Policy · 18+

Age Verification 🔞

MySecretCrush is exclusively intended for users aged 18 and over. We enforce this at two independent levels.

Why 18+?

Romantic intent, profile photos, and paid subscriptions are not appropriate for minors. The Digital Services Act (DSA) and App Store policies require us to technically enforce this — not merely state it in our Terms of Service.

During registration, every new user must check three boxes before the account is created:

  • ✅ I agree to the Privacy Policy
  • ✅ I agree to the Terms of Service
  • I confirm I am 18 years of age or older

The "Activate account" button remains disabled until all three boxes are checked. This fully blocks the call to our payment processor — no Stripe session is created for an unconfirmed user.

Our API rejects profile updates if a supplied age is below 18, regardless of what the app sends:

  • Age < 18 submitted → HTTP 400 "You must be 18 or older to use this service"
  • No age submitted → existing profile data is untouched (existing users are not blocked)
  • Age ≥ 18 → saved normally

This check lives in the backend independently of the frontend — a modified app or direct API call cannot bypass it.

⚖️ Legal basis. Age verification is required under DSA Article 28 (protection of minors), App Store Review Guidelines (section 1.3), and Google Play Developer Policy. Our Terms of Service state 18+ as a minimum age; technical enforcement makes this binding in practice.
EAA 2019/882 · WCAG 2.1 AA · In force June 2025

Accessibility ♿

MySecretCrush targets WCAG 2.1 AA compliance in line with the European Accessibility Act (EAA), which came into force in June 2025.

Why accessibility?

The European Accessibility Act requires digital services in the EU to be accessible to people with disabilities — including screen reader users (blind), low-vision users, and users with motor impairments. WCAG 2.1 AA is the international standard that gives this meaning.

All interactive elements in the app carry descriptive accessibility labels announced by VoiceOver (iOS) and TalkBack (Android):

  • Registration screen: checkboxes announced as "Accept Privacy Policy", "Accept Terms of Service", "Confirm you are 18 or older"
  • Login screen: email and password fields, show/hide password toggle, language switchers
  • Profile screen: photo slots ("Photo slot 1–6, add photo"), gender buttons announced as radio buttons
  • Radar screen: Beacon toggle with status description ("Beacon Mode is on — you are discoverable")
  • Settings: all toggles, subscription card, action buttons with full labels

Labels are available in both Dutch and English, matching the user's language setting.

We conducted a full contrast audit across all colour pairs in the app. Three text pairs failed the WCAG AA requirement of 4.5:1 for normal text (white on primary red background #C02A37). All three have been resolved:

LocationOld contrastNew contrastStatus
Registration — price banner subtitle3.23:1 (rgba 0.65)4.72:1 (rgba 0.87)✅ Pass
Registration — activate button subtitle3.65:1 (rgba 0.70)4.72:1 (rgba 0.87)✅ Pass
Legal documents — document badge2.70:1 (rgba 0.55)4.72:1 (rgba 0.87)✅ Pass

All visual changes are minimal (small opacity increases) and barely perceptible to sighted users, while representing a significant improvement for low-vision users.

📋 Full audit report. Our detailed WCAG contrast audit report is available internally as legal/compliance/wcag_audit.md. Contact info@mysecretcrush.app for access or with accessibility questions.