brand: standardize "Upbeat Bytes" → "upbeatBytes" everywhere
Per the logo + brand: the name is upbeatBytes (camelCase). Swept all user-facing strings — titles/og:site_name/og:title, logo alt text, share pages (share.py), emails (email_send), classifier prompt (llm), digest/unsubscribe (api), PWA manifest, game share text, sign-in, the SPA shell + patch-static-heads (play title) — plus README/publish.sh and the email test fixture. (SMTP From env was already upbeatBytes.) Domains (upbeatbytes.com) unchanged. 425 BE + 36 FE green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+13
-13
@@ -20,7 +20,7 @@ def _tag(name: str, content: str | None, attr: str = "property") -> str:
|
||||
def render_share_page(article: dict, base_url: str, summary: str | None = None,
|
||||
explanation: dict | None = None) -> str:
|
||||
aid = article["id"]
|
||||
title = (article.get("title") or "Upbeat Bytes").strip()
|
||||
title = (article.get("title") or "upbeatBytes").strip()
|
||||
why = (article.get("reason_text") or article.get("description")
|
||||
or "A calm, constructive story worth your attention.").strip()
|
||||
source = (article.get("source_name") or "the source").strip()
|
||||
@@ -39,7 +39,7 @@ def render_share_page(article: dict, base_url: str, summary: str | None = None,
|
||||
twitter_card = "summary_large_image" if image else "summary"
|
||||
|
||||
meta = "\n".join(filter(None, [
|
||||
_tag("og:site_name", "Upbeat Bytes"),
|
||||
_tag("og:site_name", "upbeatBytes"),
|
||||
_tag("og:type", "article"),
|
||||
_tag("og:title", title),
|
||||
_tag("og:description", why),
|
||||
@@ -138,7 +138,7 @@ def render_share_page(article: dict, base_url: str, summary: str | None = None,
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{escape(title)} · Upbeat Bytes</title>
|
||||
<title>{escape(title)} · upbeatBytes</title>
|
||||
<meta name="description" content="{escape(why)}">
|
||||
<link rel="canonical" href="{escape(page_url)}">
|
||||
<link rel="icon" href="/favicon.svg">
|
||||
@@ -194,7 +194,7 @@ def render_share_page(article: dict, base_url: str, summary: str | None = None,
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="bar"><div class="inner"><a href="/"><img src="/logo.svg" alt="Upbeat Bytes"></a><button class="back" type="button" data-back aria-label="Go back"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M19 12H5M11 6l-6 6 6 6" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round"/></svg>Back</button></div></div>
|
||||
<div class="bar"><div class="inner"><a href="/"><img src="/logo.svg" alt="upbeatBytes"></a><button class="back" type="button" data-back aria-label="Go back"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M19 12H5M11 6l-6 6 6 6" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round"/></svg>Back</button></div></div>
|
||||
<main class="wrap">
|
||||
<article class="card">
|
||||
{media}
|
||||
@@ -207,9 +207,9 @@ def render_share_page(article: dict, base_url: str, summary: str | None = None,
|
||||
<div class="actions">
|
||||
<a class="primary" href="{escape(src_url)}" target="_blank" rel="noopener" data-src-click>Read the full story at {escape(source)}</a>
|
||||
<button class="secondary" type="button" data-share>Copy link</button>
|
||||
<a class="secondary" href="/news">Explore Upbeat Bytes →</a>
|
||||
<a class="secondary" href="/news">Explore upbeatBytes →</a>
|
||||
</div>
|
||||
<p class="note">Upbeat Bytes summarizes in its own words and links to the original publisher — it doesn't host the article.</p>
|
||||
<p class="note">upbeatBytes summarizes in its own words and links to the original publisher — it doesn't host the article.</p>
|
||||
</div>
|
||||
</article>
|
||||
</main>
|
||||
@@ -275,7 +275,7 @@ def render_digest(items: list[dict], base_url: str, brief_date: str | None) -> s
|
||||
)
|
||||
|
||||
meta = "\n".join(filter(None, [
|
||||
_tag("og:site_name", "Upbeat Bytes"),
|
||||
_tag("og:site_name", "upbeatBytes"),
|
||||
_tag("og:type", "website"),
|
||||
_tag("og:title", "Today's good news, summarized"),
|
||||
_tag("og:description", intro),
|
||||
@@ -292,7 +292,7 @@ def render_digest(items: list[dict], base_url: str, brief_date: str | None) -> s
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Today's good news, summarized · Upbeat Bytes</title>
|
||||
<title>Today's good news, summarized · upbeatBytes</title>
|
||||
<meta name="description" content="{escape(intro)}">
|
||||
<link rel="canonical" href="{page_url}">
|
||||
<link rel="icon" href="/favicon.svg">
|
||||
@@ -324,12 +324,12 @@ def render_digest(items: list[dict], base_url: str, brief_date: str | None) -> s
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="bar"><div class="inner"><a href="/"><img src="/logo.svg" alt="Upbeat Bytes"></a></div></div>
|
||||
<div class="bar"><div class="inner"><a href="/"><img src="/logo.svg" alt="upbeatBytes"></a></div></div>
|
||||
<main class="wrap">
|
||||
<h1>Today's good news</h1>
|
||||
<p class="lede">{escape(intro)}{f' · {escape(brief_date)}' if brief_date else ''}</p>
|
||||
{cards}
|
||||
<p class="more"><a href="/news">Browse more on Upbeat Bytes →</a></p>
|
||||
<p class="more"><a href="/news">Browse more on upbeatBytes →</a></p>
|
||||
</main>
|
||||
</body>
|
||||
</html>"""
|
||||
@@ -339,7 +339,7 @@ def render_not_found(base_url: str) -> str:
|
||||
return f"""<!doctype html>
|
||||
<html lang="en"><head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Story not found · Upbeat Bytes</title><link rel="icon" href="/favicon.svg">
|
||||
<title>Story not found · upbeatBytes</title><link rel="icon" href="/favicon.svg">
|
||||
<style>
|
||||
body {{ margin:0; min-height:100vh; display:flex; flex-direction:column; align-items:center;
|
||||
justify-content:center; gap:14px; text-align:center; padding:40px;
|
||||
@@ -348,8 +348,8 @@ def render_not_found(base_url: str) -> str:
|
||||
a {{ color:#006b8e; }}
|
||||
</style></head>
|
||||
<body>
|
||||
<img src="/logo.svg" alt="Upbeat Bytes" style="height:44px">
|
||||
<img src="/logo.svg" alt="upbeatBytes" style="height:44px">
|
||||
<h1 style="font-family:Georgia,serif;font-weight:600">That story isn't here</h1>
|
||||
<p style="color:#5d6b78">It may have moved on — the good news refreshes often.</p>
|
||||
<a href="/">← Back to Upbeat Bytes</a>
|
||||
<a href="/">← Back to upbeatBytes</a>
|
||||
</body></html>"""
|
||||
|
||||
Reference in New Issue
Block a user