Dashboard
Live-data coverage
Served venues by live-busyness freshness, plus this month's BestTime unique-venue cap usage.
Config Status
Custom vs default state per config key. Click a row to open its editor.
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.
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.
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.
Category & name rules
Block-lists that disqualify venues by Google/BestTime type or name keyword.
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.
Search Simulator
Run the full venue pipeline with filters and sorting, just like the mobile app.
Filters & Sorting
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.
Advanced: JSON Editor
Enrichment Services
Trigger enrichment jobs on cs-server. Jobs run in the background — you can navigate away and check back later.
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.