diff --git a/backend/app/__pycache__/main.cpython-312.pyc b/backend/app/__pycache__/main.cpython-312.pyc index 39d396a..8f4e07b 100644 Binary files a/backend/app/__pycache__/main.cpython-312.pyc and b/backend/app/__pycache__/main.cpython-312.pyc differ diff --git a/backend/app/__pycache__/models.cpython-312.pyc b/backend/app/__pycache__/models.cpython-312.pyc index b108f1a..8011a13 100644 Binary files a/backend/app/__pycache__/models.cpython-312.pyc and b/backend/app/__pycache__/models.cpython-312.pyc differ diff --git a/backend/app/__pycache__/schemas.cpython-312.pyc b/backend/app/__pycache__/schemas.cpython-312.pyc index 44bf447..550b972 100644 Binary files a/backend/app/__pycache__/schemas.cpython-312.pyc and b/backend/app/__pycache__/schemas.cpython-312.pyc differ diff --git a/backend/app/main.py b/backend/app/main.py index 83e0430..e481008 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -51,6 +51,12 @@ def _migrate_add_missing_columns(sync_conn): ("station_config", "play_store_icon_url", sa.String(500), ""), ("station_config", "play_store_url", sa.String(500), ""), ("station_config", "app_store_embed_html", sa.Text, ""), + # Page content columns + ("station_config", "hero_subtitle", sa.Text, ""), + ("station_config", "about_intro", sa.Text, ""), + ("station_config", "about_donation_text", sa.Text, ""), + ("station_config", "schedule_intro", sa.Text, ""), + ("station_config", "events_intro", sa.Text, ""), # Color theme columns ("station_config", "color_primary", sa.String(7), "#1a3a5c"), ("station_config", "color_primary_light", sa.String(7), "#2a5a8c"), diff --git a/backend/app/models.py b/backend/app/models.py index 2397642..ee83c65 100644 --- a/backend/app/models.py +++ b/backend/app/models.py @@ -106,6 +106,13 @@ class StationConfig(Base): play_store_url = Column(String(500), nullable=False, default="") app_store_embed_html = Column(Text, nullable=False, default="") + # Page content (freeform text, admin-editable) + hero_subtitle = Column(Text, nullable=False, default="") + about_intro = Column(Text, nullable=False, default="") + about_donation_text = Column(Text, nullable=False, default="") + schedule_intro = Column(Text, nullable=False, default="") + events_intro = Column(Text, nullable=False, default="") + # Color theme — hex strings, e.g. "#1a3a5c" # server_default is required so PostgreSQL emits a proper DEFAULT in ALTER TABLE DDL color_primary = Column(String(7), nullable=False, server_default=text("'#1a3a5c'"), default="#1a3a5c") diff --git a/backend/app/schemas.py b/backend/app/schemas.py index 01b3c6e..94200af 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -78,6 +78,12 @@ class StationConfigResponse(BaseModel): play_store_icon_url: str play_store_url: str app_store_embed_html: str + # Page content + hero_subtitle: str + about_intro: str + about_donation_text: str + schedule_intro: str + events_intro: str # Color theme color_primary: str color_primary_light: str @@ -119,6 +125,12 @@ class StationConfigUpdate(BaseModel): play_store_icon_url: Optional[str] = None play_store_url: Optional[str] = None app_store_embed_html: Optional[str] = None + # Page content + hero_subtitle: Optional[str] = None + about_intro: Optional[str] = None + about_donation_text: Optional[str] = None + schedule_intro: Optional[str] = None + events_intro: Optional[str] = None # Color theme color_primary: Optional[str] = None color_primary_light: Optional[str] = None diff --git a/backend/seed.py b/backend/seed.py index cfc4164..fceb089 100644 --- a/backend/seed.py +++ b/backend/seed.py @@ -217,6 +217,12 @@ STATION_CONFIG: dict = { "play_store_icon_url": "", "play_store_url": "", "app_store_embed_html": "", + # Page content + "hero_subtitle": "Your community-powered, nonprofit radio station — bringing music, stories, and connection to the mountain towns and beyond since 1987.", + "about_intro": "For nearly four decades, KMountain Flower Radio has been the voice of our community — a nonprofit, listener-supported radio station dedicated to music, local news, and the stories that bind mountain towns together.", + "about_donation_text": "As a 501(c)(3) nonprofit, every donation keeps our airwaves free and our signal strong. Members receive exclusive perks and the satisfaction of knowing they helped make this possible.", + "schedule_intro": "All times are local (Mountain Time). Every show is free to listen to live at 98.7 FM or via our online stream.", + "events_intro": "Come meet the team, enjoy live music, and support public radio in person. All events are open to the community — friends and family of listeners welcome.", # Color theme defaults (match _variables.scss) "color_primary": "#1a3a5c", "color_primary_light": "#2a5a8c", diff --git a/src/app/about/about.component.html b/src/app/about/about.component.html index 76a1c4f..eb67bd5 100644 --- a/src/app/about/about.component.html +++ b/src/app/about/about.component.html @@ -4,11 +4,7 @@

About {{ config().name_primary }} {{ config().name_secondary }}

-

- For nearly four decades, {{ config().name_primary }} {{ config().name_secondary }} has been the voice of our - community — a nonprofit, listener-supported radio station dedicated to - music, local news, and the stories that bind mountain towns together. -

+

{{ config().about_intro }}

@@ -80,11 +76,7 @@

Become a Member

-

- As a {{ config().nonprofit_type }} nonprofit, every donation keeps our airwaves free and our - signal strong. Members receive exclusive perks and the satisfaction of - knowing they helped make this possible. -

+

{{ config().about_donation_text }}

Join the Station } diff --git a/src/app/admin/admin-station-form.component.html b/src/app/admin/admin-station-form.component.html index 3232d46..469d777 100644 --- a/src/app/admin/admin-station-form.component.html +++ b/src/app/admin/admin-station-form.component.html @@ -184,6 +184,31 @@ + +
+

Page Content

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+