Sign in
Single-operator passcode, checked on the server for every action.
Overviewtoday at a glance · the funnel
Funnelvisit → scan → email → paywall → sale
Visitorswhere they come from · what they click
canthion.com/?src=tiktok. Links from apps that strip the referrer show up as "direct".Sales & unlocksreports shown · purchases · grants
/redeem.html. Grant a free report to any email below — they'll get the same unlock link.Every paid report, owner grant and admin grant, newest first.
Separate from pageviews. Owner/test rows are flagged and excluded from the real count.
Store & pricingprices · Stripe links · maintenance
When ON, visitors see the "check your face later" screen and nothing can be bought or scanned. You still see the whole site (with a red bar). The quick toggle is in the top bar too.
Shown everywhere on the site. Set the same amount on the matching Stripe link — Stripe charges what the link says.
Make the actual discount code in Stripe (Coupons → Promotion codes); this strip just announces it.
Paste your Stripe keys and customers pay in a pop-up without leaving canthion.com, then land straight on their report. Keys are stored server-side; only the last four characters are ever shown back. The publishable key is public by design; the secret key never leaves the server.
Used only if the keys above are not set. One link covers buying and gifting. In Stripe set its After payment → redirect to .
Receipts, unlock links, gift codes and the follow-up all go through Resend. Send yourself a test — the exact reason is printed if it fails. Nothing sends until the sending domain is verified: add canthion.com at resend.com/domains, paste the DNS records it gives you into Netlify → Domains → DNS, then test again. To try it before that, set the from-address to onboarding@resend.dev — Resend accepts that one without a domain, but it will only deliver to the address your Resend account is registered with.
Every checkout return is recorded the moment it happens. A row here is money taken that has not been handed over yet — it retries itself every 5 minutes and clears on its own once Stripe is connected. If one is stuck, grant it by hand.
Gift codescreate a code with a message
Peopleaccounts & owners
Emailscaptured addresses · export
Page textchange wording without a redeploy
Advanced: add a raw key (JSON)
Activitylast 200 raw events
Securitychange the passcode
One email to people who ran a free scan and did not buy. Never to buyers, never twice. Checked every 15 minutes.
90 minutes is the default: long enough that they have stopped reading, short enough that the scan is still on their mind. 1440 = one day.
Paste the API key from a billed Google AI Studio project here. It is stored server-side (private table, service-role only) and beats any dashboard secret — no Supabase dashboard needed. Nothing is shown back except the last four characters.
- Owner accounts (free unlimited reports) live under People.
- Google sign-in and delivery emails are configured in Supabase — see the go-live guide.
- This panel talks to Supabase directly; the passcode is checked server-side on every action.