Privaatheidsbeleid
Laas hersien
Hoe ons u persoonlike inligting insamel, gebruik, deel en beskerm, en wat u daaromtrent kan doen. Geskryf vir die Wet op die Beskerming van Persoonlike Inligting 4 van 2013 (POPIA).
Wie is verantwoordelik vir u inligting
Ons is die verantwoordelike party vir die persoonlike inligting wat in hierdie beleid beskryf word. Ons maatskappybesonderhede en die naam van ons Inligtingsbeampte verskyn onderaan hierdie bladsy.
Hierdie beleid dek die diens waartoe u deur hierdie webwerf en toepassings toegang kry. Dit dek nie ander maatskappye se webwerwe waarheen ons skakel nie; sodra u vertrek, geld hulle beleide.
Wat ons insamel
Ons samel in wat ons nodig het om die diens te bedryf en niks waarvoor ons geen gebruik het nie. Die tabel hieronder word uit ons werklike stelselkonfigurasie gegenereer eerder as met die hand geskryf, sodat dit die kategorieë lys wat ons stelsels werklik verwerk.
Ons samel nie spesiale persoonlike inligting in (soos gesondheids-, geloofs- of biometriese data) of die persoonlike inligting van kinders nie, en die diens word nie aan mense onder 18 aangebied nie.
| Kategorie | Wat dit beteken | Gedeel met |
|---|---|---|
| account-identifiers | U naam, e-posadres en die rekeningidentifiseerders wat ons vir u skep. | xneelo Cloud (Johannesburg), Resend, Trigger.dev (self-hosted, Johannesburg), Cloudflare R2, Hetzner Object Storage, PostHog (EU cloud), Sentry (EU org), Paystack, Lemon Squeezy, Meta (WhatsApp Business Cloud API), GitHub, Discord |
| content | Wat u skep, oplaai of stuur terwyl u die diens gebruik, insluitend boodskapinhoud en lêers. | xneelo Cloud (Johannesburg), Resend, Cloudflare R2, Hetzner Object Storage, Anthropic, OpenAI, Groq, Meta (WhatsApp Business Cloud API) |
| payment-metadata | Bedrae, geldeenhede, verwysings en intekenstatus. Ons ontvang of stoor nooit u kaartnommer nie. | xneelo Cloud (Johannesburg), Paystack, Lemon Squeezy |
| none-pii | Infrastruktuur wat verkeer dra of werk skeduleer sonder om inligting oor u te sien. | Cloudflare (DNS/TLS proxy), Upstash QStash |
| delivery-metadata | Of 'n boodskap wat ons gestuur het afgelewer is, teruggebons het, of oopgemaak is waar dit gemeet word. | Resend, Meta (WhatsApp Business Cloud API) |
| usage-analytics | Bladsye wat besoek is en produkgebeurtenisse. Saamgevoeg en pseudonimies tensy u tot persoonsgebonde ontleding instem. | Plausible Analytics, PostHog (EU cloud) |
| diagnostics | Foutspore en tegniese logs wat geskep word wanneer iets verkeerd loop. | Sentry (EU org) |
Waarom ons dit verwerk, en op watter grondslag
Om die diens te lewer waarvoor u geregistreer het: om u rekening te skep en te beveilig, die produk te lewer, betalings te verwerk en die boodskappe te stuur waarvan die diens afhang, soos kwitansies, wagwoordherstellings en sekuriteitswaarskuwings. Hierdie verwerking is nodig om ons kontrak met u na te kom.
Om die diens veilig en werkend te hou: misbruik op te spoor, voorvalle te ondersoek, foute reg te stel en ons eie regsverpligtinge na te kom, insluitend belastingrekordhouding.
Waar ons op u toestemming staatmaak — direkte bemarking, opsionele KI-funksies en persoonsgebonde ontleding — kies u, en u kan van gedagte verander. Om toestemming terug te trek stop die verwerking wat dit gedek het; dit maak nie verwerking ongedaan wat reeds regmatig plaasgevind het nie.
POPIA a.11 bepaal die gronde waarop persoonlike inligting verwerk mag word. Waar ons op 'n regmatige belang staatmaak, het ons oorweeg of dit deur u belange oorskadu word, en u mag beswaar maak.
Wie anders u inligting verwerk
Ons gebruik die operateurs hieronder om die diens te bedryf. Elkeen word genoem met wat dit doen, waar dit data verwerk, en watter kategorieë inligting dit ontvang. Hierdie lys word uit ons konfigurasie gegenereer — as ons 'n verskaffer verander, verander hierdie bladsy saam.
Application compute and the primary database run in South Africa. Every offshore sub-processor is named below, justified, and swappable.
| Provider | Purpose | Region | Data shared | Why / safeguards |
|---|---|---|---|---|
| xneelo Cloud (Johannesburg) | Application hosting and primary database | South Africa | account-identifiers, content, payment-metadata | South African company operating a single region and availability zone in Johannesburg, so application compute and the primary database run in-country. Be precise about what that is and is not: the in-country claim rests on that single-region architecture, not on a contractual residency guarantee — xneelo publishes none, and their group includes a non-SA entity. Data-processing terms come via their Terms of Service. No POPIA certification is claimed, because no certification scheme exists. |
| Cloudflare (DNS/TLS proxy) | DNS, TLS termination and DDoS protection | United States | none-pii | Traffic transits JNB/CPT edge POPs; only connection metadata is processed, no stored PII. Covered by DTA schedule (transit clause). |
| Resend | Transactional email delivery | United States | account-identifiers, delivery-metadata, content | All Resend account data, message metadata and logs are US-stored regardless of send region. Necessary for performance of the user relationship (s.72(1)(b)) and contracted via DTA. |
| Trigger.dev (self-hosted, Johannesburg) | Background jobs and scheduled tasks | South Africa | account-identifiers | Self-hosted on the same Johannesburg box; job payloads never leave SA. |
| Upstash QStash(optional) | Pure-cron scheduling alternative (docs/jobs.md) | United States | none-pii | Only receives schedule 'ticks' — endpoints and cron expressions, never payload data (runDueJobs pattern keeps data on-box). |
| Cloudflare R2 | File storage — default adapter (lib/storage/r2.ts, prompt 20) | United States | content, account-identifiers | Cloudflare, Inc. is US-incorporated. A bucket jurisdiction hint constrains where objects rest but NOT who operates them, so US legal process still reaches the operator regardless of the region chosen. Uploads may contain PII; contracted via DTA. Chosen for zero egress fees. |
| Hetzner Object Storage(alternative) | File storage — documented swap adapter (lib/storage/hetzner.ts, prompt 20) | European Union | content, account-identifiers | EU-hosted (Falkenstein/Nuremberg/Helsinki) under a GDPR-adequate regime. It is an unrelated third-party processor with no relationship to the Johannesburg compute, so it adds a processor rather than consolidating one; the only thing it buys over R2 is an EU rather than a US operator. Files still leave South Africa: this reduces the transfer's reach, it does not eliminate the transfer. |
| Plausible Analytics | Web analytics | European Union | usage-analytics | Cookieless and pseudonymous by design (no persistent identifiers); EU-hosted (GDPR-adequate regime). |
| PostHog (EU cloud) | Product analytics, feature flags, session replay | European Union | usage-analytics, account-identifiers | EU-region cloud selected at project creation; US parent company disclosed. Replay masks inputs by default. Contracted via DTA + PostHog DPA. |
| Sentry (EU org) | Error monitoring (optional — inert with no DSN, prompt 36) | European Union | diagnostics, account-identifiers | EU data-storage org — Frankfurt, region code `de`. The location is chosen at ORG CREATION and is irreversible; the only way to change it is to create a new organisation. IMPORTANT CAVEAT: only telemetry (errors, spans, replays, source maps) is EU-stored. User accounts, organisation settings, auth tokens and SSO metadata are stored in the US regardless of the region selected. The kit sends no PII by default (sendDefaultPii: false; URLs are query-stripped before send), so what crosses the border is diagnostics. Browser beacons are proxied first-party via a Cloudflare Worker on SA POPs (JNB/CPT/DUR) — that is ad-blocker and DNS-filter resilience, not a change of destination: the envelope still lands in Frankfurt. US parent disclosed; DPA + DTA. |
| Anthropic | AI inference (primary provider, prompt 21) | United States | content | US inference disclosed to users at the AI feature surface; zero-data-retention configuration documented (prompt 21). Consent-based ground (s.72(1)(a)) for AI features. |
| OpenAI(optional) | AI inference (fallback provider) | United States | content | Same treatment as Anthropic; only active when configured. |
| Groq(optional) | AI inference (fast/cheap fallback) | United States | content | Same treatment as Anthropic; only active when configured. |
| Paystack | Payments (SA default provider) | South Africa | account-identifiers, payment-metadata | SA-licensed acquirer processing rand transactions locally; card data never touches the kit (hosted checkout). |
| Lemon Squeezy(optional) | Global/USD sales via merchant of record (lib/payments/providers/lemonsqueezy.ts, ADR 003) | United States | account-identifiers, payment-metadata | US merchant of record for USD sales: the seller of record for the purchases it processes, while the kit transmits the buyer's email and user id at checkout creation and receives subscription and payment metadata on webhooks. Necessary for performance of the sale (s.72(1)(b)) — Stripe still does not settle to SA entities (ADR 003), and rand sales stay in-country with the SA default provider. |
| Meta (WhatsApp Business Cloud API)(optional) | WhatsApp notifications (prompt 34) | United States | account-identifiers, content, delivery-metadata | Cloud API hosts message processing on Meta infrastructure; opt-in channel — users consent via <WhatsAppOptIn /> (s.72(1)(a)). |
| GitHub(optional) | Licence delivery — organisation team membership grants read on a tier's delivery repository (lib/fulfilment/github.ts, ADR 005 Decision 2) | United States | account-identifiers | GitHub, Inc. (a Microsoft subsidiary) is US-incorporated and stores organisation and membership data in the United States. The buyer supplies a GitHub username at checkout and fulfilment adds it to the team matching their tier, so GitHub holds the mapping between a paying customer and their access — and organisation membership is visible in ways people do not always expect. Necessary for performance of the sale (s.72(1)(b)): the repository cannot be delivered without it, which is also why the ground is contract and not consent. |
| Discord(optional) | Community access — a tier role assigned from the licence record (lib/fulfilment/discord.ts, business/discord-runbook.md §7) | United States | account-identifiers | Discord, Inc. is US-incorporated and stores member data in the United States. A buyer who supplies a Discord handle at checkout has it linked to their licence tier, and the role that results is visible to every other member of the server — so the transfer discloses not just who they are but what they bought. Consent-based (s.72(1)(a)) and not contract, which is the difference from GitHub above and is load-bearing: the handle is OPTIONAL at checkout, the community is a benefit rather than a delivery mechanism, and a buyer who leaves it blank still receives everything they paid for. |
Inligting wat Suid-Afrika verlaat
Ons toepassing en sy primêre databasis loop in Suid-Afrika. Sommige van die operateurs hierbo is buite die land, en die tabel sê watter en waarom.
POPIA a.72 beperk die oordrag van persoonlike inligting buite Suid-Afrika. Waar ons dit doen, steun ons op kontraktuele beskerming met die ontvanger wat 'n vergelykbare vlak van beskerming vereis, daarop dat die oordrag nodig is om ons kontrak met u na te kom, of op u toestemming — soos vir elke operateur aangedui.
Om in 'n land gehuisves te word is nie dieselfde as om vanuit een beheer te word nie. Waar 'n operateur data in Europa stoor maar deur 'n maatskappy elders besit word, sê ons dit eerder as om anders te impliseer.
Hoe lank ons dit hou
POPIA a.14 vereis dat rekords nie langer gehou word as wat nodig is nie. Ons behoudtydperke word op een plek gekonfigureer en deur 'n outomatiese opruiming afgedwing — die tabel hieronder is daardie konfigurasie, nie 'n beskrywing daarvan nie.
Wanneer u u rekening skrap, merk ons dit onmiddellik as geskrap, wat dit uit die diens verwyder, en wis dit dan permanent uit ná die tydperk hieronder. Belastingfakture is 'n uitsondering: ons word vereis om dit vyf jaar te hou, dus word dit van u rekening losgemaak eerder as geskrap.
| Rekords | Word gehou vir | Waarom |
|---|---|---|
| Databasis-rugsteunkopieë | 30 dae | Disaster recovery only; s.14 requires deletion once the purpose lapses. |
| Geskrapte rekeninge (voor permanente uitwissing) | 30 dae | Grace window for mistaken deletions; hard delete inside the s.14 'reasonable period'. |
| Boodskapafleweringslog | 365 dae | Delivery-dispute resolution; addresses are scrubbed on account deletion regardless. |
| Sekuriteits- en ouditspoor | 1 095 dae | Security-incident reconstruction (3 years, aligned with breach-response runbook). |
| Belastingfakture | 1 825 dae | SARS: records supporting tax returns must be kept 5 years. |
| Waglys- en leidraad-adresse | 730 dae | Consent to be told about a launch does not survive indefinitely; unconverted entries are erased once the purpose has lapsed (s.14). Not a statutory period — a stated policy. |
| Lisensie-aankope | 1 825 dae | SARS: records supporting a tax return are kept 5 years, and a licence is the record of a sale. Not swept — a perpetual licence is the standing answer to who has access; the personal information in it is scrubbed on account deletion instead (s.14 read with s.24). |
| Herroepte lisensies (koperbesonderhede) | 730 dae | A reversed payment is a dispute record, not a permanent character reference: the sale and the revocation are retained under `licences`, while the buyer's usernames are erased once every dispute window has long closed (s.14). Not a statutory period — a stated policy. |
Bemarkings-e-pos
POPIA a.69 beperk elektroniese direkte bemarking. Ons stuur bemarkings-e-pos slegs aan mense wat ingeteken het, en elke bemarkingsboodskap dra 'n werkende uitteken-skakel.
U intekening word aangeteken met die datum en die presiese bewoording waartoe u ingestem het. As u dit terugtrek, word die terugtrekking ook aangeteken, en ons stuurstelsel gaan toestemming weer na op die oomblik van stuur — nie toe 'n veldtog opgestel is nie — sodat 'n terugtrekking onmiddellik in werking tree.
Diensboodskappe is anders. Kwitansies, sekuriteitswaarskuwings en kennisgewings oor u rekening is deel van die diens en is nie bemarking nie.
U regte
U mag vra watter persoonlike inligting ons oor u hou en 'n afskrif ontvang. POPIA a.23 gee u hierdie reg, en die diens bied 'n selfdienuitvoer wat onmiddellik 'n masjienleesbare afskrif lewer.
U mag ons vra om inligting reg te stel wat verkeerd of onvolledig is, en om inligting te skrap waarvoor ons nie meer gronde het om dit te hou nie. Rekeningskrapping is selfdiens; waar die wet ons vereis om 'n rekord te hou, soos 'n belastingfaktuur, sal ons u sê wat ons gehou het en waarom.
U mag beswaar maak teen verwerking wat ons op 'n regmatige belang baseer, en u mag enige toestemming wat u gegee het terugtrek.
U mag ook 'n klag by die Inligtingsreguleerder indien. Ons sou verkies dat u ons eers sê, maar u hoef nie.
Hoe ons dit beskerm
Data word tydens versending geënkripteer. Wagwoorde word as hutswaardes gestoor en nooit in 'n vorm wat ons kan lees nie. Toegang tot produksiestelsels is beperk tot mense wat dit nodig het, en administratiewe handelinge word in 'n ouditspoor aangeteken.
Geen stelsel is volmaak veilig nie. As persoonlike inligting gekompromitteer word op 'n manier wat 'n werklike risiko vir u skep, sal ons u en die Inligtingsreguleerder in kennis stel soos die wet vereis.
Kinders
POPIA a.34 verbied die verwerking van kinders se persoonlike inligting behalwe in beperkte omstandighede. Die diens word nie aan mense onder 18 aangebied nie en ons vra by registrasie om bevestiging van ouderdom. As u meen 'n kind het 'n rekening geskep, kontak ons en ons sal dit skrap.
Klagtes
Kontak eers ons Inligtingsbeampte — die besonderhede is onderaan hierdie bladsy. As u nie tevrede is nie, mag u by die Inligtingsreguleerder (Suid-Afrika) kla, wat toesig hou oor beide POPIA en die Wet op Bevordering van Toegang tot Inligting 2 van 2000 (PAIA).
Ons PAIA-handleiding, wat verduidelik watter rekords ons hou en hoe om dit aan te vra, is op versoek beskikbaar.
Veranderinge aan hierdie beleid
Ons werk hierdie beleid by wanneer wat ons doen verander. Die hersieningsdatum boaan sê wanneer dit laas van begin tot einde gelees is, en wesenlike veranderinge word in die produk aangekondig voordat dit in werking tree.
Die Engelse weergawe van hierdie beleid geld indien 'n vertaling daarvan verskil.