Last updated:
We respect your privacy and process personal data in accordance with applicable laws, notably Regulation (EU) 2016/679 (GDPR) and Czech Act No. 110/2019 Coll. on the processing of personal data. This document explains what data we process, for what purposes, with whom we share it, how long we keep it, and what rights you have.
The data controller is Lidmila Maršálková, ID: 05684447, registered address: Jindice 115, 285 04 Rašovice-Uhlířské Janovice, Czech Republic (hereinafter "controller" or "we").
These policies apply to the website CodeWhiskers.app and to the apps BetterShelf, DreamWitness, Kvitta, BetterMingle, and TAROTIQ.
What data we process
- User account (if you sign in): email/account address – for login and sync.
- Product data (entered by you in BetterShelf): name, category, expiry date, notes – to provide app features (tracking, reminders, statistics).
- Diagnostics (aggregate): technical logs and errors (e.g., an "app_crash" event with stack trace) – to improve stability and security.
- Session replay in the app: screens and interactions with masking of text inputs and images – for debugging and UX improvements.
- Shelf sharing data: inviter's email and optionally invitee's email – to create and manage invitations.
- Technical and operational data from the website: IP, cookie identifiers, device and browser info – for site operation, security, and analytics (Google Analytics only after consent).
DreamWitness-specific data
DreamWitness processes Health Data as defined by Google Play and special-category data under GDPR Art. 9. This includes sleep data obtained from Android Health Connect and health-related indicators you enter in the dream diary (mood, sleep quality, nightmare classification, emotional state). We process this data only with your explicit consent and solely for the purposes described below.
- Health Connect sleep data (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 times, total sleep duration, REM sleep duration, deep sleep duration, light sleep duration, awake count, awake duration, and calculated sleep efficiency. Supported sources: Samsung Health, Google Fit, Oura Ring. This data is cached locally on the device and, for signed-in users, included with dream diary entries synced to Cloud Firestore – to correlate sleep quality with dream patterns and provide Dream Guardian insights. - Dream diary entries (includes Health Data): for signed-in users, dream journal entries are persistently stored in the local database and synced to Cloud Firestore. Each entry may include: dream description text, AI analysis results, selected dream symbols, mood/emoji indicator, sleep and wake times, sleep quality rating (1–5), lucid dream indicator, nightmare classification, emotional valence score (−1.0 to 1.0), vividness index (0.0 to 1.0), and attached Health Connect sleep metrics listed above – to maintain the user's dream history and enable pattern analysis.
- AI-generated dream images: dream descriptions are sent to OpenAI (DALL-E 3) to generate artistic representations of the dream. The resulting image URL is stored with the dream entry – to provide a visual representation.
- Dream Guardian pattern analysis (includes Health Data): the Dream Guardian feature analyses the user's dream history to detect patterns. The analysis results are stored locally and in Firestore and may include: detected patterns, emotional profile, sleep connection analysis, actionable advice, dream health score (1–100), mood distribution, sleep analysis data, and timing analysis – to provide the user with insights about their dream and sleep patterns over time.
- Dream content sent to AI: dream descriptions, selected symbols, and conversation context are sent to the OpenAI API for AI analysis. Health-related dream diary data (mood, sleep quality, emotional indicators, Health Connect sleep metrics) is included in Dream Guardian pattern analysis requests via Firebase Functions. OpenAI does not retain data for model training under their contractual terms.
- Anonymous user identifier: to enforce the free tier limit (2 analyses/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.
Kvitta-specific data
- Expense and group data: amounts, currencies, categories, splits, group roles, comments – to provide app functionality.
- Push notification tokens (FCM): to send group activity notifications.
- Activity logs: record of group changes (who added/edited what) – for the Activity Feed feature.
BetterMingle-specific data
- Event and participant data: event name, description, date, location (incl. coordinates), participant roles, RSVP status – for event planning and coordination.
- Shared expenses and settlements: amounts, currencies, splits, receipts – for tracking and settling group costs.
- Polls and votes: questions, options, and participant votes – for democratic group decision-making.
- Chat messages: message content, sender, timestamp – for group communication within an event.
- Carpool and rooms: ride offers, passenger assignments, room assignments – for transportation and accommodation coordination.
- Photos and ratings: event photos, ratings (overall, organization, atmosphere, venue) – for sharing experiences and feedback.
- Push notification tokens (FCM): to send event activity notifications.
- Activity logs: record of event changes (who added/edited what) – for the Activity Feed feature.
- Purchase data (BetterMingle Pro/Business): transaction token and subscription status – to verify entitlement to premium features.
TAROTIQ-specific data
- Reading content (temporary): question text and context passed to the AI fortune teller Madame Stella – processed solely to generate a reading; we do not persist this in our database.
- Zodiac sign: your chosen sign – for personalized readings.
- Reading history: saved readings, drawn cards, and AI responses – for access to past readings.
- Coin purchase data: transaction token, number of coins purchased, and balance – to verify entitlement to AI readings.
- Achievements and statistics: streaks, total readings, favorite cards – for gamification and overview.
Legal bases
- Contract performance: providing app features and data sync.
- Legitimate interests: diagnostics, security, abuse prevention, and support.
- Consent: analytics cookies on the website (Google Analytics).
- Explicit consent (GDPR Art. 9(2)(a)): processing of Health Data in DreamWitness (sleep data from Health Connect, mood, sleep quality, emotional indicators, nightmare classification). Collected only after explicit, informed consent via the Android Health Connect permission dialog and voluntary dream diary data entry. You may withdraw consent at any time by revoking Health Connect permissions in your device settings or by deleting your dream diary data in the app.
How we use data
- Providing website and app features (product tracking, notifications, statistics).
- Syncing your data across devices (if enabled).
- Improving reliability, performance, and security (error detection, abuse prevention).
- Fulfilling legal obligations and handling support requests.
Sharing with third parties
We do not sell your data and do not share it for marketing purposes. We display ads via Google AdMob in the free versions of all apps (BetterShelf, DreamWitness, Kvitta, BetterMingle, and TAROTIQ); Plus/Pro versions and purchased coins are ad-free.
We use Google Firebase as a processor for our apps:
- Firebase Authentication (sign-in)
- Cloud Firestore (data storage)
- Firebase Storage (dream images, profile images)
- 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. On the website we use Google Analytics only after consent through a 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-related dream diary data (mood, sleep quality, emotional indicators, Health Connect sleep metrics) is included in Dream Guardian pattern analysis requests via Firebase Functions. OpenAI may not use this data to train models under their contractual terms.
- Firebase Cloud Messaging – FCM (Kvitta, BetterMingle): sending push notifications about group/event activity.
- Google ML Kit (Kvitta): OCR scanning of receipts – processing happens locally on the device; no data is sent to external servers.
- Google AdMob (BetterShelf free, DreamWitness free, Kvitta free, BetterMingle free, TAROTIQ free): serving ads; governed by Google's Privacy Policy.
Retention and security
- Firestore / app data: retained for the lifetime of the account; export/deletion on request.
- PostHog: session replay 30 days; events 13 months.
- Google Analytics (website): 14 months; active only after consent.
- Data transfer is protected with TLS. We regularly update software and apply least-privilege access controls.
- Dream diary data (DreamWitness, includes Health Data): for the lifetime of the active account; stored locally and in Cloud Firestore for signed-in users. Individual entries or all data can be deleted from within the app or on request. Health Connect sleep cache is stored locally and refreshed per session.
- Dream Guardian insights (DreamWitness, includes Health Data): for the lifetime of the active account; stored locally and in Firestore. Deletable from the app or on request.
- AI-generated dream images (DreamWitness): image URLs stored with dream entries for the lifetime of the account; deletable with the associated dream entry.
- Dream content sent to AI (DreamWitness): transmitted only during an active request; OpenAI does not retain data beyond their own policies.
- Purchase data (DreamWitness): 3 years (statutory accounting obligation).
- Kvitta app data: for the lifetime of the active account; export/deletion on request.
- BetterMingle app data: for the lifetime of the active account; events can be configured for automatic deletion after completion. Export/deletion on request.
- Purchase data (BetterMingle): 3 years (statutory accounting obligation).
- Reading content (TAROTIQ): not persisted – transmitted only during an active request; OpenAI does not retain data beyond their own policies.
- TAROTIQ app data: for the lifetime of the active account; export/deletion on request.
- Coin purchase data (TAROTIQ): 3 years (statutory accounting obligation).
Data transfers
Firebase is operated in the nam5 region. Where data is transferred outside the EEA, we rely on appropriate safeguards, in particular Standard Contractual Clauses (SCCs) pursuant to Art. 46(2)(c) GDPR. We use PostHog with an EU endpoint. Google Analytics is governed by Google's policies.
Your rights
Where applicable by law, you have the right to:
- access personal data and obtain a copy,
- rectify inaccurate or incomplete data,
- erasure ("right to be forgotten") and restriction of processing,
- object to processing,
- data portability (where technically feasible),
- withdraw consent (e.g., by uninstalling the app or signing out),
- lodge a complaint with a competent supervisory authority (in the Czech Republic, the Office for Personal Data Protection – ÚOOÚ).
Contact
Questions or want to exercise your rights? Contact us:
- Support email: hello@codewhiskers.app
- Web: https://www.codewhiskers.app/en/privacy-policy
This document combines policies for CodeWhiskers.app and the apps BetterShelf, DreamWitness, Kvitta, BetterMingle, and TAROTIQ. Technical details and contact information reflect the current implementation.