# Product Requirements

## Product name

Product name: `Verj`

Slogan: `Match your pace, find the right place.`

## Problem statement

People choose bars, lounges, and nightlife spots with very little real-time context. Existing maps tell users where a place is and whether it is open, but not whether it currently feels low-key, social, busy, or aligned with the kind of night they want.

Verj solves this by translating anonymous, aggregated activity into venue-level signals that help users decide where to go without revealing who is there.

## Version 1 scope

Version 1 covers nightlife places:

- Bars
- Restaurants with nightlife relevance
- Lounges
- Clubs

## Core user outcomes

- Understand whether a place feels relaxed or energetic.
- Understand whether the crowd is light, moderate, busy, or packed.
- Get age and social signals only when confidence is high enough.
- See whether data is live, prompt-verified, or historical.
- Discover venue specials and notable updates.

## User inputs

### User profile inputs

- Date of birth
- Sex: male, female
- Relationship status:
  - Single and Open to Meeting
  - Single
  - Not Single
- Email
- Place preference:
  - Low-key / relaxed
  - Exciting / energetic

### Passive inputs

- Foreground location
- Background location, only after explicit opt-in and policy acceptance

## Venue card outputs

Each venue card should support:

- Venue name
- Distance from current user
- Signal quality label
- Last update time
- Social vibe
- Crowd size
- Age feel
- Open / closed state and closing time
- Deals or specials

## Translation rules

### Age logic

- Age is grouped internally into age bands.
- Age appears only if there are at least 10 active users for the current venue parameter set.
- The dominant age band must represent at least 55% of the users in scope.
- The UI shows a friendly label such as `Mostly early-mid 20s` rather than a raw age range.

### Relationship status logic

- Relationship status is internal-only data.
- A social-vibe output appears only if there are at least 10 active users for the parameter set.
- If one status reaches at least 55%, show the mapped output.
- If no status is dominant, show `Mixed social vibe` with secondary text such as `Some mingling`.
- If sample size is below threshold, hide the field rather than guess.

### Crowd size logic

- Never show raw counts.
- If there are at least 10 active users, output a translated crowd label.
- If there are 6 to 9 active users, prompt users for a manual crowd check.
- If at least 2 users choose the same crowd label within 15 to 20 minutes, show that translated label.
- Otherwise, use a clearly labeled limited-data or historical fallback.

### Historical fallback

- Historical output must never be presented as live signal.
- If used, the UI must explicitly say it is based on prior patterns or historical behavior.

## Non-functional requirements

- Privacy-first by default
- No user identities exposed
- No raw room counts shown
- No stalking-enabling outputs
- Clear labeling of confidence level
- Mobile-first experience
- Explainable signal language

## Future expansion ideas

- Dog parks
- Music venues and events
- AI-guided social or lifestyle recommendations
- Retail stock and sale alerts
- Deeper venue tools for business operators
