-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch.html
More file actions
409 lines (394 loc) · 26.8 KB
/
search.html
File metadata and controls
409 lines (394 loc) · 26.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Search Kaspa Explained | Kaspa Explained</title>
<meta name="description" content="Search the Kaspa Explained page map by topic, audience, status, and source type.">
<meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large">
<link rel="canonical" href="https://kaspaexplained.com/search">
<link rel="icon" href="kaspa-favicon.svg?v=20260512-real-k" type="image/svg+xml">
<link rel="icon" href="favicon.svg?v=20260512-k4" type="image/svg+xml">
<link rel="icon" href="favicon.ico" sizes="any">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="manifest" href="site.webmanifest">
<meta name="application-name" content="Kaspa Explained">
<meta name="apple-mobile-web-app-title" content="Kaspa Explained">
<meta name="theme-color" content="#09090b">
<meta property="og:title" content="Search Kaspa Explained | Kaspa Explained">
<meta property="og:description" content="Find the right Kaspa Explained page by topic, audience, status, and source type.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://kaspaexplained.com/search">
<meta property="og:image" content="https://kaspaexplained.com/og-kaspa-explained-20260514.png?v=20260514-logo-clearance">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Kaspa Explained - proof-of-work blockDAG guide">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Search Kaspa Explained | Kaspa Explained">
<meta name="twitter:description" content="Find the right Kaspa Explained page by topic, audience, status, and source type.">
<meta name="twitter:image" content="https://kaspaexplained.com/og-kaspa-explained-20260514.png?v=20260514-logo-clearance">
<meta name="dateModified" content="2026-05-17">
<link rel="stylesheet" href="styles.css?v=20260515-source-list-wrap">
<script defer src="nav.js?v=20260514-clean"></script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<nav class="nav" aria-label="Primary">
<a class="brand" href="/" aria-label="Kaspa Explained home">
<span class="brand-mark" aria-hidden="true"></span>
Kaspa Explained
</a>
<button class="nav-menu-button" type="button" aria-expanded="false" aria-controls="primary-links">Menu</button>
<div id="primary-links" class="nav-links">
<a href="/start-here">Start</a>
<a href="/overview">Overview</a>
<a href="/kaspa-claims-checker">Check claims</a>
<a href="/toccata-status">Toccata live?</a>
<a href="/builder-guide">Build</a>
<a href="/skeptical-case">Risks</a>
<a href="/sources">Sources</a>
<a href="/search">Search</a>
</div>
<button class="theme-toggle" type="button" aria-label="Switch theme">Light</button>
<a class="nav-cta" href="/status">What is live?</a>
</nav>
</header>
<main id="top" tabindex="-1" class="search-page">
<section class="sources-hero section">
<p class="eyebrow">Search</p>
<h1>Find the right page.</h1>
<p class="lead">Search by concept, audience, status, or source type. Results appear from the page map immediately, then expand as the browser indexes public page text from this site.</p>
<label class="search-box" for="site-search">
<span>Search terms</span>
<input id="site-search" type="search" placeholder="Try GHOSTDAG, KRC20, coupons, Toccata, UTXO, beginner, DeFi..." autocomplete="off">
</label>
<p class="fit-note" id="search-count">Showing all pages.</p>
</section>
<section class="section">
<p class="eyebrow">Reader paths</p>
<h2>Choose the page that matches the job.</h2>
<div class="summary-grid">
<article><span>Know nothing about crypto</span><p><a href="/start-here">Start Here</a> goes from records and keys to why Kaspa matters.</p></article>
<article><span>Know crypto, need Kaspa fast</span><p><a href="/overview">90-Second Overview</a> gives the shortest accurate explanation, then routes to Status.</p></article>
<article><span>Checking a claim</span><p><a href="/kaspa-claims-checker">Claims Checker</a> separates live, ecosystem-live, testnet, targeted, roadmap, research, and wrong claims.</p></article>
<article><span>Skeptical reader</span><p><a href="/skeptical-case">Risks and Open Questions</a> names the adoption, liquidity, mining, and roadmap risks.</p></article>
<article><span>Builder</span><p><a href="/build-this-now">Build This Now</a> starts with receipts, KRC tools, command-line checks, and TN12 practice.</p></article>
<article><span>Writer or AI tool</span><p><a href="/ai-guidance">AI Guidance</a> and <a href="/claims-reference">Claims Reference</a> keep copy tied to sources.</p></article>
</div>
</section>
<section class="section">
<p class="eyebrow">Results</p>
<h2>Page map.</h2>
<div class="search-results" id="search-results">
<article data-search="home index kaspa explained real-time proof of work blockdag ghostdag single-file single file does not wait honest work parallel blocks default summary router misconceptions tps finality testnet roadmap">
<span>Home</span>
<h3><a href="/">Homepage</a></h3>
<p>Main router for the shortest summary, beginner path, status, common misconceptions, comparison, app ideas, and sources.</p>
</article>
<article data-search="beginner start here route records keys blocks consensus scams glossary new user basics first">
<span>Beginner</span>
<h3><a href="/start-here">Start Here</a></h3>
<p>Start from what you already know: from zero, value, coin categories, constraints, or Kaspa.</p>
</article>
<article data-search="what is kaspa kas kaspa explained proof of work blockdag ghostdag 10 bps beginner search answer live now roadmap">
<span>Search answer</span>
<h3><a href="/what-is-kaspa">What Is Kaspa?</a></h3>
<p>Plain answer for KAS, Proof of Work, UTXO ownership, blockDAGs, GHOSTDAG, and live-versus-roadmap status.</p>
</article>
<article data-search="zero records keys transactions blocks consensus mining staking tokens UTXO account model">
<span>Foundations</span>
<h3><a href="/crypto-from-zero">Crypto From Zero</a></h3>
<p>Records, keys, transactions, blocks, consensus, security, tokens, UTXO/account models, and why Kaspa appears later.</p>
</article>
<article data-search="value market cap liquidity token need speculation launch design security budget actors">
<span>Value</span>
<h3><a href="/why-crypto-has-value">Why Crypto Has Value</a></h3>
<p>Token need, market cap myths, liquidity, security budgets, launch design, and who benefits.</p>
</article>
<article data-search="many coins why so many coins categories bitcoin ethereum stablecoins exchange tokens privacy memes infrastructure kaspa token types">
<span>Coin categories</span>
<h3><a href="/why-are-there-so-many-coins">Why So Many Coins?</a></h3>
<p>Why different crypto assets exist and why they are not all trying to do the same job.</p>
</article>
<article data-search="coins taxonomy bitcoin ethereum stablecoins solana xrp bnb tron memes privacy oracles">
<span>Coin map</span>
<h3><a href="/coin-atlas">Coin Atlas</a></h3>
<p>Major assets by job, value source, trust model, and limitation.</p>
</article>
<article data-search="tradeoffs visa scaling privacy decentralization ASIC staking custody throughput fees">
<span>Constraints</span>
<h3><a href="/tradeoff-map">Tradeoff Map</a></h3>
<p>What crypto users want, what those goals cost, and why base-layer designs cannot optimize everything at once.</p>
</article>
<article data-search="analysis checklist green flags red flags token need supply insiders validators miners market table">
<span>Checklist</span>
<h3><a href="/analyze-any-coin">Analyze Any Coin</a></h3>
<p>A practical checklist for evaluating a coin without relying on price action or slogans.</p>
</article>
<article data-search="history bitcoin ethereum forks stablecoins privacy scaling why chains exist">
<span>Context</span>
<h3><a href="/crypto-history">Crypto History</a></h3>
<p>Problem-first crypto history: why different chains and categories appeared.</p>
</article>
<article data-search="kaspa one screen summary live not live risks thesis GHOSTDAG Toccata DAGKnight vProgs share shareable shortest honest version send someone krc20 krc721 coupon event misconceptions real-time finality tps">
<span>Shareable</span>
<h3><a href="/kaspa-in-one-screen">Kaspa in One Screen</a></h3>
<p>The compressed Kaspa thesis, live status, not-live claims, and what would strengthen or weaken the argument.</p>
</article>
<article data-search="kaspa status updates weekly biweekly monthly current freshness loop dated updates live roadmap claims corrected toccata tn12">
<span>Status updates</span>
<h3><a href="/kaspa-status-updates">Kaspa Status Updates</a></h3>
<p>Dated status-update index for repeat visits and current claim checks.</p>
</article>
<article data-search="kaspa status check may 2026 monthly biweekly current status live changed roadmap claims corrected toccata tn10 tn12 krc dagknight finality 100 bps partition resilient payments kaspa org rtd">
<span>Dated status</span>
<h3><a href="/kaspa-status-check-may-2026">Kaspa Status Check - May 2026</a></h3>
<p>Dated snapshot of what is live, what is pending, what changed, and which public claims need checking.</p>
</article>
<article data-search="skeptical case objections risks node pressure security budget liquidity mining concentration developer mindshare ecosystem fragility overclaims roadmap execution native defi toccata vprogs">
<span>Skeptical case</span>
<h3><a href="/skeptical-case">Risks and Open Questions</a></h3>
<p>Good-faith objections to Kaspa and what evidence would answer them.</p>
</article>
<article data-search="adoption metrics wallets nodes mining fees liquidity developers integrations business signals useful on-chain activity synthetic traffic coordination markets base of liquidity payment paths receipts krc20 krc721 coupons rewards loyalty festival event credits access passes merchant dashboard proof value">
<span>Adoption</span>
<h3><a href="/adoption-metrics">Adoption Metrics</a></h3>
<p>Non-price signals for judging whether usage, infrastructure, and builder demand are becoming durable.</p>
</article>
<article data-search="applications DeFi stablecoins Toccata vProgs covenants ZK oracles RTD group commitments coordination markets base of liquidity payments as rails receipts funding rules builders apps prove rules krc20 krc721 nft coupon festival access passes event credits rewards tokens">
<span>Apps</span>
<h3><a href="/application-layer">Application Layer</a></h3>
<p>What other networks proved and where Kaspa-native app ideas may fit.</p>
</article>
<article data-search="reality check bs detector product claims pitch scanner market instincts solana field study users liquidity wallet flow scam anatomy launchpad pump fun jupiter colosseum hackathon builder pipeline red team">
<span>Reality check</span>
<h3><a href="/reality-check">Reality Check</a></h3>
<p>Test crypto product claims against users, liquidity, wallet flows, evidence, field studies, and Kaspa status boundaries.</p>
</article>
<article data-search="builders developer guide covenants based apps inline ZK full vProgs Silverscript Python SDK TxIndex concurrency state model krc krc20 krc721 indexers api wallet token nft tooling kdp hosted api sompi blue score daa score acceptance rate limits">
<span>Builders</span>
<h3><a href="/builder-guide">Builder Guide</a></h3>
<p>Choose between covenants, based apps, command-line practice, and future full vProgs without mixing current tools and later architecture.</p>
</article>
<article data-search="build this now what can you build on kaspa now builder recipes read dag data watch accepted transactions track utxos receipt page krc tn12 api wallet indexer indexing rest api public nodes archival data">
<span>Build now</span>
<h3><a href="/build-this-now">What Can You Build on Kaspa Now?</a></h3>
<p>Short recipes for live reads, accepted transactions, UTXOs, receipts, KRC tools, and TN12 practice.</p>
</article>
<article data-search="command line cli terminal from zero mainnet node rpc wallet utxo transaction explorer docker rusty kaspa kaspad kaspa-cli wrpc websocket testnet tn10 tn12 toccata activation verification self sovereign kdp hosted api x-api-key transaction acceptance address history blue score daa score sompi rate limits">
<span>Command line</span>
<h3><a href="/command-line">Verify a Kaspa Transaction Yourself</a></h3>
<p>Explorer, second source, wallet, hosted API, node, RPC, and accepted-transaction checks away from one hosted screen.</p>
</article>
<article data-search="builder evidence proof sources implementation evidence tn12 covenants silverscript accepted testnet live targeted roadmap research">
<span>Builder evidence</span>
<h3><a href="/builder-evidence">Builder Evidence</a></h3>
<p>Source-backed bridge between public Kaspa status and technical proof-lab evidence.</p>
</article>
<article data-search="overview 90 seconds what kaspa is live not live next page plain">
<span>Quick read</span>
<h3><a href="/overview">90-Second Overview</a></h3>
<p>A compact first-reader explanation of Kaspa and the next page to read.</p>
</article>
<article data-search="what crypto is good for bad fits neutral shared records one record without one operator use cases">
<span>Reality check</span>
<h3><a href="/what-crypto-is-good-for">What Crypto Is Good For</a></h3>
<p>Where crypto helps, where it is a bad fit, and why neutral shared records are the core test.</p>
</article>
<article data-search="status live targeted roadmap research Toccata TN10 TN12 DAGKnight vProgs native DeFi Crescendo 10 BPS 100 BPS TPS finality testnet common misconceptions krc20 krc721 ecosystem live miner fees deploy mint gas coupons access passes event credits partition resilient payments">
<span>Status</span>
<h3><a href="/status">Kaspa Status</a></h3>
<p>The live/targeted/roadmap/research boundary for major Kaspa claims and common mistakes.</p>
</article>
<article data-search="kaspa claims checker claim checker live roadmap research not yet unsupported toccata dagknight smart contracts defi krc20 finality 10 bps 100 bps tn12 vprogs">
<span>Claims</span>
<h3><a href="/kaspa-claims-checker">Kaspa Claims Checker</a></h3>
<p>Check whether a Kaspa claim is live, ecosystem-live, targeted, roadmap, research, wrong, or unsupported.</p>
</article>
<article data-search="claims reference browser readable claims yml status labels live ecosystem live testnet targeted roadmap research copy rules machine readable human readable ai guidance">
<span>Claims reference</span>
<h3><a href="/claims-reference">Claims Reference</a></h3>
<p>Browser-readable companion to CLAIMS.yml for status labels, copy rules, and safe wording.</p>
</article>
<article data-search="toccata status is toccata live kaspa hard fork covenants tn10 tn12 silverscript kip21 kip-21 zk sequencing commitments mainnet activation june 2026">
<span>Toccata status</span>
<h3><a href="/toccata-status">Toccata Status</a></h3>
<p>TN10/TN12 evidence, covenant targets, ZK hooks, sequencing commitments, mainnet blockers, and safe wording.</p>
</article>
<article data-search="does kaspa have smart contracts smart contract status native defi covenants toccata silverscript krc20 krc721 vprogs ecosystem live">
<span>Smart contracts</span>
<h3><a href="/kaspa-smart-contracts-status">Kaspa Smart-Contracts Status</a></h3>
<p>Separate KRC tooling, Toccata covenants, Silverscript, ZK hooks, vProgs, and native DeFi claims.</p>
</article>
<article data-search="kaspa confirmations finality fast finality instant finality fast inclusion confirmation confidence real-time 10 bps probabilistic">
<span>Finality</span>
<h3><a href="/kaspa-confirmations-finality">Kaspa Confirmations and Finality</a></h3>
<p>Why fast inclusion, GHOSTDAG ordering, accepted transactions, and confirmation confidence are different steps.</p>
</article>
<article data-search="ghostdag explained what is ghostdag kaspa blockdag ordering selected chain parallel blocks dagknight finality">
<span>Protocol</span>
<h3><a href="/ghostdag-explained">GHOSTDAG Explained</a></h3>
<p>How Kaspa orders parallel proof-of-work blocks, and what GHOSTDAG does not claim.</p>
</article>
<article data-search="faq questions misconceptions Toccata DAGKnight DeFi 10 BPS TPS finality instant finality real-time testnet proof of work sources krc native smart contracts low fees adoption">
<span>FAQ</span>
<h3><a href="/faq">FAQ</a></h3>
<p>Short answers to common misconception and status questions.</p>
</article>
<article data-search="why kaspa matters RTD neutral money shared record one record without one operator GHOSTDAG blockDAG proof of work UTXO group commitments">
<span>Why it matters</span>
<h3><a href="/why-kaspa-matters">Why Kaspa Matters</a></h3>
<p>The core argument for real-time Proof of Work, neutral shared records, and Kaspa's future group-commitment direction.</p>
</article>
<article data-search="where kaspa fits bitcoin ethereum solana xrp bnb stablecoins proof of work comparison single-file single file blockdag categories ranking">
<span>Comparison</span>
<h3><a href="/where-kaspa-fits">Where Kaspa Fits</a></h3>
<p>Kaspa compared with major crypto categories by job, tradeoff, maturity, and current gaps.</p>
</article>
<article data-search="knowledge map GHOSTDAG blockDAG pruning finality Toccata vProgs RTD corrections status labels single-file single file wait ordering">
<span>Concept map</span>
<h3><a href="/knowledge-map">Knowledge Map</a></h3>
<p>An ordered conceptual map of Kaspa mechanics, common corrections, and supporting sources.</p>
</article>
<article data-search="glossary terms definitions blockDAG GHOSTDAG blue work blue score daa score pruning Toccata vProgs RTD ZK KRC KRC20 KRC721 NFT sompi hosted api api key rate limit cursor pagination accepting block">
<span>Definitions</span>
<h3><a href="/glossary">Glossary</a></h3>
<p>Plain-English definitions for recurring Kaspa and crypto terms.</p>
</article>
<article data-search="search page map finder concepts audience status current status sources terms navigation">
<span>Find pages</span>
<h3><a href="/search">Search</a></h3>
<p>Static page-map search for concepts, audiences, current status, and source terms.</p>
</article>
<article data-search="ai llm guidance source discipline claims status labels live testnet roadmap research toccata tn12 no hype plain language">
<span>AI guidance</span>
<h3><a href="/ai-guidance">AI Guidance</a></h3>
<p>Rules for AI tools and contributors describing Kaspa without mixing mainnet, testnet, roadmap, and research claims.</p>
</article>
<article data-search="sources references claims source hierarchy KIPs releases code research Learn Kaspa KASmedia Kaspa Daily Yonatan Q&A Base of Liquidity coordination markets payment paths mainnet testnet toccata activation release docs kdp docs kas fyi hosted api transaction acceptance block ranges blue score daa score data types rate limits">
<span>Sources</span>
<h3><a href="/sources">Sources</a></h3>
<p>Source hierarchy, learning references, builder accounts, and machine-readable context.</p>
</article>
<article data-search="about editorial policy independence corrections source first claims status discipline">
<span>Policy</span>
<h3><a href="/about">About</a></h3>
<p>Editorial policy, independence, corrections, and source standards.</p>
</article>
</div>
<p class="search-empty" id="search-empty" hidden>No page matches those terms. Try a broader word like <strong>status</strong>, <strong>UTXO</strong>, <strong>GHOSTDAG</strong>, <strong>KRC20</strong>, <strong>coupon</strong>, <strong>Toccata</strong>, <strong>DeFi</strong>, or <strong>sources</strong>.</p>
</section>
</main>
<footer class="footer">
<div class="footer-grid">
<p><strong>Independent resource.</strong> Kaspa-positive research guide, not investment advice.</p>
<nav aria-label="Footer">
<a href="/status">Status</a>
<a href="/sources">Sources</a>
<a href="/ai-guidance">Ask AI</a>
<a href="/search">Search</a>
<a href="/about">About</a>
<a href="/claims-reference">Claims</a>
<a href="https://github.com/parker2017code/kaspa-explained">GitHub</a>
</nav>
</div>
</footer>
<script>
const input = document.getElementById('site-search');
const results = Array.from(document.querySelectorAll('#search-results article'));
const count = document.getElementById('search-count');
const empty = document.getElementById('search-empty');
const parser = new DOMParser();
let fullIndexReady = false;
const params = new URLSearchParams(window.location.search);
const initialQuery = params.get('q');
if (initialQuery) input.value = initialQuery;
const aliases = {
"doesnt": ["does not", "wait", "single file", "singlefile"],
"dont": ["do not", "wait", "single file", "singlefile"],
"impatient": ["does not wait", "single file", "singlefile", "parallel"],
"singlefile": ["single file", "singlefile", "linear", "blockdag"],
"krc": ["krc", "krc20", "krc721", "token", "nft"],
"krc20": ["krc20", "krc 20", "token", "tokens", "fungible"],
"krc721": ["krc721", "krc 721", "nft", "pass", "coupon", "collectible"],
"nft": ["nft", "nfts", "krc721", "krc 721", "collectible", "pass"],
"coupon": ["coupon", "coupons", "discount", "reward", "rewards", "redeemable"],
"festival": ["festival", "event", "events", "event credit", "access pass", "food", "merchandise"],
"fees": ["fees", "fee", "gas", "miner fees", "deploy", "mint"],
"smartcontracts": ["smart contracts", "contracts", "toccata", "vprogs", "covenants"],
"defi": ["defi", "native defi", "swaps", "lending", "liquidity"],
"pow": ["pow", "proof of work", "mining", "miners"],
"bps": ["bps", "10 bps", "crescendo", "blocks per second"],
"tps": ["tps", "throughput", "capacity", "transactions per second"],
"finality": ["finality", "confirmation", "confirmations", "irreversible"],
"misconceptions": ["misconceptions", "myths", "mistakes", "overclaims", "common claims"]
};
function normalize(value) {
return value
.toLowerCase()
.replace(/['’]/g, '')
.replace(/krc[-\s]?20/g, 'krc20')
.replace(/krc[-\s]?721/g, 'krc721')
.replace(/smart[-\s]?contracts/g, 'smartcontracts')
.replace(/single[-\s]?file/g, 'singlefile')
.replace(/[^a-z0-9]+/g, ' ')
.trim();
}
function candidatesFor(term) {
const normalized = normalize(term);
const expanded = aliases[normalized] || [];
return [normalized, ...expanded.map(normalize)].filter(Boolean);
}
function updateSearch() {
const normalizedQuery = normalize(input.value);
const terms = normalizedQuery.split(/\s+/).filter(Boolean);
let visible = 0;
for (const item of results) {
const haystack = normalize(item.textContent + ' ' + item.dataset.search + ' ' + (item.dataset.fulltext || ''));
const phraseMatch = normalizedQuery && haystack.includes(normalizedQuery);
const match = !terms.length || phraseMatch || terms.every((term) => candidatesFor(term).some((candidate) => haystack.includes(candidate)));
item.hidden = !match;
if (match) visible += 1;
}
const indexNote = fullIndexReady ? '' : ' Page text is still indexing.';
count.textContent = terms.length ? `${visible} page${visible === 1 ? '' : 's'} match.${indexNote}` : fullIndexReady ? 'Showing all pages.' : 'Showing all pages. Indexing page text...';
empty.hidden = visible !== 0;
const url = new URL(window.location.href);
if (terms.length) {
url.searchParams.set('q', input.value.trim());
} else {
url.searchParams.delete('q');
}
window.history.replaceState({}, '', url);
}
input.addEventListener('input', updateSearch);
updateSearch();
async function hydrateFullTextIndex() {
const internalResults = results
.map((item) => ({ item, href: item.querySelector('a[href]')?.getAttribute('href') }))
.filter(({ href }) => href && href.startsWith('/'));
await Promise.all(internalResults.map(async ({ item, href }) => {
try {
const response = await fetch(href, { cache: 'no-store' });
if (!response.ok) return;
const html = await response.text();
const doc = parser.parseFromString(html, 'text/html');
doc.querySelectorAll('script, style, nav, footer').forEach((node) => node.remove());
const meta = Array.from(doc.querySelectorAll('meta[name="description"], meta[property="og:description"]'))
.map((node) => node.getAttribute('content') || '')
.join(' ');
item.dataset.fulltext = `${doc.title || ''} ${meta} ${doc.body?.textContent || ''}`;
} catch (error) {
item.dataset.fulltext = item.dataset.fulltext || '';
}
}));
fullIndexReady = true;
updateSearch();
}
hydrateFullTextIndex();
</script>
</body>
</html>