satoshi.si is a Bitcoin-focused progressive web app: Satoshi's words, whitepaper translations, hands-on learning, market tools, and a few experiments. Built with plain HTML, CSS, and JavaScript, it runs on static hosting without an application server of its own.
Price Scanner overlays BTC or sats values on price tags in a full-screen camera view. A centered targeting frame and self-hosted PaddleOCR models handle varied printed styles and improve handwritten-number recognition entirely on-device. Sintra provides the BTC price, and fresh converter caches or Frankfurter provide currency rates. Optional photo downloads include Bitcoin labels and a satoshi.si logo watermark; images are never uploaded. Currency, display unit and pinch zoom are saved locally. Camera selection automatically prefers the rear camera on phones or the available webcam. See scanner notes.
Cost of Living in Bitcoin compares reported consumer prices in 2010 with the latest completed year across the 26 current EU countries that were members in 2010. Electricity, petrol and diesel have consistent quantities and complete annual coverage, using Eurostat and European Commission data including taxes. The page shows one item at a time, with photos, EUR/BTC prices, the item's price change, EU-wide buying power lost to inflation and Bitcoin's purchasing-power increase. A simple EUR100 example explains the separate EU inflation benchmark without altering actual item prices. No invented starting amounts or inflation-index substitutes for retail prices. Snapshots refresh through GitHub Actions and work offline. See maintenance notes.
| Page | What it offers |
|---|---|
| Words of Satoshi | Shuffled quotes, click-to-copy, two-minute rotation, and a subtle desktop control for the next quote. |
| Bitcoin whitepaper | A collection of translations, with contributions welcome to make Bitcoin knowledge accessible in more languages. |
| Self-custody | A newcomer-friendly guide to mobile, desktop and Lightning wallets, signing devices and full nodes, from BlueWallet and Sparrow through SeedSigner, Cupcake, the BitBox02 Bitcoin-only edition and Bitcoin Core. |
| BIP39 word checker | Type one word and explore similar words from any of the ten official BIP39 language lists. Validation and suggestions run locally and work offline. |
| History chart | Explore currencies and other assets priced in sats, with time ranges, linear/logarithmic scales, historical events, snapshots, and CSV/JSON exports. |
| Moscow Time | A sats-per-dollar view of Bitcoin's price. |
| Converter | Bitcoin, satoshi, and fiat conversions. |
| Bitcoin and Nostr News | Bitcoin and Nostr engineering, release, media, research, and community feeds, with locally stored source and keyword filters plus custom RSS and Nostr profiles. |
| Memed Bitcoin Mood | Market moods and memes across daily, weekly, monthly, and yearly timeframes, with fallback data providers. |
| Game39 | BIP39 word games, with a separate multiplayer mode. |
| GhostQR | An experimental tool for creating printable, layered QR codes. |
| Entropy Lab | Compare secure randomness with coin flips, dice, typed patterns, images, pointer movement and sound; captured media stays on-device and is discarded after fingerprinting. |
| Lightning lottery | An embedded lottery, alongside statistics, a ticket verifier, and terms. |
| Exchange | A third-party ChangeNOW widget for crypto swaps and fiat purchases, defaulting to XMR/BTC and EUR/BTC. |
| Nostr identifiers | Information about NIP-05 identifiers on the satoshi.si domain. |
The shared interface uses a near-black theme with orange accents, gently animated grain, and retro TV navigation effects. Reduced-motion preferences disable the animations. Responsive layouts, menus, and dialogs support smaller screens; the footer places block height on the left and fee rate on the right.
Open satoshi.si in a supported browser and use its install or Add to Home Screen option. Installation availability and wording vary by browser. The manifest provides a standalone app window, icons, and theme colors.
The service worker precaches the home shell, an offline fallback, and the BIP39 word checker. Visited pages and eligible same-origin static assets are cached with a network-first strategy.
Offline support is selective, not a promise that every tool works without a connection.
- The BIP39 word checker can work offline once its assets have been cached.
- Cached pages remain available, but their live data and external services may not be.
- API responses, JSON datasets, query-string requests, and third-party resources are not cached by the worker. Quotes and historical chart data therefore still require connectivity under the current cache policy.
- External fonts, icons, embeds, and multiplayer services may be unavailable offline.
Updates activate after existing tabs controlled by the old service worker close. See PWA and theme maintenance for caching, deployment, and verification details.
The public checker accepts one word and compares it locally with the selected official BIP39 list. It does not send the word to an API. The first four letters are emphasized because those prefixes are unique within each BIP39 wordlist.
The previous phrase, entropy, checksum, and passphrase playground is retained as source in archive/bip39-playground, but is not published as a second live page. Never enter a real wallet recovery phrase into an educational tool.
See BIP39 implementation notes for details about the archived playground.
- Bitcoinity: the documented source of historical BTC/USD exchange data. The existing pipeline averages available exchange columns.
- Frankfurter: historical fiat conversion rates in the data-generation script, plus exchange rates used by the chart.
- Sintra: live Bitcoin prices used by price-related tools.
- mempool.space: block and fee information.
- Bitcoin and Nostr news: Bitcoin Optech, Bitcoin Core releases, project blogs, independent publications, Nostr newsletters, community feeds, and Reddit sources. A daily GitHub Action creates the static feed snapshot.
- CoinGecko and CoinPaprika: Bitcoin Mood market data, with Binance as a daily fallback. Some volatility values are estimates rather than measured historical ranges.
- Open Exchange Rates: fiat rates used by the converter.
- Third-party services: ChangeNOW and the lottery embed power their respective widgets; multiplayer Game39 uses Firebase. Several pages also load libraries, fonts, or icons from external hosts.
The history chart displays BTC per unit. A Yahoo Finance collector now generates sourced stock, futures, index, and ETF datasets, with a daily GitHub Actions workflow ready to enable. Original CSVs remain as a labelled fallback; fiat history is not refreshed by this workflow. See history sources, methodology, and setup for the recovered pipeline, adjustment choices, units, failure handling, and deployment steps.
External services can fail, rate-limit requests, or be blocked by browser privacy tools. Static hosting removes the need for our own backend, not these external dependencies. Third-party services have their own terms and privacy policies.
No site-wide build step is required. Serve this repository's root over HTTP instead of opening HTML with file://:
git clone https://github.com/StellarStoic/satoshi.git
cd satoshi
python3 -m http.server 8080 --bind 127.0.0.1Open http://127.0.0.1:8080. A VSCodium static-server extension can serve the same directory instead; Python is only one local preview option, not a production dependency.
Use HTTPS in production or localhost for service-worker development. Root-relative asset paths and the manifest assume hosting at the domain root; subdirectory hosting requires path changes.
Keep contributions approachable: plain HTML, CSS, and JavaScript, with page-specific styles and shared theme variables in theme.css. Navigation effects live in siteEffects.css and siteEffects.js. The PWA entry points are site.webmanifest, pwa.js, and sw.js.
Run automated checks with Node.js:
node --test tests/*.test.mjsTests cover BIP39 behavior, news filtering and feed parsing, scanner recognition, historical data, and Bitcoin Mood fallback handling. They do not replace browser checks for layouts, installation, external integrations, or offline behavior.
The BIP39 library bundle is committed, so visitors and normal static previews do not need npm. To rebuild it:
npm ci --prefix tools/bip39 --ignore-scripts
npm run build --prefix tools/bip39When changing precached assets, increment the cache version in sw.js. Check desktop and mobile layouts, keyboard focus, reduced motion, and offline navigation before releasing.
- Enable and monitor the new Yahoo Finance history workflow in GitHub; extend automated coverage to fiat history.
- Validate legacy history against the newly sourced datasets before retiring it.
- Correct gaps in the legacy FX collector's date stepping and align its input/output paths with the chart.
- Improve offline coverage where appropriate and reduce duplicated navigation and modal markup.
Quotes, whitepaper translations, educational improvements, accessibility fixes, and bug reports are welcome. Fork the repository and submit a pull request; include sources for new historical data or educational claims, and test the pages you change.
Reach out through the website or Telegram. The site's support dialog offers Lightning and on-chain contributions.
This project has been described as MIT-licensed; a top-level license file still needs to be added. Bundled BIP39 dependency notices are in vendor/bip39.LICENSE.txt. Third-party content and services may have separate terms.