diff --git a/build/content.mjs b/build/content.mjs
index 20f11c0..2f9abca 100644
--- a/build/content.mjs
+++ b/build/content.mjs
@@ -16,6 +16,7 @@ const currentYear = new Date().getFullYear();
["software", "Software", "software.html"],
["exchanges", "Exchanges", "exchanges.html"],
["glossary", "Glossary", "glossary.html"],
+ ["entropy", "Workshop", "entropy.html"],
["dashboard", "Dashboard", "dashboard.html"],
["contact", "Get Help", "contact.html"]
];
@@ -187,147 +188,20 @@ const currentYear = new Date().getFullYear();
const pages = {
home: {
title: "SelfCustody.ca | Control Your Money",
- description: "Clear, practical guidance for learning how to buy bitcoin, choose a wallet, protect recovery material, and withdraw to self custody.",
+ description: "Start in the cockpit: pick a destination, or fly the Quickstart route into your first self-custody guide.",
+ /* The cockpit is the site's front door. The launch that precedes it is a
+ separate route (launch.html) rather than markup hidden on this page,
+ so the approved entrance keeps its own timing and this page stays the
+ thing you come back to. assets/js/home-entrance.js decides which of the
+ two a visit lands on. */
content: `
- ${hero(
- "",
- `EXITFIAT
- ENTERBITCOIN`,
- "Your keys, your coins. Learn how to buy, move, and protect your bitcoin without turning security into a full time job.",
- `Explore Guides
- Get Help`,
- {
- src: "assets/img/cash-vortex/exchanges-cash-vortex-final3.mp4",
- type: "video/mp4",
- poster: "assets/img/cash-vortex/exchanges-cash-vortex.png",
- alt: "",
- width: 1616,
- height: 1072,
- video: true,
- background: true
- }
- )}
-
-
-
-
-
-
- First steps
-
Learn the Basics
-
Bitcoin can feel like an endless rabbit hole. Start with our step-by-step Quickstart guide, or dive into our recommended topic-specific guides. Learn at your own pace and go deeper when you’re ready.
Learn the system and check live network data when you are ready to act.
-
-
- ${homeExploreCard({ icon: "bi-signpost-split", title: "Guides", text: "Follow practical walkthroughs from first principles and first withdrawals to multisig, privacy, and inheritance.", href: "guides.html", linkText: "Browse guides", image: "assets/img/guides-library-hero.jpg" }).trim()}
- ${homeExploreCard({ icon: "bi-stack", title: "Glossary", text: "Look up the language of bitcoin custody, transactions, wallets, backups, privacy, and network operation.", href: "glossary.html", linkText: "Search the glossary", image: "assets/img/glossary-hero.jpg" }).trim()}
- ${homeExploreCard({ icon: "bi-graph-up", title: "Live Dashboard", text: "Check current network conditions, fees, blocks, supply, and other useful bitcoin data in one view.", href: "dashboard.html", linkText: "Open dashboard", image: "assets/img/dashboard-network-preview-v3.jpg" }).trim()}
-
-
- Compare
-
Compare hardware devices, wallet software, and Canadian buying options by custody model, compatibility, privacy, workflow, and tradeoffs.
-
-
- ${homeExploreCard({ icon: "bi-shield-lock", title: "Hardware Devices", text: "Compare signing devices by security model, workflow, openness, recovery design, and the tradeoffs each one makes.", href: "devices.html", linkText: "Compare devices", image: "assets/img/devices-hero.jpg" }).trim()}
- ${homeExploreCard({ icon: "bi-window", title: "Wallet Software", text: "Find mobile and desktop wallets that match your device, privacy needs, node setup, and transaction workflow.", href: "software.html", linkText: "Compare software", image: "assets/img/software-hero.jpg" }).trim()}
- ${homeExploreCard({ icon: "bi-bank", title: "Canadian Exchanges", text: "Compare Canadian buying routes by custody model, funding methods, purchase flow, and withdrawal experience.", href: "exchanges.html", linkText: "Compare exchanges", image: "assets/img/exchanges-hero.jpg" }).trim()}
-
-
-
-
- ${renderToolsBand({ home: true })}
-
-
-
-
- Our standard
-
Built to Inform, Not Persuade
-
Self-custody has no universal setup. We explain the options, the risks, and the tradeoffs that matter—so you can decide for yourself.
-
-
-
Education-first
Understand Before Acting
Learn the model before choosing a product or moving money.
-
Transparent
See the Tradeoffs
Workflow, privacy, custody, and compatibility are shown directly.
-
Security boundary
Your Secrets Stay Yours
This site never asks for your recovery words or private keys.
-
Safer habits
Testing and Backups
Verify on-device, start small, and prove recovery before storing meaningful savings.
-
-
-
-
-
-
-
-
-
-
- One-on-one guidance
-
Need Help?
-
Get practical guidance choosing a wallet, setting up a device, reviewing a backup, or rehearsing a transaction—while you remain in control of every step.
+
+
+
+
+ ← Back to launch
+ `
},
guides: {
@@ -1865,6 +1739,47 @@ const renderGlossaryCards = () => glossaryTerms.map(term => `
`
};
+ /* The rocket entrance. A route of its own rather than markup hidden inside
+ index.html, so the approved launch keeps its own timing and the cockpit
+ stays the page people return to. assets/js/home-entrance.js sends the
+ first visit of a tab here and every later one straight to the cockpit.
+
+ Markup is the approved launchpad unchanged -- the scene, its patches, the
+ porthole mask and the transition video. noindex in the , because the
+ page people should find is the cockpit. */
+ pages.launch = {
+ title: "Launch into Bitcoin | SelfCustody.ca",
+ description: "The launch into SelfCustody.ca.",
+ content: `
+
+
+
+`
+ };
+
/* Temporary holding page. Keep the full contact-page definition above in
place so it can be restored when booking and support are ready to open. */
pages.contact = {
@@ -1902,19 +1817,27 @@ const renderGlossaryCards = () => glossaryTerms.map(term => `
pages at the root, "../" for everything under docs/guides/. Pages there
are otherwise identical, so the whole difference is threaded through here
rather than duplicated into a second header. */
+ /* Read by assets/js/home-entrance.js. A fragment rather than a query so the
+ cockpit keeps one canonical URL, and the script clears it from the address
+ bar once it has been honoured. */
+ const COCKPIT_HASH = "#cockpit";
+
const renderHeader = (pageKey, base = "") => {
const links = routes.map(([key, label, href]) => {
- if (["software", "exchanges"].includes(key)) return "";
+ if (["software", "exchanges", "glossary"].includes(key)) return "";
if (key === "guides") {
const menuActive = pageKey === "guides" ? "active" : "";
const items = guideCategories
.map(cat => {
- /* "Start here" is the hub's first section, so everything above
- it -- the hero and the finder -- is part of starting. It gets
- the top of the page rather than a jump past them; the rest
- stay jump links to their own section. */
- const target = cat.key === "fundamentals" ? `${base}guides.html` : `${base}guides.html#${cat.key}`;
- return `
`;
+ /* The first row used to be "Start here", pointing at the top of
+ the hub -- which is where the label above now goes, so the row
+ duplicated its own parent. It is Quickstart instead, going
+ straight to the guide that starts someone off. The rest stay
+ jump links to their own section. */
+ if (cat.key === "fundamentals") {
+ return `
`;
})
.join("\n ");
/* The two entropy tools are not guide categories -- the items above are
@@ -1927,17 +1850,23 @@ const renderGlossaryCards = () => glossaryTerms.map(term => `
guides.html that promotes them. From anywhere else on the site,
following that band would mean landing on the hub and scrolling past
six sections to reach a link to the real page. */
- const entropyGroup = `
`;
- /* Same shape as Compare: the label only opens the list. The hub
- itself is still one click away as "Start here", the first item
- in the list, so nothing needs the label to be a link too. */
- return `