Pup Genius Admin Dashboard

Users
Feedback 0
Live Sessions 0
Crashes 0
Reports 0
Financials
Revenue Estimator
AI Advisor
Barge-In 0
Conversion funnelsignup → active → live session → paid
Retention by signup week
Name Email Provider Platform Plan XP Level Dogs Lessons Live Sessions Bonus Min Joined Last Sync

Live Session Usage & Cost

Costs come from your actual Google invoice. Google bills the project rather than the person, so per-user and per-session figures are the invoice split by what each session consumed. The rates below no longer price anything — they only weight that split, so a video-heavy session is attributed more than a text-heavy one of the same size.
Token ratesweights the invoice split
How sessions ended
Per user
UserSessionsMinutesVoice inVoice outVideo inTextCostCost/minNet revMargin
Per day
DaySessionsMinutesVoice inVoice outVideo inTextCost Cost/min
Individual session events
Pushed from Crashlytics via Firebase Alerts (Crashlytics has no read API, so this is issue-level only). Stack traces, breadcrumbs and the live_session key live in the Crashlytics console — search the issue ID shown on each card.

User reports from the app (profile > Report). App Store guideline 1.2 expects objectionable-content reports to be acted on within 24 hours, so this queue is the half that makes the Report button mean something. Resolving is a record that you looked — it does not block or delete anyone; use Firebase Auth to disable an account.

Free Minute Burn Calculator

* Worst case assumes every NEW free signup burns their whole one-time trial. The trial is once per account, not a monthly allowance, so this is a cost per signup — not a recurring monthly cost per free user. Cost/min defaults to the $0.066 measured against real invoices — adjust if your rate moves.

Estimated Monthly Revenue

Projected Monthly Costs

* Estimates based on current user count and average usage patterns. Costs scale with users.

Downloads to Subscribers Calculator

Simulated Monthly Revenue

Projected Monthly Costs

* Infrastructure costs scale with total users. API costs use weighted averages by plan tier.

Ask me anything about your business — revenue, growth, strategy, pricing, marketing, and more. I have access to your live dashboard data.

Barge-In Troubleshooting

Everything needed to tell whether a tester's device can actually interrupt the trainer — without their console.

Before the tester startsthe four things that waste a call
Before the tester starts — the four things that waste a call
  1. Force-quit and reopen the app. Flags are read once per launch and cached, so a launch older than the toggle above is still running tap-to-interrupt.
  2. Don't use the test phone for the call. An active cellular call owns the mic; the app cannot record over it. Use a second handset.
  3. End with the End button. Diagnostics ride on the session's end event. Force-killing the app writes nothing and shows up as an unmatched start.
  4. If unheard, keep talking past 20 seconds. The gate self-calibrates at 18s and may fix itself mid-session — "Heard (calibrated)" is a different result from "Heard".
Thresholds & how to read the numbers
Gate thresholds in the shipped build
ConstantiOSAndroid
Open gate (SPEECH_ON_RMS)0.0450.12
Close gate (SPEECH_OFF_RMS)0.0120.03
Threshold ceiling0.070.45
Echo floor cap0.0350.12
Self-calibrate after18s, down to 55% of peak, floored at 0.02

iOS runs Apple's Voice-Processing unit — quieter but genuinely cancelling (speech 0.039–0.079, echo peaks 0.030). Android captures UNPROCESSED with no AGC (speech 0.23–0.42, echo 0.125). One set of constants cannot serve both.

Reading the numbers
  • User peak — loudest thing heard while the trainer was silent. On a working device that is the tester's own voice.
  • Gate — the threshold actually in force, after any self-calibration.
  • Peak / gate — well below 1.00x, the bar is too high for that hardware; near zero, the microphone produced nothing and the gate is beside the point. Above 1.00x is necessary but not sufficient: peak is one instant, while opening the gate needs 3 sustained frames (~190ms). A ratio over 1 with a failed verdict means a spike cleared the bar and sustained speech did not.
  • Ambient / close threshold — room noise while nobody spoke, against the level it must fall below to end a turn. Ambient at or above it is the delay bug: noise too quiet to interrupt her is still loud enough to stop the turn ever closing.
  • Voice : echo — how far their voice stands above her echo, measured with no user talking. 2x+ and a threshold fits between them comfortably. Under 1.3x they overlap and no threshold works at all — above the echo is unreachable, below it she interrupts herself. That is a signal problem, not a tuning one.
  • Max hang — longest gap between the tester's last loud frame and the turn actually closing. She cannot begin answering until then, so this is her worst response delay. Hysteresis alone accounts for ~0.8s; multiple seconds is the stall.
Deeper debugging

For per-frame levels on a device you can hold, flip LOG_MIC_LEVEL in app/live-session.tsx and watch the [LiveSession] rms/floor/need triple. Every constant on the left came from it. It prints several times a second, so leave it off otherwise.

Gate tuninglive, no build required

Sessions reporting mic diagnostics