Seed's repository is both the template and the home of seedsaas.com, Seed's own website. Some of it describes Seed, names its competitors or sells its author's paid work. A product started from Seed must not go live with any of that: it would carry someone else's offer and prices, and claims about competitors the product never checked.
Work through this list in the product's first pull requests, next to the steps in
Building a product on Seed. Every place in a file that can hold a
comment is also marked with Seed's own site: see docs/start-a-product.md, so this finds what is
left (images, LICENSE, AGENTS.md and the env file carry no mark):
git grep -n "Seed's own site"
Each item says what the product does: delete it, replace it with its own, or set a
value. A file the product deletes or takes over completely goes into .seed/skip, so later syncs
from Seed leave it out. Tests follow the code: apps/mpa/site.test.ts and the browser tests in
e2e/mpa/ check some of these values, and change with them.
- Set
AUTHOR_URLinapps/mpa/brand.ts: the author's own site. - Delete
apps/mpa/hire.ts: the author's prices (HIRE_PRICES) and his MVP offer (HIRE_PAGE_URL). Its other importers change with it:apps/mpa/routes/[[lang]]/pricing.tsx(the FAQ on howHIRE_PRICES.mvpFromis worked out, and a hire link),apps/mpa/routes/index.tsx(the link inWhoBuilds),apps/mpa/site.tsx,apps/mpa/error-page.tsx,apps/mpa/components/pricing-ways.tsxandapps/mpa/site.test.ts. - Delete the
/mvpredirect to that offer,apps/mpa/routes/mvp.ts, and its browser teste2e/mpa/mvp.mpa.ts. - Replace "Hire me", "About Anton" and the "Built in public by" line in the header and footer:
NAV_LINKS,footerGroupsandSiteFrameinapps/mpa/site.tsx. - Replace
PERSON_JSON_LDinapps/mpa/site.tsx: the Person (Anton Shubin) and his company (NeatSoft PTE LTD) in the structured data.apps/mpa/routes/index.tsx,routes/features.tsx,routes/pricing.tsxandroutes/compare.tsxuse it. - Replace the "Who builds Seed" band,
WhoBuildsinapps/mpa/routes/index.tsx. - Delete the founders' band that sends to the MVP offer,
apps/mpa/components/founders-handoff.tsx, and its use,<FoundersHandoff />inapps/mpa/routes/index.tsx. - Replace the "have it built" card with the author's prices,
apps/mpa/components/pricing-ways.tsx. - Delete the hire link on the error page,
apps/mpa/error-page.tsx, and thehire-meevent indocs/analytics.md.
- Delete
/compare: named competitors, their prices and the day they were checked. That isapps/mpa/routes/[[lang]]/compare.tsx, the card component only it uses,apps/mpa/components/compare-alternatives.tsx, its entry inapps/mpa/pages.ts, its Open Graph imageapps/mpa/static/og/compare.pngwith thecomparekey ofOG_IMAGESinapps/mpa/site.tsx, thecompare-sourceevent indocs/analytics.md, and its browser teste2e/mpa/compare.mpa.ts. Remove the links to it too, or they lead nowhere: "Compare" in the header (NAV_LINKS) and footer (footerGroups) inapps/mpa/site.tsx, "How Seed compares" inapps/mpa/routes/[[lang]]/features.tsxandfeatures/[slug].tsx, and "the comparison" inapps/mpa/routes/index.tsx. - Delete Seed's blog posts: every
.mdfile inlibs/server/blog/seed-posts/except itsREADME.md, which shows the format. They load only in demo mode, which a product never turns on, but they describe Seed. The product writes its posts in the admin app. Point the post page inapps/mpa/lighthouse/lighthouserc.json(/blog/welcome-to-the-seed-blog) at a post of the product's own, or remove it. - Keep
/changelogand/docs: they read the product's own history and guides. EmptyCHANGELOG_OVERRIDESinapps/mpa/changelog-overrides.ts, setPUBLISHED_DOCSandDOCS_SITE_ORIGINinapps/mpa/docs-site.ts(with the pointer line atop each guide), and replace the "built by one developer" line inapps/mpa/routes/[[lang]]/changelog.tsx. - Replace the page copy and FAQs of the home, features, admin and pricing pages:
apps/mpa/routes/index.tsx,routes/features.tsx,routes/admin.tsx,routes/pricing.tsx. - Rewrite
apps/mpa/features-data.tsx: the features page and every feature page (/features/<slug>) are drawn from it, so the product's own features and their pages come from that one file. - Replace the
llms.txtsummary. It is the home page's description,HOME_HEADinapps/mpa/routes/index.tsx; the page list followsapps/mpa/pages.tsby itself. - Set the licence line in
llms.txt: the "Source code" entry inapps/mpa/routes/llms.txt.tssays the code is under the MIT licence. Name the product's own licence, or drop the line. - Replace the privacy policy and terms, written for seedsaas.com and its demo:
apps/mpa/routes/[[lang]]/privacy.tsx,apps/mpa/routes/[[lang]]/terms.tsx. - Set
SITE_NAME,SITE_ICONandREPOSITORY_URLinapps/mpa/brand.ts. - Replace the newsletter's voice: the keys
NewsletterPage.lead,NewsletterPage.subscribeDescription,HomeNewsletter.leadandNewsletterOff.leadini18n/site/, and the Releases on GitHub button of the page shown while the newsletter is off. Their uses inapps/mpa/subscribers.tsxand in theNewsletterband ofapps/mpa/routes/index.tsxare marked "Seed's own site". - Replace the Open Graph images in
apps/mpa/static/og/, drawn byapps/mpa/screenshots/og.html. - Replace the product screenshots and the admin video:
apps/mpa/static/shots/,apps/mpa/static/video/andapps/mpa/media/video/, taken byapps/mpa/screenshots/capture.tsandapps/mpa/admin-video.ts. - Replace the browser frames titled
app.seedsaas.com/…inapps/mpa/routes/index.tsx,apps/mpa/features-data.tsxandapps/mpa/components/features-visuals.tsx.
The SPA and the admin app say "Seed" in the browser tab, the installed app's name and the brand mark. Replace each with the product's name:
apps/spa/index.html: the<title>and theapple-mobile-web-app-titlemeta.apps/spa/vite.config.ts:nameandshort_namein the web app manifest.apps/admin/index.html: the<title>(Admin · Seed).libs/ui/frame.tsx: thenameof theBrandMarkin the app frame.libs/ui/admin-frame.tsx:ADMIN_PRODUCT, which names the admin's tab titles and brand mark.
These tests check the name and change with it: libs/ui/admin-frame.test.tsx,
libs/ui/account.test.tsx (the brand mark), e2e/pwa.e2e.ts (the manifest's names) and
e2e/app-shell-parity.e2e.ts (the admin tab title).
- Set the crawler policy,
ROBOTS_POLICYinapps/mpa/config.ts. - Set the analytics ids,
MPA_UMAMI_ORIGINandMPA_UMAMI_WEBSITE_ID, in the server's env file (infra/envs/.env.examplelists them), as Analytics (on GitHub) says. - Set the domains and whether the public demo runs:
MPA_DOMAIN,DOMAINandDEMO_MODEin the env file (The public demo (on GitHub)). - Set whether the product has signed-in customers: a website and its admin panel only sets
SPA=falsein the env file, which keeps the SPA off and closes sign-up (Without the SPA), and drops the website's sign-in and sign-up links. - Create the first operator on the server with
deno task operator:create <address>, which needs no mail (The first operator). - Set where release images go,
IMAGE_PREFIXin.woodpecker/release.yml. - Set
ADMIN_BILLING_SETUP_URLinlibs/ui/admin-billing-list.tsx: the admin app's "Billing is off" page links there, and it points at Seed's owndocs/billing.mdon GitHub. Point it at the product's copy of that doc.
- Replace the README's demo and website links, CI badge, author section and admin video link
in
README.md. - Replace the README's pictures in
docs/screenshots/and the GitHub social preview, whose card saysseedsaas.com:docs/screenshots/record.tsrecords them. - Set the licence holder in
LICENSE. - Replace
AGENTS.mdwith the product's own, as step 3 says: it applies Seed'sAGENTS.mdexcept the sections "The live demo is not production" and "Financy", which hold for the template only.