Skip to main content

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

ColumnTypeNullableDefaultDescription
iduuidNogen_random_uuid()Primary key
room_iduuidNo--Parent room (unique per room)
font_familytextYes--Room font family
font_sizetextYes--Base font size
text_colortextYes--Default text color
heading_colortextYes--Heading text color
link_colortextYes--Link color
border_styletextYes--Border style
border_colortextYes--Border color
border_widthtextYes--Border width
border_radiustextYes--Border radius
shadowtextYes--Box shadow
custom_csstextYes--Custom CSS overrides
created_attimestamptzNoNOW()Creation timestamp
updated_attimestamptzNoNOW()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()
));

Last updated: 2026-02-07