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.
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.
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.
| What | Where it comes from | Notes |
|---|---|---|
| Email address | You, at sign-up; or from Apple or Google if you use those | With Sign in with Apple you may choose to hide your real address; we then receive a private relay address |
| Password | You (we never see it in plaintext — it is hashed by our authentication provider) | Email/password sign-in only |
| Name given at sign-up | You | |
| Authentication provider identity | Apple or Google, if you use them | We 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.
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.
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.
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.
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.
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.
We do not request location, contacts, calendar, health data, or push-notification permission.
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.
| Purpose | Data used | Legal basis (GDPR/UK GDPR, where it applies) |
|---|---|---|
| Create and operate your account | Account info | Performance of a contract |
| Identify cards you scan and return prices | Scan images, scan events | Performance of a contract |
| Train and improve our card-recognition models | Scan images and confirmed labels | Legitimate interests — see Section 11 for how to object |
| Run the social features | Profile, posts, comments, likes, follows, DMs | Performance of a contract |
| Keep the Service safe: moderation, anti-abuse, rate limiting, enforcing our Terms | Content you submit, reports, moderation records | Legitimate interests; legal obligation |
| "Who's That Pokémon" | Your photo (transient) | Consent — you choose to use the feature |
| Understand and improve the product | Analytics, session replay, crash data | Legitimate interests |
| Support and communication with you | Account info, your messages to us | Performance of a contract; legitimate interests |
| Comply with law and respond to lawful requests | As required | Legal obligation |
We do not sell your personal information, and we do not share it for cross-context behavioural advertising.
We use the following service providers. They process data on our behalf under contract, and each has its own privacy policy.
| Provider | What they receive | Purpose |
|---|---|---|
| Supabase | Account and authentication data; profiles; posts, comments, likes, follows, DMs; moderation records | Authentication and primary social database |
| Google Cloud Platform | Scan images, post images, avatar and cover images, transaction photos; our backend server and database | Hosting and storage |
| OpenAI | The text of posts and comments, and the image bytes of images attached to posts | Automated content moderation (omni-moderation-latest) |
| Anthropic | The photo you take in "Who's That Pokémon" | Determining your Pokémon lookalike (Claude vision model) |
| PostHog | Analytics events, device/app context, display name, account UUID, session replays (images and text inputs masked), crash reports | Product analytics and error tracking |
| Resend | Your email address and the contents of authentication emails | Sending sign-up, verification, and password-reset emails, as the mail relay configured behind our authentication provider |
| Apple / Google | Sign-in requests, if you use those methods | Authentication |
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.
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.
| Data | Visibility |
|---|---|
| Email address | Private. Never shown to other users; not stored on the profile record |
| Display name, handle, bio, location, link | Public to every signed-in user, including guest sessions |
| Avatar and cover images | Publicly readable on the internet by anyone with the image URL, even signed out. The URL contains your account UUID |
| Posts, post images, comments | Public to every signed-in user. Not followers-only; there are no per-post privacy settings today |
| Likes and follows | Public to every signed-in user |
| Direct messages | Private to the participants — but readable by us; not end-to-end encrypted |
| Blocks and mutes | Private to you |
| Reports you file | Private — visible only to our moderators. Other users are not told who reported them |
| Collection, cost basis, sales, transactions, imports | Private to your account |
| Card scan images and scan history | Not 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.
To keep the Service safe, content you submit is reviewed automatically and by humans:
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.
| Data | Retention |
|---|---|
| Account, profile, collection, scans | Until you delete your account (see Section 9) |
| Card scan images | Retained 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 post | Deleted 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 published | Deleted after 14 days |
| Posts, comments, and direct messages you delete | Soft-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 images | Overwritten when you replace them; deleted when you delete your account (see Section 9) |
| Moderation records: reports and moderator actions | Retained after the reported content or account is deleted, so that enforcement history survives |
| Analytics and session replays | Session 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" photos | Not retained by us at all |
| Waiting-list and access-grant email records | Retained while the invite/access gate operates, including after account deletion (see Section 9) |
| Database backups | Our 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.
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.
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.
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.
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.
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.
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