room_styles
Overview
The room_styles table stores CSS customization settings for a user's HomeRoom. This allows granular control over fonts, colors, borders, and other visual properties of the room as a whole, separate from individual module styles.
Relevant Invariants
- Invariant #10: "Expressive Freedom Is Spatially Contained" -- Room styles only affect the user's own HomeRoom
Schema
-- From 20260202_room_styles.sql
CREATE TABLE room_styles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
room_id UUID NOT NULL REFERENCES home_room_settings(id) ON DELETE CASCADE UNIQUE,
font_family TEXT,
font_size TEXT,
text_color TEXT,
heading_color TEXT,
link_color TEXT,
border_style TEXT,
border_color TEXT,
border_width TEXT,
border_radius TEXT,
shadow TEXT,
custom_css TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
Columns
| Column | Type | Nullable | Default | Description |
|---|---|---|---|---|
id | uuid | No | gen_random_uuid() | Primary key |
room_id | uuid | No | -- | Parent room (unique per room) |
font_family | text | Yes | -- | Room font family |
font_size | text | Yes | -- | Base font size |
text_color | text | Yes | -- | Default text color |
heading_color | text | Yes | -- | Heading text color |
link_color | text | Yes | -- | Link color |
border_style | text | Yes | -- | Border style |
border_color | text | Yes | -- | Border color |
border_width | text | Yes | -- | Border width |
border_radius | text | Yes | -- | Border radius |
shadow | text | Yes | -- | Box shadow |
custom_css | text | Yes | -- | Custom CSS overrides |
created_at | timestamptz | No | NOW() | Creation timestamp |
updated_at | timestamptz | No | NOW() | Last update timestamp |
RLS Policies
-- SELECT: Anyone can view room styles
CREATE POLICY "Room styles are publicly viewable"
ON room_styles FOR SELECT
USING (true);
-- INSERT/UPDATE: Room owner can manage styles
CREATE POLICY "Room owner can manage styles"
ON room_styles FOR ALL
USING (EXISTS (
SELECT 1 FROM home_room_settings
WHERE home_room_settings.id = room_styles.room_id
AND home_room_settings.user_id = auth.uid()
));
Related
- home_room_settings -- Parent room
- module_styles -- Per-module style overrides
Last updated: 2026-02-07