βPENDING
βAPPROVED
βMERGED
βREJECTED
βTOTAL SUBMISSIONS
Pending
Approved
Merged
Rejected
All
0 selected
βPENDING
βHANDLED
βDISMISSED
βTOTAL REPORTS
Pending
Handled
Dismissed
All
These are the 417 products already live in the app. Editing here does NOT go live automatically β
it generates a replacement line you paste into
PRODUCTS_DB in App.jsx, same id, then you push and redeploy as usual.
π Edited, not yet applied (0)
These are saved on this device only. Copy them all at once when you're ready to paste into
App.jsx β each one replaces the existing line with the same id.
Every product in one place β photo, ingredients, guaranteed analysis, UPCs. Internal reference only; none of this is customer-facing. Tap any card to edit it, which goes through the same edit queue as Live Products.
A record of what's happened here β deletions especially. Stored on this device only, not synced across browsers or team members.
Generate codes for gifted Premium. Someone redeems a code from inside the app (Premium screen β "Have a gift code?")
and their account goes Premium instantly β no Stripe purchase needed on their end. You handle collecting payment
from the gift-giver yourself (a Stripe Payment Link works well), then generate and send them a code here.
βUNREDEEMED
βREDEEMED
βTOTAL ISSUED
Which contest?
+ Start a new contest
After creating one, deploy a copy of the contest site files into a new /[slug] folder β each contest is its own folder under contest.truebowl.app, same pattern as this one.
Contest dates
Everything reads from these β the scoring function stops counting new activity after the end date, and the account screen and public page both switch to "ended" automatically. Leave blank and nothing here is time-bound yet.
Point values
Each contest can run different numbers through the same mechanic β these only affect the contest currently selected above, not any other one.
Sweepstakes entries always exclude both Premium bonuses, no matter what's set here β that stays fixed to keep "no purchase necessary" genuinely true.
π Freeze final standings
Locks in the exact leaderboard right now, permanently β a late submission approval or delayed Premium confirmation can't quietly change who won after this. Do this once, after the end date has passed and everything's had a few days to catch up (approvals, payment webhooks). Announcing winners before freezing risks announcing numbers that later shift.
π² Draw the sweepstakes winner
A proper weighted draw β someone with 8 entries genuinely has 8x the odds of someone with 1, not an equal chance per person. Uses frozen standings if you've taken a freeze; otherwise draws from live (unofficial) numbers.
Add a participant
β
TOTAL CHECKS (ALL TIERS)
β
TOTAL LEADERBOARD POINTS
Points come from: referrals who've checked a food Β· referrals gone Premium Β· the referrer's own Premium status Β· approved new-product submissions. Exact values are set per contest above. Sweepstakes entries are the same total minus both Premium bonuses, always.