Procedures for granting VIP, reviewing earned applications, managing the Supabase backend, and maintaining both user-facing guides. For administrator use only.
vip_type in Supabase โ if it is annual_earned and vip_expires_at is in the future, the monthly earn is paused for this account. Do not grant overlapping monthly VIP during an active Annual Earned VIP period.profiles table.email or username.vip_status = activevip_type = monthly_earnedvip_expires_at = the last day of the next calendar month (e.g. if granting in April, set 2026-05-31T23:59:59Z).vip_expires_at to cover the full earned period rather than making multiple updates.vip_status or subscription records. Free-plan users do not qualify. If they are on a paid VIP subscription, they also qualify (Cloud is the minimum).wildlife_sightings + bird_sightings with created_at within the claimed window.hotspots where user_id matches, visibility_scope != 'private', and created_at is within the window.vip_expires_at is not already in the future for a previous annual_earned grant.profiles table โ find the user.vip_status = activevip_type = annual_earnedvip_expires_at = exactly 365 days from today (e.g. if granting April 5 2026, set 2027-04-05T23:59:59Z).vip_type = annual_earned and vip_expires_at is in the future.user_id.profiles table: Set vip_status = lifetime, vip_type = lifetime, clear vip_expires_at (set to null).| Field | Type | Values / Notes |
|---|---|---|
| vip_status | text | none | active | lifetime |
| vip_type | text | monthly_earned | annual_earned | subscription | lifetime | admin_granted |
| vip_expires_at | timestamptz | Set to null for Lifetime VIP. ISO 8601 string for time-limited VIP. |
| is_admin | boolean | Grants admin features in-app. Use carefully. |
| user_number | integer | Global sequential user number. Auto-assigned at registration โ do not edit. |
| username | text | Public display name. Unique per account. |
| text | Used for login and notifications. Matches Supabase Auth email. |
Run these in the Supabase SQL Editor:
SELECT * FROM profiles WHERE email = 'user@example.com';SELECT COUNT(*) FROM fish_catches WHERE user_id = 'UUID';wildlife_sightings, bird_sightings, crab_pots, hunting_harvests.SELECT COUNT(*) FROM hotspots WHERE user_id = 'UUID' AND visibility_scope != 'private';SELECT username, email, vip_status, vip_type, vip_expires_at FROM profiles WHERE vip_status != 'none';itxxaaidtfiqzyrsfmvxSUPABASE_SERVICE_ROLE_KEY environment secret in Replit.wow2026admin (passed as ?key= query parameter).uploads/ folder on the Replit server. After uploading, screenshots appear on the homepage immediately without redeployment.Every new feature, rule change, or system update to the WOW Outdoor App must be reflected in both guides before the change is considered complete.
website/guide.html) โ Update or add the relevant section covering the feature from the user's perspective. Include step-by-step instructions, screenshots descriptions, and tips where applicable.website/admin-guide.html) โ Update the relevant admin procedure, rules reference table, field list, or changelog entry. Any feature that changes admin workflows, VIP rules, database fields, or earn thresholds must be updated here.