Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -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 ActivityPubyour 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 audioall 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 ---
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
4 changes: 2 additions & 2 deletions site.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 ActivityPubyour 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 audioall 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
Expand Down
8 changes: 4 additions & 4 deletions src/app/(public)/download/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
60 changes: 36 additions & 24 deletions src/components/home/LandingShowcase.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
},
];

Expand Down Expand Up @@ -74,7 +77,7 @@ export default function LandingShowcase({
<section className="grid items-center gap-10 lg:grid-cols-2">
<div>
<span className="inline-flex items-center gap-2 rounded-full border border-accent-500/30 px-3 py-1 text-xs font-semibold uppercase tracking-wider text-accent-400">
Open source · Fediverse · Self-hosted
Open source · Self-hosted · No lock-in
</span>
<h1 className="mt-5 font-display text-4xl md:text-5xl font-bold leading-tight text-white">
{landing.headline}
Expand Down Expand Up @@ -114,9 +117,9 @@ export default function LandingShowcase({
)}
</div>
<p className="mt-4 text-sm text-gray-500">
Follow{" "}
This whole site is a FediHome. Follow{" "}
<span className="text-accent-400">{siteConfig.fediAddress}</span>{" "}
on the Fediverse.
and watch it show up in your feed.
</p>
</div>

Expand All @@ -127,7 +130,7 @@ export default function LandingShowcase({
/>
<Image
src="/landing/hero.webp"
alt="A glowing home connected to a network of Fediverse nodes"
alt="A glowing home at the heart of the open web"
width={1024}
height={1024}
priority
Expand All @@ -142,8 +145,8 @@ export default function LandingShowcase({
What FediHome does
</h2>
<p className="mt-2 max-w-2xl text-gray-400">
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&apos;s yours.
</p>
<div className="mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{FEATURES.map((feature) => (
Expand All @@ -159,15 +162,24 @@ export default function LandingShowcase({
</div>
</section>

{/* ── 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. */}
<section className="mt-20 glass-card p-8 md:p-10">
<h2 className="font-display text-2xl md:text-3xl font-semibold text-white">
Completely open source. Written by AI.
Open by design — no lock-in, ever
</h2>
<p className="mt-3 max-w-2xl leading-relaxed text-gray-400">
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 — <span className="text-gray-300">ActivityPub</span>,
WebFinger and RSS. That&apos;s the same network Mastodon and
thousands of other independent sites already share, often called the{" "}
<span className="text-gray-300">fediverse</span>. It&apos;s why
people can follow you from anywhere, why you&apos;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.
</p>
<div className="mt-6 flex flex-wrap gap-3">
<a
Expand All @@ -176,7 +188,7 @@ export default function LandingShowcase({
rel="noopener noreferrer"
className="btn-primary text-xs"
>
Star it on GitHub
View the source
</a>
<a
href={`${repo}/blob/main/LICENSE`}
Expand Down
Loading