Honeycomb Schema
The core social/community extension powering rooms, messaging, calls, games, memberships, and moderation.
Community rooms (public, private, or password-protected).
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
creator_id | uuid | NO | — |
name | text | NO | — |
slug | text | NO | — |
description | text | YES | — |
type | text | NO | 'public' |
password_hash | text | YES | — |
category_id | uuid | YES | — |
header_image | text | YES | — |
is_age_restricted | boolean | NO | false |
requires_approval | boolean | NO | false |
is_suspended | boolean | NO | false |
max_members | integer | YES | — |
member_count | integer | NO | 0 |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
room_categories
Section titled “room_categories”Categories for organizing rooms.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
name | text | NO | — |
slug | text | NO | — |
image | text | YES | — |
sort_order | integer | NO | 0 |
created_at | timestamptz | NO | now() |
room_roles
Section titled “room_roles”Permission roles per room with hierarchical levels.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
name | text | NO | — |
level | integer | NO | — |
label_color | text | YES | — |
permissions | jsonb | NO | '{}' |
created_at | timestamptz | NO | now() |
room_members
Section titled “room_members”Room membership with role assignment.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
user_id | uuid | NO | — |
role_id | uuid | NO | — |
joined_at | timestamptz | NO | now() |
banned_till | timestamptz | YES | — |
is_pinned | boolean | NO | false |
referrer_id | uuid | YES | — |
room_invitations
Section titled “room_invitations”Shareable invite codes with expiry and use limits.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
code | text | NO | — |
created_by | uuid | NO | — |
expires_at | timestamptz | YES | — |
max_uses | integer | YES | — |
use_count | integer | NO | 0 |
created_at | timestamptz | NO | now() |
room_messages
Section titled “room_messages”Chat messages in room channels.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
sender_id | uuid | NO | — |
content | text | NO | — |
type | text | NO | 'text' |
reply_to_id | uuid | YES | — |
is_pinned | boolean | NO | false |
is_edited | boolean | NO | false |
attachments | jsonb | YES | — |
metadata | jsonb | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
room_message_reactions
Section titled “room_message_reactions”Emoji reactions on room messages.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
message_id | uuid | NO | — |
user_id | uuid | NO | — |
emoji | text | NO | — |
created_at | timestamptz | NO | now() |
conversations
Section titled “conversations”One-to-one DM threads.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
participant_1 | uuid | NO | — |
participant_2 | uuid | NO | — |
last_message_at | timestamptz | YES | — |
is_blocked_by | uuid | YES | — |
created_at | timestamptz | NO | now() |
direct_messages
Section titled “direct_messages”Messages within a DM conversation.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
conversation_id | uuid | NO | — |
sender_id | uuid | NO | — |
content | text | NO | — |
type | text | NO | 'text' |
reply_to_id | uuid | YES | — |
is_read | boolean | NO | false |
read_at | timestamptz | YES | — |
is_edited | boolean | NO | false |
attachments | jsonb | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
dm_reactions
Section titled “dm_reactions”Emoji reactions on DMs.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
message_id | uuid | NO | — |
user_id | uuid | NO | — |
emoji | text | NO | — |
created_at | timestamptz | NO | now() |
typing_status
Section titled “typing_status”Real-time typing indicators.
| Column | Type | Nullable | Default |
|---|---|---|---|
user_id | uuid | NO | — |
room_id | uuid | YES | — |
conversation_id | uuid | YES | — |
is_typing | boolean | NO | false |
updated_at | timestamptz | NO | now() |
call_channels
Section titled “call_channels”Voice/video call channels.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | YES | — |
created_by | uuid | NO | — |
type | text | NO | 'audio' |
status | text | NO | 'active' |
title | text | YES | — |
max_participants | integer | YES | — |
started_at | timestamptz | NO | now() |
ended_at | timestamptz | YES | — |
duration_seconds | integer | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
call_participants
Section titled “call_participants”Users in a call with media state.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
call_id | uuid | NO | — |
user_id | uuid | NO | — |
role | text | NO | 'participant' |
is_muted | boolean | NO | false |
is_camera_off | boolean | NO | false |
is_screen_sharing | boolean | NO | false |
joined_at | timestamptz | NO | now() |
left_at | timestamptz | YES | — |
call_logs
Section titled “call_logs”Audit log for call events.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
call_id | uuid | NO | — |
user_id | uuid | NO | — |
event | text | NO | — |
metadata | jsonb | YES | — |
created_at | timestamptz | NO | now() |
broadcasts
Section titled “broadcasts”Live streaming sessions.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | YES | — |
host_id | uuid | NO | — |
title | text | NO | — |
description | text | YES | — |
status | text | NO | 'scheduled' |
type | text | NO | 'camera' |
thumbnail_url | text | YES | — |
viewer_count | integer | NO | 0 |
max_viewers | integer | YES | — |
started_at | timestamptz | YES | — |
ended_at | timestamptz | YES | — |
scheduled_for | timestamptz | YES | — |
duration_seconds | integer | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
broadcast_viewers
Section titled “broadcast_viewers”Viewers of a broadcast.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
broadcast_id | uuid | NO | — |
user_id | uuid | NO | — |
joined_at | timestamptz | NO | now() |
left_at | timestamptz | YES | — |
Community polls within rooms.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
created_by | uuid | NO | — |
question | text | NO | — |
description | text | YES | — |
is_multiple_choice | boolean | NO | false |
is_anonymous | boolean | NO | false |
ends_at | timestamptz | YES | — |
is_closed | boolean | NO | false |
total_votes | integer | NO | 0 |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
poll_options
Section titled “poll_options”Poll answer choices.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
poll_id | uuid | NO | — |
label | text | NO | — |
vote_count | integer | NO | 0 |
sort_order | smallint | NO | 0 |
poll_votes
Section titled “poll_votes”Individual poll votes.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
poll_id | uuid | NO | — |
option_id | uuid | NO | — |
user_id | uuid | NO | — |
created_at | timestamptz | NO | now() |
membership_packages
Section titled “membership_packages”Room membership tiers with Stripe pricing.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
name | text | NO | — |
description | text | YES | — |
price_cents | integer | NO | — |
currency | text | NO | 'usd' |
interval | text | NO | 'month' |
perks | jsonb | NO | '[]' |
badge_label | text | YES | — |
badge_color | text | YES | — |
is_active | boolean | NO | true |
sort_order | smallint | NO | 0 |
stripe_price_id | text | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
membership_orders
Section titled “membership_orders”Membership purchases/subscriptions.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
package_id | uuid | NO | — |
user_id | uuid | NO | — |
room_id | uuid | NO | — |
status | text | NO | 'active' |
amount_cents | integer | NO | — |
currency | text | NO | 'usd' |
stripe_subscription_id | text | YES | — |
stripe_payment_intent_id | text | YES | — |
starts_at | timestamptz | NO | now() |
expires_at | timestamptz | YES | — |
canceled_at | timestamptz | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
badges
Section titled “badges”Custom badges per room.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
created_by | uuid | NO | — |
name | text | NO | — |
description | text | YES | — |
icon_url | text | YES | — |
color | text | NO | '#6366f1' |
criteria | text | YES | — |
is_auto | boolean | NO | false |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
badge_assignments
Section titled “badge_assignments”Badges assigned to users.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
badge_id | uuid | NO | — |
user_id | uuid | NO | — |
assigned_by | uuid | YES | — |
assigned_at | timestamptz | NO | now() |
sticker_packs
Section titled “sticker_packs”Sticker collections, optionally premium.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
name | text | NO | — |
description | text | YES | — |
cover_url | text | YES | — |
created_by | uuid | NO | — |
is_premium | boolean | NO | false |
price_cents | integer | NO | 0 |
is_active | boolean | NO | true |
sort_order | smallint | NO | 0 |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
stickers
Section titled “stickers”Individual sticker images.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
pack_id | uuid | NO | — |
name | text | NO | — |
image_url | text | NO | — |
sort_order | smallint | NO | 0 |
created_at | timestamptz | NO | now() |
Embedded browser games.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
genre_id | uuid | YES | — |
name | text | NO | — |
slug | text | NO | — |
description | text | YES | — |
thumbnail_url | text | YES | — |
embed_url | text | NO | — |
is_multiplayer | boolean | NO | false |
min_players | integer | NO | 1 |
max_players | integer | YES | — |
is_active | boolean | NO | true |
play_count | integer | NO | 0 |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
game_genres
Section titled “game_genres”Game categories.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
name | text | NO | — |
slug | text | NO | — |
icon | text | YES | — |
sort_order | smallint | NO | 0 |
game_scores
Section titled “game_scores”Leaderboard entries.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
game_id | uuid | NO | — |
user_id | uuid | NO | — |
score | integer | NO | — |
metadata | jsonb | YES | — |
created_at | timestamptz | NO | now() |
Monetary tips between users with Stripe.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
sender_id | uuid | NO | — |
recipient_id | uuid | NO | — |
room_id | uuid | YES | — |
amount_cents | integer | NO | — |
currency | text | NO | 'usd' |
message | text | YES | — |
is_anonymous | boolean | NO | false |
stripe_payment_intent_id | text | YES | — |
status | text | NO | 'completed' |
created_at | timestamptz | NO | now() |
ad_placements
Section titled “ad_placements”Room-level ad placements with impression/click tracking.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | YES | — |
created_by | uuid | NO | — |
title | text | NO | — |
description | text | YES | — |
image_url | text | YES | — |
link_url | text | YES | — |
placement | text | NO | 'sidebar' |
is_active | boolean | NO | true |
impressions | integer | NO | 0 |
clicks | integer | NO | 0 |
starts_at | timestamptz | YES | — |
ends_at | timestamptz | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
complaints
Section titled “complaints”User reports/complaints within rooms.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
reporter_id | uuid | NO | — |
reported_user_id | uuid | YES | — |
message_id | uuid | YES | — |
reason | text | NO | — |
description | text | YES | — |
status | text | NO | 'pending' |
resolved_by | uuid | YES | — |
resolved_at | timestamptz | YES | — |
resolution_note | text | YES | — |
created_at | timestamptz | NO | now() |
updated_at | timestamptz | NO | now() |
user_bans
Section titled “user_bans”Room-level user bans.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
user_id | uuid | NO | — |
banned_by | uuid | NO | — |
reason | text | YES | — |
type | text | NO | 'temporary' |
expires_at | timestamptz | YES | — |
created_at | timestamptz | NO | now() |
ip_blacklist
Section titled “ip_blacklist”Banned IP addresses.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
ip_address | text | NO | — |
reason | text | YES | — |
banned_by | uuid | NO | — |
expires_at | timestamptz | YES | — |
created_at | timestamptz | NO | now() |
word_filters
Section titled “word_filters”Per-room content moderation word filters.
| Column | Type | Nullable | Default |
|---|---|---|---|
id | uuid | NO | gen_random_uuid() |
room_id | uuid | NO | — |
word | text | NO | — |
replacement | text | NO | '***' |
is_regex | boolean | NO | false |
action | text | NO | 'replace' |
created_by | uuid | NO | — |
created_at | timestamptz | NO | now() |