Privacy policy

Last updated: 7 April 2026

We respect your privacy and process personal data in line with applicable law, in particular Regulation (EU) 2016/679 (GDPR) and Czech Act No. 110/2019 Coll. on personal data processing. This document describes what data we process, for what purposes, who we share it with, how long we keep it and what rights you have.

The data controller is Lidmila Maršálková, company ID 05684447, registered at Jindice 115, 285 04 Rašovice-Uhlířské Janovice, Czech Republic (also referred to as “the controller” or “we”).

This policy covers the CodeWhiskers.app website and the BetterShelf, DreamWitness, Kvitta, BetterMingle and TAROTIQ apps.

What data we process

  • User account (if you sign in): email / account address – for signing in and syncing.
  • Product data (entered by you in the BetterShelf app): name, category, expiry date, notes – for the app to work (inventory, alerts, statistics).
  • Diagnostic data (aggregated): technical logs and error states (for example an “app_crash” event with a stack trace) – to improve stability and security.
  • In-app session replay: screens and interactions with masking of text inputs and images enabled – for fixing bugs and improving UX.
  • Shelf sharing data: the inviter’s email and, where applicable, the invitee’s email – for creating and managing invitations.
  • Technical and operational data from the website: IP address, cookie identifiers, device and browser information – for running the site, security and analytics (Google Analytics only with consent).

Specific to DreamWitness

DreamWitness processes Health datawithin the meaning of the Google Play policies, and a special category of data under Article 9 GDPR. This covers sleep data obtained from Android Health Connect and the health indicators you enter in the dream journal (mood, sleep quality, nightmare classification, emotional state). We process this data only with your explicit consent and solely for the purposes set out below.

  • Sleep data from Health Connect (Health data): with your explicit permission (android.permission.health.READ_SLEEP) DreamWitness reads sleep session data from Android Health Connect, including: session start and end, total sleep duration, REM duration, deep sleep, light sleep, number of awakenings, time awake and computed sleep efficiency. Supported sources: Samsung Health, Google Fit, Oura Ring. This data is cached locally on the device and, for signed-in users, included in dream journal entries synced to Cloud Firestore – to correlate sleep quality with dream patterns and to provide Dream Guardian insights.
  • Dream journal entries (include Health data): for signed-in users, entries are stored permanently in a local database and synced to Cloud Firestore. Each entry may contain: a dream description, the result of AI analysis, selected dream symbols, mood/emoji, times of falling asleep and waking, a sleep quality rating (1–5), a lucid dream indicator, nightmare classification, an emotional valence score (−1.0 to 1.0), a vividness index (0.0 to 1.0) and attached sleep metrics from Health Connect – to preserve dream history and enable pattern analysis.
  • AI-generated dream images: dream descriptions are sent to OpenAI (DALL-E 3) to generate visual representations of the dream. The URL of the resulting image is stored with the dream entry – for visual illustration.
  • Dream Guardian analyses (include Health data): the Dream Guardian feature analyses a user’s dream history looking for patterns. Results are stored locally and in Firestore and may contain: recognised patterns, an emotional profile, links to sleep, actionable advice, a dream health score (1–100), mood distribution, sleep analysis and time-based analysis – to provide insights into the user’s dream and sleep patterns.
  • Dream content passed to AI: dream descriptions, selected symbols and conversation context are sent to the OpenAI API for AI analysis. Health data from the dream journal (mood, sleep quality, emotional indicators, sleep metrics from Health Connect) is included in Dream Guardian pattern analysis requests via Firebase Functions. Under the contractual terms, OpenAI may not use this data to train models.
  • Anonymous user identifier: for free tier limits (2 analyses per week) and Plus status – not linked to a name or email.
  • Purchase data (DreamWitness Plus): transaction token and subscription status – to verify entitlement to Plus features.

Specific to Kvitta

  • Expense and group data: amounts, currencies, categories, splits, roles within a group, comments – for the app to work.
  • Push notification tokens (FCM): to send alerts within groups.
  • Activity logs: an overview of changes in a group (who added or edited what) – for the Activity Feed feature.

Specific to BetterMingle

  • Event and participant data: event name, description, date, location (including coordinates), participant roles, RSVP status – for planning and coordinating events.
  • Shared expenses and settlements: amounts, currencies, splits, receipts – for tracking and settling group costs.
  • Votes and polls: questions, options and participants’ votes – for group decision-making.
  • Chat messages: message content, sender, timestamp – for group communication within an event.
  • Ride sharing and rooms: ride offers, passenger assignments, room allocations – for coordinating transport and accommodation.
  • Photos and ratings: event photos, ratings (overall, organisation, atmosphere, venue) – for sharing experiences and feedback.
  • Push notification tokens (FCM): to send alerts about activity within an event.
  • Activity logs: an overview of changes in an event (who added or edited what) – for the Activity Feed feature.
  • Purchase data (BetterMingle Pro/Business): transaction token and subscription status – to verify entitlement to premium features.

Specific to TAROTIQ

  • Reading content (temporarily): the text of questions and the context passed to the AI fortune teller Madame Stella – processed solely to generate the reading; not stored permanently in our database.
  • Star sign: the sign you choose – to personalise readings.
  • Reading history: saved readings, the cards drawn and the AI responses – so you can go back to previous readings.
  • Coin purchase data: transaction token, number of coins purchased and the balance – to verify entitlement to AI readings.
  • Achievements and statistics: streaks, total number of readings, favourite cards – for gamification and overview.

Legal bases for processing

  • Performance of a contract: providing app features and syncing data.
  • Legitimate interest: diagnostics, security, abuse prevention and support.
  • Consent: analytics cookies on the website (Google Analytics).
  • Explicit consent (Article 9(2)(a) GDPR): processing of Health data in DreamWitness (sleep data from Health Connect, mood, sleep quality, emotional indicators, nightmare classification). Collected only after explicit, informed consent through the Android Health Connect permission dialog and by voluntarily entering data into the dream journal. You can withdraw consent at any time by removing the Health Connect permission in your device settings or by deleting your dream journal data in the app.

How we use the data

  • Providing website and app features (product inventory, alerts, statistics).
  • Syncing your data across devices (where enabled).
  • Improving reliability, performance and security (error detection, abuse prevention).
  • Meeting legal obligations and handling customer support requests.

Sharing data with third parties

We do not sell your data and do not share it for marketing purposes. We show ads through Google AdMob in the free versions of all apps (BetterShelf, DreamWitness, Kvitta, BetterMingle and TAROTIQ); Plus/Pro versions and purchased coins are ad-free.

To run the apps we use Google Firebase as a processor:

  • Firebase Authentication (sign-in)
  • Cloud Firestore (data storage)
  • Firebase Storage (dream images, profile pictures)
  • Remote Config (remote configuration)
  • App Check (abuse protection)

For diagnostics and UX improvements in the BetterShelf app we use PostHog (EU endpoint), including session replay with masking of text inputs and images enabled. On the website we use Google Analytics only after consent is given in the cookie banner.

We also use the following processors:

  • OpenAI(DreamWitness, TAROTIQ): dream content and reading questions are passed to the OpenAI API for AI analysis (GPT) and dream image generation (DALL-E 3). Health data from the dream journal (mood, sleep quality, emotional indicators, sleep metrics from Health Connect) is included in Dream Guardian pattern analysis requests via Firebase Functions. Under the contractual terms, OpenAI may not use this data to train models.
  • Firebase Cloud Messaging – FCM (Kvitta, BetterMingle): sending push notifications about group or event activity.
  • Google ML Kit (Kvitta): OCR receipt scanning – processing happens locally on the device, no data is sent to servers.
  • Google AdMob (BetterShelf free, DreamWitness free, Kvitta free, BetterMingle free, TAROTIQ free): showing ads; governed by the Google privacy policy.

Retention and security

  • Firestore / app data: for as long as the account is active; we will export or delete it on request.
  • PostHog: session replay 30 days; events 13 months.
  • Google Analytics (website): 14 months; active only after consent.
  • Data transfers are secured with TLS. We update software regularly and apply access control on a need-to-know basis.
  • Dream journal data (DreamWitness, including Health data): for as long as the account is active; stored locally and in Cloud Firestore for signed-in users. Individual entries or all data can be deleted directly in the app or on request. The Health Connect data cache is stored locally and refreshed on every session.
  • Dream Guardian insights (DreamWitness, including Health data): for as long as the account is active; stored locally and in Firestore. Deletion through the app or on request.
  • AI-generated dream images (DreamWitness): image URLs are stored with dream entries for the life of the account; they can be deleted together with the corresponding dream entry.
  • Dream content passed to AI (DreamWitness): sent only when a request is actively made; OpenAI does not retain the data beyond its own policies.
  • Purchase data (DreamWitness): 3 years (statutory accounting obligation).
  • Kvitta app data: for as long as the account is active; export or deletion on request.
  • BetterMingle app data: for as long as the account is active; events can be set to delete automatically once they are over. Export or deletion on request.
  • Purchase data (BetterMingle): 3 years (statutory accounting obligation).
  • Reading content (TAROTIQ): not stored permanently – passed on only when a request is actively made; OpenAI does not retain the data beyond its own policies.
  • TAROTIQ app data: for as long as the account is active; export or deletion on request.
  • Coin purchase data (TAROTIQ): 3 years (statutory accounting obligation).

Data transfers

Firebase runs in the nam5 region. For transfers outside the EEA we apply the relevant safeguards, in particular the standard contractual clauses (SCCs) under Article 46(2)(c) GDPR. We use PostHog with an EU endpoint. Google Analytics is governed by Google’s own policies.

Consent and cookies

Analytics cookies on the website (Google Analytics) are loaded only after you give consent through the cookie banner. You can withdraw consent at any time in your browser’s cookie settings or by clicking this link; the analytics scripts will then no longer load.

Consent to Health data in DreamWitness: the app requires your explicit consent before accessing sleep data from Health Connect. You give consent through the Android Health Connect permission dialog. You can withdraw that permission at any time in the Health Connect settings on your device. Health data in the dream journal (mood, sleep quality, emotional indicators) is entered voluntarily; you can stop entering it at any time and delete existing entries directly in the app.

Your rights

To the extent provided by law, you have the right to:

  • access your personal data and obtain a copy of it,
  • have inaccurate or incomplete data corrected,
  • erasure (the “right to be forgotten”) and restriction of processing,
  • object to processing,
  • data portability (where technically feasible),
  • withdraw consent (for example by uninstalling the app or signing out of your account),
  • lodge a complaint with the Czech Office for Personal Data Protection (ÚOOÚ).

Contact

Have a question or want to exercise your rights? Write to us:

This document is a combined privacy policy for CodeWhiskers.app and the BetterShelf, DreamWitness, Kvitta, BetterMingle and TAROTIQ apps. The technical details and contact information match the current implementation. This English version is a translation for convenience; the binding version is the Czech original.