diff options
| author | Ben Sima <ben@bensima.com> | 2025-12-16 16:17:47 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bensima.com> | 2025-12-16 16:17:47 -0500 |
| commit | 451b3421313a53b3e7ab15d95fd4b1231f5b7773 (patch) | |
| tree | f99837f0a2df4fc23c1d0ee292873b8378adac6d | |
| parent | 260b7b83b0ec396bb880038f4c93f977af0056c5 (diff) | |
Update homepage with marketing copy and fix push.sh
| -rw-r--r-- | Biz/PodcastItLater/Web.py | 119 | ||||
| -rwxr-xr-x | Omni/Ide/push.sh | 21 |
2 files changed, 122 insertions, 18 deletions
diff --git a/Biz/PodcastItLater/Web.py b/Biz/PodcastItLater/Web.py index 257938f..bc12000 100644 --- a/Biz/PodcastItLater/Web.py +++ b/Biz/PodcastItLater/Web.py @@ -906,19 +906,114 @@ class HomePage(Component[AnyChildren, HomePageAttrs]): error = self.attrs.get("error") if not user: - # Show public feed with login form for logged-out users + # Marketing landing page for logged-out users return UI.PageLayout( - LoginForm(error=error), + # Hero section html.div( - html.h4( - html.i(classes=["bi", "bi-broadcast", "me-2"]), - "Public Feed", - classes=["mb-3", "mt-4"], + html.h1( + "Your Reading List, Now a Podcast", + classes=["display-5", "fw-bold", "mb-3"], ), html.p( - "Featured articles converted to audio. " - "Sign up to create your own personal feed!", - classes=["text-muted", "mb-3"], + "Convert web articles to audio. " + "Listen during your commute, workout, or chores.", + classes=["lead", "text-muted", "mb-4"], + ), + html.a( + "Start Listening", + href="#login", + classes=["btn", "btn-primary", "btn-lg"], + ), + classes=["text-center", "py-5", "mb-5"], + ), + # How it works section + html.div( + html.h3( + "How It Works", + classes=["text-center", "mb-4"], + ), + html.div( + html.div( + html.div( + html.div( + html.span( + "1", + classes=[ + "badge", + "bg-primary", + "rounded-circle", + "fs-5", + "mb-3", + ], + ), + html.h5("Paste any article URL"), + html.p( + "Copy the link to any article you want to listen to.", + classes=["text-muted", "small"], + ), + classes=["card-body", "text-center"], + ), + classes=["card", "h-100"], + ), + classes=["col-md-4", "mb-3"], + ), + html.div( + html.div( + html.div( + html.span( + "2", + classes=[ + "badge", + "bg-primary", + "rounded-circle", + "fs-5", + "mb-3", + ], + ), + html.h5("We convert it to audio"), + html.p( + "Our AI reads the article and creates a podcast episode.", + classes=["text-muted", "small"], + ), + classes=["card-body", "text-center"], + ), + classes=["card", "h-100"], + ), + classes=["col-md-4", "mb-3"], + ), + html.div( + html.div( + html.div( + html.span( + "3", + classes=[ + "badge", + "bg-primary", + "rounded-circle", + "fs-5", + "mb-3", + ], + ), + html.h5("Listen in your podcast app"), + html.p( + "Subscribe to your personal RSS feed in any podcast app.", + classes=["text-muted", "small"], + ), + classes=["card-body", "text-center"], + ), + classes=["card", "h-100"], + ), + classes=["col-md-4", "mb-3"], + ), + classes=["row"], + ), + classes=["mb-5"], + ), + # Social proof section + html.div( + html.h4( + "Join others who've converted their reading backlog", + classes=["text-center", "mb-4"], ), EpisodeList( episodes=episodes, @@ -926,6 +1021,12 @@ class HomePage(Component[AnyChildren, HomePageAttrs]): user=None, viewing_own_feed=False, ), + classes=["mb-5"], + ), + # Login form + html.div( + LoginForm(error=error), + id="login", ), user=None, current_page="home", diff --git a/Omni/Ide/push.sh b/Omni/Ide/push.sh index 25c0ed6..f6d67f4 100755 --- a/Omni/Ide/push.sh +++ b/Omni/Ide/push.sh @@ -77,22 +77,25 @@ service_deploy() { echo -e "${YLW}info: push: deploying service $service_name${NC}" - # 1. Build and cache (bild caches by default, outputs STORE_PATH=...) + # 1. Build and cache echo -e "${YLW}info: push: building $target${NC}" - local bild_output - bild_output=$(bild "$target" 2>&1) || { + if ! bild "$target"; then echo -e "${RED}fail: push: bild failed${NC}" - echo "$bild_output" exit 1 - } + fi + + # Get store path from symlink in _/nix/ + local symlink_path="${CODEROOT}/_/nix/${service_name}" + if [[ ! -L "$symlink_path" ]]; then + echo -e "${RED}fail: push: symlink not found: $symlink_path${NC}" + exit 1 + fi - # Extract store path from bild output local store_path - store_path=$(echo "$bild_output" | grep '^STORE_PATH=' | cut -d= -f2) + store_path=$(readlink "$symlink_path") if [[ -z "$store_path" ]]; then - echo -e "${RED}fail: push: could not extract store path from bild output${NC}" - echo "$bild_output" + echo -e "${RED}fail: push: could not read store path from symlink${NC}" exit 1 fi |
