Ekalight Privacy Policy

Effective date: August 12, 2026 · Last updated: August 12, 2026

This policy supersedes the earlier Ekalight privacy policy (June 2026), which predates the social features described below.

1. Who we are

Ekalight — operated by Stephen Chan, an individual sole proprietor doing business as Ekalight ("Ekalight", "we", "us") — runs the Ekalight mobile app (bundle identifier com.ekalight.app) and its backend services (the "Service"). We are the data controller for the personal data described here.

Contact: team@ekalight.com
Postal address: available on written request to the email above.

The Service is operated from the United States and is directed at users in the United States. We have not appointed an EU or UK representative or a Data Protection Officer.

2. What Ekalight does, in one paragraph

Ekalight scans trading cards with your phone camera, identifies them, shows prices and price history, and lets you track a collection and its value. It also has a social layer: public profiles, posts with images, comments, likes, follows, and direct messages. It includes a novelty feature, "Who's That Pokémon", that takes a photo of you and finds the Pokémon you most resemble.

3. Information we collect

3.1 Account information

WhatWhere it comes fromNotes
Email addressYou, at sign-up; or from Apple or Google if you use thoseWith Sign in with Apple you may choose to hide your real address; we then receive a private relay address
PasswordYou (we never see it in plaintext — it is hashed by our authentication provider)Email/password sign-in only
Name given at sign-upYou
Authentication provider identityApple or Google, if you use themWe request name and email scopes from Apple
A unique account identifier (UUID)Generated by us

We also keep a copy of your email address on our own backend, separately from the authentication system, so we can operate the invite/access gate. If you join a waiting list before you have an account, we store the email address you gave us.

Guest sessions. You can start using the scanner without registering. We create an anonymous account identifier for you at that point. A guest session has no email address, no profile, and cannot post, comment, or message.

3.2 Profile information (public)

If you complete a profile, we store and publicly display: display name, handle, bio, location (free text you type — not device location), a link you provide, avatar image, and cover image. See Section 6 for exactly how public each of these is.

We do not display your email address to other users, and there is no email field on the profile record at all.

3.3 Social content

3.4 Card scans

When you scan a card:

We use your scan images to train and improve our card-recognition models. This is a primary purpose of retaining them, not an incidental one.

A small number of authorised human reviewers can view scan photographs, including scans taken by other users, in order to label them correctly for model training. Reviewers are an explicitly configured allowlist of our own people; the review tool is authenticated and is not open to ordinary users. Reviewers see the card photograph and the candidate matches, not your name or email.

The captured image itself is stripped out of the scan record we store, but the rest of the scan request is kept, including text our optical character recognition read off the card and any set or collector-number hints.

Scan images are stored under a date-and-scan-id path that does not contain your account identifier; the link between you and a scan lives in our database.

Multi-angle labelling captures. If you use the deliberate card-labelling flow, the photographs from each angle are stored the same way and are explicitly collected for training.

3.5 Your collection and financial records

Everything you record about your collection is stored on our backend and is private to your account: cards and quantities, condition, grade, grader, certification number, which named collection a card is in, wishlist and likes, cost basis and purchase prices, sales you log (sale price, payment method, profit, notes), a standalone transaction ledger (amount, note, and an optional photo you attach, stored privately), listing URLs and prices you mark, and any spreadsheet you import (we retain the imported rows, including the raw values).

We also record, per card page you open, that you viewed it (once per day) — this drives the "people watching" count. It is not shown to other users as a list of who viewed what.

3.6 "Who's That Pokémon" — your photo

This is the feature where the code and a generic privacy template diverge most, so we are explicit:

So: we do not store your photo, but we do send it to a third party to process it. If you are not comfortable with that, do not use this feature.

3.7 Analytics and crash reporting

We use PostHog (US region) for product analytics. This is what is and is not sent:

Sent as person properties: your display name, whether you have set a display name, whether admin tooling is enabled, whether labelling tooling is enabled, and how many authentication providers are linked to your account.

Your email address is never sent to PostHog. This is a deliberate design decision enforced in code.

Identifier: events are attached to your account UUID.

Also collected automatically: app version and build, platform, device manufacturer, device model, device type, whether it is an emulator, OS name and version, locale, and timezone; app-lifecycle events (opened, installed, updated, backgrounded); coarse screen names (for example scan, portfolio, card_detail); and product events such as sign-in success or failure, scan started/succeeded/failed, artifact upload outcomes, adding a card to inventory, and opening a pricing link.

Session replay is enabled. We record the flow of your session — screens, navigation, and interactions — to understand where people get stuck. All images are masked and all text inputs are masked, so card photos, thumbnails, and anything you type into a field (including email and password) are blocked out in the recording. Network payloads are not captured.

Crash reporting is handled by PostHog rather than a separate service. When the app hits an uncaught error we send the error message and stack trace.

Before an event leaves your device we run a scrubber that redacts values under keys including email, password, token, image data, URLs, prices, card names, and OCR text, and strips any local file path or inline image data.

We do not use advertising identifiers (IDFA), we do not use App Tracking Transparency, and we do not track you across other companies' apps or websites.

3.8 Device permissions

We do not request location, contacts, calendar, health data, or push-notification permission.

3.9 What we do NOT collect

3.10 Data held by our authentication provider

Our authentication provider (Supabase, built on GoTrue) maintains its own session and audit records, which by default include IP addresses and user-agent strings for sign-in events and sessions. We do not add to or query these for product purposes, but they exist, and Supabase retains them for a limited period under its own policies.

4. Why we use your information

PurposeData usedLegal basis (GDPR/UK GDPR, where it applies)
Create and operate your accountAccount infoPerformance of a contract
Identify cards you scan and return pricesScan images, scan eventsPerformance of a contract
Train and improve our card-recognition modelsScan images and confirmed labelsLegitimate interests — see Section 11 for how to object
Run the social featuresProfile, posts, comments, likes, follows, DMsPerformance of a contract
Keep the Service safe: moderation, anti-abuse, rate limiting, enforcing our TermsContent you submit, reports, moderation recordsLegitimate interests; legal obligation
"Who's That Pokémon"Your photo (transient)Consent — you choose to use the feature
Understand and improve the productAnalytics, session replay, crash dataLegitimate interests
Support and communication with youAccount info, your messages to usPerformance of a contract; legitimate interests
Comply with law and respond to lawful requestsAs requiredLegal obligation

We do not sell your personal information, and we do not share it for cross-context behavioural advertising.

5. Who we share information with

We use the following service providers. They process data on our behalf under contract, and each has its own privacy policy.

ProviderWhat they receivePurpose
SupabaseAccount and authentication data; profiles; posts, comments, likes, follows, DMs; moderation recordsAuthentication and primary social database
Google Cloud PlatformScan images, post images, avatar and cover images, transaction photos; our backend server and databaseHosting and storage
OpenAIThe text of posts and comments, and the image bytes of images attached to postsAutomated content moderation (omni-moderation-latest)
AnthropicThe photo you take in "Who's That Pokémon"Determining your Pokémon lookalike (Claude vision model)
PostHogAnalytics events, device/app context, display name, account UUID, session replays (images and text inputs masked), crash reportsProduct analytics and error tracking
ResendYour email address and the contents of authentication emailsSending sign-up, verification, and password-reset emails, as the mail relay configured behind our authentication provider
Apple / GoogleSign-in requests, if you use those methodsAuthentication

Card data providers. We obtain card catalogue, reference, and pricing data from Scrydex, PokemonPriceTracker, PriceCharting, and eBay, and currency exchange rates from the European Central Bank. These lookups are made by our servers and are keyed on card attributes — set, number, name, grade — or are bulk catalogue syncs. No user data, account identifier, or user content is sent to any of them. Our eBay access uses an application-level credential, not one tied to you.

TCGplayer receives nothing from our servers at all; we only use TCGplayer product identifiers as a key to join pricing data.

Marketplace links. When you tap a link to eBay or TCGplayer, you leave the app and that site receives your request directly, including your IP address and whatever their own cookies tell them. We do not send them anything about you.

Other disclosures. We may disclose information when we believe in good faith that it is necessary to comply with law or a valid legal request; to enforce our Terms; to detect, prevent, or address fraud, abuse, security, or technical issues; or to protect the rights, property, or safety of our users, us, or the public. If we are involved in a merger, acquisition, or sale of assets, information may be transferred as part of that transaction; we will notify you if it becomes subject to a materially different policy.

5.1 International transfers

Our infrastructure is hosted in the United States, and our providers are primarily US-based. If you use the Service from outside the United States, your information will be transferred to and processed in the United States. Where transfers from the EU/UK require a legal mechanism, we rely on our providers' Standard Contractual Clauses and, where applicable, their EU-US Data Privacy Framework certifications.

6. How public is each thing?

DataVisibility
Email addressPrivate. Never shown to other users; not stored on the profile record
Display name, handle, bio, location, linkPublic to every signed-in user, including guest sessions
Avatar and cover imagesPublicly readable on the internet by anyone with the image URL, even signed out. The URL contains your account UUID
Posts, post images, commentsPublic to every signed-in user. Not followers-only; there are no per-post privacy settings today
Likes and followsPublic to every signed-in user
Direct messagesPrivate to the participants — but readable by us; not end-to-end encrypted
Blocks and mutesPrivate to you
Reports you filePrivate — visible only to our moderators. Other users are not told who reported them
Collection, cost basis, sales, transactions, importsPrivate to your account
Card scan images and scan historyNot visible to other users. Visible to us, and to our authorised human reviewers who label scans for model training

One consequence worth knowing: because guest sessions are technically authenticated, "visible to signed-in users" is effectively "visible to anyone who installs the app."

A related detail: our sign-up flow can check whether an email address already has an account, and that check can be made without being signed in. This means someone could test whether a given email address is registered with Ekalight. This is a deliberate product trade-off made so that sign-in can route you to the right flow.

7. Content moderation — your content is scanned

To keep the Service safe, content you submit is reviewed automatically and by humans:

  1. A wordlist prefilter checks every post, comment, and direct message against a blocked-terms list at the instant you submit it, and applies rate limits.
  2. An AI moderation pass sends the text of posts and comments, and the image bytes of post images, to OpenAI's moderation model for classification. It runs continuously, typically within minutes of submission. Images stay hidden from other users until they are approved. Direct messages are not sent to the AI pass.
  3. Community reports from other users can hide content automatically once enough distinct people report it.
  4. Human moderators review flagged and reported content and take action — removing content, suspending, shadowbanning, or banning accounts. We act on reports of objectionable content within 24 hours.

We keep records of reports and of moderator actions, including free-text notes written by the reporter and by the moderator, so that we can enforce our rules consistently and defend against abuse of the reporting system.

8. How long we keep information

DataRetention
Account, profile, collection, scansUntil you delete your account (see Section 9)
Card scan imagesRetained while you keep your account, and used for model training; they move to cold storage after 60 days. Deleted when you delete your account (see Section 9)
Post images of a deleted postDeleted 30 days after you delete the post. The delay is a moderation window, so that content cannot be posted and then erased before a human can look at it
Images uploaded but never publishedDeleted after 14 days
Posts, comments, and direct messages you deleteSoft-deleted: the row is marked deleted and hidden, and the text of a deleted comment is moved to a restricted archive that only our backend service can read. This is done so that a deleted comment does not break the replies underneath it and so that evidence behind an open report survives. This archive is not automatically purged today
Avatar and cover imagesOverwritten when you replace them; deleted when you delete your account (see Section 9)
Moderation records: reports and moderator actionsRetained after the reported content or account is deleted, so that enforcement history survives
Analytics and session replaysSession replays are retained by PostHog for approximately 30 days; analytics events are retained for as long as we operate our analytics project
Authentication audit logs (IP, user agent)Retained by our authentication provider (Supabase) for a limited period under its own policies
"Who's That Pokémon" photosNot retained by us at all
Waiting-list and access-grant email recordsRetained while the invite/access gate operates, including after account deletion (see Section 9)
Database backupsOur database is continuously replicated to backup storage for disaster recovery. Backups therefore contain a copy of your data as it was before you deleted it, for a short rolling window (measured in days) before they expire

We do not log your IP address in our own application logs — request logging is suppressed and our structured logs are limited to a whitelist of technical fields. Our hosting infrastructure may keep its own access logs.

9. Deleting your account

You can delete your account inside the app: Account → Delete Account. You may also email team@ekalight.com, or use the instructions at https://stmchan93.github.io/ekalight-legal/delete-account/.

What is deleted:

What is not deleted, and why:

If a step of the deletion fails for a technical reason (for example, a storage service being briefly unreachable), the deletion of your account still completes, the failure is recorded on our side, and we finish removing the remaining data afterwards.

Deletion is permanent and cannot be undone.

10. Children

The Service is not directed to children under 13, and we do not knowingly collect personal information from them. We do not currently ask for a date of birth or operate an age gate. If you believe a child under 13 has provided us personal information, email team@ekalight.com and we will delete it.

11. Your rights and choices

Depending on where you live, you may have the right to access, correct, delete, restrict, or object to our processing of your personal information; to data portability; and to withdraw consent. You may also have the right to lodge a complaint with your local supervisory authority.

In the app you can already: edit or clear your profile fields, delete your posts and comments, block and mute other users, report content, and delete your entire account.

To exercise any other right, email team@ekalight.com. We will respond within the time the applicable law requires. We may need to verify your identity first.

To object to your scan images being used for model training, email us. Note that in practice this means we will need to stop retaining your scans, which may limit the scanner.

We do not sell your personal information or share it for cross-context behavioural advertising, so there is nothing to opt out of on that front.

California and other US state laws. We honour access, deletion, and correction requests from all users regardless of whether a given state law's applicability thresholds are met. Requests go to team@ekalight.com.

12. Security

We protect information with encrypted transport (HTTPS/TLS), row-level access controls in our database so that users can only read what they are permitted to read, private storage buckets for scan images and post images, and authenticated proxies for serving private images. Your session token is stored in the device's secure keychain; in the rare case that the device keychain is unavailable, the app may fall back to storing the session token in ordinary app storage on your device.

No method of transmission or storage is completely secure. We cannot guarantee absolute security.

13. Changes to this policy

We may update this policy. If we make a material change we will give reasonable notice — for example, in the app or by email — and update the "Last updated" date above.

14. Contact

Ekalight (Stephen Chan, sole proprietor)
Postal address available on written request to the email below.

Email: team@ekalight.com

Privacy Policy · Terms of Service · Delete your account · Last updated Aug 12, 2026