{{ stats?.users ?? '—' }}
Users
{{ stats?.characters ?? '—' }}
Characters
${{ (usage?.cost_usd ?? 0).toFixed(2) }}
Spent (last 30d)

Usage — last 30 days

OperationRequestsTokensCost
{{ op.operation }} {{ op.requests.toLocaleString() }} {{ op.total_tokens.toLocaleString() }} ${{ op.cost_usd.toFixed(4) }}
No activity yet — make your first chat call!

Daily token spend

{{ d.date.slice(5) }}
No daily activity yet.

Recent characters

IDNameUserStageTrustFriendshipCreated
{{ c.id }} {{ c.name }} {{ c.external_id }} {{ c.stage }} {{ c.trust.toFixed(1) }}/10 {{ c.friendship.toFixed(1) }}/10 {{ shortDate(c.created_at) }}
No characters yet.
{{ billingAlert.title }} {{ billingAlert.body }}
Current plan
{{ billing?.plan_name ?? '—' }}
{{ billing.subscription_status }}
Messages this period
{{ (billing?.messages_this_period ?? 0).toLocaleString() }} / {{ billing.messages_included.toLocaleString() }}
resets {{ shortDate(billing.period_end) }}
Snapshot clones
{{ (billing?.snapshots_used_this_period ?? 0) }} / {{ billing.snapshots_included }}
lifetime cap €{{ billing.overage_per_snapshot_eur.toFixed(2) }} / clone over quota unlimited
Balance
€{{ (billing?.balance_eur ?? 0).toFixed(2) }}
€{{ billing.overage_per_msg_eur.toFixed(4) }} per overage msg

Plans

{{ p.name }}

Most popular Current
Free €{{ p.price_eur }}/mo Custom
  • {{ p.messages_included ? p.messages_included.toLocaleString() + ' messages/month' : 'Unmetered' }}
  • {{ p.snapshots_included }} snapshot clone{{ p.snapshots_included === 1 ? '' : 's' }} {{ p.snapshot_lifetime_cap ? ' (lifetime)' : ' / month' }}
  • Unlimited snapshot clones
  • {{ formatFeature(f) }}
  • Overage: €{{ p.overage_per_msg_eur.toFixed(4) }}/msg
  • Snapshot overage: €{{ p.overage_per_snapshot_eur.toFixed(2) }} / clone (charged via Stripe)

Top up balance

Pre-paid credit covers overage past your monthly quota. Charged once, no recurring.

Manage subscription

Change card, view invoices, cancel — Stripe-hosted.

Payment history

DateKindAmountDescriptionInvoice
{{ shortDate(r.created_at) }} {{ r.kind }} {{ r.amount_eur < 0 ? '-' : '+' }}€{{ Math.abs(r.amount_eur).toFixed(4) }} {{ r.description }}
No payment activity yet.

Feature flags

Edit JSON. Saved on Apply.

{{ flagsMsg }} {{ flagsErr }}

Reference — supported flags

{{ flagsHelp }}

API keys

LabelKeyCreatedActive
{{ k.label || '—' }} {{ k.key }} {{ shortDate(k.created_at) }} {{ k.is_active ? '✓' : '—' }}
{{ pgChar.name }} · {{ pgChar.gender || '—' }} {{ pgChar.persona }}
{{ pgEventLabel(e) }}

Relationship

Trust{{ (pgState?.trust ?? 1).toFixed(2) }}/10
Friendship{{ (pgState?.friendship ?? 1).toFixed(2) }}/10
Stage{{ pgState?.relationship_stage ?? 'strangers' }}

Intimate mode

Tenant mode
Consent active {{ pgIntimate.consent_active ? '✓ yes' : '— no' }}
since {{ shortDate(pgIntimate.consent_given_at) }}

Tenant gate is off — even granted consent won't activate intimate mode.

Last reply meta

User intimacy{{ (pgLast?.user_intimacy_level ?? 0).toFixed(2) }}
Reply intimacy{{ (pgLast?.reply_intimacy_level ?? 0).toFixed(2) }}
Intimate blocked{{ pgLast?.intimate_blocked ? 'yes' : 'no' }}
User facts saved{{ pgLast?.user_facts_saved ?? 0 }}
Self facts saved{{ pgLast?.self_facts_saved ?? 0 }}
Tokens (prompt/out) {{ pgLast?.usage?.prompt_tokens ?? '—' }} / {{ pgLast?.usage?.completion_tokens ?? '—' }}

Registered users

EmailTenantPlan Balance30d costvs prev 30d Joined
{{ u.email }} {{ u.tenant_name }} {{ u.plan }} €{{ u.balance_eur.toFixed(2) }} ${{ u.cost_30d_usd.toFixed(4) }} {{ u.delta_pct >= 0 ? '+' : '' }}{{ u.delta_pct.toFixed(1) }}% {{ shortDate(u.joined_at) }}

No registered admins yet.

Total revenue: €{{ adminUsers.totals.revenue_eur.toFixed(2) }}  ·  LLM cost (30d): ${{ adminUsers.totals.cost_usd_30d.toFixed(4) }}  ·  LLM cost (all-time): ${{ adminUsers.totals.cost_usd_all_time.toFixed(4) }}

Pending sign-ups ({{ adminUsers.pending.length }} email(s) sent — awaiting click)

EmailStatus SendsLast sentFrom IP
{{ p.email }} link still valid link expired opened {{ p.status }} {{ p.sends }} {{ shortDate(p.last_sent_at) }} {{ p.last_ip || '—' }}

No pending sign-ups — all magic-link recipients converted.

Clones in the system

Demo (vilow-demo tenant)

{{ adminUsers.clone_stats.demo_snapshot_clones }} successful clone-demo build(s)
Active demo characters in DB: {{ adminUsers.clone_stats.demo_characters }} (auto-deleted after 24h)

User-created (paying tenants)

{{ adminUsers.clone_stats.user_snapshot_clones }} successful Snapshot Import(s)
Total characters (all tenants except demo): {{ adminUsers.clone_stats.user_characters }}

⚠️ Failed snapshot jobs (all tenants): {{ adminUsers.clone_stats.snapshot_failed }}

Demo chat usage (last {{ adminDemoStats.window_days }}d)

Source Events Unique visitors OK 4xx 5xx avg in→out
{{ s.source }} {{ s.events }} {{ s.unique_visitors }} {{ s.ok }} {{ s.client_err }} {{ s.server_err }} {{ s.avg_msg_in || '—' }} → {{ s.avg_msg_out || '—' }}

No demo events recorded in the window.

Block reasons

ReasonCount
{{ r.reason }} {{ r.count }}

Visitors with ≥ 3 rejected requests

VisitorErrorsTotal
{{ v.visitor_id.slice(0, 12) }}… {{ v.errors }} {{ v.total }}

Platform health

Scheduler: {{ adminHealth?.scheduler_running ? 'running' : 'down' }}

JobNext run
{{ j.id }} {{ j.next_run_time || '—' }}

All tenants

IDNameUsersCharsKeys Tokens (lifetime)Cost (lifetime)Created
{{ t.id }} {{ t.name }} {{ t.users }} {{ t.characters }} {{ t.api_keys }} {{ t.total_tokens.toLocaleString() }} ${{ t.cost_usd_total.toFixed(2) }} {{ shortDate(t.created_at) }}

Platform usage — last 30 days

TenantRequestsTokensCost
{{ row.tenant_name }} {{ row.requests.toLocaleString() }} {{ row.total_tokens.toLocaleString() }} ${{ row.cost_usd.toFixed(2) }}