Hoptimise — Privacy Policy

Effective date: 30 July 2026

Last updated: 30 July 2026

App: Hoptimise (Android · package com.ollyhuggon.Hoptimise)

Developer: Olly Huggon (UK)

Privacy email: [email protected]


Hoptimise is an alcohol-intake tracker for beer, wine, spirits and cocktails. This policy explains what data the app collects, where it goes, and what stays on your device. It is written to be plain-English and complete; if anything is unclear, email [email protected].

This policy applies to the Android build distributed via Google Play. An iOS build is in development; when released, this same policy will apply.

Privacy Policy

1. Introduction

Welcome to Hoptimise ("the App"). This Privacy Policy explains how information is handled when you use the App. Your privacy is important to us. The App is designed to minimize data collection and to give users control over their personal information. By using the App, you agree to the practices described in this Privacy Policy.


2. Information We Collect

2.1 Information You Provide

The App allows you to log and track information related to drinks you record. This may include:

  • Drink types
  • Drink quantities
  • Alcohol units or strength
  • Time and date of logged drinks
  • Personal limits or goals (such as spending limits, drink limits, or unit limits)

This information is entered by you voluntarily while using the App.

2.2 Automatically Collected Information

The App may access certain device features necessary for functionality, such as:

  • Approximate location (if used for venue search or mapping features)
  • Device information required for app performance

Where possible, this information is processed locally on your device. Please note that location access can be disabled by the user at any time through your device or app settings.


3. How Your Information Is Used

Information stored by the App is used solely to provide the app's functionality, including:

  • Displaying your drink history
  • Calculating statistics about your drinking habits
  • Tracking personal limits or goals
  • Prefilling drink information for quicker logging
  • Improving your experience when using the App

Your information is not used for profiling, marketing, or resale.


4. Data Storage

All user-generated data is stored locally on your device. This means your drink logs, history, and limits/preferences are not transmitted to the app creators or stored on external servers operated by us. If you uninstall the App or clear its data, this locally stored information may be permanently deleted.


5. Data Sharing

We do not sell, trade, rent, or share your personal data with third parties. Because user data is stored locally on your device, the app developers generally do not have access to your logged data. However, some third-party services may be used for app functionality (for example mapping or advertising services). These providers may collect limited technical information as governed by their own privacy policies.


6. Third-Party Services

The App may use third-party services to support certain features. Examples may include:

  • Mapping or location services
  • Analytics tools
  • Advertising networks

The App uses MapTiler API for location-based features. You can opt out of location data collection by disabling location features in the App settings. As of the writing of this policy, MapTiler does not use your data for profiling or marketing purposes. However, we accept no liability if MapTiler's terms of service or privacy practices change in the future. Please review the privacy policies of the third-party services for more information about how they handle data.


7. Data Security

We take reasonable measures to protect the integrity of the App and its functionality. Because user data is stored locally on your device, the security of that data also depends on your device's own security protections. We recommend keeping your device updated and secured with appropriate protections such as passcodes or biometric locks.


8. Children's Privacy

The App is not intended for use by individuals under the legal drinking age in their country or region. We do not knowingly collect personal information from children. If you believe that a child has provided personal information through the App, please contact us at [email protected] and we will take appropriate steps to address the issue.


9. Changes to This Privacy Policy

We may update this Privacy Policy from time to time. When changes are made, the updated version will be posted within the App or on the App's distribution page, with a revised "Last Updated" date. Continued use of the App after changes are made constitutes acceptance of the updated policy.


10. Your Rights

Because the App stores data locally on your device, you maintain full control of your data. You may delete your information at any time by:

  • Deleting individual entries within the App
  • Clearing the app's data
  • Uninstalling the App

1. The short version

  • Your drink log, ratings, notes, favourites and preferences never leave your device. They are stored in an encrypted on-device database (MMKV) and / or Android SharedPreferences for the home-screen widget. We have no server. There is no Hoptimise account, no cloud sync, no analytics SDK.
  • Photos you scan stay on your device. The on-device OCR engine reads the label text and discards the photo.
  • We send data off your device only when you use specific features — multi-currency price conversion, "Log with location", rendering ad-supported screens, or AI label identification. The OCR-text stage of AI identification fires automatically on a legitimate-interest basis after a local catalogue miss (no per-scan prompt — see §3.1); the photo itself only goes to Gemini if you tap Send photo on the per-scan consent dialog. Each is described below.
  • We do not sell your data. There is no analytics SDK, no cross-app tracking, no broker / data-broker integration.

2. What stays on your device

All of the following is stored locally, in MMKV on Android or in your browser's localStorage on Web (when running outside the Play Store build). They never leave your device unless you explicitly export them yourself (CSV / JSON export inside Settings).

Exported data: when you tap "Export" in Settings, the app produces a CSV / JSON file in the app's share sheet. You decide where the export goes — we never auto-send it anywhere.

Uninstall: uninstalling the app deletes the above data with it. There is no remote copy to also delete.


3. What leaves your device, and when

Hoptimise has no proprietary backend. Every network call the app makes is to a named third-party service. Each is documented below.

3.1 Google Gemini (AI drink identification) — generativelanguage.googleapis.com

  • Used by: the label-scan feature (BeerDetailModalservices/scanOrchestrator.tsservices/aiFallback.ts).
  • Trigger: only when you tap Scan in the drink logger; the local catalogue (≈23,000 beers, ≈100,000 wines, ≈3,000 spirits, plus your personal favourites) has produced no match, and you have consented to the AI step.
  • Two stages, in order:
  1. Text stage (auto, on a legitimate-interest basis). When the local catalogue produces no match, the OCR-extracted label text is sent to Gemini to identify the drink. The image itself is not uploaded at this stage. Google returns the corrected drink name, brewery, ABV, volume and price; we then re-run the local matcher against the catalogue. If you want to disable this path entirely, leave EXPO_PUBLIC_GEMINI_API_KEY unset at build time — the AI stage then disables itself and every scan degrades to manual entry. Important: this is a build-time decision, not a per-user runtime toggle. Users on the Play Store build receive the key the developer baked in; in practice, you can avoid the AI path by uninstalling or simply not pressing Scan.
  1. Vision stage (requires explicit per-scan consent). If the text stage produced no confident identification, you are shown a consent dialog. Only if you tap Send photo is the actual label image uploaded to Gemini. Tapping No, enter manually keeps the image on your device.
  • API key: embedded in the app bundle at build time via EXPO_PUBLIC_GEMINI_API_KEY, drawn from a Google AI Studio free-tier account.
  • Free-tier data governance (important — read this): Google AI Studio's free tier is documented to allow Google to review submitted inputs (including photos) by humans, after stripping account identifiers, and to use those inputs to improve Google's products. Inputs may be retained for up to 55 days for abuse monitoring. You should treat every Gemini call as a disclosure to Google. The app uses Gemini because the alternative (a paid tier) requires storing a billing-enrolled key inside the APK, which is trivially extractable and would expose the developer to malicious use.
  • Mitigations we apply:
  • The text stage sends only OCR-extracted text, not the image.
  • The vision stage requires an explicit per-scan consent tap.
  • The app enforces a strict rolling rate limit of 10 requests / minute and a daily cap of 200 requests, well within Google's free-tier quota of 15 RPM / 1500 RPD. A single user cannot exhaust the daily quota.
  • All requests use a 15-second timeout; failed requests are never retried automatically.
  • When EXPO_PUBLIC_GEMINI_API_KEY is absent (e.g. open-source builds), the AI stage is skipped entirely and the scan pipeline degrades to manual entry.

3.2 Google Maps SDK — maps.googleapis.com

  • Used by: the Map tab (app/(tabs)/map.tsx), the in-modal Location Picker, and any screen that embeds a map.
  • What is sent: standard Map SDK tile requests for the visible viewport, plus the device's approximate location only when you have explicitly tapped "Use my location" or enabled "Log with location".
  • API key: embedded at build time via EXPO_PUBLIC_GOOGLE_MAPS_API_KEY. Tiles are fetched over HTTPS.

3.3 MapTiler reverse-geocoding — api.maptiler.com

  • Used by: the location picker and the venue-search box in the Map tab (services/mapTiler.ts).
  • What is sent: your current latitude + longitude when you opt to attach location to a drink, or the lat/long you have entered manually for venue lookup.
  • API key: embedded at build time via MAPTILER_API_KEY (read at app startup; absent keys switch the picker to no-network mode and the lat/long never leaves the device).
  • Governance: MapTiler's privacy policy applies. MapTiler does not associate the request with a user identity.

3.4 Frankfurter FX rates — api.frankfurter.dev

  • Used by: multi-currency price display in Stats and the shareable stats text (services/fxRates.ts).
  • What is sent: a single GET request per day for the latest EUR-base rates. No PII, no identifiers, no user-specific parameters. The response is cached in MMKV after the first request of the day.
  • Governance: Frankfurter is a free, keyless ECB-data aggregator. Their terms note that they do not sell or share data.

3.5 Google AdMob — googleadservices.com / google.com ad mediation

  • Used by: banner ads on the Settings, Stats, Timeline, Map, About and Segment Details screens (react-native-google-mobile-ads).
  • What is sent: standard mobile-ad requests (device advertising ID, IP, coarse location at country level via IP, app-id, screen size, locale, timestamp). AdMob uses Google's standard mobile-ad data governance.
  • Children-directed ads: the app is not configured to serve children-directed ads. Hoptimise is an alcohol-tracking tool and is not intended for children.
  • Opt-out: Android users can reset / opt out of personalised ads via Settings → Google → Ads. Doing so switches AdMob to non-personalised ads. The app does not surface a separate ad-personalisation toggle — Google's OS-level setting is the canonical opt-out.

4. Permissions

The app requests only the permissions it needs. Each is opt-in via the OS dialog.

We do not request: contacts, microphone, calendar, phone state, Bluetooth, Nearby Devices, or background-location. The app does not run while in the background except for the foreground-service notification, which can be disabled at any time in Settings.


5. International transfers

The third parties above may process your data outside the UK / EEA. In particular:

  • Google LLC (Gemini, Maps, AdMob) operates globally. Free-tier Gemini data may be reviewed by humans in any Google office worldwide. Google's Standard Contractual Clauses apply to EEA transfers per their DPA.
  • MapTiler (Switzerland) — adequacy decision covers EEA transfers.
  • Frankfurter is hosted in Germany (Hetzner) — adequacy decision covers EEA transfers.

6. Children

Hoptimise is intended for adults of legal drinking age in their jurisdiction. We do not knowingly collect data from anyone under that age. If you believe a child has used the app and uploaded any of the above third-party data, contact [email protected] and we will assist the relevant guardian in removing the data on a best-effort basis.


7. Your controls and choices

There is no account to delete and no remote profile to remove. Uninstall = total removal of all data the app stored.


8. Data retention


9. Security

  • All network requests use HTTPS.
  • The on-device MMKV store lives inside the app's private directory (/data/data/com.ollyhuggon.Hoptimise/) and is inaccessible to other apps on a non-rooted Android device or non-jailbroken iOS device. Hoptimise does not declare a sharedUserId, so the default per-app sandbox applies. The MMKV store is not encrypted at restreact-native-mmkv is initialized in services/appStorage.ts with createMMKV({ id: 'hoptimise-storage' }) (no encryptionKey). The protection is purely per-app-sandbox access control: on rooted or jailbroken devices this protection does not apply, and a sophisticated user can read the file contents in plaintext.
  • API keys for Gemini and AdMob are embedded in the APK and are extractable by anyone with means to decompile it. We mitigate this by:
  • Using Google's free tier only (no billing exposure).
  • Rate-limiting Gemini to 200 / day / app instance.
  • Encouraging users with privacy-critical concerns to leave the API key unset (the open-source build path), which disables the AI feature entirely.
  • There is no remote admin endpoint, no remote-wipe capability, and no telemetry SDK. Attack surface is limited to what is shipped in the APK.

10. Changes to this policy

When this policy changes materially, we will:

  1. Update the Effective date at the top.
  1. Surface a short summary of the change in the next app release's Release Notes.
  1. For significant changes, present the updated policy inside the app on next open and require acknowledgement before continued use.

The git history of this file is the authoritative change log. We will not retroactively rewrite history.


11. Contact

  • Privacy enquiries (data requests, deletion confirmation, jurisdiction-specific rights): [email protected]
  • Postal address (UK GDPR right-to-erase / right-to-access requests): available on request via [email protected].

We aim to respond to all privacy enquiries within 30 days.


12. Regulatory disclosures

This section sets out the legally-required disclosures a real privacy-policy lawyer would expect for UK GDPR / EU GDPR / California CCPA-CPRA. It is written for an EU-and-California distributed Android app, even though Hoptimise is operated by a UK-based developer.

12.1 Lawful basis (UK GDPR / EU GDPR)

Each processing purpose has a stated lawful basis under UK GDPR Article 6(1) (mirrored in EU GDPR):

12.1.1 Legitimate Interest Assessment for the Gemini text stage

Article 6(1)(f) requires the legitimate-interest basis to be backed by a documented Legitimate Interest Assessment (LIA). The assessment for the Gemini text stage is:

  • Purpose. Improve catalogue-match quality for users whose local lookup produces no result, so unfamiliar-but-official labels can be logged without manually typing every field.
  • Necessity. No equivalent local model currently available meets the accuracy bar for label identification; catalogue lookup alone rejects a meaningful fraction of edge OCR cases.
  • Balance. Only OCR-extracted text is sent (not the image, not user identifiers, no advertising ID); the request is rate-limited to 10 requests / minute and 200 requests / day per app instance; the response is parsed and then discarded; users can avoid the path by uninstalling, by leaving the API key unset in open-source forks of the app, or simply by not pressing Scan. The processing does not produce legal or similarly significant effects on the user and does not affect their access to the app. We conclude the user's rights and freedoms do not override the legitimate interest.

We will revisit the LIA if Gemini's pricing or Google's free-tier data-governance terms change materially, or if a local AI label-identification model becomes available with comparable accuracy.

12.2 UK GDPR / EU GDPR data-subject rights

You have the following rights. We will respond within 30 days; if your request is complex we will acknowledge within 7 days and complete within 90 days. To exercise any of these, email [email protected].

  • Right to access (Art. 15) — a copy of the personal data we hold about you. Because we hold no server-side data, the practical response is that your drink log is the entirety of what anyone might hold about you. The in-app Export feature (§7) is the fastest way to produce this.
  • Right to rectification (Art. 16) — every field of every drink log can be edited directly in the Timeline tab; corrections are immediate.
  • Right to erasure / right to be forgotten (Art. 17) — uninstall the app, or use Settings → Delete all data. For third-party-held data (Gemini logs, AdMob logs, MapTiler logs), submit a deletion request via [email protected] and we will forward it to the relevant vendor.
  • Right to restriction (Art. 18) — email [email protected] with the specific processing you want suspended.
  • Right to data portability (Art. 20) — the same in-app Export (CSV / JSON) formats.
  • Right to object (Art. 21) — for legitimate-interest processing, email [email protected] with your specific objection; we will respond within 30 days.
  • Right to withdraw consent (Art. 7(3)) — toggle the relevant feature off in Settings (location, drinking-session notifications, AI scan consent).
  • Right to lodge a complaint with a supervisory authority (Art. 77). UK: the Information Commissioner's Office (ICO) at https://ico.org.uk. EU: your national Data Protection Authority. We would prefer you contact us first so we can try to resolve quickly.

12.3 EU representative

Hoptimise is provided by a UK-based developer. Under EU GDPR Article 27, a non-EU controller offering services to EU residents must appoint an EU representative unless exempted under Art. 27(2). We have not yet appointed one. Until we do, EU distribution remains a known compliance gap; EU residents should direct any EU GDPR correspondence to [email protected], and we will coordinate with an EU representative on a per-request basis.

12.3.1 Article 27(2) exemption analysis

Article 27(2) exempts the appointment requirement where processing is occasional, does not include special-category data on a large scale, and does not include large-scale processing of personal data.

We conclude the Art. 27(2) exemption is not safely available because AdMob rendering is not "occasional". We will appoint an EU representative before any EU-targeted marketing or paid EU promotion. Until that appointment is made, the disclosure above stands as the remediation step.

12.4 Data Protection Officer

Hoptimise does not appoint a Data Protection Officer. Article 37(1) triggers mandatory DPO appointment in three cases: (a) the processing is carried out by a public authority or body, regardless of processing size; (b) the controller's or processor's core activities consist of processing operations which, by virtue of their nature, scope and/or purposes, require regular and systematic monitoring of data subjects on a large scale; (c) the controller's or processor's core activities consist of processing on a large scale of special-category data pursuant to Article 9(1)/(2) or of personal-data relating to criminal convictions and offences under Article 10. None apply: Hoptimise is a private controller (a does not apply); we do not conduct large-scale regular or systematic monitoring of data subjects (b does not apply); drink logs and the calorie aggregates shown in the drinking-session notification are not Art. 9 special-category data, and we hold no criminal-conviction data (c does not apply). Hoptimise processes no special-category data (drink logs are not health or biometric data) and does not monitor on a large scale. If this changes — for example, if the app begins collecting clinical-grade health signals (blood alcohol concentration, sustained drinking biomarkers, prescription interactions, etc.) — the policy, the Article 37 analysis, and the DPO appointment will be updated in the next release. Note that Hoptimise's current calorie aggregates (drinks × 56 kcal / unit) are not Art. 9 special-category data on their own.

12.5 California (CCPA / CPRA) disclosures

Hoptimise is available to California residents via Google Play. The following disclosures apply under the California Consumer Privacy Act and the California Privacy Rights Act.

Categories of personal information collected, in the last 12 months:

Sources: directly from your device. No data brokers.

Business or commercial purposes: displaying in-app statistics, ad-funded revenue via AdMob, AI-assisted label identification.

Categories of third parties with whom we share or sell: we do not sell personal information, including that of California residents. For business purposes (rendering ads), we share limited device identifiers with Google AdMob, which Google may use for cross-context behavioural ad targeting unless you have opted out via Settings → Google → Ads → Opt out of Ads Personalisation at the OS level. We therefore treat the AdMob flow as a "share" under the CPRA. We do not otherwise share personal information with third parties.

California consumer rights:

  • Right to know — what personal information is collected, used, shared, or sold. Up to two free requests per 12-month period. Submit via [email protected].
  • Right to delete — personal information collected about you, subject to the standard CCPA exceptions. Same channel.
  • Right to opt out of sale or sharing — by definition, no sale. The practical "share" is the AdMob flow described above, and the OS-level ad-personalisation toggle (Settings → Google → Ads → Opt out of Ads Personalisation) is the canonical opt-out. You may also exercise this right preemptively via [email protected].
  • Right to limit use of sensitive personal information — we do not collect sensitive personal information under CPRA; this default applies.
  • Right to non-discrimination — exercising any of these rights will not affect your access to Hoptimise in any way.
  • Right to correct inaccurate personal information — same channel.

We respond to verifiable consumer requests within 45 days, extendable to 90 days with notice, as required by California regulations.

12.6 Automated decision-making (UK GDPR / EU GDPR Article 22)

Gemini's drink identification generates a structured JSON response that the app writes into the form fields of your drink-entry modal. This is automated processing. You can change any field before saving, so the processing is not solely automated within the meaning of Article 22(1): you retain full authority over the final entry. If a suggestion is wrong, edit or delete it before tapping Save — the app will not log a drink against a suggestion you have not personally confirmed.

12.7 Data breach notification

Hoptimise itself does not hold your personal information (see §2 — everything is on-device, and we have no server). If a security incident ever affects a third party that processes your data on the app's behalf (Gemini, MapTiler, AdMob, Maps), we will:

  1. Notify affected users via the support email channel within 72 hours of becoming aware of the incident;
  1. Surface the breach and recommended mitigations in the next app release;
  1. Disable the affected feature if the vendor's breach materially compromises privacy until the vendor confirms remediation.

12.8 Privacy policy accessibility

This policy is hosted at the URL configured by EXPO_PUBLIC_PRIVACY_POLICY_URL (default https://goodbyemyliver-p970sab.gamma.site/privacy-policy). It is accessible from any web browser without the app installed, satisfying the Google Play User Data Policy requirement that the privacy policy be available both inside the app and outside it.


Acknowledgements

This app uses the following open-source / third-party components. Their respective privacy practices are governed by their own policies and apply only when the relevant feature is in use:

  • react-native-maps (MIT) — Map view
  • react-native-mmkv (MIT) — on-device storage
  • react-native-google-mobile-ads (Apache-2.0) — ad serving
  • expo-location (MIT) — GPS helper
  • expo-notifications (MIT) — push + local notifications
  • expo-image-picker (MIT) — camera / library access
  • expo-text-extractor (Apple Vision / Google ML Kit wrapper) — on-device OCR
  • fuse.js (Apache-2.0) — local fuzzy search
  • Google AI Studio ("Gemini") — online AI identification
  • MapTiler Cloud — reverse geocoding
  • Frankfurter — exchange-rate data
Made with