From ce05e8b7f093ed626c454636cfd2e1451cd27792 Mon Sep 17 00:00:00 2001 From: Samuel Lison Date: Fri, 24 Jul 2026 19:57:17 +1000 Subject: [PATCH] feat(marketing): plain-language landing + Mac pages, jargon demoted for SEO (#241) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The LANDING_MODE homepage and the /download page led with terms a non-technical reader doesn't know — "speaks ActivityPub", "the Fediverse", "IndieWeb", "federated with Mastodon" — which filter out exactly the audience the product is for. FediHome is a personal site for short posts, articles, photos, video and audio that people can follow from anywhere; the copy now says that first. Landing (LandingShowcase + the headline/subhead config defaults): - New headline "Your own website — that people can actually follow." and a plain subhead, both as defaults (still overridable via LANDING_HEADLINE / LANDING_SUBHEAD or the admin panel). - Feature cards rewritten benefit-first, including an "it works like email" framing for following across services — the one idea that explains federation without naming it. - The technical standards (ActivityPub, WebFinger, RSS, Mastodon, the fediverse, self-hosted, MIT) are consolidated into one "Open by design — no lock-in" section below the fold. It's the no-lock-in proof point AND the SEO home for the terms technical people search, so demoting the jargon doesn't cost discoverability — it just stops it gatekeeping the hero. - The "Completely open source. Written by AI." section is removed (open-source is kept as a benefit in Open by design; the AI-authorship framing, which puts some people off, is gone). Download page: same treatment — a marketing-first title/description, "across the Fediverse"/"boost" swapped for plain wording, keeping the Mac App Store / native menu-bar / notarized keywords for search. Copy-only; no behaviour change. tsc / 690 tests / eslint / build all green. Co-Authored-By: Claude Opus 4.8 --- .env.example | 4 +- CHANGELOG.md | 1 + site.config.ts | 4 +- src/app/(public)/download/page.tsx | 8 ++-- src/components/home/LandingShowcase.tsx | 60 +++++++++++++++---------- 5 files changed, 45 insertions(+), 32 deletions(-) diff --git a/.env.example b/.env.example index 9f1df4e..fe48f60 100644 --- a/.env.example +++ b/.env.example @@ -67,8 +67,8 @@ FEDI_DOMAIN=example.com # highlights + CTAs) instead of the personal blog intro. Off by default. # Used by the public demo to present an "About FediHome" homepage. # LANDING_MODE=true -# LANDING_HEADLINE=Your home on the open social web -# LANDING_SUBHEAD=FediHome is a self-hosted personal site that speaks ActivityPub — your blog, photos, videos and a live Fediverse feed, all owned by you. +# LANDING_HEADLINE=Your own website — that people can actually follow. +# LANDING_SUBHEAD=Share short posts, full articles, photos, video and audio — all on a site that's truly yours. Anyone can follow you and see it in their feed, and you'll see the people you follow in yours. # REPO_URL=https://github.com/TemujinCalidius/fedihome # --- Optional: Public read-only Fediverse feed --- diff --git a/CHANGELOG.md b/CHANGELOG.md index f02a15a..a9349a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - **Documented what actually happens when you change your domain** (#326) — `docs/fediverse-setup.md` gains a **Changing Your Domain** section. ActivityPub has no rename: your identity is a URL, and every server that has seen you stores it. The network's answer is an alias on the new account plus a `Move` from the old one — which only works while **the old domain is still serving**, because remote servers verify the move by fetching both ends. Move first and lose the domain later and your followers can still be brought across; lose the domain first and they can't, by anyone, ever. FediHome doesn't implement that handshake yet, so for now the guidance is to treat your domain as permanent, and the recommended shape of a move (new instance alongside the old, then decommission slowly) is written down. ### Changed +- **Plain-language marketing on the showcase landing and Mac pages** — the `LANDING_MODE` homepage and the `/download` page led with terms most people don't know ("speaks ActivityPub", "the Fediverse", "IndieWeb", "federated with Mastodon"). They now lead with what FediHome actually *is* — a personal site for short posts, articles, photos, video and audio that people can follow from anywhere, explained with a plain "it works like email" framing — while the technical standards (ActivityPub, WebFinger, RSS, and the fediverse) move into a dedicated **Open by design** section that doubles as the no-lock-in pitch and keeps the search terms technical folks look for. The "written by AI" section is gone. New default landing headline and subhead ship with it (still overridable via `LANDING_HEADLINE` / `LANDING_SUBHEAD` or the admin panel). - **The FediHome macOS app is on the Mac App Store** — it's out of review and live, so the download surface now links straight to the [App Store listing](https://apps.apple.com/app/fedihome/id6790605091) instead of showing "coming soon". The link is region-neutral, so Apple sends each visitor to their own storefront, and it's the default now (alongside the existing direct GitHub download) for any instance that turns the download page on — no configuration needed. Still overridable via env or the admin panel. - **Setting up on an address the Fediverse can't reach is now a deliberate choice** (#326) — the wizard used to let you finish on `localhost` or a private-network address with nothing but a warning. That bakes an identity nobody can follow into your ActivityPub actor, and because posts store their full URL, into everything you publish before you move. It's still allowed — testing locally is a perfectly reasonable thing to do — but you now have to tick a box confirming that's what you're doing. Setting up on a real domain is unchanged. diff --git a/site.config.ts b/site.config.ts index fa4ccad..d0eb10a 100644 --- a/site.config.ts +++ b/site.config.ts @@ -37,10 +37,10 @@ export const siteConfig = { // Off by default, so existing personal sites are completely unaffected. landingMode: process.env.LANDING_MODE === "true", landingHeadline: - process.env.LANDING_HEADLINE || "Your home on the open social web", + process.env.LANDING_HEADLINE || "Your own website — that people can actually follow.", landingSubhead: process.env.LANDING_SUBHEAD || - "FediHome is a self-hosted personal site that speaks ActivityPub — your blog, photos, videos and a live Fediverse feed, all owned by you and federated with Mastodon and the wider network.", + "Share short posts, full articles, photos, video and audio — all on a site that's truly yours. Anyone can follow you and see it in their feed, and you'll see the people you follow in yours. No big platform in the middle, no algorithm deciding who sees what.", repoUrl: process.env.REPO_URL || "https://github.com/TemujinCalidius/fedihome", // Public read-only Fediverse feed. When PUBLIC_FEED=true, /fediverse shows a diff --git a/src/app/(public)/download/page.tsx b/src/app/(public)/download/page.tsx index 35cb21e..f9e59f7 100644 --- a/src/app/(public)/download/page.tsx +++ b/src/app/(public)/download/page.tsx @@ -6,16 +6,16 @@ import MacAppMockup from "@/components/download/MacAppMockup"; export const dynamic = "force-dynamic"; export const metadata = { - title: "Download for Mac", + title: "FediHome for Mac — native menu-bar app", description: - "A native menu-bar Mac app for your FediHome — read your feed, post with photos, video and audio, manage your profile, DMs and notifications. Requires macOS 14 or later, notarized by Apple.", + "The native macOS app for your FediHome. Read your feed, post photos, video and audio, manage your site, send DMs and get native notifications — right from your menu bar. On the Mac App Store, macOS 14 and later, notarized by Apple.", }; // The app's headline capabilities — kept generic/marketing (no instance config). const FEATURES = [ { title: "Your whole feed", - body: "Read everyone you follow across the Fediverse in a fast, native timeline — like, boost and reply in a click.", + body: "Read everyone you follow in a fast, native timeline — like, reply and reshare in a click.", }, { title: "Compose anything", @@ -31,7 +31,7 @@ const FEATURES = [ }, { title: "Native notifications", - body: "Get real macOS notifications for replies, follows, boosts and mentions as they land.", + body: "Get real macOS notifications for replies, follows, reshares and mentions as they land.", }, { title: "Lives in your menu bar", diff --git a/src/components/home/LandingShowcase.tsx b/src/components/home/LandingShowcase.tsx index c05d9d3..95f8ee1 100644 --- a/src/components/home/LandingShowcase.tsx +++ b/src/components/home/LandingShowcase.tsx @@ -4,30 +4,33 @@ import { siteConfig } from "@/../site.config"; import type { RuntimeSiteConfig } from "@/lib/site-settings"; // What FediHome does — shown on the project showcase landing (LANDING_MODE=true). +// Benefit-led and plain-language on purpose; the technical terms people search +// for (ActivityPub, fediverse, RSS…) live in the "Open by design" section below, +// where they inform without gatekeeping. const FEATURES = [ { - title: "Own your content", - body: "Your posts, photos, videos and audio live on your own domain — not on a platform that can change the rules.", + title: "Own everything you post", + body: "Your words, photos, videos and audio live on your own domain — not on a platform that can change the rules, run ads against them, or lock you out.", }, { - title: "Federated by default", - body: "FediHome speaks ActivityPub, so anyone on Mastodon and the wider Fediverse can follow, reply and boost.", + title: "Followable from anywhere", + body: "People follow you from wherever they already are, and your posts land in their feed. Like email, it just works across different services — no account on your site needed.", }, { - title: "A real feed", - body: "Follow people across the Fediverse and read them in a timeline that lives on your own site.", + title: "Your own feed", + body: "Follow the people and creators you like and read them in one timeline on your own site — in the order they posted, never rearranged by an algorithm.", }, { - title: "Blog + media built in", - body: "Articles, journal notes, a photography gallery, and video and audio sections — all first-class.", + title: "One home for everything", + body: "Quick thoughts, long articles with titles, a photo gallery, videos, and a podcast-style audio feed — every format, all first-class.", }, { - title: "Yours to run, free forever", - body: "MIT-licensed and self-hosted. Update with a single command that never touches your data.", + title: "Post from anywhere", + body: "Write from the web or the Mac app, publish from your phone, and let anyone subscribe by RSS or install your site like an app.", }, { - title: "IndieWeb friendly", - body: "Micropub publishing, RSS, WebFinger and installable PWA support work out of the box.", + title: "Free, and truly yours", + body: "Open source and self-hosted. Run it yourself and update with a single command that never touches your data.", }, ]; @@ -74,7 +77,7 @@ export default function LandingShowcase({
- Open source · Fediverse · Self-hosted + Open source · Self-hosted · No lock-in

{landing.headline} @@ -114,9 +117,9 @@ export default function LandingShowcase({ )}

- Follow{" "} + This whole site is a FediHome. Follow{" "} {siteConfig.fediAddress}{" "} - on the Fediverse. + and watch it show up in your feed.

@@ -127,7 +130,7 @@ export default function LandingShowcase({ /> A glowing home connected to a network of Fediverse nodes

- A complete personal site that speaks the language of the Fediverse — - blog, media, and a live feed, all on a domain you control. + A complete personal site — your posts, your photos and media, and a + feed of the people you follow — all on a domain that's yours.

{FEATURES.map((feature) => ( @@ -159,15 +162,24 @@ export default function LandingShowcase({
- {/* ── Open source & AI-written ───────────────────────── */} + {/* ── Open by design ───────────────────────────────────── + The one section that names the technical standards. It's the + no-lock-in proof AND the SEO home for the terms people search + (ActivityPub, WebFinger, RSS, Mastodon, fediverse, self-hosted) — + deliberately below the fold so it informs without gatekeeping. */}

- Completely open source. Written by AI. + Open by design — no lock-in, ever

- FediHome is MIT-licensed and built end-to-end with Claude Code — - every line is public on GitHub. Read it, fork it, run it, and shape - it. No accounts, no lock-in, no cost. + FediHome is free and open source (MIT-licensed) and built on the + open standards of the social web — ActivityPub, + WebFinger and RSS. That's the same network Mastodon and + thousands of other independent sites already share, often called the{" "} + fediverse. It's why + people can follow you from anywhere, why you're never tied to + one company, and why — if you ever move — your followers can come + with you. Read the code, fork it, or run your own.

- Star it on GitHub + View the source