Checking admin access…
Go to loginDashboard
Sign-in counts are unique user records based on lastSignInAt, not the number of sign-in events. Older sign-ins and users without activity records are not counted.
Products (data/shop.csv)
Changes here are kept in this page only until you download the CSV or commit it to GitHub below. The live shop updates after GitHub Pages redeploys (usually a minute or two).
| ID | Title | Price | Category | Status | Actions |
|---|
Export files — not publication
Download each file below, including the instructions. Upload images at the exact displayed repository paths and replace data/shop.csv in the same commit. These images are not yet deployed.
Staged photos
Local previews are not uploads. Save to GitHub below to publish all referenced photos and the CSV together. After a failure, submit again to retry.
Save to GitHub (optional)
Commits the edited CSV and referenced staged photos together with the GitHub API. Needs your explicitly supplied fine-grained personal access token limited to this repository with Contents: Read and write. Firebase admin access does not grant GitHub permission. Enter the token only here, never in chat. It is only kept in this page's memory, sent only to api.github.com, and cleared after a successful commit, signout or account change. Without a token, use Export CSV + photos and upload the files yourself. Product images are public site assets.
User activity
Each signed-in visitor records their own email, last sign-in time and last activity time (at most every 15 minutes) in Firestore userActivity/{uid}. Only admins can read it. Users who haven't signed in since this was deployed won't appear.
Total: not loaded · Filtered: not loaded
| Last sign-in | Last active | UID | Actions |
|---|
Account orders (Firestore)
Default scope: All accounts — every guest and signed-in buyer's orders, including admins' own purchases. Choose Guest accounts or Signed-in accounts to narrow the list. Orders are saved at users/{uid}/orders/{orderId}; guest checkout orders are marked Guest, and older orders without that marker count as signed-in. Item prices and totals come from the buyer's browser; verify them before taking payment. Refresh loads a current snapshot, not a live subscription.
Status changes and deletion affect order records only: no refunds, payments, shipping notifications or stock adjustments. Private JSON exports contain customer data: download only when needed, keep them secure, and never share them publicly.
| Order | Placed | Customer / ship to | Status | Total | Actions |
|---|
Client session log (non-authoritative)
Memory-only counts and lifecycle statuses; no customer details. This is not a server audit log and clears on account change or refresh.
Local demo orders (this browser only)
Local demo orders are browser-local demo data. Before account orders existed, checkout saved demo orders only in the shopper's own browser (localStorage). They were never sent to a server. The table below only shows old demo orders saved in this browser, read-only, for reference; they are not imported into Firestore.
| Order | Date | Status | Items | Total |
|---|
Database backup
Backup includes the current in-memory products (including unsaved edits), all user activity, and the admin whitelist. No credentials are included.
Maintenance
Activity deletion removes tracking records only, never Firebase Auth accounts or admin access. Users can create new activity when they return. Order reset affects only old demo orders in this browser, not Firestore account orders, carts or accounts.
Session audit log
This log lasts only until this page is refreshed. It records successful changes and downloads, not credentials.
| Time | Action | Details | Count |
|---|
Admin users
The person must have signed in to the site at least once (so they appear under User Activity).
| UID | Added | Actions |
|---|
Firestore rules status
Browsers can't read the published rules, so this runs a few read checks that only pass when the rules from firestore.rules are published. Compare the Rules tab in the Firebase Console with the repo file to be sure.