Admin Guide

WOW Outdoor App Admin Guide

Procedures for granting VIP, reviewing earned applications, managing the Supabase backend, and maintaining both user-facing guides. For administrator use only.

โš ๏ธ
Admin Access Only

This page contains Supabase field names, admin procedures, and internal rules. Do not share this URL publicly. Admin key: wow2026admin. Supabase project: itxxaaidtfiqzyrsfmvx.

Contents

๐Ÿ†

VIP System Rules โ€” Quick Reference

Monthly Threshold
100 pts
Points needed in a month to earn next month free
Daily Entry Cap
5/day
Max entries counted toward monthly pts per day
Monthly Cap / Year
6 months
Max free VIP months earnable per calendar year
Lifetime Monthly Cap
5 years
Max total VIP years earnable via monthly system
Annual Cloud Req.
Required
Must hold active Cloud membership to qualify for Annual Earned VIP
Annual Window
Rolling 365
Entry counts measured over any rolling 365-day window โ€” not fixed calendar year
Annual VIP Goal
1,000
Entries in rolling 365d + 150 wildlife + 600 hotspots โ†’ 1 free year (365 days)
Annual โ€” Monthly Pause
Paused
Monthly VIP earn is PAUSED during an Annual Earned VIP year. Lifetime progress still counts.
Annual Max Times
5ร—
Annual earned VIP can be granted up to 5 times per account lifetime
State Bonus
+10 pts
Once per state, per account lifetime โ€” counts toward all three award tiers
Lifetime VIP Goal
10,000
Total entries + 2,000 wildlife + 8,000 hotspots + 70% admin verification
Key Rules Lifetime VIP is never purchasable. Monthly reset fires on the 1st of every month (device-side only). GPS state bonus is once per state per account, forever. Annual Earned VIP requires active Cloud membership. The 365-day earning window for Annual VIP is rolling โ€” it does not follow the calendar year. During an Annual Earned VIP year, monthly VIP is paused but Lifetime progress continues.
๐Ÿ“…

Granting Monthly Earned VIP

When a User Qualifies

  • User emails wowoutdoorapp@outlook.com stating their profile screen shows 100+ pts for the current month.
  • Verify: Ask for a screenshot of their Profile screen showing the monthly VIP progress card with 100+ points.
  • Check: Confirm they have not already earned 6 free months this calendar year, and have not exhausted the 5-year lifetime cap.
  • Critical check: Confirm the user is NOT currently on an Annual Earned VIP year. Check 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.

How to Grant in Supabase

  1. 1 Open Supabase Table Editor โ†’ profiles table.
  2. 2 Find the user by email or username.
  3. 3 Set vip_status = active
  4. 4 Set vip_type = monthly_earned
  5. 5 Set vip_expires_at = the last day of the next calendar month (e.g. if granting in April, set 2026-05-31T23:59:59Z).
  6. 6 Save the record. The user's app will pick up the updated VIP status on next sync.
  7. 7 Reply to the user confirming their VIP has been applied for the month of [month name].
Tip If the user earned VIP for multiple consecutive months, set vip_expires_at to cover the full earned period rather than making multiple updates.
โญ

Granting Annual Earned VIP (1 Free Year)

Eligibility Checklist

  • Active Cloud membership โ€” confirm the user currently holds a Cloud (or higher) subscription. Check 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).
  • 1,000 total entries in a rolling 365-day window โ€” includes fish, pots, wildlife, birds, hunting. GPS state bonus points count toward this. The 365-day window is rolling (any 365 consecutive days), not tied to the calendar year. Ask the user what their start date is and count entries from that date forward in Supabase.
  • 150 wildlife sightings within the same 365-day window โ€” count rows in wildlife_sightings + bird_sightings with created_at within the claimed window.
  • 600 public hotspot posts within the same 365-day window โ€” count rows in hotspots where user_id matches, visibility_scope != 'private', and created_at is within the window.
  • Lifetime cap check โ€” confirm this account has received fewer than 5 annual earned VIP years. Track in your admin log.
  • Not already on Annual Earned VIP โ€” confirm vip_expires_at is not already in the future for a previous annual_earned grant.

How to Grant in Supabase

  1. 1 Open Supabase Table Editor โ†’ profiles table โ†’ find the user.
  2. 2 Set vip_status = active
  3. 3 Set vip_type = annual_earned
  4. 4 Set vip_expires_at = exactly 365 days from today (e.g. if granting April 5 2026, set 2027-04-05T23:59:59Z).
  5. 5 Save. Reply to user confirming 365-day VIP granted, starting today and expiring on [date].
  6. 6 Inform the user: "During your VIP year, monthly VIP points will not accumulate. Your Lifetime VIP progress continues. When your year ends, you can immediately begin working toward your next Annual Earned VIP year."
  7. 7 Increment the user's annual earned VIP year count in your admin records (to track the 5-lifetime cap).
Important The VIP year award is 365 days from the grant date โ€” it is not tied to the calendar. A user granted in October gets 365 days running from October. Monthly VIP earn is paused for the entire duration of the annual award. Do not grant monthly VIP months to a user whose vip_type = annual_earned and vip_expires_at is in the future.
๐Ÿ‘‘

Granting Lifetime VIP

Eligibility Requirements

  • 10,000 total entries across all activity types. GPS state bonus counts toward this.
  • 2,000 wildlife sightings (wildlife_sightings + bird_sightings tables combined).
  • 8,000 public Network Hotspot posts.
  • Pot events capped at 6,000 โ€” only the first 6,000 pot records count toward the total. Pull the count from Supabase but apply the cap manually.
  • Admin must verify at least 70% of entries as legitimate โ€” review a sample across each activity type to confirm authentic GPS-logged entries. Spot check for duplicate or suspicious mass-entries.

Verification Procedure

  1. 1 Request the user to email a full-screen profile screenshot showing all progress bars at 100%.
  2. 2 Query Supabase to confirm exact counts for each activity table for that user's user_id.
  3. 3 Sample at least 200 entries across all tables โ€” check that GPS coordinates are geographically plausible, timestamps are spread over time, and entries are not duplicates.
  4. 4 If 70%+ pass the plausibility check, proceed. If not, inform the user and specify which entry types failed review.
  5. 5 In Supabase profiles table: Set vip_status = lifetime, vip_type = lifetime, clear vip_expires_at (set to null).
  6. 6 Reply to user with confirmation. Lifetime VIP never expires and is not dependent on subscription renewal.
Important Lifetime VIP must never be sold or offered as a purchase option. It is an earned achievement only. Admin grants via discretion must still be documented internally.
๐Ÿ—„๏ธ

Supabase User Management

Key Database Fields โ€” profiles Table

FieldTypeValues / Notes
vip_statustextnone | active | lifetime
vip_typetextmonthly_earned | annual_earned | subscription | lifetime | admin_granted
vip_expires_attimestamptzSet to null for Lifetime VIP. ISO 8601 string for time-limited VIP.
is_adminbooleanGrants admin features in-app. Use carefully.
user_numberintegerGlobal sequential user number. Auto-assigned at registration โ€” do not edit.
usernametextPublic display name. Unique per account.
emailtextUsed for login and notifications. Matches Supabase Auth email.

Useful SQL Queries

Run these in the Supabase SQL Editor:

  • Find user by email:
    SELECT * FROM profiles WHERE email = 'user@example.com';
  • Count all entries for a user:
    SELECT COUNT(*) FROM fish_catches WHERE user_id = 'UUID';
    Repeat for wildlife_sightings, bird_sightings, crab_pots, hunting_harvests.
  • Count public hotspots:
    SELECT COUNT(*) FROM hotspots WHERE user_id = 'UUID' AND visibility_scope != 'private';
  • List all active VIP users:
    SELECT username, email, vip_status, vip_type, vip_expires_at FROM profiles WHERE vip_status != 'none';

Supabase Access

๐Ÿ“ธ

Screenshot Admin Panel

๐Ÿ“‹

Documentation Maintenance Rule

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.

Required for Every Feature Change

  • User Guide (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.
  • Admin Guide (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.
  • Changelog (Section 8 below) โ€” Add a dated entry summarizing the change.
  • replit.md โ€” Update the project overview if architecture, key files, or major features change.
Rule If a feature is built without updating both guides, the documentation is considered incomplete. Both guides must be updated in the same session as the feature implementation.
๐Ÿ“

Feature Changelog

May 13 2026
OTA update pushed โ€” Update Group ID: 82433c10-b41e-4590-9ceb-2c67fcc622f6. Published to production channel (runtime v1.0.4, Android + iOS). Includes: Birthday Challenge contest card in ContestEventsScreen. EAS Dashboard: https://expo.dev/accounts/daddyofwow/projects/wow-crab-fish-tracker/updates/82433c10-b41e-4590-9ceb-2c67fcc622f6
May 13 2026
Birthday Challenge promotion added. New "Birthday Challenge" contest card added to ContestEventsScreen โ€” appears at the top of the contest list. Configuration in constants/contest.ts (BIRTHDAY_CHALLENGE_CONFIG). Countdown to Aug 3, 2026. Milestone VIP rewards (50โ†’1mo, 100โ†’2mo, 150โ†’4mo, 200โ†’6mo VIP for all paid users). Lifetime VIP lottery (1 winner per 50 users reached). Admin action required on Aug 3: (1) check paid cloud user count in Supabase, (2) determine which milestones were hit, (3) grant VIP to all qualifying users, (4) run random lottery for Lifetime VIP winners and grant manually. Paid account = active subscription โ€” free trial users do not qualify. No Supabase schema changes.
May 13 2026
OTA update pushed โ€” Update Group ID: def5dece-248c-46a8-bb22-0fb86b270e44. Published to production channel (runtime v1.0.4, Android + iOS). Includes: per-user storage scoping and Android tab icon spacing fix. expo-sharing package also installed. Users receive this automatically on next app launch. EAS Dashboard: https://expo.dev/accounts/daddyofwow/projects/wow-crab-fish-tracker/updates/def5dece-248c-46a8-bb22-0fb86b270e44
May 12 2026
Per-user AsyncStorage scoping โ€” shared-phone isolation. All local storage keys are now namespaced per cloud user ID (e.g. @crab_pots_<userId>). Two people sharing one Android phone with different cloud accounts now have completely separate data. Also: the first cloud user to log in after this update has their existing unscoped data automatically migrated to their scoped keys (one-time, device-level migration flag @wow_storage_migrated_v2); subsequent accounts start fresh. Logout now clears both unscoped and scoped keys. Admins also now see network hotspots (fixed isVip || isAdmin gate). Files changed: utils/userSession.ts (new), utils/storage.ts, utils/monthlyVipEarn.ts, utils/stateBonus.ts, contexts/DataContext.tsx, contexts/HotspotsContext.tsx, contexts/AuthContext.tsx. No Supabase schema changes. No admin procedure changes needed.
May 02 2026
New builds โ€” v1.0.2 iOS Build 39, Android versionCode 79. iOS Build 39 (v1.0.2) submitted to App Store Connect via EAS Submit. Android Build 79 (v1.0.2) queued in EAS โ€” upload to Google Play Console required manually. Both builds include all features since v1.0.1: WA boundary overlays (Marine Areas + GMUs), Foraging Tracker, contest email confirmation, admin user-number lookup, Down Syndrome Awareness ribbon on website.
May 01 2026
Contest โ€” auto-email to contestant after entry credited + admin user-number lookup. New /api/send-contest-email endpoint added to website/server.js. Sends a styled confirmation email (amber theme, "+N Screenshots Credited" callout box) to the contestant's email after admin credits entries. AdminContestScreen.tsx updated: (1) User Number Lookup box added at top of Add Entry modal โ€” admin enters a cloud user number, taps Lookup, and email/name/username auto-fill from the profiles table. (2) sendContestEmail() called automatically after successful addOrUpdateEntry(). No Supabase schema changes. Website must be published to make the email endpoint live in production.
May 01 2026
Website โ€” "Our Story" bio section + Down Syndrome Awareness ribbon added. New Section 18 (WA Boundary Maps) added to website/guide.html. New "Why I Built WOW" personal story section added to website/index.html (id="story") with two-column layout (sidebar + narrative), linked as "Our Story" in desktop and mobile nav. Down Syndrome Awareness ribbon (blue/yellow SVG, links to ndss.org) placed in three locations: story sidebar badge, callout box after the daughter paragraph, and footer above copyright line. No Supabase or app changes.
May 01 2026
WA Boundary Overlays added โ€” Marine Areas & Hunting GMUs on all map screens. New constants/washingtonBoundaries.ts contains all 13 WA WDFW Marine Areas (MA 1โ€“13) and 20 major Hunting Game Management Units (GMUs) as polygon coordinate arrays. New components/BoundaryOverlay.tsx exports BoundaryPolygons (renders colored polygons inside MapView; no-op on web) and BoundaryToggleControls (toggle buttons + info legend modal). Toggle buttons appear on the right of each map (or left for TrackMapView to avoid collision with existing controls). Active state: Marine Areas = blue (#0066cc), GMUs = orange (#cc6600). Tapping a polygon shows a callout with name, description, and WDFW disclaimer. Info button opens a scrollable legend listing all visible areas. Screens updated: FishMapScreen.tsx, HuntingMapScreen.tsx, screens/MapScreen.tsx (shellfish), components/TrackMapView.native.tsx. MapComponents.web.tsx updated to export Polygon stub; MapComponents.d.ts updated with Polygon type. All boundaries are approximate โ€” disclaimer shown in-app and in Section 18 of the user guide. No Supabase changes. No new dependencies.
Apr 29 2026
Foraging Tracker added โ€” new bottom tab (leaf icon). New ForagingScreen.tsx with All / Plants / Mushrooms filter tabs, AI identification (Gemini identifyForagingFromImage), and log form fields: photo, AI ID, category, name, scientific name, edibility rating, quantity, notes, GPS location. Edibility ratings: Edible / Use Caution / Toxic / Unknown (color-coded green/amber/red/gray). AI returns species, scientific name, confidence, edibilityRating, edibilityNotes, description, habitat, and seasonality. New ForagingStackNavigator.tsx. ForagingTab added to MainTabNavigator.tsx. ForageFind and EdibilityRating types added to types/pot.ts. identifyForagingFromImage() added to services/geminiAI.ts. 20-species reference dataset added to constants/foragingData.ts covering common Pacific Northwest edible, caution, and toxic plants and mushrooms. Safety disclaimer banner shown in-app and on the website guide. Finds stored locally in AsyncStorage (@forage_finds key). Section 17 (Foraging Tracker) added to website/guide.html including safety rules, edibility table, logging steps, and common PNW species table. Admin guide: no Supabase changes, data is local only.
Apr 29 2026
User Guide updated โ€” Sections 15 & 16 added; Guide now downloadable. Section 15 (Contests & Points System) added to website/guide.html covering all four active contests (Network Post, Screenshot, Referral, Early Sign-Up) with full step-by-step instructions, the Screenshot Featured 2-point bonus rule, prize structure, and the Apple/Google disclaimer. Section 16 (Captain Trip Guide) added covering how captains log group events (fish/wildlife), the photo requirement (person + catch in same frame), participant verification rules, false-reporting consequences, and a points summary table. Download/Print button added to guide hero section (window.print() + /guide/download file-download route). A /guide/download route added to website/server.js serving the guide as a downloadable HTML file. In-app ContestEventsScreen updated: Screenshot Contest description mentions the 2-pt Featured Bonus; Network Post Contest description mentions Captain Trip points and Screenshot Featured bonus; Captain Trip Guide card added (Coming Soon state) with rules summary; "Full Contest & Points Guide" link button added at bottom of screen opening wowoutdoorapp.com/guide#contests. User Guide nav link made green+bold on main website. Captain Trip event feature (Supabase table, screen, admin tab) not yet built โ€” planned for next build.
Apr 27 2026
Navigation โ€” Insects dedicated tab + Events moved to Profile. Insects now have their own bottom-tab entry (ladybug icon) giving InsectTrackerScreen a permanent home in the main navigation. The Events (Contests & Events + Community Leaderboard) tab has been removed from the bottom bar and both screens are now accessible from Profile โ†’ Friends & Sharing section. InsectTrackerScreen now supports sharing sightings as community Hotspots (globe icon on each sighting card, using wildlife_sighting source type โ€” no SQL changes required). Wildlife Tips card updated with an Insect Tracker navigation note. User guide updated for both changes.
Apr 25 2026
Bird Tracker โ€” Bird Type category field added. A new "Bird Type" dropdown was added to the Bird Tracker log form. Preset options: Raptor, Songbird / Passerine, Waterfowl, Shorebird / Wader, Seabird / Waterbird, Owl, Game Bird, Corvid, Hummingbird, Woodpecker, Other. Selecting "Other" reveals a text box for a custom label. The selected type is saved to BirdSighting.birdType, displayed as a colored tag on each sighting card, and shown in the Bird Map popup. Editing a sighting correctly restores the saved type. No database schema changes required.
Apr 25 2026
Bird & Insect Tracker โ€” "Other" behavior/habitat now accepts custom text. When a user selects "Other" from the Behavior or Habitat options in the Bird Tracker or Insect Tracker log form, a text input now appears immediately below so they can type exactly what they observed. The custom text is saved as the behavior or habitat value (e.g. "Preening" instead of just "Other"). Editing a previously saved Bird sighting with a custom value correctly restores it into the "Other" text field. No database schema changes required.
Apr 24 2026
Android Tester Recruitment section added to website. New full-width section added to index.html (id="android-testers") recruiting Android/Gmail users as Google Play testers. Section includes 4-step how-it-works flow, rewards panel (Lifetime VIP + contest access + Founding Member recognition), and a pre-filled mailto CTA button sending to wowoutdoorapp@outlook.com. Nav link added to desktop nav and mobile menu. To process a tester: receive their email, add their Gmail to the Google Play internal test track, send them the install link, then once they confirm testing is complete grant Lifetime VIP via admin panel.
Apr 24 2026
Insect Tracker โ€” A-Z Collection tab added. A new "Collection" tab was added to the Insect Tracker screen alongside the existing "Tracker" tab. The Collection view displays all logged insect species sorted A-Z in a contacts-style SectionList with sticky letter headers. Each entry shows species name, total count spotted, and date last seen. A letter sidebar on the right edge lets users tap any highlighted letter to jump directly to that section. Empty-state shown when no sightings are logged yet.
Apr 24 2026
Insect Tracker added + Heron species added. New Insect Tracker screen added to the Wildlife section with AI identification powered by Gemini (identifyInsectFromImage). Users can photograph insects and get species name, scientific name, confidence, habitat, and size range. Insects logged as wildlife sightings with category "insect". New "Insects" stat card added to Wildlife overview. Insect filter added to Wildlife Map. Insect category added to Statistics screen wildlife breakdown. Green Heron and Black-crowned Night Heron added to the Air species list. Species list now includes 19 insect species common to the Pacific Northwest.
Apr 16 2026
App live on Apple App Store. Website updated to reflect launch. iOS Build 28 approved by Apple and is now publicly available on the App Store (ID: 6760270300). Website updated: Android Beta Testers section removed, App Store button now links to live listing, hero and download buttons updated, Google Play button updated to "Coming Soon." Navigation links for Android Beta removed.
Apr 15 2026
iOS Build 28 + Android Build 68 submitted โ€” first builds with RevenueCat SDK working. Submitted to App Store Connect and Google Play. RevenueCat SDK (react-native-purchases) properly baked in. All 6 subscription products mapped in Default offering. iOS Build 28 submitted via eas submit.
Apr 11 2026
RevenueCat SDK installed โ€” root cause of subscription rejection fixed. Apple rejected Build 26 (Guideline 2.1b) because react-native-purchases SDK was never installed in the project. SubscriptionContext silently fell back to mock mode every build. Fixed: (1) installed react-native-purchases package, (2) corrected Android production key in app.json (was old test key). New builds 27/68 required to ship fix. User also must verify Paid Apps Agreement is accepted in App Store Connect โ†’ Business.
Apr 11 2026
Android tester requirements updated. The #android-beta section now lists numbered test requirements: (1) Gmail account required, (2) join via the provided Google Play test link, (3) create or log in to a WOW cloud account in the app, (4) complete additional tasks that will follow during the 14-day period. All steps must be completed to earn the 1-year VIP reward. Email apply flow unchanged (wowoutdoorapp@outlook.com).
Apr 11 2026
Android tester recruitment page updated โ€” 1-year VIP reward. The #android-beta section on the homepage now advertises a 1-year free VIP membership ($94.99 value) to any Android user who completes all steps during the 14-day Google Play test. Old sign-up form removed; interested testers now email wowoutdoorapp@outlook.com directly. Android Build 67 and iOS Build 26 submitted to EAS with Gemini AI model updated to gemini-2.5-flash.
Apr 9 2026
Edit feature added to all entry types. Fish catches, wildlife sightings, and bird sightings now have a pencil edit icon on every card (alongside the existing hunting harvest edit). Entries already shared to the WOW network hotspot show a lock icon and cannot be edited. All edit flows reuse the existing add modal, pre-populated with the entry's current data. Guide updated with editing instructions for all entry types.
Apr 9 2026
Hunting harvest edit feature added. Users can now tap the pencil icon on any harvest card to edit species, method, weight, points, gender, tag number, notes, photos, and GPS pin. Harvests that have been shared to the WOW network as a hotspot are locked (lock icon shown, edit disabled) to preserve data integrity. Guide updated with editing instructions. No new fields required โ€” uses existing updateHuntingHarvest from DataContext.
Apr 8 2026
Android Beta Tester Recruitment section added to website. New section at #android-beta collects name, Gmail address, and device info from Android users who want to beta test. Signups email wowoutdoorapp@outlook.com via /api/android-tester. Nav links added. Required to build Google Play closed testing pool for production access.
Apr 8 2026
Apple resubmission completed. All 6 IAP products (VIP Monthly/6mo/Annual + Cloud Monthly/6mo/Annual) had metadata completed (display names, descriptions, screenshots, availability). Products set to "Ready to Submit." All 6 attached to Version 1.0. Resubmitted for App Review via Build 24.
Apr 5 2026
Annual Earned VIP rules updated. Cloud membership now required. Entry window changed to rolling 365 days (not calendar year). VIP award is 365 days from grant date. Monthly VIP earn paused during Annual VIP year โ€” only Lifetime points accumulate. Both guides updated.
Apr 5 2026
GPS State Bonus simplified. Single lifetime-per-state bonus (not monthly-resetting). Same +10 pts counts toward monthly, annual, and lifetime VIP goals. Never counted more than once per award.
Apr 5 2026
Monthly Earned VIP added. 100 pts/month threshold. Max 5 daily entries count. Max 6 earned months/year. Max 5 lifetime VIP years via this system. All resets on the 1st.
Apr 5 2026
Annual Earned VIP updated. Now earnable up to 5 times lifetime (previously once only). Rules unchanged: 1,000 entries + 150 wildlife + 600 hotspots โ†’ 1 free year.
Apr 5 2026
GPS State Bonus (original) launched. +10 pts per new state discovered while logging, once per account lifetime, via reverse geocoding. Counts toward Annual Earned VIP and Lifetime VIP totals.
Apr 5 2026
Android Build 65 completed. AAB downloaded by user. Awaiting Google Play Production track access approval before upload.
Apr 3 2026
iOS Build 24 completed. Subscription screen fix (removed "development build" message + "Admin Features"). Ready to swap in for Build 22 once rejected.
Mar 2026
VIP pricing set. VIP: $9.99/mo ยท $49.99/6mo ยท $94.99/yr. Cloud: $4.99/mo ยท $24.99/6mo ยท $44.99/yr. Managed via RevenueCat.
Admin questions? Email wowoutdoorapp@outlook.com