Control Room

VibeSense Ops

Overview

Dashboard

-
Venues (servable / total)
-
Users (total)
-
Active 1d / 7d / 30d
-
Custom Configs

Live-data coverage

Served venues by live-busyness freshness, plus this month's BestTime unique-venue cap usage.

-
Fresh (<24h)
-
Stale (≥24h)
-
Missing
-
Cap used (touched / quota)

Config Status

Custom vs default state per config key. Click a row to open its editor.

Catalog

Venues

Serving cache, cs-server inventory troubleshooting, and venue acquisition in one place.

Venues currently in the Redis serving cache. Click a venue to inspect and edit its cached data.

Read-only troubleshooting view of cs-server's inventory: active and deprecated venues, rejection reasons, and cached data. Rows open the shared venue detail when the venue is in the serving cache.

Choose a status and search.

Search Google Places, choose the exact venue, and add it to the BestTime inventory through cs-server.

Budget: -

Choose a city and search for a venue.

Monthly Budget Config
Danger zone

Run inventory sync pulls every venue already in the BestTime account inventory into Redis. The sync flow currently bypasses the venue eligibility filters, so it can load unwanted (trash) venues into the serving set. Only run it if you know exactly why you need it.

Catalog

Eligibility

One surface for which venues get served: a geo restriction (city circles) and category/name block-lists. Owned by cs-server; edited here as full configs.

Saving is the whole action — no sweep needed

Both sections below are dynamic serving views. Saving replaces cs-server's config and the next projection applies it automatically — restricting and un-restricting alike — to serving within ~2 min. Changes are reversible: widen a circle or unblock a type and matching venues reappear on the next projection.

Geo restriction

Serve only venues inside city circles — a state capital plus a radius. cs-server resolves each capital's coordinates.

⚠ OFF
Serve only venues inside a configured city circle
Off — location is ignored and every venue is served, wherever it is.
Loading…
km
Dots mark where. The rows say how far.

Category & name rules

Block-lists that disqualify venues by Google/BestTime type or name keyword.

source: —

Blocked Google types

Google Places primary types that disqualify a venue (e.g. lodging, gas_station, book_store).

Blocked BestTime types

BestTime venue types that disqualify a venue (e.g. GROCERY_AND_SUPERMARKET).

Hard-blocked name keywords

A venue whose name contains one of these is rejected outright.

Ambiguous name keywords

Keywords that flag a venue as ambiguous for closer review rather than blocking it outright.

Tools

Search Simulator

Run the full venue pipeline with filters and sorting, just like the mobile app.

Filters & Sorting
Settings

App Config

Admin-editable configuration. Changes take effect on the next API request; the mobile app picks most of them up within 15 minutes.

Feature Flags

Toggle features on/off. Changes take effect on next API request.

Busyness Labels

Level thresholds and display labels for venue busyness.

Scoring Weights

Weights used to rank venues in search results.

Insights Thresholds

Thresholds for busyness insight generation.

Busyness Prediction Levels

Numeric thresholds that map busyness scores (0-100) to level indexes (0-4). Used for predicting when venues reach each busyness level.

Similar Venues

Controls venue-to-venue similarity matching. Includes max results, min threshold, category weights (vibe profile), meta weights, and fallback weights (when vibe profile is missing).

Hot Likes

default_ttl_seconds: Fallback TTL for likes when opening hours can't be parsed. radius_meters: Max distance (meters) from venue for a like to be accepted.

Weather Service

redis_ttl_seconds: Cache duration for weather data. forecast_days: How many days of forecast to fetch from Open-Meteo. city_centers: Coordinates for weather fetch points.

Venues Serving & Map

snapshot_ttl_seconds: dataset freshness window (a background refresher rebuilds when it lapses — requests never wait). page_size_default / page_size_max: list page defaults and server caps. map: mobile map tuning served via GET /config — min_marker_separation_dp (minimum on-screen gap between two pins; raise it for a sparser map, lower it for a denser one), debounce_ms (camera-settle wait before markers recompute), markers_stale_seconds (catalog freshness window). The app falls back to bundled defaults when absent.

Live Busyness Refresh

minutes: cs-server's live busyness refresh cadence (BestTime). Valid range 1–120; cs-server applies changes within ~1 minute. Reset to return to the cs-server default (5).

Force Update

Per-platform update gate served via GET /config. Keys are ios and android; each block: min_supported_version (below it ⇒ hard update), min_recommended_version (below it ⇒ soft update), store_url, optional hard_message / soft_message. Versions are x.y.z. An empty object {} turns the gate off. cs-server validates writes; a malformed policy fails open (never blocks the app).

Vibe Translations (EN to PT-BR)

Map English vibe attribute names to Portuguese display labels.

Venue Types

Venue type definitions with label, emoji, and color.

Venue Blacklist

Venues excluded from search results (by name).

Type → Category Mapping

Mapeie qualquer tipo do Google Places ou do BestTime para uma categoria do VibeSense, editando o JSON abaixo. Formato: {"google": {"<tipo>": "<CATEGORIA>"}, "besttime": {"<TIPO>": "<CATEGORIA>"}}. Categorias válidas: BAR, PUB, COCKTAIL_BAR, NIGHTCLUB, KARAOKE, BREWERY, WINERY, COFFEE_SHOP, RESTAURANT, BUFFET, FOOD_DRINK, EVENT_VENUE, LIVE_MUSIC, CASINO, ENTERTAINMENT, PARK, OTHER. A resolução é feita no momento de servir — sem re-buscar locais. As alterações passam a valer no servidor imediatamente e aparecem no app em até ~15 minutos (cache do snapshot de locais).

Salvar envia todo o mapa ao cs-server, que valida (rejeita categorias desconhecidas) e persiste. Vale no app em até ~15 minutos.

Vibe Modes

Configure how each vibe mode filters, sorts, and ranks venues. Changes are picked up by the mobile app within 15 minutes.

Advanced: JSON Editor

Onboarding Tutorial

intro: welcome-slide copy (title, body, next-hint). timings: total animation loop length per slide in milliseconds — lower = faster, higher = slower. The mobile app falls back to its bundled defaults for any key missing or unreadable.

Discovery Points

Configure venue discovery locations. Each point defines a lat/lng center, search radius, and venue limit. The refresh job fetches venues for each point up to its limit, then skips it.

Loading discovery points...
Advanced: JSON Editor
Tools

Enrichment Services

Trigger enrichment jobs on cs-server. Jobs run in the background — you can navigate away and check back later.

Loading jobs...
Photo Cache TTL (days)

How long venue_photos_v1:* entries live in Redis before the daily photo-enrichment cron repopulates them. Google rotates photo tokens periodically; lower = fresher photos but more Place Details API calls. Default 5. Whole-number JSON value, e.g. 5.

People

Users