+


diff --git a/assets/site-button.svg b/assets/site-button.svg
new file mode 100644
index 0000000..8749b95
--- /dev/null
+++ b/assets/site-button.svg
@@ -0,0 +1,35 @@
+
diff --git a/site/README.md b/site/README.md
new file mode 100644
index 0000000..30061a4
--- /dev/null
+++ b/site/README.md
@@ -0,0 +1,52 @@
+# The TigerPOD site
+
+The showcase site of the TigerPOD, published on GitHub Pages:
+
+
+It presents the Pod and sends readers to what the README provides: the print files on
+MakerWorld, the build steps and parts, the electronics kit on the TigerTag shop, Tiger
+Studio Manager and the SDKs. It is static HTML, one page per language, built by
+[`build.py`](build.py) and published by [`pages.yml`](../.github/workflows/pages.yml)
+on every push to `main` that touches `site/`, `assets/`, `llms.txt` or `README.md`.
+Pull requests run the same build and checks without deploying.
+
+It shares its architecture and look with the
+[TigerTag protocol site](https://tigertag-project.github.io/TigerTag-RFID-Guide/)
+([source](https://github.com/TigerTag-Project/TigerTag-RFID-Guide/tree/main/site)).
+
+## Files
+
+| File | Contents |
+|---|---|
+| [`template.html`](template.html) | The page. Every `{{key}}` is replaced by the text of that key in the page's language; `{{@…}}` keys are filled by `build.py` (language menu, `hreflang` links, JSON-LD, colour gallery, MakerWorld links). |
+| [`i18n/en.json`](i18n/en.json) | The English text, which is the reference: every other language has exactly its keys. |
+| `i18n/.json` | `fr`, `de`, `es`, `it`, `zh` (Simplified Chinese), `pt` (Brazil), `pt-pt` (Portugal), `pl`, `ru`, `nl`. |
+| [`site.css`](site.css), [`site.js`](site.js) | The look (dark by default, light on request) and the theme / language buttons. Each page loads them with `?v=` and a hash of the file's content, so a new version is never hidden by a browser cache. |
+| [`seo_check.py`](seo_check.py) | Checks the built pages for search and answer engines. |
+| [`assets/`](assets/) | Web-sized copies (WebP, a short silent MP4) of the repository's own photos in [`../assets/`](../assets/), the black TigerTag logo for the light theme, the favicon and the touch icon. |
+| [`og.jpg`](og.jpg) | The picture shown when the site is shared (1200 × 630), from `assets/TigerPOD-social-preview.png`. |
+
+## Editing
+
+- **Change a text**: edit `i18n/en.json`, then the same key in every other language.
+- **Add a text**: add the key to every `i18n/*.json` file and use `{{key}}` in `template.html`.
+ The build refuses a language that misses a key, has an unknown one or an empty value.
+- **Facts only**: every statement on the page comes from the README. A new fact goes to
+ the README and `llms.txt` first. No prices.
+- **Check and preview**:
+
+ ```bash
+ python3 site/build.py --check
+ python3 site/build.py --out _site && python3 site/seo_check.py _site
+ python3 -m http.server 8000 --directory _site
+ python3 site/build.py --only en # English only, while translations are pending
+ ```
+
+`seo_check.py` checks every page: title and description length, one `h1`, canonical
+and `hreflang`, sharing cards, `alt` text, JSON-LD types (`Organization`, `WebSite`,
+`Product`, `CreativeWork`, `HowTo`, `FAQPage`), the FAQ and build steps they mirror,
+in-page links, sitemap, robots and `llms.txt`.
+
+The English page is the root (`/`), every other language has its own folder (`/fr/`,
+`/zh/`…). A language chosen in the menu is remembered, and the English root forwards to
+it on the next visit.
diff --git a/site/assets/TigerPOD-demo-poster.webp b/site/assets/TigerPOD-demo-poster.webp
new file mode 100644
index 0000000..170929c
Binary files /dev/null and b/site/assets/TigerPOD-demo-poster.webp differ
diff --git a/site/assets/TigerPOD-demo.mp4 b/site/assets/TigerPOD-demo.mp4
new file mode 100644
index 0000000..9b2e2c0
Binary files /dev/null and b/site/assets/TigerPOD-demo.mp4 differ
diff --git a/site/assets/TigerPOD-hero-lineup.webp b/site/assets/TigerPOD-hero-lineup.webp
new file mode 100644
index 0000000..8d635c5
Binary files /dev/null and b/site/assets/TigerPOD-hero-lineup.webp differ
diff --git a/site/assets/TigerPOD-mini.webp b/site/assets/TigerPOD-mini.webp
new file mode 100644
index 0000000..e10c585
Binary files /dev/null and b/site/assets/TigerPOD-mini.webp differ
diff --git a/site/assets/TigerPOD-reader-acr122u.webp b/site/assets/TigerPOD-reader-acr122u.webp
new file mode 100644
index 0000000..023233c
Binary files /dev/null and b/site/assets/TigerPOD-reader-acr122u.webp differ
diff --git a/site/assets/TigerPOD-splitter.webp b/site/assets/TigerPOD-splitter.webp
new file mode 100644
index 0000000..0826f71
Binary files /dev/null and b/site/assets/TigerPOD-splitter.webp differ
diff --git a/site/assets/TigerPOD-system.webp b/site/assets/TigerPOD-system.webp
new file mode 100644
index 0000000..2cae583
Binary files /dev/null and b/site/assets/TigerPOD-system.webp differ
diff --git a/site/assets/apple-touch-icon.png b/site/assets/apple-touch-icon.png
new file mode 100644
index 0000000..7264747
Binary files /dev/null and b/site/assets/apple-touch-icon.png differ
diff --git a/site/assets/favicon.svg b/site/assets/favicon.svg
new file mode 100644
index 0000000..b38fe44
--- /dev/null
+++ b/site/assets/favicon.svg
@@ -0,0 +1,35 @@
+
+
\ No newline at end of file
diff --git a/site/assets/logo-tigertag-black.svg b/site/assets/logo-tigertag-black.svg
new file mode 100644
index 0000000..42121e8
--- /dev/null
+++ b/site/assets/logo-tigertag-black.svg
@@ -0,0 +1,15 @@
+
+
diff --git a/site/assets/pods/black.webp b/site/assets/pods/black.webp
new file mode 100644
index 0000000..8e30fb4
Binary files /dev/null and b/site/assets/pods/black.webp differ
diff --git a/site/assets/pods/blue.webp b/site/assets/pods/blue.webp
new file mode 100644
index 0000000..0268eb1
Binary files /dev/null and b/site/assets/pods/blue.webp differ
diff --git a/site/assets/pods/copper.webp b/site/assets/pods/copper.webp
new file mode 100644
index 0000000..ecff979
Binary files /dev/null and b/site/assets/pods/copper.webp differ
diff --git a/site/assets/pods/cyan.webp b/site/assets/pods/cyan.webp
new file mode 100644
index 0000000..66e5b8c
Binary files /dev/null and b/site/assets/pods/cyan.webp differ
diff --git a/site/assets/pods/galaxy-purple.webp b/site/assets/pods/galaxy-purple.webp
new file mode 100644
index 0000000..b49d2ac
Binary files /dev/null and b/site/assets/pods/galaxy-purple.webp differ
diff --git a/site/assets/pods/glow-blue-dark.webp b/site/assets/pods/glow-blue-dark.webp
new file mode 100644
index 0000000..65f2ddb
Binary files /dev/null and b/site/assets/pods/glow-blue-dark.webp differ
diff --git a/site/assets/pods/glow-green-dark.webp b/site/assets/pods/glow-green-dark.webp
new file mode 100644
index 0000000..0333c75
Binary files /dev/null and b/site/assets/pods/glow-green-dark.webp differ
diff --git a/site/assets/pods/glow-red-dark.webp b/site/assets/pods/glow-red-dark.webp
new file mode 100644
index 0000000..8a84d50
Binary files /dev/null and b/site/assets/pods/glow-red-dark.webp differ
diff --git a/site/assets/pods/glow.webp b/site/assets/pods/glow.webp
new file mode 100644
index 0000000..8002eda
Binary files /dev/null and b/site/assets/pods/glow.webp differ
diff --git a/site/assets/pods/gold.webp b/site/assets/pods/gold.webp
new file mode 100644
index 0000000..9d33525
Binary files /dev/null and b/site/assets/pods/gold.webp differ
diff --git a/site/assets/pods/green.webp b/site/assets/pods/green.webp
new file mode 100644
index 0000000..87ff0f3
Binary files /dev/null and b/site/assets/pods/green.webp differ
diff --git a/site/assets/pods/grey.webp b/site/assets/pods/grey.webp
new file mode 100644
index 0000000..5a2eab1
Binary files /dev/null and b/site/assets/pods/grey.webp differ
diff --git a/site/assets/pods/marble.webp b/site/assets/pods/marble.webp
new file mode 100644
index 0000000..f9a1247
Binary files /dev/null and b/site/assets/pods/marble.webp differ
diff --git a/site/assets/pods/orange.webp b/site/assets/pods/orange.webp
new file mode 100644
index 0000000..8ae769f
Binary files /dev/null and b/site/assets/pods/orange.webp differ
diff --git a/site/assets/pods/pink.webp b/site/assets/pods/pink.webp
new file mode 100644
index 0000000..cf9b3d9
Binary files /dev/null and b/site/assets/pods/pink.webp differ
diff --git a/site/assets/pods/purple.webp b/site/assets/pods/purple.webp
new file mode 100644
index 0000000..b451573
Binary files /dev/null and b/site/assets/pods/purple.webp differ
diff --git a/site/assets/pods/rainbow-linear.webp b/site/assets/pods/rainbow-linear.webp
new file mode 100644
index 0000000..4a75750
Binary files /dev/null and b/site/assets/pods/rainbow-linear.webp differ
diff --git a/site/assets/pods/rainbow-multi.webp b/site/assets/pods/rainbow-multi.webp
new file mode 100644
index 0000000..d6bf1fa
Binary files /dev/null and b/site/assets/pods/rainbow-multi.webp differ
diff --git a/site/assets/pods/red.webp b/site/assets/pods/red.webp
new file mode 100644
index 0000000..60a9376
Binary files /dev/null and b/site/assets/pods/red.webp differ
diff --git a/site/assets/pods/silk-black.webp b/site/assets/pods/silk-black.webp
new file mode 100644
index 0000000..8fb52e1
Binary files /dev/null and b/site/assets/pods/silk-black.webp differ
diff --git a/site/assets/pods/silk-blue.webp b/site/assets/pods/silk-blue.webp
new file mode 100644
index 0000000..5355162
Binary files /dev/null and b/site/assets/pods/silk-blue.webp differ
diff --git a/site/assets/pods/silk-copper.webp b/site/assets/pods/silk-copper.webp
new file mode 100644
index 0000000..5252b96
Binary files /dev/null and b/site/assets/pods/silk-copper.webp differ
diff --git a/site/assets/pods/silk-gold.webp b/site/assets/pods/silk-gold.webp
new file mode 100644
index 0000000..31a87e6
Binary files /dev/null and b/site/assets/pods/silk-gold.webp differ
diff --git a/site/assets/pods/silk-pink.webp b/site/assets/pods/silk-pink.webp
new file mode 100644
index 0000000..2a55fa9
Binary files /dev/null and b/site/assets/pods/silk-pink.webp differ
diff --git a/site/assets/pods/silk-red.webp b/site/assets/pods/silk-red.webp
new file mode 100644
index 0000000..9b49751
Binary files /dev/null and b/site/assets/pods/silk-red.webp differ
diff --git a/site/assets/pods/silk-silver.webp b/site/assets/pods/silk-silver.webp
new file mode 100644
index 0000000..ba518a6
Binary files /dev/null and b/site/assets/pods/silk-silver.webp differ
diff --git a/site/assets/pods/silk-yellow.webp b/site/assets/pods/silk-yellow.webp
new file mode 100644
index 0000000..025d8e2
Binary files /dev/null and b/site/assets/pods/silk-yellow.webp differ
diff --git a/site/assets/pods/silver.webp b/site/assets/pods/silver.webp
new file mode 100644
index 0000000..79fe358
Binary files /dev/null and b/site/assets/pods/silver.webp differ
diff --git a/site/assets/pods/white.webp b/site/assets/pods/white.webp
new file mode 100644
index 0000000..62a8d3a
Binary files /dev/null and b/site/assets/pods/white.webp differ
diff --git a/site/assets/pods/yellow.webp b/site/assets/pods/yellow.webp
new file mode 100644
index 0000000..86ba5f3
Binary files /dev/null and b/site/assets/pods/yellow.webp differ
diff --git a/site/build.py b/site/build.py
new file mode 100644
index 0000000..268d509
--- /dev/null
+++ b/site/build.py
@@ -0,0 +1,261 @@
+"""Build the TigerPOD showcase site (GitHub Pages) into `_site/`.
+
+One static page per language, all from `template.html` and `i18n/.json`:
+English at the root, the others under `//`. Every page is complete HTML in
+its own language (what a search engine, an AI crawler or a reader without
+JavaScript sees) with `hreflang` links between them, JSON-LD in its language
+and a sitemap listing them all.
+
+The pictures in `site/assets/` are web-sized copies of the repository's own
+photos in `assets/`; the white TigerTag logo is taken from `assets/` as is.
+
+Usage:
+ python site/build.py # build into _site/
+ python site/build.py --check # only check the translations
+ python site/build.py --out DIR --url https://example.org/path/
+"""
+
+import argparse
+import hashlib
+import html
+import json
+import re
+import shutil
+import subprocess
+import sys
+from datetime import datetime, timezone
+from pathlib import Path
+
+HERE = Path(__file__).resolve().parent
+REPO = HERE.parent
+SITE_URL = "https://tigertag-project.github.io/TigerPOD/"
+REPO_URL = "https://github.com/TigerTag-Project/TigerPOD"
+
+# The eleven languages of the TigerTag sites, in the same order. `pt` (Brazil)
+# and `pt-pt` (Portugal) are separate dictionaries on purpose.
+LANGS = ["en", "fr", "de", "es", "it", "zh", "pt", "pt-pt", "pl", "ru", "nl"]
+HTML_LANG = {"zh": "zh-Hans", "pt": "pt-BR", "pt-pt": "pt-PT"}
+OG_LOCALE = {"en": "en_US", "fr": "fr_FR", "de": "de_DE", "es": "es_ES", "it": "it_IT",
+ "zh": "zh_CN", "pt": "pt_BR", "pt-pt": "pt_PT", "pl": "pl_PL", "ru": "ru_RU", "nl": "nl_NL"}
+
+# Repository file -> published path under assets/.
+ASSETS = {
+ # White logo on the dark theme; the black (contouring) one is in site/assets/.
+ "assets/logo_tigertag_head.svg": "logo-tigertag-white.svg",
+}
+
+# The shells and the kit, exactly as linked from the README.
+MAKERWORLD_MINI = "https://makerworld.com/fr/models/3190348-tigerpod-mini-for-openspool-tigertag-rfid-filament"
+MAKERWORLD_ORIGINAL = "https://makerworld.com/fr/models/1289152-tigertag-io-open-spool-pod-for-rfid-filament"
+
+# Crawlers of search and answer engines, welcomed by name in robots.txt: the
+# project is meant to be read and cited. Listing them is an explicit opt-in.
+AI_AGENTS = ["GPTBot", "OAI-SearchBot", "ChatGPT-User", "ClaudeBot", "Claude-SearchBot", "Claude-User",
+ "PerplexityBot", "Perplexity-User", "Google-Extended", "Applebot-Extended", "CCBot",
+ "Amazonbot", "Bytespider", "Meta-ExternalAgent", "cohere-ai", "DuckAssistBot", "MistralAI-User"]
+
+ORG_ID = "https://tigersystem.io/#organization"
+# The photos of the colour gallery (site/assets/pods/), as in the README.
+POD_COLOURS = ["red", "orange", "yellow", "green", "cyan", "blue", "purple", "pink", "gold", "copper",
+ "silver", "grey", "black", "white", "glow"]
+POD_FINISHES = ["silk-red", "silk-pink", "silk-yellow", "silk-blue", "silk-black", "silk-gold", "silk-copper",
+ "silk-silver", "galaxy-purple", "marble", "rainbow-linear", "rainbow-multi",
+ "glow-green-dark", "glow-blue-dark", "glow-red-dark"]
+STEPS = 5
+FAQ_COUNT = 8
+
+PLACEHOLDER = re.compile(r"\{\{([a-z0-9_@]+)\}\}")
+
+
+def asset_version(name):
+ """Short sha256 of a published site file, appended to its URL as ?v=."""
+ return hashlib.sha256((HERE / name).read_bytes()).hexdigest()[:10]
+
+
+def page_date():
+ """Last change to the site or the README, as an ISO date."""
+ try:
+ date = subprocess.run(["git", "log", "-1", "--format=%cI", "--", "site", "README.md", "llms.txt"],
+ cwd=REPO, capture_output=True, text=True, check=True).stdout.strip()[:10]
+ except (OSError, subprocess.CalledProcessError):
+ date = ""
+ return date or datetime.now(timezone.utc).date().isoformat()
+
+
+def load_dictionaries():
+ """Every language, checked against English: same keys, none empty."""
+ dicts = {}
+ for lang in LANGS:
+ path = HERE / "i18n" / f"{lang}.json"
+ if not path.exists():
+ raise SystemExit(f"error: missing translation {path.relative_to(REPO)}")
+ dicts[lang] = json.loads(path.read_text(encoding="utf-8"))
+ reference = list(dicts["en"])
+ problems = []
+ for lang, words in dicts.items():
+ missing = [k for k in reference if k not in words]
+ extra = [k for k in words if k not in dicts["en"]]
+ empty = [k for k, v in words.items() if not isinstance(v, str) or not v.strip()]
+ for label, keys in (("missing", missing), ("unknown", extra), ("empty", empty)):
+ if keys:
+ problems.append(f"{lang}.json: {label} key(s): {', '.join(keys)}")
+ template_keys = set(PLACEHOLDER.findall((HERE / "template.html").read_text(encoding="utf-8")))
+ unused = [k for k in template_keys if not k.startswith("@") and k not in dicts["en"]]
+ if unused:
+ problems.append(f"template.html uses unknown key(s): {', '.join(sorted(unused))}")
+ if problems:
+ raise SystemExit("error: translations do not match en.json\n " + "\n ".join(problems))
+ return dicts
+
+
+def page_path(lang):
+ return "" if lang == "en" else f"{lang}/"
+
+
+def jsonld(lang, words, site_url, url, date):
+ inlang = HTML_LANG.get(lang, lang)
+ image = site_url + "assets/og.jpg"
+ org = {"@context": "https://schema.org", "@type": "Organization", "@id": ORG_ID, "name": "TigerTag Corp",
+ "url": "https://tigersystem.io", "logo": site_url + "assets/apple-touch-icon.png",
+ "email": "tigertag@tigertag.io",
+ "sameAs": ["https://github.com/TigerTag-Project", "https://wiki.tigersystem.io",
+ "https://tigertag-project.github.io/TigerTag-RFID-Guide/"]}
+ website = {"@context": "https://schema.org", "@type": "WebSite", "name": "TigerPOD", "url": url,
+ "inLanguage": inlang, "description": words["meta_description"], "publisher": {"@id": ORG_ID}}
+ product = {"@context": "https://schema.org", "@type": "Product", "name": "TigerPOD",
+ "description": words["meta_description"], "image": image, "url": url,
+ "brand": {"@type": "Brand", "name": "TigerTag"}, "manufacturer": {"@id": ORG_ID},
+ "category": "NFC reader and writer for 3D-printing filament spools",
+ "isRelatedTo": {"@type": "Product", "name": "TigerPOD Mini", "url": MAKERWORLD_MINI}}
+ design = {"@context": "https://schema.org", "@type": "CreativeWork",
+ "name": "TigerPOD open hardware design", "description": words["shells_lead"],
+ "inLanguage": inlang, "url": REPO_URL, "image": image, "dateModified": date,
+ "license": "https://creativecommons.org/licenses/by/4.0/",
+ "author": {"@type": "Person", "name": "Benoit Michaut"}, "publisher": {"@id": ORG_ID},
+ "workExample": [{"@type": "CreativeWork", "name": "TigerPOD Mini", "url": MAKERWORLD_MINI},
+ {"@type": "CreativeWork", "name": "TigerPOD (original)", "url": MAKERWORLD_ORIGINAL}]}
+ howto = {"@context": "https://schema.org", "@type": "HowTo", "name": words["build_title"],
+ "description": words["build_lead"], "inLanguage": inlang, "image": image,
+ "supply": [{"@type": "HowToSupply", "name": words[k]} for k in ("part_reader", "part_tags", "part_shell")],
+ "step": [{"@type": "HowToStep", "position": i, "name": words[f"step{i}_title"],
+ "text": words[f"step{i}_text"], "url": f"{url}#step{i}"} for i in range(1, STEPS + 1)]}
+ faq = {"@context": "https://schema.org", "@type": "FAQPage", "inLanguage": inlang,
+ "mainEntity": [{"@type": "Question", "name": words[f"faq{i}_q"],
+ "acceptedAnswer": {"@type": "Answer", "text": words[f"faq{i}_a"]}}
+ for i in range(1, FAQ_COUNT + 1)]}
+ # `` never appears inside a "
+ for j in (org, website, product, design, howto, faq))
+
+
+def pod_row(names, base, alt):
+ """One gallery row: the last photo carries the row's description, the others are its duplicates."""
+ return "\n".join(
+ f' ' for i, name in enumerate(names))
+
+
+def render(template, lang, words, dicts, site_url, date):
+ base = "" if lang == "en" else "../"
+ url = site_url + page_path(lang)
+
+ alternates = [f'' for l in LANGS]
+ alternates.append(f'')
+
+ menu = []
+ for l in LANGS:
+ current = ' aria-current="true"' if l == lang else ""
+ menu.append(f'
')
+
+ special = {
+ "@lang": lang,
+ "@htmllang": HTML_LANG.get(lang, lang),
+ "@oglocale": OG_LOCALE[lang],
+ "@oglocalealt": "\n".join(f'' for l in LANGS if l != lang),
+ "@url": url,
+ "@siteurl": site_url,
+ "@base": base,
+ "@langpath": page_path(lang),
+ "@alternates": "\n".join(alternates),
+ "@langmenu": "\n".join(menu),
+ "@jsonld": jsonld(lang, words, site_url, url, date),
+ "@podcolours": pod_row(POD_COLOURS, base, words["colours_alt"]),
+ "@podfinishes": pod_row(POD_FINISHES, base, words["finishes_alt"]),
+ "@mini": MAKERWORLD_MINI,
+ "@original": MAKERWORLD_ORIGINAL,
+ # Content hashes: a new site.css / site.js gets a new URL, so no browser
+ # keeps the previous one from its cache.
+ "@vcss": asset_version("site.css"),
+ "@vjs": asset_version("site.js"),
+ }
+
+ def fill(match):
+ key = match.group(1)
+ if key in special:
+ return special[key]
+ return html.escape(words[key], quote=True)
+
+ return PLACEHOLDER.sub(fill, template)
+
+
+def build(out, site_url):
+ dicts = load_dictionaries()
+ template = (HERE / "template.html").read_text(encoding="utf-8")
+ date = page_date()
+ if out.exists():
+ shutil.rmtree(out)
+ (out / "assets").mkdir(parents=True)
+
+ for lang in LANGS:
+ target = out / page_path(lang) / "index.html"
+ target.parent.mkdir(parents=True, exist_ok=True)
+ target.write_text(render(template, lang, dicts[lang], dicts, site_url, date), encoding="utf-8")
+
+ for name in ("site.css", "site.js"):
+ shutil.copy2(HERE / name, out / name)
+ for source, published in ASSETS.items():
+ shutil.copy2(REPO / source, out / "assets" / published)
+ # Web-sized pictures made for the site (site/assets/), from the README's photos.
+ shutil.copytree(HERE / "assets", out / "assets", dirs_exist_ok=True)
+ shutil.copy2(HERE / "og.jpg", out / "assets" / "og.jpg")
+ # The machine-readable description of the project, at the site root too.
+ shutil.copy2(REPO / "llms.txt", out / "llms.txt")
+
+ urls = "\n".join(
+ " {}{}{}".format(
+ site_url + page_path(lang), date,
+ "".join(f'' for l in LANGS))
+ for lang in LANGS)
+ (out / "sitemap.xml").write_text(
+ '\n'
+ '\n'
+ f"{urls}\n\n", encoding="utf-8")
+ robots = ["User-agent: *", "Allow: /", ""]
+ for agent in AI_AGENTS:
+ robots += [f"User-agent: {agent}", "Allow: /", ""]
+ robots += [f"Sitemap: {site_url}sitemap.xml"]
+ (out / "robots.txt").write_text("\n".join(robots) + "\n", encoding="utf-8")
+ (out / ".nojekyll").write_text("", encoding="utf-8")
+ print(f"built {len(LANGS)} languages into {out}")
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--out", default=str(REPO / "_site"))
+ parser.add_argument("--url", default=SITE_URL)
+ parser.add_argument("--check", action="store_true")
+ parser.add_argument("--only", help="comma-separated languages, for a quick local preview")
+ args = parser.parse_args()
+ if args.only:
+ LANGS[:] = [l for l in LANGS if l in args.only.split(",")]
+ if args.check:
+ load_dictionaries()
+ print(f"translations OK: {len(LANGS)} languages")
+ return
+ url = args.url if args.url.endswith("/") else args.url + "/"
+ build(Path(args.out), url)
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/site/i18n/de.json b/site/i18n/de.json
new file mode 100644
index 0000000..db1fdf8
--- /dev/null
+++ b/site/i18n/de.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Deutsch",
+ "skip": "Zum Inhalt springen",
+ "theme_label": "Helles oder dunkles Design",
+ "lang_label": "Sprache",
+ "meta_title": "TigerPOD: Open-Source-NFC-Leser für Filamentspulen",
+ "meta_description": "Bau dir einen NFC-Leser und -Schreiber für Filamentspulen aus zwei USB-Lesegeräten und einem 3D-gedruckten Gehäuse. Offenes Design, CC-BY-4.0.",
+ "og_title": "TigerPOD: ein CD-Player, für Spulen",
+ "og_description": "Spule einlegen, und dein Computer liest und beschreibt ihre NFC-Chips. Zwei handelsübliche USB-Lesegeräte, ein 3D-gedrucktes Gehäuse, kein Löten.",
+ "og_alt": "TigerPOD-Gehäuse in neun Farben gedruckt, jedes mit einer Filamentspule",
+ "nav_what": "Funktionen",
+ "nav_shells": "Gehäuse",
+ "nav_build": "Selbst bauen",
+ "nav_kit": "Kit",
+ "nav_colours": "Farben",
+ "nav_eco": "Ökosystem",
+ "nav_dev": "Entwickler",
+ "nav_faq": "FAQ",
+ "hero_kicker": "Open-Source-NFC-Leser und -Schreiber für Filamentspulen",
+ "hero_headline": "Ein CD-Player, für Spulen.",
+ "hero_lead": "Leg eine Filamentspule ein, und dein Computer liest ihre TigerTag-Chips: Material, Marke, Farbe, Temperaturen, Restmenge. Ein Tag wird genauso beschrieben. Zwei handelsübliche USB-NFC-Lesegeräte und ein 3D-gedrucktes Gehäuse, sonst nichts.",
+ "hero_alt": "Neun TigerPOD-Gehäuse in Schwarz, Blau, Lila, Rosa, Rot, Orange, Gelb, Grün und Weiß, jedes mit einer Filamentspule",
+ "cta_build": "Bau deinen TigerPOD",
+ "cta_kit": "Elektronik-Kit holen",
+ "cta_repo": "README lesen",
+ "fact1_value": "2",
+ "fact1_label": "ACR122U-kompatible USB-Lesegeräte, je eines pro Spulenseite",
+ "fact2_value": "0",
+ "fact2_label": "Schrauben, Kleber, Kabel oder Lötstellen: Die Lesegeräte werden ins Gehäuse geschoben",
+ "fact3_value": "~99%",
+ "fact3_label": "der 1-kg-Spulen passen: Kunststoff, Karton, Einweg und Refills",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "offenes Design und offene Dokumentation, frei zum Drucken, Ändern und Teilen",
+ "what_title": "Was macht der TigerPOD?",
+ "what_lead": "Der TigerPOD liest und beschreibt die NFC-Chips einer Filamentspule auf deinem Schreibtisch: zwei Standard-PC/SC-Lesegeräte, von einer 3D-gedruckten Halterung gegenüber gehalten und von Tiger Studio Manager gesteuert.",
+ "demo_alt": "Eine Spule wird in einen roten TigerPOD gelegt, die Leuchte des Lesegeräts geht an, während der Chip gelesen wird",
+ "what1_title": "Einlegen, ohne zu zielen",
+ "what1_text": "Mit einem Chip auf jeder Spulenseite und einem Lesegerät vor jedem Chip liegt immer ein Chip vor einem Lesegerät, egal wie herum die Spule eingelegt wird.",
+ "what2_title": "Beide Chips gleichzeitig",
+ "what2_text": "Der Pod liest und beschreibt die beiden Chips einer Spule zusammen, sodass das Twin-Tag-Paar byte-identisch bleibt und dein Inventar eine Spule zählt, nicht zwei Tags.",
+ "what3_title": "Volle Kontrolle über den Chip",
+ "what3_text": "Lies aus, was auf einem Tag steht, schreib einen neuen, ändere ihn und lösch ihn wieder leer. Ein TigerTag ist nie schreibgeschützt: Überschreib ihn so oft du willst.",
+ "what4_title": "Eine universelle NFC-Station",
+ "what4_text": "Alles, was ein ACR122U kann, kann auch der Pod: ISO 14443 A und B, MIFARE Classic, Ultralight und DESFire, FeliCa, Topaz/Jewel, NFC-Forum-Typen 1 bis 4. ISO-15693-Tags werden nicht unterstützt.",
+ "what5_title": "Keine Elektronik zu lernen",
+ "what5_text": "Handelsübliche Lesegeräte über PC/SC, den Smartcard-Standard, der in Windows, macOS und Linux eingebaut ist. Keine eigene Platine, kein proprietäres Lesegerät, kein Herstellertreiber.",
+ "what6_title": "Offline, und Chips bekommen ein zweites Leben",
+ "what6_text": "Der Pod liest und schreibt lokal; nichts wird nach Hause gefunkt. Ein gebrauchter Spulenchip lässt sich als einfacher NDEF-Tag neu beschreiben (eine URL, Hausautomation, eine Visitenkarte) und wieder zurück in einen TigerTag.",
+ "shells_title": "Zwei Gehäuse zum Drucken",
+ "shells_lead": "Der TigerPOD ist eine Idee: zwei ACR122U-Lesegeräte gegenüber, von einer 3D-gedruckten Halterung im richtigen Abstand gehalten. Beide veröffentlichten Gehäuse nehmen dieselben zwei Lesegeräte auf; wähl das, das zu deinem Schreibtisch passt.",
+ "mini_badge": "Empfohlen",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Ein neu gestaltetes, kompakteres Gehäuse: Es druckt schneller, braucht weniger Filament, nimmt weniger Platz auf dem Schreibtisch ein und führt die Kabel innen. Es liest und beschreibt sowohl TigerTag- als auch OpenSpool-Tags (NDEF).",
+ "mini_alt": "Der kompakte TigerPOD Mini mit einer Filamentspule, auf jeder Seite ein aufrecht stehendes Lesegerät",
+ "orig_title": "TigerPOD (Original)",
+ "orig_text": "Das erste Gehäuse, ausgelegt für eine Standard-1-kg-Spule. Dieselben zwei Lesegeräte, dieselben Funktionen.",
+ "open_makerworld": "Druckdateien auf MakerWorld",
+ "concept_title": "Die Form darfst du ändern",
+ "concept_text": "Nur die beiden gegenüberliegenden Lesegeräte zählen; die Halterung drumherum ist ein Detail. Gestalte sie für ein anderes Spulenformat oder einen anderen Zweck neu, und es ist immer noch ein Pod. Teil deinen Remix auf MakerWorld und eröffne ein Issue mit dem Link.",
+ "concept_link": "Mitmachen",
+ "build_title": "Wie baue ich einen TigerPOD?",
+ "build_lead": "Für einen TigerPOD brauchst du einen 3D-Druck und zwei USB-Lesegeräte: keine Elektronikkenntnisse, kein Löten, keine Verkabelung.",
+ "step1_title": "Gehäuse drucken",
+ "step1_text": "Den TigerPOD Mini (empfohlen) oder das Original, beide auf MakerWorld, in einem Filament deiner Wahl.",
+ "step2_title": "Zwei Lesegeräte besorgen",
+ "step2_text": "Zwei ACR122U-kompatible USB-NFC-Lesegeräte aus einem beliebigen Shop, dazu NTAG-213-, -215- oder -216-Tags zum Beschreiben.",
+ "step3_title": "Einschieben",
+ "step3_text": "Ein Lesegerät in jeden Schacht des Gehäuses. Keine Schrauben, kein Kleber, keine Kabel.",
+ "step4_title": "Anschließen",
+ "step4_text": "Verbinde beide Lesegeräte mit deinem Computer. Mit einem USB-Splitter 2 auf 1 reicht ein Kabel; zwei Anschlüsse gehen auch.",
+ "step5_title": "Tiger Studio Manager installieren",
+ "step5_text": "Die kostenlose Desktop-App erkennt die Lesegeräte automatisch. Spule einlegen.",
+ "parts_title": "Teileliste",
+ "part_reader": "ACR122U-kompatibles NFC-Lesegerät",
+ "part_reader_qty": "2, eines pro Spulenseite",
+ "part_tags": "NTAG-213-/215-/216-Tags",
+ "part_tags_qty": "1 Packung: zwei Chips pro Spule",
+ "part_shell": "3D-gedrucktes Gehäuse",
+ "part_shell_qty": "1, aus deinem Filament gedruckt",
+ "part_splitter": "USB-Splitter 2 auf 1",
+ "part_splitter_qty": "optional: zwei USB-Anschlüsse gehen auch",
+ "reader_alt": "ACR122U-kompatibles USB-NFC-Lesegerät",
+ "splitter_alt": "USB-Splitterkabel zwei auf eins",
+ "affiliate_note": "Einige Hardware-Links sind Amazon-Affiliate-Links: Als Amazon-Partner verdient TigerTag an qualifizierten Verkäufen, ohne Mehrkosten für dich.",
+ "os_title": "Windows, macOS und Linux",
+ "os_windows": "Windows: wird sofort erkannt, der PC/SC-Dienst ist Teil von Windows. Falls ein Hilfstreiber zur Kartenemulation das Lesegerät übernimmt, entferne ihn.",
+ "os_macos": "macOS: funktioniert mit dem eingebauten PC/SC-Stack, kein zusätzlicher Treiber.",
+ "os_linux": "Linux: Installiere PC/SC und den ACS/CCID-Treiber und stell sicher, dass der Dienst pcscd läuft.",
+ "kit_title": "Oder hol dir das Elektronik-Kit",
+ "kit_lead": "Der TigerTag-Shop verkauft die Elektronik fertig zum Einschieben: Lesegeräte mit dem offiziellen Logo des Projekts, dazu den Splitter. Mit dem Kauf des Kits finanzierst du den offenen Standard.",
+ "kit_bundle": "TigerPOD-Bundle: 2 Lesegeräte und Splitter",
+ "kit_single": "Einzelnes Lesegerät",
+ "kit_splitter": "Nur Splitter",
+ "kit_note": "Das Kit enthält nur die Elektronik: Das Gehäuse druckst du selbst. Ein Pod aus generischen Teilen ist derselbe Pod.",
+ "kit_shop": "Zum Shop",
+ "colours_title": "Er kommt in der Farbe, die du einlegst",
+ "colours_lead": "Du druckst ihn selbst, also bekommt der Pod die Farbe und Oberfläche deines Filaments: Silk, Galaxy, Marmor, nachleuchtend.",
+ "colours_alt": "TigerPOD-Gehäuse in fünfzehn Farben gedruckt: Rot, Orange, Gelb, Grün, Cyan, Blau, Lila, Rosa, Gold, Kupfer, Silber, Grau, Schwarz, Weiß und nachleuchtend",
+ "finishes_alt": "TigerPOD-Gehäuse mit besonderen Oberflächen: acht Silk-Farben, Galaxy-Lila, Marmor, zwei Regenbogen und drei nachleuchtende Drucke, bei ausgeschaltetem Licht fotografiert",
+ "colours_more": "Alle Fotos in voller Auflösung und als transparente Freisteller im Repository",
+ "eco_title": "Wo passt der TigerPOD hin?",
+ "eco_lead": "Der TigerPOD ist das NFC des Desktops im TigerTag-System: Dieselbe Spule wird vom Pod, von Tiger Studio Manager auf dem Computer und von einem Smartphone gelesen.",
+ "eco_alt": "Das TigerTag-System: ein blauer TigerPOD mit einer Spule, Tiger Studio Manager auf einem Desktop-Bildschirm und die mobile App auf einem Smartphone",
+ "eco_protocol_title": "Das TigerTag-Protokoll",
+ "eco_protocol_text": "Die offene Spezifikation und das öffentliche Register, die der Pod liest und schreibt (CC-BY-4.0, unwiderrufliche Implementierungserlaubnis).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "Die kostenlose Desktop-App (MIT): Inventar, Drucker und das Zuhause des Pods. Sie steuert die Lesegeräte über PC/SC.",
+ "eco_phone_title": "Auf dem Smartphone, ganz ohne Pod",
+ "eco_phone_text": "Ein TigerTag-Chip ist ein Standard-NFC-Tag: Jedes Smartphone mit NFC liest ihn, und die mobile App beschreibt ihn mit dem NFC des Smartphones.",
+ "eco_sdk_title": "SDKs",
+ "eco_sdk_text": "JavaScript und Python (Apache-2.0): Dekodiere einen Tag offline aus seinen Rohbytes, in deinem eigenen Code.",
+ "eco_community_title": "Community",
+ "eco_community_text": "Fragen, Fotos von Builds und Remixe auf dem TigerTag-Discord.",
+ "open": "Öffnen",
+ "repo": "Repository",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Wie lese ich einen Tag in meinem eigenen Code?",
+ "dev_lead": "Ein TigerTag speichert alles auf dem Chip, daher sind es in jeder Sprache dieselben zwei Schritte, ohne Datenbankabfrage und ohne Netzwerk.",
+ "dev1_title": "1. Rohbytes auslesen",
+ "dev1_text": "Lies mit einer beliebigen NFC-Bibliothek die 7-Byte-UID und den Benutzerspeicher, Seiten 0x04 bis 0x27: 36 Seiten zu je 4 Bytes, 144 Bytes. Auf dem Desktop steuern nfc-pcsc (Node, von Tiger Studio Manager genutzt) oder pyscard (Python) den ACR122U über PC/SC.",
+ "dev2_title": "2. Offline dekodieren",
+ "dev2_text": "Übergib diese Bytes dem TigerTag-SDK. Es liefert Material, Marke, Farbe, Temperaturen und Gewicht und kann die Signatur prüfen. Das SDK greift nie auf das Lesegerät zu.",
+ "dev_play_title": "Teste den Pod im Playground",
+ "dev_play_text": "Beide SDKs bringen einen Playground mit, einen kleinen lokalen Server und eine Webseite. Der JavaScript-Playground verbindet sich über PC/SC mit dem ACR122U und zeigt Kartenereignisse live: Leg eine Spule in den Pod und sieh zu, wie sie im Browser dekodiert wird.",
+ "faq_title": "Häufige Fragen",
+ "faq1_q": "Kann ich nur ein Lesegerät verwenden?",
+ "faq1_a": "Ja. Ein einzelner Chip und ein einzelnes Lesegerät funktionieren, aber du musst die Seite der Spule mit dem Tag zum Lesegerät drehen, und die beiden Chips einer Spule werden nicht mehr automatisch synchron gehalten.",
+ "faq2_q": "Welche Spulen passen in den TigerPOD?",
+ "faq2_a": "Etwa 99 % der 1-kg-Spulen, egal welcher Typ: Masterspools aus Kunststoff, Kartonspulen, Einwegspulen aus Kunststoff und Refills.",
+ "faq3_q": "NTAG 213, 215 oder 216: welcher?",
+ "faq3_a": "Sie unterscheiden sich nur im Speicher: etwa 144 Bytes beim 213, 504 beim 215 und 888 beim 216. Jeder davon fasst einen TigerTag-Datensatz; nimm 215 oder 216 für mehr Reserve. Alle drei funktionieren im Pod.",
+ "faq4_q": "Mein Lesegerät wird nicht erkannt. Was sollte ich prüfen?",
+ "faq4_a": "Stell sicher, dass es ein ACR122U-kompatibles PC/SC-Lesegerät ist. Unter Linux installierst du den CCID-Treiber und startest den Dienst pcscd. Zieh das Lesegerät einmal ab, steck es wieder ein und starte Tiger Studio Manager neu.",
+ "faq5_q": "Kann ich die Tags wiederverwenden?",
+ "faq5_a": "Ja. TigerTags sind nie gesperrt: Lösch sie und beschreib sie so oft du willst als neue TigerTags, oder mach daraus einfache NDEF-Tags für eine andere NFC-Anwendung und wieder zurück.",
+ "faq6_q": "Kann der Pod auch anderes NFC als TigerTag?",
+ "faq6_a": "Ja. Es sind zwei Standard-ACR122U-Lesegeräte, er liest, schreibt, überschreibt und löscht also alles, was ein ACR122U unterstützt: ISO 14443 A und B, MIFARE Classic, Ultralight und DESFire, FeliCa, Topaz/Jewel und NFC-Forum-Typen 1 bis 4.",
+ "faq7_q": "Braucht der TigerPOD eine Internetverbindung?",
+ "faq7_a": "Nein. Der Pod liest und schreibt lokal, und nichts wird nach Hause gefunkt.",
+ "faq8_q": "Brauche ich einen TigerPOD, um einen TigerTag zu lesen?",
+ "faq8_a": "Nein. Ein TigerTag-Chip ist ein Standard-NFC-Tag, also kann jedes Smartphone mit NFC ihn lesen, und die mobile App kann ihn beschreiben. Der Pod ist das NFC des Desktops: Einlegen genügt, um beide Chips einer Spule zu lesen und zu beschreiben.",
+ "join_title": "Bau deinen TigerPOD",
+ "join_text": "Druck den Mini, schieb zwei Lesegeräte ein, installier Tiger Studio Manager. Fragen und Fotos von Builds sind auf Discord willkommen.",
+ "join_btn": "TigerPOD Mini drucken",
+ "foot_licences": "Design und Dokumentation des TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDKs: Apache-2.0.",
+ "foot_trademark": "Name und Logo von TigerTag sind Marken der TigerTag Corp.",
+ "foot_source": "Quellcode dieser Website",
+ "foot_protocol": "TigerTag-Protokoll"
+}
diff --git a/site/i18n/en.json b/site/i18n/en.json
new file mode 100644
index 0000000..1f8d49c
--- /dev/null
+++ b/site/i18n/en.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "English",
+ "skip": "Skip to content",
+ "theme_label": "Light or dark theme",
+ "lang_label": "Language",
+ "meta_title": "TigerPOD: open-source NFC reader for filament spools",
+ "meta_description": "Build a desktop NFC reader and writer for 3D-printing filament spools from two USB readers and a 3D-printed shell. Open design, CC-BY-4.0.",
+ "og_title": "TigerPOD: a CD player, for spools",
+ "og_description": "Drop a filament spool in and your computer reads and writes its NFC chips. Two commodity USB readers, one 3D-printed shell, no soldering.",
+ "og_alt": "TigerPOD shells printed in nine colours, each holding a filament spool",
+ "nav_what": "What it does",
+ "nav_shells": "Shells",
+ "nav_build": "Build one",
+ "nav_kit": "Kit",
+ "nav_colours": "Colours",
+ "nav_eco": "Ecosystem",
+ "nav_dev": "Developers",
+ "nav_faq": "FAQ",
+ "hero_kicker": "Open-source NFC reader and writer for filament spools",
+ "hero_headline": "A CD player, for spools.",
+ "hero_lead": "Drop a 3D-printing filament spool in and your computer reads its TigerTag chips: material, brand, colour, temperatures, what is left. Writing a tag works the same way. Two commodity USB NFC readers and a 3D-printed shell, nothing else.",
+ "hero_alt": "Nine TigerPOD shells in black, blue, purple, pink, red, orange, yellow, green and white, each holding a filament spool",
+ "cta_build": "Build your TigerPOD",
+ "cta_kit": "Get the electronics kit",
+ "cta_repo": "Read the README",
+ "fact1_value": "2",
+ "fact1_label": "ACR122U-compatible USB readers, one facing each side of the spool",
+ "fact2_value": "0",
+ "fact2_label": "screws, glue, wires or soldering: the readers slide into the shell",
+ "fact3_value": "~99%",
+ "fact3_label": "of 1 kg spools fit: plastic, cardboard, non-reusable and refills",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "open design and documentation, free to print, change and share",
+ "what_title": "What does the TigerPOD do?",
+ "what_lead": "The TigerPOD reads and writes the NFC chips of a filament spool on your desk: two standard PC/SC readers held face to face by a 3D-printed support, driven by Tiger Studio Manager.",
+ "demo_alt": "A spool dropped into a red TigerPOD, its reader light switching on as the chip is read",
+ "what1_title": "Drop it in, no aiming",
+ "what1_text": "With one chip on each side of the spool and one reader facing each chip, a chip is always in front of a reader, whichever way the spool goes in.",
+ "what2_title": "Both chips at once",
+ "what2_text": "The Pod reads and writes the two chips of a spool together, so the Twin Tag pair stays byte-identical and your inventory counts one spool, not two tags.",
+ "what3_title": "Full control of the chip",
+ "what3_text": "Read what is on a tag, write a new one, change it and erase it back to blank. A TigerTag is never write-locked: rewrite it as many times as you want.",
+ "what4_title": "A universal NFC station",
+ "what4_text": "Anything an ACR122U handles, the Pod handles: ISO 14443 A and B, MIFARE Classic, Ultralight and DESFire, FeliCa, Topaz/Jewel, NFC Forum types 1 to 4. ISO 15693 tags are outside its range.",
+ "what5_title": "No electronics to learn",
+ "what5_text": "Commodity readers over PC/SC, the smart-card standard built into Windows, macOS and Linux. No custom board, no proprietary reader, no driver from a vendor.",
+ "what6_title": "Offline, and chips get a second life",
+ "what6_text": "The Pod reads and writes locally; nothing phones home. A used spool chip can be rewritten as a plain NDEF tag (a URL, home automation, a business card) and back into a TigerTag.",
+ "shells_title": "Two shells to print",
+ "shells_lead": "The TigerPOD is one idea: two ACR122U readers facing each other, held at the right distance by a 3D-printed support. Both published shells hold the same two readers; pick the one that suits your desk.",
+ "mini_badge": "Recommended",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "A redesigned, more compact shell: it prints faster, uses less filament, takes less desk space and routes the cables inside. It reads and writes both TigerTag and OpenSpool (NDEF) tags.",
+ "mini_alt": "The compact TigerPOD Mini holding a filament spool, one upright reader on each side",
+ "orig_title": "TigerPOD (original)",
+ "orig_text": "The first shell, sized for a standard 1 kg spool. Same two readers, same features.",
+ "open_makerworld": "Print files on MakerWorld",
+ "concept_title": "The shape is yours to change",
+ "concept_text": "Only the two facing readers matter; the holder around them is a detail. Redesign it for another spool format or another use, and it is still a Pod. Share your remix on MakerWorld and open an issue that links to it.",
+ "concept_link": "How to contribute",
+ "build_title": "How do I build a TigerPOD?",
+ "build_lead": "Building a TigerPOD takes a 3D print and two USB readers: no electronics knowledge, no soldering, no wiring.",
+ "step1_title": "Print a shell",
+ "step1_text": "The TigerPOD Mini (recommended) or the original, both on MakerWorld, in any filament you like.",
+ "step2_title": "Get two readers",
+ "step2_text": "Two ACR122U-compatible USB NFC readers from any shop, and NTAG 213, 215 or 216 tags to write on.",
+ "step3_title": "Slide them in",
+ "step3_text": "One reader into each slot of the shell. No screws, no glue, no wiring.",
+ "step4_title": "Plug in",
+ "step4_text": "Connect both readers to your computer. A 2-to-1 USB splitter makes it one cable; two ports work too.",
+ "step5_title": "Install Tiger Studio Manager",
+ "step5_text": "The free desktop app picks the readers up automatically. Drop a spool in.",
+ "parts_title": "Parts list",
+ "part_reader": "ACR122U-compatible NFC reader",
+ "part_reader_qty": "2, one per side of the spool",
+ "part_tags": "NTAG 213 / 215 / 216 tags",
+ "part_tags_qty": "1 pack: two chips per spool",
+ "part_shell": "3D-printed shell",
+ "part_shell_qty": "1, printed in your filament",
+ "part_splitter": "2-to-1 USB splitter",
+ "part_splitter_qty": "optional: two USB ports work too",
+ "reader_alt": "ACR122U-compatible USB NFC reader",
+ "splitter_alt": "Two-to-one USB splitter cable",
+ "affiliate_note": "Some hardware links are Amazon affiliate links: as an Amazon Associate, TigerTag earns from qualifying purchases, at no extra cost to you.",
+ "os_title": "Windows, macOS and Linux",
+ "os_windows": "Windows: recognised out of the box, the PC/SC service ships with Windows. If a card-emulation helper driver takes over the reader, remove it.",
+ "os_macos": "macOS: works with the built-in PC/SC stack, no extra driver.",
+ "os_linux": "Linux: install PC/SC and the ACS/CCID driver, then make sure the pcscd service is running.",
+ "kit_title": "Or get the electronics kit",
+ "kit_lead": "The TigerTag shop sells the electronics ready to slide in: readers carrying the project's official logo, and the splitter. Buying the kit funds the open standard.",
+ "kit_bundle": "TigerPOD bundle: 2 readers and splitter",
+ "kit_single": "Single reader",
+ "kit_splitter": "Splitter alone",
+ "kit_note": "The kit is the electronics only: you still print the shell yourself. A Pod built from generic parts is the same Pod.",
+ "kit_shop": "Open the shop",
+ "colours_title": "It comes in whatever colour you load",
+ "colours_lead": "You print it yourself, so the Pod takes the colour and finish of your filament: silk, galaxy, marble, glow-in-the-dark.",
+ "colours_alt": "TigerPOD shells printed in fifteen colours: red, orange, yellow, green, cyan, blue, purple, pink, gold, copper, silver, grey, black, white and glow-in-the-dark",
+ "finishes_alt": "TigerPOD shells in special finishes: eight silk colours, galaxy purple, marble, two rainbows and three glow-in-the-dark prints photographed with the lights off",
+ "colours_more": "Every photo in full resolution, and as transparent cut-outs, in the repository",
+ "eco_title": "Where does the TigerPOD fit?",
+ "eco_lead": "The TigerPOD is the desktop's NFC in the TigerTag system: the same spool is read by the Pod, by Tiger Studio Manager on the computer and by a phone.",
+ "eco_alt": "The TigerTag system: a blue TigerPOD holding a spool, Tiger Studio Manager on a desktop screen and the mobile app on a phone",
+ "eco_protocol_title": "The TigerTag protocol",
+ "eco_protocol_text": "The open specification and public registry the Pod reads and writes (CC-BY-4.0, irrevocable implementation grant).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "The free desktop app (MIT): inventory, printers, and the Pod's home. It drives the readers over PC/SC.",
+ "eco_phone_title": "On a phone, no Pod needed",
+ "eco_phone_text": "A TigerTag chip is a standard NFC tag: any phone with NFC reads it, and the mobile app writes it with the phone's own NFC.",
+ "eco_sdk_title": "SDKs",
+ "eco_sdk_text": "JavaScript and Python (Apache-2.0): decode a tag offline from its raw bytes, in your own code.",
+ "eco_community_title": "Community",
+ "eco_community_text": "Questions, build photos and remixes on the TigerTag Discord.",
+ "open": "Open",
+ "repo": "Repository",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "How do I read a tag in my own code?",
+ "dev_lead": "A TigerTag stores everything on the chip, so reading is the same two steps in any language, with no lookup and no network.",
+ "dev1_title": "1. Get the raw bytes",
+ "dev1_text": "With any NFC library, read the 7-byte UID and the user memory, pages 0x04 to 0x27: 36 pages of 4 bytes, 144 bytes. On the desktop, nfc-pcsc (Node, used by Tiger Studio Manager) or pyscard (Python) drive the ACR122U over PC/SC.",
+ "dev2_title": "2. Decode offline",
+ "dev2_text": "Hand those bytes to the TigerTag SDK. It returns material, brand, colour, temperatures and weight, and can verify the signature. The SDK never touches the reader.",
+ "dev_play_title": "Test the Pod in the playground",
+ "dev_play_text": "Both SDKs ship a playground, a small local server and a web page. The JavaScript one connects to the ACR122U over PC/SC and shows live card events: drop a spool in the Pod and watch it decode in the browser.",
+ "faq_title": "Frequently asked questions",
+ "faq1_q": "Can I use just one reader?",
+ "faq1_a": "Yes. A single chip and a single reader work, but you have to present the tagged side of the spool, and the two chips of a spool are no longer kept in sync automatically.",
+ "faq2_q": "Which spools fit in the TigerPOD?",
+ "faq2_a": "About 99% of 1 kg spools, whatever the type: plastic masterspools, cardboard spools, non-reusable plastic spools and refills.",
+ "faq3_q": "NTAG 213, 215 or 216: which one?",
+ "faq3_a": "They differ only in memory: about 144 bytes for the 213, 504 for the 215 and 888 for the 216. Any of them holds a TigerTag record; pick 215 or 216 for more headroom. All three work in the Pod.",
+ "faq4_q": "My reader is not detected. What should I check?",
+ "faq4_a": "Make sure it is an ACR122U-compatible PC/SC reader. On Linux, install the CCID driver and start the pcscd service. Unplug and replug the reader once, then relaunch Tiger Studio Manager.",
+ "faq5_q": "Can I reuse the tags?",
+ "faq5_a": "Yes. TigerTags are never locked: erase and rewrite them as new TigerTags as often as you want, or turn them into plain NDEF tags for another NFC use and back again.",
+ "faq6_q": "Can the Pod do NFC work other than TigerTag?",
+ "faq6_a": "Yes. It is two standard ACR122U readers, so it reads, writes, rewrites and erases anything an ACR122U supports: ISO 14443 A and B, MIFARE Classic, Ultralight and DESFire, FeliCa, Topaz/Jewel and NFC Forum types 1 to 4.",
+ "faq7_q": "Does the TigerPOD need an internet connection?",
+ "faq7_a": "No. The Pod reads and writes locally, and nothing phones home.",
+ "faq8_q": "Do I need a TigerPOD to read a TigerTag?",
+ "faq8_a": "No. A TigerTag chip is a standard NFC tag, so any phone with NFC can read it, and the mobile app can write it. The Pod is the desktop's NFC: drop-in reading and writing of both chips of a spool.",
+ "join_title": "Build your TigerPOD",
+ "join_text": "Print the Mini, slide in two readers, install Tiger Studio Manager. Questions and build photos are welcome on Discord.",
+ "join_btn": "Print the TigerPOD Mini",
+ "foot_licences": "TigerPOD design and documentation: CC-BY-4.0. Tiger Studio Manager: MIT. SDKs: Apache-2.0.",
+ "foot_trademark": "The TigerTag name and logo are trademarks of TigerTag Corp.",
+ "foot_source": "Source of this site",
+ "foot_protocol": "TigerTag protocol"
+}
diff --git a/site/i18n/es.json b/site/i18n/es.json
new file mode 100644
index 0000000..3d2fbfd
--- /dev/null
+++ b/site/i18n/es.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Español",
+ "skip": "Saltar al contenido",
+ "theme_label": "Tema claro u oscuro",
+ "lang_label": "Idioma",
+ "meta_title": "TigerPOD: lector NFC de código abierto para bobinas",
+ "meta_description": "Construye un lector y grabador NFC de escritorio para bobinas de filamento con dos lectores USB y una carcasa impresa en 3D. Diseño abierto, CC-BY-4.0.",
+ "og_title": "TigerPOD: un reproductor de CD, para bobinas",
+ "og_description": "Coloca una bobina de filamento y tu ordenador lee y escribe sus chips NFC. Dos lectores USB comunes, una carcasa impresa en 3D, sin soldar.",
+ "og_alt": "Carcasas TigerPOD impresas en nueve colores, cada una con una bobina de filamento",
+ "nav_what": "Qué hace",
+ "nav_shells": "Carcasas",
+ "nav_build": "Constrúyelo",
+ "nav_kit": "Kit",
+ "nav_colours": "Colores",
+ "nav_eco": "Ecosistema",
+ "nav_dev": "Desarrolladores",
+ "nav_faq": "Preguntas",
+ "hero_kicker": "Lector y grabador NFC de código abierto para bobinas de filamento",
+ "hero_headline": "Un reproductor de CD, para bobinas.",
+ "hero_lead": "Coloca una bobina de filamento y tu ordenador lee sus chips TigerTag: material, marca, color, temperaturas, cuánto queda. Grabar un tag funciona igual. Dos lectores NFC USB comunes y una carcasa impresa en 3D, nada más.",
+ "hero_alt": "Nueve carcasas TigerPOD en negro, azul, morado, rosa, rojo, naranja, amarillo, verde y blanco, cada una con una bobina de filamento",
+ "cta_build": "Construye tu TigerPOD",
+ "cta_kit": "Consigue el kit electrónico",
+ "cta_repo": "Leer el README",
+ "fact1_value": "2",
+ "fact1_label": "lectores USB compatibles con ACR122U, uno frente a cada lado de la bobina",
+ "fact2_value": "0",
+ "fact2_label": "tornillos, pegamento, cables o soldaduras: los lectores se deslizan en la carcasa",
+ "fact3_value": "~99%",
+ "fact3_label": "de las bobinas de 1 kg caben: plástico, cartón, no reutilizables y recargas",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "diseño y documentación abiertos, libres para imprimir, modificar y compartir",
+ "what_title": "¿Qué hace el TigerPOD?",
+ "what_lead": "El TigerPOD lee y escribe los chips NFC de una bobina de filamento en tu escritorio: dos lectores PC/SC estándar sujetos cara a cara por un soporte impreso en 3D y controlados por Tiger Studio Manager.",
+ "demo_alt": "Una bobina colocada en un TigerPOD rojo, con la luz del lector encendiéndose al leer el chip",
+ "what1_title": "La colocas, sin apuntar",
+ "what1_text": "Con un chip en cada lado de la bobina y un lector frente a cada chip, siempre hay un chip delante de un lector, sea cual sea la orientación de la bobina.",
+ "what2_title": "Los dos chips a la vez",
+ "what2_text": "El Pod lee y escribe juntos los dos chips de una bobina, así el par Twin Tag sigue idéntico byte a byte y tu inventario cuenta una bobina, no dos tags.",
+ "what3_title": "Control total del chip",
+ "what3_text": "Lee lo que hay en un tag, graba uno nuevo, modifícalo y bórralo para dejarlo en blanco. Un TigerTag nunca está bloqueado contra escritura: regrábalo tantas veces como quieras.",
+ "what4_title": "Una estación NFC universal",
+ "what4_text": "Todo lo que maneja un ACR122U lo maneja el Pod: ISO 14443 A y B, MIFARE Classic, Ultralight y DESFire, FeliCa, Topaz/Jewel, tipos NFC Forum 1 a 4. Los tags ISO 15693 quedan fuera de su alcance.",
+ "what5_title": "Sin electrónica que aprender",
+ "what5_text": "Lectores comunes por PC/SC, el estándar de tarjetas inteligentes integrado en Windows, macOS y Linux. Sin placa a medida, sin lector propietario, sin controlador del fabricante.",
+ "what6_title": "Sin conexión, y los chips tienen una segunda vida",
+ "what6_text": "El Pod lee y escribe en local; nada se envía a ninguna parte. Un chip de bobina usado puede regrabarse como un simple tag NDEF (una URL, domótica, una tarjeta de visita) y volver a ser un TigerTag.",
+ "shells_title": "Dos carcasas para imprimir",
+ "shells_lead": "El TigerPOD es una idea: dos lectores ACR122U enfrentados, sujetos a la distancia justa por un soporte impreso en 3D. Las dos carcasas publicadas alojan los mismos dos lectores; elige la que mejor encaje en tu escritorio.",
+ "mini_badge": "Recomendado",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Una carcasa rediseñada y más compacta: se imprime más rápido, usa menos filamento, ocupa menos espacio en el escritorio y lleva los cables por dentro. Lee y escribe tags TigerTag y OpenSpool (NDEF).",
+ "mini_alt": "El compacto TigerPOD Mini con una bobina de filamento, un lector vertical a cada lado",
+ "orig_title": "TigerPOD (original)",
+ "orig_text": "La primera carcasa, dimensionada para una bobina estándar de 1 kg. Los mismos dos lectores, las mismas funciones.",
+ "open_makerworld": "Archivos de impresión en MakerWorld",
+ "concept_title": "La forma la decides tú",
+ "concept_text": "Solo importan los dos lectores enfrentados; el soporte que los rodea es un detalle. Rediséñalo para otro formato de bobina u otro uso, y sigue siendo un Pod. Comparte tu remix en MakerWorld y abre un issue con el enlace.",
+ "concept_link": "Cómo contribuir",
+ "build_title": "¿Cómo construyo un TigerPOD?",
+ "build_lead": "Construir un TigerPOD requiere una impresión 3D y dos lectores USB: sin conocimientos de electrónica, sin soldar, sin cableado.",
+ "step1_title": "Imprime una carcasa",
+ "step1_text": "El TigerPOD Mini (recomendado) o el original, ambos en MakerWorld, en el filamento que prefieras.",
+ "step2_title": "Consigue dos lectores",
+ "step2_text": "Dos lectores NFC USB compatibles con ACR122U de cualquier tienda, y tags NTAG 213, 215 o 216 para grabar.",
+ "step3_title": "Deslízalos dentro",
+ "step3_text": "Un lector en cada ranura de la carcasa. Sin tornillos, sin pegamento, sin cables.",
+ "step4_title": "Conéctalos",
+ "step4_text": "Conecta los dos lectores a tu ordenador. Un divisor USB de 2 a 1 lo deja en un solo cable; dos puertos también sirven.",
+ "step5_title": "Instala Tiger Studio Manager",
+ "step5_text": "La aplicación de escritorio gratuita detecta los lectores automáticamente. Coloca una bobina.",
+ "parts_title": "Lista de piezas",
+ "part_reader": "Lector NFC compatible con ACR122U",
+ "part_reader_qty": "2, uno por cada lado de la bobina",
+ "part_tags": "Tags NTAG 213 / 215 / 216",
+ "part_tags_qty": "1 paquete: dos chips por bobina",
+ "part_shell": "Carcasa impresa en 3D",
+ "part_shell_qty": "1, impresa con tu filamento",
+ "part_splitter": "Divisor USB de 2 a 1",
+ "part_splitter_qty": "opcional: dos puertos USB también sirven",
+ "reader_alt": "Lector NFC USB compatible con ACR122U",
+ "splitter_alt": "Cable divisor USB de dos a uno",
+ "affiliate_note": "Algunos enlaces de hardware son enlaces de afiliado de Amazon: como Afiliado de Amazon, TigerTag obtiene ingresos por las compras adscritas que cumplen los requisitos aplicables, sin coste adicional para ti.",
+ "os_title": "Windows, macOS y Linux",
+ "os_windows": "Windows: se reconoce sin más, el servicio PC/SC viene con Windows. Si un controlador auxiliar de emulación de tarjetas se apropia del lector, desinstálalo.",
+ "os_macos": "macOS: funciona con la pila PC/SC integrada, sin controlador adicional.",
+ "os_linux": "Linux: instala PC/SC y el controlador ACS/CCID, y comprueba que el servicio pcscd esté en marcha.",
+ "kit_title": "O consigue el kit electrónico",
+ "kit_lead": "La tienda TigerTag vende la electrónica lista para deslizar: lectores con el logotipo oficial del proyecto y el divisor. Comprar el kit financia el estándar abierto.",
+ "kit_bundle": "Pack TigerPOD: 2 lectores y divisor",
+ "kit_single": "Lector suelto",
+ "kit_splitter": "Solo el divisor",
+ "kit_note": "El kit es solo la electrónica: la carcasa la imprimes tú. Un Pod montado con piezas genéricas es el mismo Pod.",
+ "kit_shop": "Abrir la tienda",
+ "colours_title": "Del color del filamento que cargues",
+ "colours_lead": "Lo imprimes tú, así que el Pod toma el color y el acabado de tu filamento: seda, galaxy, mármol, fosforescente.",
+ "colours_alt": "Carcasas TigerPOD impresas en quince colores: rojo, naranja, amarillo, verde, cian, azul, morado, rosa, oro, cobre, plata, gris, negro, blanco y fosforescente",
+ "finishes_alt": "Carcasas TigerPOD con acabados especiales: ocho colores seda, morado galaxy, mármol, dos arcoíris y tres impresiones fosforescentes fotografiadas con la luz apagada",
+ "colours_more": "Todas las fotos a resolución completa, y como recortes transparentes, en el repositorio",
+ "eco_title": "¿Dónde encaja el TigerPOD?",
+ "eco_lead": "El TigerPOD es el NFC del escritorio en el sistema TigerTag: la misma bobina la leen el Pod, Tiger Studio Manager en el ordenador y un teléfono.",
+ "eco_alt": "El sistema TigerTag: un TigerPOD azul con una bobina, Tiger Studio Manager en una pantalla de ordenador y la aplicación móvil en un teléfono",
+ "eco_protocol_title": "El protocolo TigerTag",
+ "eco_protocol_text": "La especificación abierta y el registro público que el Pod lee y escribe (CC-BY-4.0, licencia de implementación irrevocable).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "La aplicación de escritorio gratuita (MIT): inventario, impresoras y la casa del Pod. Controla los lectores por PC/SC.",
+ "eco_phone_title": "En un teléfono, sin Pod",
+ "eco_phone_text": "Un chip TigerTag es un tag NFC estándar: cualquier teléfono con NFC lo lee, y la aplicación móvil lo graba con el NFC del propio teléfono.",
+ "eco_sdk_title": "SDK",
+ "eco_sdk_text": "JavaScript y Python (Apache-2.0): decodifica un tag sin conexión a partir de sus bytes en bruto, en tu propio código.",
+ "eco_community_title": "Comunidad",
+ "eco_community_text": "Preguntas, fotos de montajes y remixes en el Discord de TigerTag.",
+ "open": "Abrir",
+ "repo": "Repositorio",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "¿Cómo leo un tag en mi propio código?",
+ "dev_lead": "Un TigerTag guarda todo en el chip, así que leerlo son los mismos dos pasos en cualquier lenguaje, sin consultas y sin red.",
+ "dev1_title": "1. Obtén los bytes en bruto",
+ "dev1_text": "Con cualquier biblioteca NFC, lee el UID de 7 bytes y la memoria de usuario, páginas 0x04 a 0x27: 36 páginas de 4 bytes, 144 bytes. En el escritorio, nfc-pcsc (Node, el que usa Tiger Studio Manager) o pyscard (Python) controlan el ACR122U por PC/SC.",
+ "dev2_title": "2. Decodifica sin conexión",
+ "dev2_text": "Pasa esos bytes al SDK de TigerTag. Devuelve material, marca, color, temperaturas y peso, y puede verificar la firma. El SDK nunca toca el lector.",
+ "dev_play_title": "Prueba el Pod en el playground",
+ "dev_play_text": "Los dos SDK incluyen un playground, un pequeño servidor local y una página web. El de JavaScript se conecta al ACR122U por PC/SC y muestra los eventos de tarjeta en directo: coloca una bobina en el Pod y mira cómo se decodifica en el navegador.",
+ "faq_title": "Preguntas frecuentes",
+ "faq1_q": "¿Puedo usar un solo lector?",
+ "faq1_a": "Sí. Un solo chip y un solo lector funcionan, pero tienes que presentar el lado de la bobina que lleva el tag, y los dos chips de una bobina ya no se mantienen sincronizados automáticamente.",
+ "faq2_q": "¿Qué bobinas caben en el TigerPOD?",
+ "faq2_a": "Alrededor del 99 % de las bobinas de 1 kg, sea cual sea el tipo: masterspools de plástico, bobinas de cartón, bobinas de plástico no reutilizables y recargas.",
+ "faq3_q": "NTAG 213, 215 o 216: ¿cuál elijo?",
+ "faq3_a": "Solo se diferencian en la memoria: unos 144 bytes el 213, 504 el 215 y 888 el 216. Cualquiera de ellos guarda un registro TigerTag; elige el 215 o el 216 para tener más margen. Los tres funcionan en el Pod.",
+ "faq4_q": "Mi lector no se detecta. ¿Qué debo comprobar?",
+ "faq4_a": "Asegúrate de que es un lector PC/SC compatible con ACR122U. En Linux, instala el controlador CCID e inicia el servicio pcscd. Desconecta y vuelve a conectar el lector una vez, y reinicia Tiger Studio Manager.",
+ "faq5_q": "¿Puedo reutilizar los tags?",
+ "faq5_a": "Sí. Los TigerTags nunca están bloqueados: bórralos y regrábalos como TigerTags nuevos tantas veces como quieras, o conviértelos en simples tags NDEF para otro uso NFC y viceversa.",
+ "faq6_q": "¿Sirve el Pod para algo más que TigerTag?",
+ "faq6_a": "Sí. Son dos lectores ACR122U estándar, así que lee, escribe, regraba y borra todo lo que admite un ACR122U: ISO 14443 A y B, MIFARE Classic, Ultralight y DESFire, FeliCa, Topaz/Jewel y los tipos NFC Forum 1 a 4.",
+ "faq7_q": "¿Necesita el TigerPOD conexión a internet?",
+ "faq7_a": "No. El Pod lee y escribe en local, y nada se envía a ninguna parte.",
+ "faq8_q": "¿Necesito un TigerPOD para leer un TigerTag?",
+ "faq8_a": "No. Un chip TigerTag es un tag NFC estándar, así que cualquier teléfono con NFC puede leerlo, y la aplicación móvil puede grabarlo. El Pod es el NFC del escritorio: lectura y escritura de los dos chips de una bobina con solo colocarla.",
+ "join_title": "Construye tu TigerPOD",
+ "join_text": "Imprime el Mini, desliza dos lectores dentro, instala Tiger Studio Manager. Las preguntas y las fotos de montajes son bienvenidas en Discord.",
+ "join_btn": "Imprime el TigerPOD Mini",
+ "foot_licences": "Diseño y documentación del TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDK: Apache-2.0.",
+ "foot_trademark": "El nombre y el logotipo de TigerTag son marcas de TigerTag Corp.",
+ "foot_source": "Código fuente de este sitio",
+ "foot_protocol": "Protocolo TigerTag"
+}
diff --git a/site/i18n/fr.json b/site/i18n/fr.json
new file mode 100644
index 0000000..c2ac315
--- /dev/null
+++ b/site/i18n/fr.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Français",
+ "skip": "Aller au contenu",
+ "theme_label": "Thème clair ou sombre",
+ "lang_label": "Langue",
+ "meta_title": "TigerPOD : lecteur NFC open source pour bobines",
+ "meta_description": "Fabriquez un lecteur-graveur NFC de bureau pour bobines de filament 3D avec deux lecteurs USB et une coque imprimée en 3D. Design ouvert, CC-BY-4.0.",
+ "og_title": "TigerPOD : un lecteur CD, pour les bobines",
+ "og_description": "Posez une bobine de filament et votre ordinateur lit et écrit ses puces NFC. Deux lecteurs USB du commerce, une coque imprimée en 3D, sans soudure.",
+ "og_alt": "Coques TigerPOD imprimées en neuf couleurs, chacune contenant une bobine de filament",
+ "nav_what": "Fonctions",
+ "nav_shells": "Coques",
+ "nav_build": "Le fabriquer",
+ "nav_kit": "Kit",
+ "nav_colours": "Couleurs",
+ "nav_eco": "Écosystème",
+ "nav_dev": "Développeurs",
+ "nav_faq": "FAQ",
+ "hero_kicker": "Lecteur-graveur NFC open source pour bobines de filament",
+ "hero_headline": "Un lecteur CD, pour les bobines.",
+ "hero_lead": "Posez une bobine de filament dans le Pod et votre ordinateur lit ses puces TigerTag : matière, marque, couleur, températures, quantité restante. L’écriture d’un tag se fait de la même façon. Deux lecteurs NFC USB du commerce et une coque imprimée en 3D, rien de plus.",
+ "hero_alt": "Neuf coques TigerPOD en noir, bleu, violet, rose, rouge, orange, jaune, vert et blanc, chacune contenant une bobine de filament",
+ "cta_build": "Fabriquez votre TigerPOD",
+ "cta_kit": "Obtenir le kit électronique",
+ "cta_repo": "Lire le README",
+ "fact1_value": "2",
+ "fact1_label": "lecteurs USB compatibles ACR122U, un face à chaque côté de la bobine",
+ "fact2_value": "0",
+ "fact2_label": "vis, colle, fil ou soudure : les lecteurs se glissent dans la coque",
+ "fact3_value": "~99 %",
+ "fact3_label": "des bobines de 1 kg compatibles : plastique, carton, non réutilisables et recharges",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "design et documentation ouverts, libres d’imprimer, de modifier et de partager",
+ "what_title": "À quoi sert le TigerPOD ?",
+ "what_lead": "Le TigerPOD lit et écrit les puces NFC d’une bobine de filament sur votre bureau : deux lecteurs PC/SC standard tenus face à face par un support imprimé en 3D, pilotés par Tiger Studio Manager.",
+ "demo_alt": "Une bobine posée dans un TigerPOD rouge, le voyant du lecteur s’allumant à la lecture de la puce",
+ "what1_title": "On la pose, sans viser",
+ "what1_text": "Avec une puce de chaque côté de la bobine et un lecteur face à chaque puce, il y a toujours une puce devant un lecteur, quel que soit le sens de la bobine.",
+ "what2_title": "Les deux puces à la fois",
+ "what2_text": "Le Pod lit et écrit ensemble les deux puces d’une bobine : la paire Twin Tag reste identique à l’octet près, et votre inventaire compte une bobine, pas deux tags.",
+ "what3_title": "Le contrôle total de la puce",
+ "what3_text": "Lisez le contenu d’un tag, écrivez-en un nouveau, modifiez-le ou effacez-le pour le remettre à blanc. Un TigerTag n’est jamais verrouillé en écriture : réécrivez-le autant de fois que vous voulez.",
+ "what4_title": "Une station NFC universelle",
+ "what4_text": "Tout ce que gère un ACR122U, le Pod le gère : ISO 14443 A et B, MIFARE Classic, Ultralight et DESFire, FeliCa, Topaz/Jewel, types NFC Forum 1 à 4. Les tags ISO 15693 ne sont pas pris en charge.",
+ "what5_title": "Aucune électronique à apprendre",
+ "what5_text": "Des lecteurs du commerce en PC/SC, le standard des cartes à puce intégré à Windows, macOS et Linux. Pas de carte sur mesure, pas de lecteur propriétaire, pas de pilote fabricant.",
+ "what6_title": "Hors ligne, et des puces qui revivent",
+ "what6_text": "Le Pod lit et écrit en local ; rien n’est envoyé nulle part. Une puce de bobine usagée peut être réécrite en simple tag NDEF (une URL, de la domotique, une carte de visite), puis redevenir un TigerTag.",
+ "shells_title": "Deux coques à imprimer",
+ "shells_lead": "Le TigerPOD, c’est une idée : deux lecteurs ACR122U face à face, tenus à la bonne distance par un support imprimé en 3D. Les deux coques publiées accueillent les mêmes deux lecteurs ; choisissez celle qui convient à votre bureau.",
+ "mini_badge": "Recommandé",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Une coque repensée, plus compacte : elle s’imprime plus vite, consomme moins de filament, prend moins de place sur le bureau et fait passer les câbles à l’intérieur. Elle lit et écrit les tags TigerTag comme OpenSpool (NDEF).",
+ "mini_alt": "Le TigerPOD Mini compact contenant une bobine de filament, un lecteur vertical de chaque côté",
+ "orig_title": "TigerPOD (original)",
+ "orig_text": "La première coque, dimensionnée pour une bobine standard de 1 kg. Les mêmes deux lecteurs, les mêmes fonctions.",
+ "open_makerworld": "Fichiers d’impression sur MakerWorld",
+ "concept_title": "La forme, c’est vous qui décidez",
+ "concept_text": "Seuls les deux lecteurs face à face comptent ; le support autour n’est qu’un détail. Redessinez-le pour un autre format de bobine ou un autre usage, c’est toujours un Pod. Partagez votre remix sur MakerWorld et ouvrez une issue avec le lien.",
+ "concept_link": "Comment contribuer",
+ "build_title": "Comment fabriquer un TigerPOD ?",
+ "build_lead": "Fabriquer un TigerPOD demande une impression 3D et deux lecteurs USB : aucune connaissance en électronique, aucune soudure, aucun câblage.",
+ "step1_title": "Imprimez une coque",
+ "step1_text": "Le TigerPOD Mini (recommandé) ou l’original, tous deux sur MakerWorld, dans le filament de votre choix.",
+ "step2_title": "Procurez-vous deux lecteurs",
+ "step2_text": "Deux lecteurs NFC USB compatibles ACR122U, achetés où vous voulez, et des tags NTAG 213, 215 ou 216 à écrire.",
+ "step3_title": "Glissez-les en place",
+ "step3_text": "Un lecteur dans chaque emplacement de la coque. Sans vis, sans colle, sans câblage.",
+ "step4_title": "Branchez",
+ "step4_text": "Reliez les deux lecteurs à votre ordinateur. Un répartiteur USB 2 vers 1 permet de n’avoir qu’un câble ; deux ports conviennent aussi.",
+ "step5_title": "Installez Tiger Studio Manager",
+ "step5_text": "L’application de bureau gratuite détecte les lecteurs automatiquement. Posez une bobine.",
+ "parts_title": "Liste des pièces",
+ "part_reader": "Lecteur NFC compatible ACR122U",
+ "part_reader_qty": "2, un de chaque côté de la bobine",
+ "part_tags": "Tags NTAG 213 / 215 / 216",
+ "part_tags_qty": "1 lot : deux puces par bobine",
+ "part_shell": "Coque imprimée en 3D",
+ "part_shell_qty": "1, imprimée dans votre filament",
+ "part_splitter": "Répartiteur USB 2 vers 1",
+ "part_splitter_qty": "facultatif : deux ports USB conviennent aussi",
+ "reader_alt": "Lecteur NFC USB compatible ACR122U",
+ "splitter_alt": "Câble répartiteur USB deux vers un",
+ "affiliate_note": "Certains liens vers du matériel sont des liens affiliés Amazon : en tant que Partenaire Amazon, TigerTag perçoit une rémunération sur les achats remplissant les conditions requises, sans surcoût pour vous.",
+ "os_title": "Windows, macOS et Linux",
+ "os_windows": "Windows : reconnu directement, le service PC/SC est fourni avec Windows. Si un pilote auxiliaire d’émulation de carte prend la main sur le lecteur, désinstallez-le.",
+ "os_macos": "macOS : fonctionne avec la pile PC/SC intégrée, sans pilote supplémentaire.",
+ "os_linux": "Linux : installez PC/SC et le pilote ACS/CCID, puis vérifiez que le service pcscd est lancé.",
+ "kit_title": "Ou prenez le kit électronique",
+ "kit_lead": "La boutique TigerTag vend l’électronique prête à glisser dans la coque : des lecteurs portant le logo officiel du projet, et le répartiteur. Acheter le kit finance le standard ouvert.",
+ "kit_bundle": "Pack TigerPOD : 2 lecteurs et répartiteur",
+ "kit_single": "Lecteur seul",
+ "kit_splitter": "Répartiteur seul",
+ "kit_note": "Le kit ne comprend que l’électronique : la coque, vous l’imprimez vous-même. Un Pod monté avec des pièces génériques est exactement le même Pod.",
+ "kit_shop": "Ouvrir la boutique",
+ "colours_title": "Il prend la couleur de votre filament",
+ "colours_lead": "Vous l’imprimez vous-même : le Pod prend la couleur et la finition de votre filament, soie, galaxy, marbre, phosphorescent.",
+ "colours_alt": "Coques TigerPOD imprimées en quinze couleurs : rouge, orange, jaune, vert, cyan, bleu, violet, rose, or, cuivre, argent, gris, noir, blanc et phosphorescent",
+ "finishes_alt": "Coques TigerPOD en finitions spéciales : huit couleurs soie, violet galaxy, marbre, deux arc-en-ciel et trois impressions phosphorescentes photographiées lumière éteinte",
+ "colours_more": "Toutes les photos en pleine résolution, et en détourages transparents, dans le dépôt",
+ "eco_title": "Quelle place pour le TigerPOD ?",
+ "eco_lead": "Le TigerPOD est le NFC du poste de travail dans le système TigerTag : la même bobine est lue par le Pod, par Tiger Studio Manager sur l’ordinateur et par un téléphone.",
+ "eco_alt": "Le système TigerTag : un TigerPOD bleu contenant une bobine, Tiger Studio Manager sur un écran d’ordinateur et l’application mobile sur un téléphone",
+ "eco_protocol_title": "Le protocole TigerTag",
+ "eco_protocol_text": "La spécification ouverte et le registre public que le Pod lit et écrit (CC-BY-4.0, droit d’implémentation irrévocable).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "L’application de bureau gratuite (MIT) : inventaire, imprimantes, et la maison du Pod. Elle pilote les lecteurs en PC/SC.",
+ "eco_phone_title": "Sur un téléphone, sans Pod",
+ "eco_phone_text": "Une puce TigerTag est un tag NFC standard : tout téléphone équipé du NFC la lit, et l’application mobile l’écrit avec le NFC du téléphone.",
+ "eco_sdk_title": "SDK",
+ "eco_sdk_text": "JavaScript et Python (Apache-2.0) : décodez un tag hors ligne à partir de ses octets bruts, dans votre propre code.",
+ "eco_community_title": "Communauté",
+ "eco_community_text": "Questions, photos de montages et remix sur le Discord TigerTag.",
+ "open": "Ouvrir",
+ "repo": "Dépôt",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Comment lire un tag dans mon propre code ?",
+ "dev_lead": "Un TigerTag stocke tout sur la puce : la lecture se fait en deux étapes identiques dans tous les langages, sans recherche en base ni réseau.",
+ "dev1_title": "1. Récupérer les octets bruts",
+ "dev1_text": "Avec n’importe quelle bibliothèque NFC, lisez l’UID de 7 octets et la mémoire utilisateur, pages 0x04 à 0x27 : 36 pages de 4 octets, soit 144 octets. Sur ordinateur, nfc-pcsc (Node, utilisé par Tiger Studio Manager) ou pyscard (Python) pilotent l’ACR122U en PC/SC.",
+ "dev2_title": "2. Décoder hors ligne",
+ "dev2_text": "Passez ces octets au SDK TigerTag. Il renvoie matière, marque, couleur, températures et poids, et peut vérifier la signature. Le SDK n’accède jamais au lecteur.",
+ "dev_play_title": "Testez le Pod dans le playground",
+ "dev_play_text": "Les deux SDK incluent un playground, un petit serveur local et une page web. Celui en JavaScript se connecte à l’ACR122U en PC/SC et affiche les événements de carte en direct : posez une bobine dans le Pod et regardez-la se décoder dans le navigateur.",
+ "faq_title": "Questions fréquentes",
+ "faq1_q": "Puis-je n’utiliser qu’un seul lecteur ?",
+ "faq1_a": "Oui. Une seule puce et un seul lecteur fonctionnent, mais vous devez présenter le côté tagué de la bobine, et les deux puces d’une bobine ne sont plus synchronisées automatiquement.",
+ "faq2_q": "Quelles bobines rentrent dans le TigerPOD ?",
+ "faq2_a": "Environ 99 % des bobines de 1 kg, quel que soit le type : bobines plastique masterspool, bobines carton, bobines plastique non réutilisables et recharges.",
+ "faq3_q": "NTAG 213, 215 ou 216 : lequel choisir ?",
+ "faq3_a": "Seule la mémoire change : environ 144 octets pour le 213, 504 pour le 215 et 888 pour le 216. Chacun peut contenir un enregistrement TigerTag ; prenez un 215 ou un 216 pour avoir de la marge. Les trois fonctionnent dans le Pod.",
+ "faq4_q": "Mon lecteur n’est pas détecté. Que vérifier ?",
+ "faq4_a": "Vérifiez qu’il s’agit bien d’un lecteur PC/SC compatible ACR122U. Sous Linux, installez le pilote CCID et démarrez le service pcscd. Débranchez et rebranchez le lecteur une fois, puis relancez Tiger Studio Manager.",
+ "faq5_q": "Les tags sont-ils réutilisables ?",
+ "faq5_a": "Oui. Les TigerTags ne sont jamais verrouillés : effacez-les et réécrivez-les en nouveaux TigerTags aussi souvent que vous voulez, ou transformez-les en simples tags NDEF pour un autre usage NFC, puis inversement.",
+ "faq6_q": "Le Pod sert-il à autre chose qu’à TigerTag ?",
+ "faq6_a": "Oui. Ce sont deux lecteurs ACR122U standard : il lit, écrit, réécrit et efface tout ce que prend en charge un ACR122U, soit ISO 14443 A et B, MIFARE Classic, Ultralight et DESFire, FeliCa, Topaz/Jewel et les types NFC Forum 1 à 4.",
+ "faq7_q": "Le TigerPOD a-t-il besoin d’une connexion internet ?",
+ "faq7_a": "Non. Le Pod lit et écrit en local, et rien n’est envoyé nulle part.",
+ "faq8_q": "Faut-il un TigerPOD pour lire un TigerTag ?",
+ "faq8_a": "Non. Une puce TigerTag est un tag NFC standard : tout téléphone équipé du NFC peut la lire, et l’application mobile peut l’écrire. Le Pod est le NFC du poste de travail : lecture et écriture des deux puces d’une bobine, simplement en la posant.",
+ "join_title": "Fabriquez votre TigerPOD",
+ "join_text": "Imprimez le Mini, glissez-y deux lecteurs, installez Tiger Studio Manager. Questions et photos de montages sont les bienvenues sur Discord.",
+ "join_btn": "Imprimer le TigerPOD Mini",
+ "foot_licences": "Design et documentation du TigerPOD : CC-BY-4.0. Tiger Studio Manager : MIT. SDK : Apache-2.0.",
+ "foot_trademark": "Le nom et le logo TigerTag sont des marques de TigerTag Corp.",
+ "foot_source": "Code source de ce site",
+ "foot_protocol": "Protocole TigerTag"
+}
diff --git a/site/i18n/it.json b/site/i18n/it.json
new file mode 100644
index 0000000..592f22a
--- /dev/null
+++ b/site/i18n/it.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Italiano",
+ "skip": "Vai al contenuto",
+ "theme_label": "Tema chiaro o scuro",
+ "lang_label": "Lingua",
+ "meta_title": "TigerPOD: lettore NFC open source per bobine",
+ "meta_description": "Costruisci un lettore e scrittore NFC da scrivania per bobine di filamento con due lettori USB e un guscio stampato in 3D. Design aperto, CC-BY-4.0.",
+ "og_title": "TigerPOD: un lettore CD, per bobine",
+ "og_description": "Inserisci una bobina di filamento e il computer legge e scrive i suoi chip NFC. Due comuni lettori USB, un guscio stampato in 3D, niente saldature.",
+ "og_alt": "Gusci TigerPOD stampati in nove colori, ognuno con una bobina di filamento",
+ "nav_what": "Cosa fa",
+ "nav_shells": "Gusci",
+ "nav_build": "Costruiscilo",
+ "nav_kit": "Kit",
+ "nav_colours": "Colori",
+ "nav_eco": "Ecosistema",
+ "nav_dev": "Sviluppatori",
+ "nav_faq": "FAQ",
+ "hero_kicker": "Lettore e scrittore NFC open source per bobine di filamento",
+ "hero_headline": "Un lettore CD, per bobine.",
+ "hero_lead": "Inserisci una bobina di filamento e il computer legge i suoi chip TigerTag: materiale, marca, colore, temperature, quanto ne resta. Scrivere un tag funziona allo stesso modo. Due comuni lettori NFC USB e un guscio stampato in 3D, nient’altro.",
+ "hero_alt": "Nove gusci TigerPOD in nero, blu, viola, rosa, rosso, arancione, giallo, verde e bianco, ognuno con una bobina di filamento",
+ "cta_build": "Costruisci il tuo TigerPOD",
+ "cta_kit": "Prendi il kit elettronico",
+ "cta_repo": "Leggi il README",
+ "fact1_value": "2",
+ "fact1_label": "lettori USB compatibili ACR122U, uno rivolto verso ciascun lato della bobina",
+ "fact2_value": "0",
+ "fact2_label": "viti, colla, fili o saldature: i lettori si infilano nel guscio",
+ "fact3_value": "~99%",
+ "fact3_label": "delle bobine da 1 kg entrano: plastica, cartone, non riutilizzabili e ricariche",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "design e documentazione aperti, liberi da stampare, modificare e condividere",
+ "what_title": "Cosa fa il TigerPOD?",
+ "what_lead": "Il TigerPOD legge e scrive i chip NFC di una bobina di filamento sulla tua scrivania: due lettori PC/SC standard tenuti uno di fronte all’altro da un supporto stampato in 3D, gestiti da Tiger Studio Manager.",
+ "demo_alt": "Una bobina inserita in un TigerPOD rosso, con la spia del lettore che si accende mentre il chip viene letto",
+ "what1_title": "La inserisci, senza mirare",
+ "what1_text": "Con un chip su ciascun lato della bobina e un lettore davanti a ogni chip, c’è sempre un chip davanti a un lettore, in qualunque verso entri la bobina.",
+ "what2_title": "Entrambi i chip insieme",
+ "what2_text": "Il Pod legge e scrive insieme i due chip di una bobina, così la coppia Twin Tag resta identica byte per byte e il tuo inventario conta una bobina, non due tag.",
+ "what3_title": "Pieno controllo del chip",
+ "what3_text": "Leggi cosa c’è su un tag, scrivine uno nuovo, modificalo e cancellalo per riportarlo vuoto. Un TigerTag non è mai bloccato in scrittura: riscrivilo tutte le volte che vuoi.",
+ "what4_title": "Una stazione NFC universale",
+ "what4_text": "Tutto ciò che gestisce un ACR122U lo gestisce il Pod: ISO 14443 A e B, MIFARE Classic, Ultralight e DESFire, FeliCa, Topaz/Jewel, tipi NFC Forum da 1 a 4. I tag ISO 15693 non sono supportati.",
+ "what5_title": "Nessuna elettronica da imparare",
+ "what5_text": "Comuni lettori via PC/SC, lo standard delle smart card integrato in Windows, macOS e Linux. Nessuna scheda su misura, nessun lettore proprietario, nessun driver del produttore.",
+ "what6_title": "Offline, e i chip hanno una seconda vita",
+ "what6_text": "Il Pod legge e scrive in locale; nulla viene inviato altrove. Il chip di una bobina usata può essere riscritto come semplice tag NDEF (un URL, domotica, un biglietto da visita) e poi tornare un TigerTag.",
+ "shells_title": "Due gusci da stampare",
+ "shells_lead": "Il TigerPOD è un’idea: due lettori ACR122U uno di fronte all’altro, tenuti alla giusta distanza da un supporto stampato in 3D. Entrambi i gusci pubblicati ospitano gli stessi due lettori; scegli quello più adatto alla tua scrivania.",
+ "mini_badge": "Consigliato",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Un guscio riprogettato e più compatto: si stampa più in fretta, usa meno filamento, occupa meno spazio sulla scrivania e fa passare i cavi all’interno. Legge e scrive sia tag TigerTag sia OpenSpool (NDEF).",
+ "mini_alt": "Il compatto TigerPOD Mini con una bobina di filamento, un lettore verticale su ciascun lato",
+ "orig_title": "TigerPOD (originale)",
+ "orig_text": "Il primo guscio, dimensionato per una bobina standard da 1 kg. Stessi due lettori, stesse funzioni.",
+ "open_makerworld": "File di stampa su MakerWorld",
+ "concept_title": "La forma la decidi tu",
+ "concept_text": "Contano solo i due lettori affacciati; il supporto attorno è un dettaglio. Riprogettalo per un altro formato di bobina o un altro uso, ed è comunque un Pod. Condividi il tuo remix su MakerWorld e apri una issue con il link.",
+ "concept_link": "Come contribuire",
+ "build_title": "Come si costruisce un TigerPOD?",
+ "build_lead": "Per costruire un TigerPOD servono una stampa 3D e due lettori USB: nessuna competenza di elettronica, niente saldature, niente cablaggi.",
+ "step1_title": "Stampa un guscio",
+ "step1_text": "Il TigerPOD Mini (consigliato) o l’originale, entrambi su MakerWorld, con il filamento che preferisci.",
+ "step2_title": "Procurati due lettori",
+ "step2_text": "Due lettori NFC USB compatibili ACR122U da qualsiasi negozio, e tag NTAG 213, 215 o 216 da scrivere.",
+ "step3_title": "Infilali dentro",
+ "step3_text": "Un lettore in ciascuna sede del guscio. Niente viti, niente colla, niente cablaggi.",
+ "step4_title": "Collega",
+ "step4_text": "Collega entrambi i lettori al computer. Uno splitter USB 2 in 1 li riduce a un solo cavo; vanno bene anche due porte.",
+ "step5_title": "Installa Tiger Studio Manager",
+ "step5_text": "L’app desktop gratuita rileva i lettori automaticamente. Inserisci una bobina.",
+ "parts_title": "Elenco dei componenti",
+ "part_reader": "Lettore NFC compatibile ACR122U",
+ "part_reader_qty": "2, uno per lato della bobina",
+ "part_tags": "Tag NTAG 213 / 215 / 216",
+ "part_tags_qty": "1 confezione: due chip per bobina",
+ "part_shell": "Guscio stampato in 3D",
+ "part_shell_qty": "1, stampato con il tuo filamento",
+ "part_splitter": "Splitter USB 2 in 1",
+ "part_splitter_qty": "facoltativo: vanno bene anche due porte USB",
+ "reader_alt": "Lettore NFC USB compatibile ACR122U",
+ "splitter_alt": "Cavo splitter USB due in uno",
+ "affiliate_note": "Alcuni link all’hardware sono link di affiliazione Amazon: in qualità di Affiliato Amazon, TigerTag riceve un guadagno dagli acquisti idonei, senza costi aggiuntivi per te.",
+ "os_title": "Windows, macOS e Linux",
+ "os_windows": "Windows: riconosciuto subito, il servizio PC/SC è incluso in Windows. Se un driver ausiliario di emulazione delle schede prende il controllo del lettore, rimuovilo.",
+ "os_macos": "macOS: funziona con lo stack PC/SC integrato, senza driver aggiuntivi.",
+ "os_linux": "Linux: installa PC/SC e il driver ACS/CCID, poi verifica che il servizio pcscd sia in esecuzione.",
+ "kit_title": "Oppure prendi il kit elettronico",
+ "kit_lead": "Il negozio TigerTag vende l’elettronica pronta da inserire: lettori con il logo ufficiale del progetto e lo splitter. Acquistare il kit finanzia lo standard aperto.",
+ "kit_bundle": "Bundle TigerPOD: 2 lettori e splitter",
+ "kit_single": "Lettore singolo",
+ "kit_splitter": "Solo splitter",
+ "kit_note": "Il kit comprende solo l’elettronica: il guscio lo stampi tu. Un Pod costruito con componenti generici è lo stesso Pod.",
+ "kit_shop": "Apri il negozio",
+ "colours_title": "Del colore del filamento che carichi",
+ "colours_lead": "Lo stampi tu, quindi il Pod prende il colore e la finitura del tuo filamento: silk, galaxy, marmo, fosforescente.",
+ "colours_alt": "Gusci TigerPOD stampati in quindici colori: rosso, arancione, giallo, verde, ciano, blu, viola, rosa, oro, rame, argento, grigio, nero, bianco e fosforescente",
+ "finishes_alt": "Gusci TigerPOD con finiture speciali: otto colori silk, viola galaxy, marmo, due arcobaleno e tre stampe fosforescenti fotografate a luci spente",
+ "colours_more": "Tutte le foto a piena risoluzione, e come scontornati trasparenti, nel repository",
+ "eco_title": "Dove si inserisce il TigerPOD?",
+ "eco_lead": "Il TigerPOD è l’NFC della scrivania nel sistema TigerTag: la stessa bobina viene letta dal Pod, da Tiger Studio Manager sul computer e da uno smartphone.",
+ "eco_alt": "Il sistema TigerTag: un TigerPOD blu con una bobina, Tiger Studio Manager sullo schermo di un computer e l’app mobile su uno smartphone",
+ "eco_protocol_title": "Il protocollo TigerTag",
+ "eco_protocol_text": "La specifica aperta e il registro pubblico che il Pod legge e scrive (CC-BY-4.0, concessione di implementazione irrevocabile).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "L’app desktop gratuita (MIT): inventario, stampanti e la casa del Pod. Gestisce i lettori via PC/SC.",
+ "eco_phone_title": "Su uno smartphone, senza Pod",
+ "eco_phone_text": "Un chip TigerTag è un tag NFC standard: qualsiasi smartphone con NFC lo legge, e l’app mobile lo scrive con l’NFC del telefono stesso.",
+ "eco_sdk_title": "SDK",
+ "eco_sdk_text": "JavaScript e Python (Apache-2.0): decodifica un tag offline dai suoi byte grezzi, nel tuo codice.",
+ "eco_community_title": "Community",
+ "eco_community_text": "Domande, foto delle build e remix sul Discord di TigerTag.",
+ "open": "Apri",
+ "repo": "Repository",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Come leggo un tag nel mio codice?",
+ "dev_lead": "Un TigerTag memorizza tutto sul chip, quindi la lettura richiede gli stessi due passaggi in qualsiasi linguaggio, senza ricerche e senza rete.",
+ "dev1_title": "1. Ottieni i byte grezzi",
+ "dev1_text": "Con qualsiasi libreria NFC, leggi l’UID da 7 byte e la memoria utente, pagine da 0x04 a 0x27: 36 pagine da 4 byte, 144 byte. Su desktop, nfc-pcsc (Node, usato da Tiger Studio Manager) o pyscard (Python) gestiscono l’ACR122U via PC/SC.",
+ "dev2_title": "2. Decodifica offline",
+ "dev2_text": "Passa quei byte all’SDK TigerTag. Restituisce materiale, marca, colore, temperature e peso, e può verificare la firma. L’SDK non accede mai al lettore.",
+ "dev_play_title": "Prova il Pod nel playground",
+ "dev_play_text": "Entrambi gli SDK includono un playground, un piccolo server locale e una pagina web. Quello JavaScript si collega all’ACR122U via PC/SC e mostra gli eventi della scheda in tempo reale: inserisci una bobina nel Pod e guardala decodificarsi nel browser.",
+ "faq_title": "Domande frequenti",
+ "faq1_q": "Posso usare un solo lettore?",
+ "faq1_a": "Sì. Un solo chip e un solo lettore funzionano, ma devi presentare il lato della bobina con il tag, e i due chip di una bobina non vengono più mantenuti sincronizzati automaticamente.",
+ "faq2_q": "Quali bobine entrano nel TigerPOD?",
+ "faq2_a": "Circa il 99% delle bobine da 1 kg, di qualunque tipo: masterspool in plastica, bobine in cartone, bobine in plastica non riutilizzabili e ricariche.",
+ "faq3_q": "NTAG 213, 215 o 216: quale scegliere?",
+ "faq3_a": "Differiscono solo per la memoria: circa 144 byte il 213, 504 il 215 e 888 il 216. Ognuno contiene un record TigerTag; scegli il 215 o il 216 per avere più margine. Tutti e tre funzionano nel Pod.",
+ "faq4_q": "Il mio lettore non viene rilevato. Cosa devo controllare?",
+ "faq4_a": "Assicurati che sia un lettore PC/SC compatibile ACR122U. Su Linux, installa il driver CCID e avvia il servizio pcscd. Scollega e ricollega il lettore una volta, poi riavvia Tiger Studio Manager.",
+ "faq5_q": "Posso riutilizzare i tag?",
+ "faq5_a": "Sì. I TigerTag non sono mai bloccati: cancellali e riscrivili come nuovi TigerTag tutte le volte che vuoi, oppure trasformali in semplici tag NDEF per un altro uso NFC e poi di nuovo in TigerTag.",
+ "faq6_q": "Il Pod può fare altro con l’NFC oltre a TigerTag?",
+ "faq6_a": "Sì. Sono due lettori ACR122U standard, quindi legge, scrive, riscrive e cancella tutto ciò che supporta un ACR122U: ISO 14443 A e B, MIFARE Classic, Ultralight e DESFire, FeliCa, Topaz/Jewel e i tipi NFC Forum da 1 a 4.",
+ "faq7_q": "Il TigerPOD ha bisogno di una connessione internet?",
+ "faq7_a": "No. Il Pod legge e scrive in locale, e nulla viene inviato altrove.",
+ "faq8_q": "Serve un TigerPOD per leggere un TigerTag?",
+ "faq8_a": "No. Un chip TigerTag è un tag NFC standard, quindi qualsiasi smartphone con NFC può leggerlo e l’app mobile può scriverlo. Il Pod è l’NFC della scrivania: lettura e scrittura di entrambi i chip di una bobina semplicemente inserendola.",
+ "join_title": "Costruisci il tuo TigerPOD",
+ "join_text": "Stampa il Mini, inserisci due lettori, installa Tiger Studio Manager. Domande e foto delle build sono benvenute su Discord.",
+ "join_btn": "Stampa il TigerPOD Mini",
+ "foot_licences": "Design e documentazione del TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDK: Apache-2.0.",
+ "foot_trademark": "Il nome e il logo TigerTag sono marchi di TigerTag Corp.",
+ "foot_source": "Codice sorgente di questo sito",
+ "foot_protocol": "Protocollo TigerTag"
+}
diff --git a/site/i18n/nl.json b/site/i18n/nl.json
new file mode 100644
index 0000000..dab230c
--- /dev/null
+++ b/site/i18n/nl.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Nederlands",
+ "skip": "Naar de inhoud",
+ "theme_label": "Licht of donker thema",
+ "lang_label": "Taal",
+ "meta_title": "TigerPOD: open-source NFC-lezer voor filamentspoelen",
+ "meta_description": "Bouw een NFC-lezer en -schrijver voor filamentspoelen op je bureau, met twee USB-lezers en een 3D-geprinte behuizing. Open ontwerp, CC-BY-4.0.",
+ "og_title": "TigerPOD: een cd-speler, voor spoelen",
+ "og_description": "Zet een filamentspoel erin en je computer leest en schrijft de NFC-chips. Twee gangbare USB-lezers, één 3D-geprinte behuizing, geen solderen.",
+ "og_alt": "TigerPOD-behuizingen geprint in negen kleuren, elk met een filamentspoel",
+ "nav_what": "Wat het doet",
+ "nav_shells": "Behuizingen",
+ "nav_build": "Zelf bouwen",
+ "nav_kit": "Kit",
+ "nav_colours": "Kleuren",
+ "nav_eco": "Ecosysteem",
+ "nav_dev": "Ontwikkelaars",
+ "nav_faq": "FAQ",
+ "hero_kicker": "Open-source NFC-lezer en -schrijver voor filamentspoelen",
+ "hero_headline": "Een cd-speler, voor spoelen.",
+ "hero_lead": "Zet een spoel 3D-printfilament erin en je computer leest de TigerTag-chips: materiaal, merk, kleur, temperaturen, hoeveel er nog over is. Een tag schrijven werkt precies zo. Twee gangbare USB-NFC-lezers en een 3D-geprinte behuizing, verder niets.",
+ "hero_alt": "Negen TigerPOD-behuizingen in zwart, blauw, paars, roze, rood, oranje, geel, groen en wit, elk met een filamentspoel",
+ "cta_build": "Bouw je TigerPOD",
+ "cta_kit": "Koop de elektronicakit",
+ "cta_repo": "Lees de README",
+ "fact1_value": "2",
+ "fact1_label": "ACR122U-compatibele USB-lezers, één aan elke kant van de spoel",
+ "fact2_value": "0",
+ "fact2_label": "schroeven, lijm, draden of soldeerwerk: de lezers schuiven in de behuizing",
+ "fact3_value": "~99%",
+ "fact3_label": "van de 1 kg-spoelen past: kunststof, karton, wegwerp en refills",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "open ontwerp en documentatie, vrij om te printen, aan te passen en te delen",
+ "what_title": "Wat doet de TigerPOD?",
+ "what_lead": "De TigerPOD leest en schrijft de NFC-chips van een filamentspoel op je bureau: twee standaard PC/SC-lezers tegenover elkaar in een 3D-geprinte houder, aangestuurd door Tiger Studio Manager.",
+ "demo_alt": "Een spoel gaat in een rode TigerPOD en het lampje van de lezer gaat aan zodra de chip wordt gelezen",
+ "what1_title": "Erin zetten, niet richten",
+ "what1_text": "Met een chip aan elke kant van de spoel en een lezer tegenover elke chip zit er altijd een chip voor een lezer, hoe je de spoel er ook in zet.",
+ "what2_title": "Beide chips tegelijk",
+ "what2_text": "De Pod leest en schrijft de twee chips van een spoel samen, zodat het Twin Tag-paar byte voor byte identiek blijft en je voorraad één spoel telt, niet twee tags.",
+ "what3_title": "Volledige controle over de chip",
+ "what3_text": "Lees wat er op een tag staat, schrijf een nieuwe, pas hem aan en wis hem weer leeg. Een TigerTag wordt nooit tegen schrijven vergrendeld: herschrijf hem zo vaak je wilt.",
+ "what4_title": "Een universeel NFC-station",
+ "what4_text": "Alles wat een ACR122U aankan, kan de Pod ook: ISO 14443 A en B, MIFARE Classic, Ultralight en DESFire, FeliCa, Topaz/Jewel, NFC Forum-types 1 tot en met 4. ISO 15693-tags vallen erbuiten.",
+ "what5_title": "Geen elektronica te leren",
+ "what5_text": "Gangbare lezers via PC/SC, de smartcardstandaard die in Windows, macOS en Linux zit. Geen eigen printplaat, geen gesloten lezer, geen driver van een fabrikant.",
+ "what6_title": "Offline, en chips krijgen een tweede leven",
+ "what6_text": "De Pod leest en schrijft lokaal; er gaat niets naar buiten. Een chip van een lege spoel kun je herschrijven als gewone NDEF-tag (een URL, domotica, een visitekaartje) en weer terug naar een TigerTag.",
+ "shells_title": "Twee behuizingen om te printen",
+ "shells_lead": "De TigerPOD is één idee: twee ACR122U-lezers tegenover elkaar, op de juiste afstand gehouden door een 3D-geprinte houder. Beide gepubliceerde behuizingen passen dezelfde twee lezers; kies degene die bij je bureau past.",
+ "mini_badge": "Aanbevolen",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Een opnieuw ontworpen, compactere behuizing: hij print sneller, gebruikt minder filament, neemt minder bureauruimte in en leidt de kabels binnendoor. Hij leest en schrijft zowel TigerTag- als OpenSpool-tags (NDEF).",
+ "mini_alt": "De compacte TigerPOD Mini met een filamentspoel, met aan elke kant een rechtopstaande lezer",
+ "orig_title": "TigerPOD (origineel)",
+ "orig_text": "De eerste behuizing, op maat voor een standaard spoel van 1 kg. Dezelfde twee lezers, dezelfde functies.",
+ "open_makerworld": "Printbestanden op MakerWorld",
+ "concept_title": "De vorm mag je zelf veranderen",
+ "concept_text": "Alleen de twee lezers tegenover elkaar tellen; de houder eromheen is een detail. Ontwerp hem opnieuw voor een ander spoelformaat of een ander gebruik, en het is nog steeds een Pod. Deel je remix op MakerWorld en open een issue met een link ernaartoe.",
+ "concept_link": "Zo draag je bij",
+ "build_title": "Hoe bouw ik een TigerPOD?",
+ "build_lead": "Voor een TigerPOD heb je een 3D-print en twee USB-lezers nodig: geen kennis van elektronica, geen solderen, geen bedrading.",
+ "step1_title": "Print een behuizing",
+ "step1_text": "De TigerPOD Mini (aanbevolen) of het origineel, allebei op MakerWorld, in elk filament dat je wilt.",
+ "step2_title": "Haal twee lezers",
+ "step2_text": "Twee ACR122U-compatibele USB-NFC-lezers uit welke winkel dan ook, en NTAG 213-, 215- of 216-tags om op te schrijven.",
+ "step3_title": "Schuif ze erin",
+ "step3_text": "Eén lezer in elke sleuf van de behuizing. Geen schroeven, geen lijm, geen bedrading.",
+ "step4_title": "Aansluiten",
+ "step4_text": "Sluit beide lezers aan op je computer. Met een 2-naar-1 USB-splitter heb je één kabel; twee poorten werken ook.",
+ "step5_title": "Installeer Tiger Studio Manager",
+ "step5_text": "De gratis desktopapp herkent de lezers automatisch. Zet er een spoel in.",
+ "parts_title": "Onderdelenlijst",
+ "part_reader": "ACR122U-compatibele NFC-lezer",
+ "part_reader_qty": "2, één per kant van de spoel",
+ "part_tags": "NTAG 213 / 215 / 216-tags",
+ "part_tags_qty": "1 pak: twee chips per spoel",
+ "part_shell": "3D-geprinte behuizing",
+ "part_shell_qty": "1, geprint in jouw filament",
+ "part_splitter": "2-naar-1 USB-splitter",
+ "part_splitter_qty": "optioneel: twee USB-poorten werken ook",
+ "reader_alt": "ACR122U-compatibele USB-NFC-lezer",
+ "splitter_alt": "Twee-naar-één USB-splitterkabel",
+ "affiliate_note": "Sommige hardwarelinks zijn Amazon-affiliatelinks: als Amazon Associate verdient TigerTag aan in aanmerking komende aankopen, zonder extra kosten voor jou.",
+ "os_title": "Windows, macOS en Linux",
+ "os_windows": "Windows: direct herkend, de PC/SC-service zit standaard in Windows. Neemt een hulpdriver voor kaartemulatie de lezer over, verwijder die dan.",
+ "os_macos": "macOS: werkt met de ingebouwde PC/SC-stack, geen extra driver.",
+ "os_linux": "Linux: installeer PC/SC en de ACS/CCID-driver en controleer daarna of de pcscd-service draait.",
+ "kit_title": "Of koop de elektronicakit",
+ "kit_lead": "De TigerTag-winkel verkoopt de elektronica klaar om in te schuiven: lezers met het officiële logo van het project, en de splitter. Met de aankoop van de kit financier je de open standaard.",
+ "kit_bundle": "TigerPOD-bundel: 2 lezers en splitter",
+ "kit_single": "Losse lezer",
+ "kit_splitter": "Alleen de splitter",
+ "kit_note": "De kit bevat alleen de elektronica: de behuizing print je zelf. Een Pod gebouwd met algemene onderdelen is dezelfde Pod.",
+ "kit_shop": "Open de winkel",
+ "colours_title": "Hij krijgt de kleur van het filament dat je laadt",
+ "colours_lead": "Je print hem zelf, dus de Pod krijgt de kleur en afwerking van je filament: silk, galaxy, marmer, glow-in-the-dark.",
+ "colours_alt": "TigerPOD-behuizingen geprint in vijftien kleuren: rood, oranje, geel, groen, cyaan, blauw, paars, roze, goud, koper, zilver, grijs, zwart, wit en glow-in-the-dark",
+ "finishes_alt": "TigerPOD-behuizingen in speciale afwerkingen: acht silk-kleuren, galaxy-paars, marmer, twee regenbogen en drie glow-in-the-dark-prints, gefotografeerd met het licht uit",
+ "colours_more": "Alle foto's in volledige resolutie, en als transparante uitsneden, in de repository",
+ "eco_title": "Waar past de TigerPOD in?",
+ "eco_lead": "De TigerPOD is de NFC voor het bureau binnen het TigerTag-systeem: dezelfde spoel wordt gelezen door de Pod, door Tiger Studio Manager op de computer en door een telefoon.",
+ "eco_alt": "Het TigerTag-systeem: een blauwe TigerPOD met een spoel, Tiger Studio Manager op een computerscherm en de mobiele app op een telefoon",
+ "eco_protocol_title": "Het TigerTag-protocol",
+ "eco_protocol_text": "De open specificatie en het openbare register die de Pod leest en schrijft (CC-BY-4.0, onherroepelijk implementatierecht).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "De gratis desktopapp (MIT): voorraad, printers en de thuisbasis van de Pod. Hij stuurt de lezers aan via PC/SC.",
+ "eco_phone_title": "Op een telefoon, zonder Pod",
+ "eco_phone_text": "Een TigerTag-chip is een standaard NFC-tag: elke telefoon met NFC leest hem, en de mobiele app schrijft hem met de NFC van de telefoon zelf.",
+ "eco_sdk_title": "SDK's",
+ "eco_sdk_text": "JavaScript en Python (Apache-2.0): decodeer een tag offline vanuit de ruwe bytes, in je eigen code.",
+ "eco_community_title": "Community",
+ "eco_community_text": "Vragen, bouwfoto's en remixes op de TigerTag-Discord.",
+ "open": "Openen",
+ "repo": "Repository",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Hoe lees ik een tag in mijn eigen code?",
+ "dev_lead": "Een TigerTag slaat alles op de chip op, dus lezen is in elke taal dezelfde twee stappen, zonder opzoeking en zonder netwerk.",
+ "dev1_title": "1. Haal de ruwe bytes op",
+ "dev1_text": "Lees met een willekeurige NFC-bibliotheek de UID van 7 bytes en het gebruikersgeheugen, pagina's 0x04 tot en met 0x27: 36 pagina's van 4 bytes, 144 bytes. Op de desktop sturen nfc-pcsc (Node, gebruikt door Tiger Studio Manager) of pyscard (Python) de ACR122U aan via PC/SC.",
+ "dev2_title": "2. Decodeer offline",
+ "dev2_text": "Geef die bytes aan de TigerTag-SDK. Die geeft materiaal, merk, kleur, temperaturen en gewicht terug en kan de handtekening controleren. De SDK komt nooit aan de lezer.",
+ "dev_play_title": "Test de Pod in de playground",
+ "dev_play_text": "Beide SDK's hebben een playground: een kleine lokale server en een webpagina. De JavaScript-versie maakt via PC/SC verbinding met de ACR122U en toont kaartgebeurtenissen live: zet een spoel in de Pod en zie hem in de browser gedecodeerd worden.",
+ "faq_title": "Veelgestelde vragen",
+ "faq1_q": "Kan ik maar één lezer gebruiken?",
+ "faq1_a": "Ja. Eén chip en één lezer werken, maar dan moet je de kant van de spoel met de tag naar de lezer houden, en de twee chips van een spoel worden niet meer automatisch gelijk gehouden.",
+ "faq2_q": "Welke spoelen passen in de TigerPOD?",
+ "faq2_a": "Zo'n 99% van de 1 kg-spoelen, van welk type ook: kunststof masterspools, kartonnen spoelen, kunststof wegwerpspoelen en refills.",
+ "faq3_q": "NTAG 213, 215 of 216: welke?",
+ "faq3_a": "Ze verschillen alleen in geheugen: ongeveer 144 bytes voor de 213, 504 voor de 215 en 888 voor de 216. Elk ervan bevat een TigerTag-record; kies 215 of 216 voor meer ruimte. Alle drie werken in de Pod.",
+ "faq4_q": "Mijn lezer wordt niet herkend. Wat moet ik controleren?",
+ "faq4_a": "Controleer of het een ACR122U-compatibele PC/SC-lezer is. Installeer op Linux de CCID-driver en start de pcscd-service. Koppel de lezer één keer los en weer aan en start Tiger Studio Manager opnieuw.",
+ "faq5_q": "Kan ik de tags hergebruiken?",
+ "faq5_a": "Ja. TigerTags worden nooit vergrendeld: wis ze en herschrijf ze als nieuwe TigerTags zo vaak je wilt, of maak er gewone NDEF-tags van voor een ander NFC-gebruik en weer terug.",
+ "faq6_q": "Kan de Pod ook ander NFC-werk doen dan TigerTag?",
+ "faq6_a": "Ja. Het zijn twee standaard ACR122U-lezers, dus hij leest, schrijft, herschrijft en wist alles wat een ACR122U ondersteunt: ISO 14443 A en B, MIFARE Classic, Ultralight en DESFire, FeliCa, Topaz/Jewel en NFC Forum-types 1 tot en met 4.",
+ "faq7_q": "Heeft de TigerPOD een internetverbinding nodig?",
+ "faq7_a": "Nee. De Pod leest en schrijft lokaal, en er gaat niets naar buiten.",
+ "faq8_q": "Heb ik een TigerPOD nodig om een TigerTag te lezen?",
+ "faq8_a": "Nee. Een TigerTag-chip is een standaard NFC-tag, dus elke telefoon met NFC kan hem lezen, en de mobiele app kan hem schrijven. De Pod is de NFC voor het bureau: beide chips van een spoel lezen en schrijven door hem er gewoon in te zetten.",
+ "join_title": "Bouw je TigerPOD",
+ "join_text": "Print de Mini, schuif er twee lezers in, installeer Tiger Studio Manager. Vragen en bouwfoto's zijn welkom op Discord.",
+ "join_btn": "Print de TigerPOD Mini",
+ "foot_licences": "Ontwerp en documentatie van de TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDK's: Apache-2.0.",
+ "foot_trademark": "De naam en het logo van TigerTag zijn handelsmerken van TigerTag Corp.",
+ "foot_source": "Broncode van deze site",
+ "foot_protocol": "TigerTag-protocol"
+}
diff --git a/site/i18n/pl.json b/site/i18n/pl.json
new file mode 100644
index 0000000..8b03d54
--- /dev/null
+++ b/site/i18n/pl.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Polski",
+ "skip": "Przejdź do treści",
+ "theme_label": "Motyw jasny lub ciemny",
+ "lang_label": "Język",
+ "meta_title": "TigerPOD: czytnik NFC open source do szpul filamentu",
+ "meta_description": "Zbuduj biurkowy czytnik i programator NFC do szpul filamentu z dwóch czytników USB i obudowy z drukarki 3D. Otwarty projekt, CC-BY-4.0.",
+ "og_title": "TigerPOD: odtwarzacz CD, tylko dla szpul",
+ "og_description": "Włóż szpulę filamentu, a komputer odczyta i zapisze jej chipy NFC. Dwa popularne czytniki USB, jedna drukowana obudowa, bez lutowania.",
+ "og_alt": "Obudowy TigerPOD wydrukowane w dziewięciu kolorach, każda ze szpulą filamentu",
+ "nav_what": "Co robi",
+ "nav_shells": "Obudowy",
+ "nav_build": "Zbuduj",
+ "nav_kit": "Zestaw",
+ "nav_colours": "Kolory",
+ "nav_eco": "Ekosystem",
+ "nav_dev": "Dla programistów",
+ "nav_faq": "FAQ",
+ "hero_kicker": "Czytnik i programator NFC open source do szpul filamentu",
+ "hero_headline": "Odtwarzacz CD, tylko dla szpul.",
+ "hero_lead": "Włóż szpulę filamentu do druku 3D, a komputer odczyta jej chipy TigerTag: materiał, markę, kolor, temperatury i ile zostało. Zapis tagu działa tak samo. Dwa popularne czytniki NFC na USB i obudowa z drukarki 3D, nic więcej.",
+ "hero_alt": "Dziewięć obudów TigerPOD w kolorach czarnym, niebieskim, fioletowym, różowym, czerwonym, pomarańczowym, żółtym, zielonym i białym, każda ze szpulą filamentu",
+ "cta_build": "Zbuduj swój TigerPOD",
+ "cta_kit": "Kup zestaw elektroniki",
+ "cta_repo": "Przeczytaj README",
+ "fact1_value": "2",
+ "fact1_label": "czytniki USB zgodne z ACR122U, po jednym z każdej strony szpuli",
+ "fact2_value": "0",
+ "fact2_label": "śrub, kleju, przewodów i lutowania: czytniki wsuwa się w obudowę",
+ "fact3_value": "~99%",
+ "fact3_label": "szpul 1 kg pasuje: plastikowe, kartonowe, jednorazowe i wkłady refill",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "otwarty projekt i dokumentacja: drukuj, zmieniaj i udostępniaj za darmo",
+ "what_title": "Co robi TigerPOD?",
+ "what_lead": "TigerPOD odczytuje i zapisuje chipy NFC szpuli filamentu na Twoim biurku: dwa standardowe czytniki PC/SC ustawione naprzeciw siebie w drukowanym uchwycie, obsługiwane przez Tiger Studio Manager.",
+ "demo_alt": "Szpula wkładana do czerwonego TigerPOD; dioda czytnika zapala się, gdy chip zostaje odczytany",
+ "what1_title": "Wkładasz i gotowe, bez celowania",
+ "what1_text": "Gdy po każdej stronie szpuli jest jeden chip, a naprzeciw każdego chipu jeden czytnik, zawsze któryś chip znajdzie się przed czytnikiem, niezależnie od tego, jak włożysz szpulę.",
+ "what2_title": "Oba chipy naraz",
+ "what2_text": "Pod odczytuje i zapisuje oba chipy szpuli jednocześnie, więc para Twin Tag pozostaje identyczna co do bajtu, a magazyn liczy jedną szpulę, a nie dwa tagi.",
+ "what3_title": "Pełna kontrola nad chipem",
+ "what3_text": "Odczytaj zawartość tagu, zapisz nowy, zmień go i wyczyść do zera. TigerTag nigdy nie jest zablokowany przed zapisem: nadpisuj go tyle razy, ile chcesz.",
+ "what4_title": "Uniwersalna stacja NFC",
+ "what4_text": "Wszystko, co obsługuje ACR122U, obsługuje też Pod: ISO 14443 A i B, MIFARE Classic, Ultralight i DESFire, FeliCa, Topaz/Jewel, NFC Forum typy od 1 do 4. Tagi ISO 15693 są poza jego zasięgiem.",
+ "what5_title": "Bez nauki elektroniki",
+ "what5_text": "Popularne czytniki przez PC/SC, standard kart inteligentnych wbudowany w Windows, macOS i Linuksa. Żadnej własnej płytki, żadnego zamkniętego czytnika, żadnego sterownika od producenta.",
+ "what6_title": "Offline, a chipy dostają drugie życie",
+ "what6_text": "Pod odczytuje i zapisuje lokalnie; nic nie łączy się z siecią. Chip ze zużytej szpuli można nadpisać jako zwykły tag NDEF (adres URL, automatyka domowa, wizytówka) i z powrotem jako TigerTag.",
+ "shells_title": "Dwie obudowy do wydruku",
+ "shells_lead": "TigerPOD to jeden pomysł: dwa czytniki ACR122U ustawione naprzeciw siebie, trzymane w odpowiedniej odległości przez drukowany uchwyt. Obie opublikowane obudowy mieszczą te same dwa czytniki; wybierz tę, która pasuje do Twojego biurka.",
+ "mini_badge": "Polecana",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Przeprojektowana, bardziej kompaktowa obudowa: drukuje się szybciej, zużywa mniej filamentu, zajmuje mniej miejsca na biurku i prowadzi kable w środku. Odczytuje i zapisuje tagi TigerTag oraz OpenSpool (NDEF).",
+ "mini_alt": "Kompaktowy TigerPOD Mini ze szpulą filamentu, z pionowym czytnikiem po każdej stronie",
+ "orig_title": "TigerPOD (oryginalny)",
+ "orig_text": "Pierwsza obudowa, dopasowana do standardowej szpuli 1 kg. Te same dwa czytniki, te same funkcje.",
+ "open_makerworld": "Pliki do druku na MakerWorld",
+ "concept_title": "Kształt możesz zmienić po swojemu",
+ "concept_text": "Liczą się tylko dwa czytniki ustawione naprzeciw siebie; uchwyt wokół nich to szczegół. Przeprojektuj go pod inny format szpuli albo inne zastosowanie, a nadal będzie to Pod. Udostępnij swój remiks na MakerWorld i otwórz issue z linkiem do niego.",
+ "concept_link": "Jak współtworzyć projekt",
+ "build_title": "Jak zbudować TigerPOD?",
+ "build_lead": "Do zbudowania TigerPOD potrzebujesz wydruku 3D i dwóch czytników USB: bez znajomości elektroniki, bez lutowania, bez okablowania.",
+ "step1_title": "Wydrukuj obudowę",
+ "step1_text": "TigerPOD Mini (polecany) albo oryginał, oba na MakerWorld, z dowolnego filamentu.",
+ "step2_title": "Kup dwa czytniki",
+ "step2_text": "Dwa czytniki NFC na USB zgodne z ACR122U z dowolnego sklepu oraz tagi NTAG 213, 215 lub 216 do zapisu.",
+ "step3_title": "Wsuń je",
+ "step3_text": "Po jednym czytniku w każde gniazdo obudowy. Bez śrub, bez kleju, bez okablowania.",
+ "step4_title": "Podłącz",
+ "step4_text": "Podłącz oba czytniki do komputera. Rozgałęźnik USB 2 w 1 pozwala obejść się jednym kablem; dwa porty też wystarczą.",
+ "step5_title": "Zainstaluj Tiger Studio Manager",
+ "step5_text": "Darmowa aplikacja na komputer automatycznie wykrywa czytniki. Włóż szpulę.",
+ "parts_title": "Lista części",
+ "part_reader": "Czytnik NFC zgodny z ACR122U",
+ "part_reader_qty": "2, po jednym na każdą stronę szpuli",
+ "part_tags": "Tagi NTAG 213 / 215 / 216",
+ "part_tags_qty": "1 opakowanie: dwa chipy na szpulę",
+ "part_shell": "Obudowa z drukarki 3D",
+ "part_shell_qty": "1, wydrukowana z Twojego filamentu",
+ "part_splitter": "Rozgałęźnik USB 2 w 1",
+ "part_splitter_qty": "opcjonalnie: dwa porty USB też wystarczą",
+ "reader_alt": "Czytnik NFC na USB zgodny z ACR122U",
+ "splitter_alt": "Kabel rozgałęźnika USB dwa w jeden",
+ "affiliate_note": "Niektóre linki do sprzętu to linki partnerskie Amazon: jako Partner Amazon TigerTag otrzymuje prowizję od kwalifikujących się zakupów, bez dodatkowych kosztów dla Ciebie.",
+ "os_title": "Windows, macOS i Linux",
+ "os_windows": "Windows: działa od razu, usługa PC/SC jest częścią systemu Windows. Jeśli czytnik przejmie pomocniczy sterownik emulacji kart, odinstaluj go.",
+ "os_macos": "macOS: działa z wbudowanym stosem PC/SC, bez dodatkowego sterownika.",
+ "os_linux": "Linux: zainstaluj PC/SC i sterownik ACS/CCID, a następnie upewnij się, że usługa pcscd działa.",
+ "kit_title": "Albo kup zestaw elektroniki",
+ "kit_lead": "Sklep TigerTag sprzedaje elektronikę gotową do wsunięcia: czytniki z oficjalnym logo projektu oraz rozgałęźnik. Zakup zestawu finansuje otwarty standard.",
+ "kit_bundle": "Zestaw TigerPOD: 2 czytniki i rozgałęźnik",
+ "kit_single": "Pojedynczy czytnik",
+ "kit_splitter": "Sam rozgałęźnik",
+ "kit_note": "Zestaw to wyłącznie elektronika: obudowę drukujesz sam. Pod zbudowany z ogólnodostępnych części to ten sam Pod.",
+ "kit_shop": "Otwórz sklep",
+ "colours_title": "Ma taki kolor, jaki filament załadujesz",
+ "colours_lead": "Drukujesz go sam, więc Pod przyjmuje kolor i wykończenie Twojego filamentu: silk, galaxy, marmur, świecący w ciemności.",
+ "colours_alt": "Obudowy TigerPOD wydrukowane w piętnastu kolorach: czerwonym, pomarańczowym, żółtym, zielonym, cyjanowym, niebieskim, fioletowym, różowym, złotym, miedzianym, srebrnym, szarym, czarnym, białym i świecącym w ciemności",
+ "finishes_alt": "Obudowy TigerPOD w specjalnych wykończeniach: osiem kolorów silk, fioletowy galaxy, marmur, dwie tęcze i trzy wydruki świecące w ciemności, sfotografowane przy zgaszonym świetle",
+ "colours_more": "Wszystkie zdjęcia w pełnej rozdzielczości, także jako wycięcia z przezroczystym tłem, w repozytorium",
+ "eco_title": "Gdzie pasuje TigerPOD?",
+ "eco_lead": "TigerPOD to biurkowe NFC w systemie TigerTag: tę samą szpulę odczytuje Pod, Tiger Studio Manager na komputerze i telefon.",
+ "eco_alt": "System TigerTag: niebieski TigerPOD ze szpulą, Tiger Studio Manager na ekranie komputera i aplikacja mobilna na telefonie",
+ "eco_protocol_title": "Protokół TigerTag",
+ "eco_protocol_text": "Otwarta specyfikacja i publiczny rejestr, które Pod odczytuje i zapisuje (CC-BY-4.0, nieodwołalne prawo do implementacji).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "Darmowa aplikacja na komputer (MIT): magazyn, drukarki i dom Poda. Steruje czytnikami przez PC/SC.",
+ "eco_phone_title": "Na telefonie, bez Poda",
+ "eco_phone_text": "Chip TigerTag to standardowy tag NFC: odczyta go każdy telefon z NFC, a aplikacja mobilna zapisze go przez NFC samego telefonu.",
+ "eco_sdk_title": "SDK",
+ "eco_sdk_text": "JavaScript i Python (Apache-2.0): dekoduj tag offline z jego surowych bajtów, we własnym kodzie.",
+ "eco_community_title": "Społeczność",
+ "eco_community_text": "Pytania, zdjęcia z budowy i remiksy na Discordzie TigerTag.",
+ "open": "Otwórz",
+ "repo": "Repozytorium",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Jak odczytać tag we własnym kodzie?",
+ "dev_lead": "TigerTag przechowuje wszystko na chipie, więc odczyt to te same dwa kroki w każdym języku, bez wyszukiwania i bez sieci.",
+ "dev1_title": "1. Pobierz surowe bajty",
+ "dev1_text": "Dowolną biblioteką NFC odczytaj 7-bajtowy UID i pamięć użytkownika, strony od 0x04 do 0x27: 36 stron po 4 bajty, 144 bajty. Na komputerze nfc-pcsc (Node, używany przez Tiger Studio Manager) lub pyscard (Python) sterują ACR122U przez PC/SC.",
+ "dev2_title": "2. Dekoduj offline",
+ "dev2_text": "Przekaż te bajty do SDK TigerTag. Zwraca materiał, markę, kolor, temperatury i wagę oraz może zweryfikować podpis. SDK nigdy nie komunikuje się z czytnikiem.",
+ "dev_play_title": "Przetestuj Poda w playgroundzie",
+ "dev_play_text": "Oba SDK zawierają playground: mały lokalny serwer i stronę WWW. Wersja JavaScript łączy się z ACR122U przez PC/SC i pokazuje zdarzenia karty na żywo: włóż szpulę do Poda i zobacz, jak dekoduje się w przeglądarce.",
+ "faq_title": "Najczęściej zadawane pytania",
+ "faq1_q": "Czy mogę użyć tylko jednego czytnika?",
+ "faq1_a": "Tak. Jeden chip i jeden czytnik działają, ale musisz przyłożyć szpulę stroną z tagiem, a dwa chipy szpuli nie są już automatycznie synchronizowane.",
+ "faq2_q": "Jakie szpule mieszczą się w TigerPOD?",
+ "faq2_a": "Około 99% szpul 1 kg, niezależnie od rodzaju: plastikowe masterspoole, szpule kartonowe, jednorazowe szpule plastikowe i wkłady refill.",
+ "faq3_q": "NTAG 213, 215 czy 216: który wybrać?",
+ "faq3_a": "Różnią się tylko pamięcią: około 144 bajtów w 213, 504 w 215 i 888 w 216. Każdy z nich pomieści rekord TigerTag; wybierz 215 lub 216, jeśli chcesz mieć zapas. Wszystkie trzy działają w Podzie.",
+ "faq4_q": "Mój czytnik nie jest wykrywany. Co sprawdzić?",
+ "faq4_a": "Upewnij się, że to czytnik PC/SC zgodny z ACR122U. W Linuksie zainstaluj sterownik CCID i uruchom usługę pcscd. Odłącz i ponownie podłącz czytnik, a potem uruchom ponownie Tiger Studio Manager.",
+ "faq5_q": "Czy mogę ponownie używać tagów?",
+ "faq5_a": "Tak. TigerTagi nigdy nie są blokowane: czyść je i zapisuj na nowo jako TigerTagi tak często, jak chcesz, albo zamień je w zwykłe tagi NDEF do innego zastosowania NFC i z powrotem.",
+ "faq6_q": "Czy Pod obsłuży inne zadania NFC niż TigerTag?",
+ "faq6_a": "Tak. To dwa standardowe czytniki ACR122U, więc odczytuje, zapisuje, nadpisuje i czyści wszystko, co obsługuje ACR122U: ISO 14443 A i B, MIFARE Classic, Ultralight i DESFire, FeliCa, Topaz/Jewel oraz NFC Forum typy od 1 do 4.",
+ "faq7_q": "Czy TigerPOD potrzebuje połączenia z internetem?",
+ "faq7_a": "Nie. Pod odczytuje i zapisuje lokalnie i nic nie łączy się z siecią.",
+ "faq8_q": "Czy do odczytu TigerTag potrzebuję TigerPOD?",
+ "faq8_a": "Nie. Chip TigerTag to standardowy tag NFC, więc odczyta go każdy telefon z NFC, a aplikacja mobilna może go zapisać. Pod to biurkowe NFC: odczyt i zapis obu chipów szpuli po prostu przez jej włożenie.",
+ "join_title": "Zbuduj swój TigerPOD",
+ "join_text": "Wydrukuj Mini, wsuń dwa czytniki, zainstaluj Tiger Studio Manager. Pytania i zdjęcia z budowy mile widziane na Discordzie.",
+ "join_btn": "Wydrukuj TigerPOD Mini",
+ "foot_licences": "Projekt i dokumentacja TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDK: Apache-2.0.",
+ "foot_trademark": "Nazwa i logo TigerTag są znakami towarowymi TigerTag Corp.",
+ "foot_source": "Kod źródłowy tej strony",
+ "foot_protocol": "Protokół TigerTag"
+}
diff --git a/site/i18n/pt-pt.json b/site/i18n/pt-pt.json
new file mode 100644
index 0000000..52d6e1c
--- /dev/null
+++ b/site/i18n/pt-pt.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Português (PT)",
+ "skip": "Saltar para o conteúdo",
+ "theme_label": "Tema claro ou escuro",
+ "lang_label": "Idioma",
+ "meta_title": "TigerPOD: leitor NFC de código aberto para bobinas",
+ "meta_description": "Construa um leitor/gravador NFC de secretária para bobinas de filamento, com dois leitores USB e uma caixa impressa em 3D. Design aberto, CC-BY-4.0.",
+ "og_title": "TigerPOD: um leitor de CD, para bobinas",
+ "og_description": "Pouse uma bobina de filamento e o computador lê e grava os seus chips NFC. Dois leitores USB correntes, uma caixa impressa em 3D, sem soldar.",
+ "og_alt": "Caixas TigerPOD impressas em nove cores, cada uma com uma bobina de filamento",
+ "nav_what": "O que faz",
+ "nav_shells": "Caixas",
+ "nav_build": "Construir",
+ "nav_kit": "Kit",
+ "nav_colours": "Cores",
+ "nav_eco": "Ecossistema",
+ "nav_dev": "Programadores",
+ "nav_faq": "Perguntas frequentes",
+ "hero_kicker": "Leitor e gravador NFC de código aberto para bobinas de filamento",
+ "hero_headline": "Um leitor de CD, para bobinas.",
+ "hero_lead": "Pouse uma bobina de filamento de impressão 3D e o computador lê os seus chips TigerTag: material, marca, cor, temperaturas, quanto falta. Gravar uma etiqueta funciona da mesma maneira. Dois leitores NFC USB correntes e uma caixa impressa em 3D, mais nada.",
+ "hero_alt": "Nove caixas TigerPOD em preto, azul, roxo, cor-de-rosa, vermelho, laranja, amarelo, verde e branco, cada uma com uma bobina de filamento",
+ "cta_build": "Construa o seu TigerPOD",
+ "cta_kit": "Adquira o kit eletrónico",
+ "cta_repo": "Consulte o README",
+ "fact1_value": "2",
+ "fact1_label": "leitores USB compatíveis com ACR122U, um virado para cada face da bobina",
+ "fact2_value": "0",
+ "fact2_label": "parafusos, cola, fios ou soldadura: os leitores encaixam deslizando na caixa",
+ "fact3_value": "~99%",
+ "fact3_label": "das bobinas de 1 kg cabem: plástico, cartão, descartáveis e recargas",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "design e documentação abertos, livres para imprimir, alterar e partilhar",
+ "what_title": "Para que serve o TigerPOD?",
+ "what_lead": "O TigerPOD lê e grava os chips NFC de uma bobina de filamento em cima da sua secretária: dois leitores PC/SC normais mantidos frente a frente por um suporte impresso em 3D, controlados pelo Tiger Studio Manager.",
+ "demo_alt": "Uma bobina pousada num TigerPOD vermelho, com a luz do leitor a acender enquanto o chip é lido",
+ "what1_title": "Basta pousar, sem apontar",
+ "what1_text": "Com um chip em cada face da bobina e um leitor virado para cada chip, há sempre um chip à frente de um leitor, seja qual for o sentido em que a bobina é colocada.",
+ "what2_title": "Os dois chips em simultâneo",
+ "what2_text": "O Pod lê e grava os dois chips de uma bobina ao mesmo tempo: o par Twin Tag mantém-se idêntico byte a byte e o seu inventário conta uma bobina, e não duas etiquetas.",
+ "what3_title": "Controlo total do chip",
+ "what3_text": "Consulte o conteúdo de uma etiqueta, grave uma nova, altere-a e apague-a até ficar em branco. Uma TigerTag nunca fica bloqueada contra escrita: pode regravá-la as vezes que quiser.",
+ "what4_title": "Uma estação NFC universal",
+ "what4_text": "Tudo o que um ACR122U trata, o Pod trata: ISO 14443 A e B, MIFARE Classic, Ultralight e DESFire, FeliCa, Topaz/Jewel, NFC Forum tipos 1 a 4. As etiquetas ISO 15693 estão fora do seu alcance.",
+ "what5_title": "Sem eletrónica para aprender",
+ "what5_text": "Leitores correntes através de PC/SC, a norma de cartões inteligentes integrada no Windows, macOS e Linux. Sem placa à medida, sem leitor proprietário, sem controlador de fabricante.",
+ "what6_title": "Sem ligação à rede, e os chips ganham nova vida",
+ "what6_text": "O Pod lê e grava localmente; nada é enviado para o exterior. Um chip de uma bobina usada pode ser regravado como uma etiqueta NDEF simples (um endereço web, domótica, um cartão de visita) e voltar depois a ser uma TigerTag.",
+ "shells_title": "Duas caixas para imprimir",
+ "shells_lead": "O TigerPOD resume-se a uma ideia: dois leitores ACR122U frente a frente, à distância certa graças a um suporte impresso em 3D. As duas caixas publicadas levam os mesmos dois leitores; escolha a que melhor se adapta à sua secretária.",
+ "mini_badge": "Recomendado",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Uma caixa redesenhada e mais compacta: imprime-se mais depressa, gasta menos filamento, ocupa menos espaço na secretária e esconde os cabos no interior. Lê e grava etiquetas TigerTag e OpenSpool (NDEF).",
+ "mini_alt": "O compacto TigerPOD Mini com uma bobina de filamento, com um leitor na vertical de cada lado",
+ "orig_title": "TigerPOD (original)",
+ "orig_text": "A primeira caixa, à medida de uma bobina normal de 1 kg. Os mesmos dois leitores, as mesmas funcionalidades.",
+ "open_makerworld": "Ficheiros de impressão no MakerWorld",
+ "concept_title": "A forma é sua para alterar",
+ "concept_text": "Só os dois leitores frente a frente contam; o suporte à volta é um pormenor. Redesenhe-o para outro formato de bobina ou para outra utilização, e continua a ser um Pod. Partilhe a sua versão no MakerWorld e abra uma issue com a respetiva ligação.",
+ "concept_link": "Como contribuir",
+ "build_title": "Como se constrói um TigerPOD?",
+ "build_lead": "Para construir um TigerPOD basta uma impressão 3D e dois leitores USB: sem conhecimentos de eletrónica, sem soldadura, sem cablagem.",
+ "step1_title": "Imprima uma caixa",
+ "step1_text": "O TigerPOD Mini (recomendado) ou o original, ambos no MakerWorld, no filamento que preferir.",
+ "step2_title": "Arranje dois leitores",
+ "step2_text": "Dois leitores NFC USB compatíveis com ACR122U, de qualquer loja, e etiquetas NTAG 213, 215 ou 216 para gravar.",
+ "step3_title": "Encaixe-os",
+ "step3_text": "Um leitor em cada ranhura da caixa. Sem parafusos, sem cola, sem fios.",
+ "step4_title": "Ligue ao computador",
+ "step4_text": "Ligue os dois leitores ao computador. Com um repartidor USB de 2 para 1 fica tudo num só cabo; duas portas também servem.",
+ "step5_title": "Instale o Tiger Studio Manager",
+ "step5_text": "A aplicação gratuita para computador deteta os leitores automaticamente. Pouse uma bobina.",
+ "parts_title": "Lista de componentes",
+ "part_reader": "Leitor NFC compatível com ACR122U",
+ "part_reader_qty": "2, um para cada face da bobina",
+ "part_tags": "Etiquetas NTAG 213 / 215 / 216",
+ "part_tags_qty": "1 embalagem: dois chips por bobina",
+ "part_shell": "Caixa impressa em 3D",
+ "part_shell_qty": "1, impressa no seu filamento",
+ "part_splitter": "Repartidor USB de 2 para 1",
+ "part_splitter_qty": "opcional: duas portas USB também servem",
+ "reader_alt": "Leitor NFC USB compatível com ACR122U",
+ "splitter_alt": "Cabo repartidor USB de dois para um",
+ "affiliate_note": "Algumas ligações de hardware são ligações de afiliado da Amazon: enquanto Associado Amazon, a TigerTag recebe comissões por compras elegíveis, sem qualquer custo adicional para si.",
+ "os_title": "Windows, macOS e Linux",
+ "os_windows": "Windows: reconhecido de imediato, o serviço PC/SC vem incluído no Windows. Se um controlador auxiliar de emulação de cartões se apoderar do leitor, desinstale-o.",
+ "os_macos": "macOS: funciona com a camada PC/SC integrada, sem controlador adicional.",
+ "os_linux": "Linux: instale o PC/SC e o controlador ACS/CCID e confirme que o serviço pcscd está em execução.",
+ "kit_title": "Ou adquira o kit eletrónico",
+ "kit_lead": "A loja TigerTag vende a eletrónica pronta a encaixar: leitores com o logótipo oficial do projeto e o repartidor. Comprar o kit financia a norma aberta.",
+ "kit_bundle": "Conjunto TigerPOD: 2 leitores e repartidor",
+ "kit_single": "Leitor individual",
+ "kit_splitter": "Repartidor em separado",
+ "kit_note": "O kit inclui apenas a eletrónica: a caixa continua a ser impressa por si. Um Pod montado com componentes genéricos é exatamente o mesmo Pod.",
+ "kit_shop": "Abrir a loja",
+ "colours_title": "Fica com a cor do filamento que carregar",
+ "colours_lead": "É o utilizador que o imprime, por isso o Pod assume a cor e o acabamento do seu filamento: seda, galáxia, mármore, fosforescente.",
+ "colours_alt": "Caixas TigerPOD impressas em quinze cores: vermelho, laranja, amarelo, verde, ciano, azul, roxo, cor-de-rosa, dourado, cobre, prateado, cinzento, preto, branco e fosforescente",
+ "finishes_alt": "Caixas TigerPOD com acabamentos especiais: oito cores seda, roxo galáxia, mármore, dois arco-íris e três impressões fosforescentes fotografadas com as luzes apagadas",
+ "colours_more": "Todas as fotografias em resolução máxima, e também recortadas com fundo transparente, no repositório",
+ "eco_title": "Qual o lugar do TigerPOD no ecossistema?",
+ "eco_lead": "O TigerPOD é o NFC do computador no sistema TigerTag: a mesma bobina é lida pelo Pod, pelo Tiger Studio Manager no computador e por um telemóvel.",
+ "eco_alt": "O sistema TigerTag: um TigerPOD azul com uma bobina, o Tiger Studio Manager no ecrã de um computador e a aplicação móvel num telemóvel",
+ "eco_protocol_title": "O protocolo TigerTag",
+ "eco_protocol_text": "A especificação aberta e o registo público que o Pod lê e grava (CC-BY-4.0, licença de implementação irrevogável).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "A aplicação gratuita para computador (MIT): inventário, impressoras e a base do Pod. Controla os leitores através de PC/SC.",
+ "eco_phone_title": "No telemóvel, sem Pod",
+ "eco_phone_text": "Um chip TigerTag é uma etiqueta NFC normal: qualquer telemóvel com NFC a lê, e a aplicação móvel grava-a com o NFC do próprio telemóvel.",
+ "eco_sdk_title": "SDKs",
+ "eco_sdk_text": "JavaScript e Python (Apache-2.0): descodifique uma etiqueta sem ligação à rede a partir dos bytes em bruto, no seu próprio código.",
+ "eco_community_title": "Comunidade",
+ "eco_community_text": "Dúvidas, fotografias de montagens e versões alteradas no Discord da TigerTag.",
+ "open": "Abrir",
+ "repo": "Repositório",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Como posso ler uma etiqueta no meu próprio código?",
+ "dev_lead": "Uma TigerTag guarda tudo no chip, por isso a leitura resume-se aos mesmos dois passos em qualquer linguagem, sem consultas e sem rede.",
+ "dev1_title": "1. Obter os bytes em bruto",
+ "dev1_text": "Com qualquer biblioteca NFC, leia o UID de 7 bytes e a memória de utilizador, páginas 0x04 a 0x27: 36 páginas de 4 bytes, 144 bytes. No computador, o nfc-pcsc (Node, utilizado pelo Tiger Studio Manager) ou o pyscard (Python) controlam o ACR122U através de PC/SC.",
+ "dev2_title": "2. Descodificar localmente",
+ "dev2_text": "Entregue esses bytes ao SDK TigerTag. Este devolve o material, a marca, a cor, as temperaturas e o peso, e pode verificar a assinatura. O SDK nunca acede ao leitor.",
+ "dev_play_title": "Experimente o Pod no playground",
+ "dev_play_text": "Os dois SDKs incluem um playground, um pequeno servidor local e uma página web. O de JavaScript liga-se ao ACR122U através de PC/SC e mostra os eventos do cartão em tempo real: pouse uma bobina no Pod e veja-a ser descodificada no navegador.",
+ "faq_title": "Perguntas frequentes",
+ "faq1_q": "Posso usar apenas um leitor?",
+ "faq1_a": "Sim. Um só chip e um só leitor funcionam, mas tem de apresentar a face da bobina que tem a etiqueta, e os dois chips de uma bobina deixam de ser sincronizados automaticamente.",
+ "faq2_q": "Que bobinas cabem no TigerPOD?",
+ "faq2_a": "Cerca de 99% das bobinas de 1 kg, de qualquer tipo: masterspools de plástico, bobinas de cartão, bobinas de plástico descartáveis e recargas.",
+ "faq3_q": "NTAG 213, 215 ou 216: qual escolher?",
+ "faq3_a": "Diferem apenas na memória: cerca de 144 bytes na 213, 504 na 215 e 888 na 216. Qualquer uma comporta um registo TigerTag; opte pela 215 ou pela 216 para ter mais margem. As três funcionam no Pod.",
+ "faq4_q": "O meu leitor não é detetado. O que devo verificar?",
+ "faq4_a": "Confirme que se trata de um leitor PC/SC compatível com ACR122U. No Linux, instale o controlador CCID e inicie o serviço pcscd. Desligue e volte a ligar o leitor uma vez e reinicie o Tiger Studio Manager.",
+ "faq5_q": "Posso reutilizar as etiquetas?",
+ "faq5_a": "Sim. As TigerTags nunca ficam bloqueadas: apague-as e regrave-as como novas TigerTags sempre que quiser, ou converta-as em etiquetas NDEF simples para outra utilização NFC e, mais tarde, reverta-as.",
+ "faq6_q": "O Pod serve para outras tarefas NFC além da TigerTag?",
+ "faq6_a": "Sim. São dois leitores ACR122U normais, por isso lê, grava, regrava e apaga tudo o que um ACR122U suporta: ISO 14443 A e B, MIFARE Classic, Ultralight e DESFire, FeliCa, Topaz/Jewel e NFC Forum tipos 1 a 4.",
+ "faq7_q": "O TigerPOD precisa de ligação à Internet?",
+ "faq7_a": "Não. O Pod lê e grava localmente, e nada é enviado para o exterior.",
+ "faq8_q": "Preciso de um TigerPOD para ler uma TigerTag?",
+ "faq8_a": "Não. Um chip TigerTag é uma etiqueta NFC normal, por isso qualquer telemóvel com NFC a consegue ler, e a aplicação móvel consegue gravá-la. O Pod é o NFC do computador: basta pousar a bobina para ler e gravar os seus dois chips.",
+ "join_title": "Construa o seu TigerPOD",
+ "join_text": "Imprima o Mini, encaixe dois leitores, instale o Tiger Studio Manager. Dúvidas e fotografias de montagens são bem-vindas no Discord.",
+ "join_btn": "Imprimir o TigerPOD Mini",
+ "foot_licences": "Design e documentação do TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDKs: Apache-2.0.",
+ "foot_trademark": "O nome e o logótipo TigerTag são marcas da TigerTag Corp.",
+ "foot_source": "Código-fonte deste site",
+ "foot_protocol": "Protocolo TigerTag"
+}
diff --git a/site/i18n/pt.json b/site/i18n/pt.json
new file mode 100644
index 0000000..49ab47d
--- /dev/null
+++ b/site/i18n/pt.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Português (BR)",
+ "skip": "Pular para o conteúdo",
+ "theme_label": "Tema claro ou escuro",
+ "lang_label": "Idioma",
+ "meta_title": "TigerPOD: leitor NFC open source para carretéis",
+ "meta_description": "Monte um leitor e gravador NFC de mesa para carretéis de filamento 3D com dois leitores USB e uma carcaça impressa em 3D. Projeto aberto, CC-BY-4.0.",
+ "og_title": "TigerPOD: um toca-CD para carretéis",
+ "og_description": "Coloque um carretel de filamento e o seu computador lê e grava os chips NFC dele. Dois leitores USB comuns, uma carcaça impressa em 3D, sem solda.",
+ "og_alt": "Carcaças TigerPOD impressas em nove cores, cada uma com um carretel de filamento",
+ "nav_what": "O que faz",
+ "nav_shells": "Carcaças",
+ "nav_build": "Monte o seu",
+ "nav_kit": "Kit",
+ "nav_colours": "Cores",
+ "nav_eco": "Ecossistema",
+ "nav_dev": "Desenvolvedores",
+ "nav_faq": "Perguntas frequentes",
+ "hero_kicker": "Leitor e gravador NFC open source para carretéis de filamento",
+ "hero_headline": "Um toca-CD, para carretéis.",
+ "hero_lead": "Coloque um carretel de filamento de impressão 3D e o seu computador lê os chips TigerTag dele: material, marca, cor, temperaturas, quanto resta. Gravar uma tag funciona do mesmo jeito. Dois leitores NFC USB comuns e uma carcaça impressa em 3D, nada mais.",
+ "hero_alt": "Nove carcaças TigerPOD em preto, azul, roxo, rosa, vermelho, laranja, amarelo, verde e branco, cada uma com um carretel de filamento",
+ "cta_build": "Monte o seu TigerPOD",
+ "cta_kit": "Compre o kit eletrônico",
+ "cta_repo": "Leia o README",
+ "fact1_value": "2",
+ "fact1_label": "leitores USB compatíveis com ACR122U, um voltado para cada lado do carretel",
+ "fact2_value": "0",
+ "fact2_label": "parafusos, cola, fios ou solda: os leitores deslizam para dentro da carcaça",
+ "fact3_value": "~99%",
+ "fact3_label": "dos carretéis de 1 kg cabem: plástico, papelão, descartáveis e refis",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "projeto e documentação abertos, livres para imprimir, modificar e compartilhar",
+ "what_title": "O que o TigerPOD faz?",
+ "what_lead": "O TigerPOD lê e grava os chips NFC de um carretel de filamento na sua mesa: dois leitores PC/SC padrão mantidos frente a frente por um suporte impresso em 3D, controlados pelo Tiger Studio Manager.",
+ "demo_alt": "Um carretel colocado em um TigerPOD vermelho, com a luz do leitor acendendo enquanto o chip é lido",
+ "what1_title": "É só colocar, sem mirar",
+ "what1_text": "Com um chip em cada lado do carretel e um leitor voltado para cada chip, sempre há um chip na frente de um leitor, seja qual for o lado em que o carretel entra.",
+ "what2_title": "Os dois chips de uma vez",
+ "what2_text": "O Pod lê e grava os dois chips de um carretel juntos, então o par Twin Tag continua idêntico byte a byte e o seu inventário conta um carretel, não duas tags.",
+ "what3_title": "Controle total do chip",
+ "what3_text": "Leia o que há em uma tag, grave uma nova, altere e apague até deixá-la em branco. Uma TigerTag nunca é bloqueada para gravação: regrave quantas vezes quiser.",
+ "what4_title": "Uma estação NFC universal",
+ "what4_text": "Tudo o que um ACR122U suporta, o Pod suporta: ISO 14443 A e B, MIFARE Classic, Ultralight e DESFire, FeliCa, Topaz/Jewel, NFC Forum tipos 1 a 4. Tags ISO 15693 ficam fora do alcance dele.",
+ "what5_title": "Nada de eletrônica para aprender",
+ "what5_text": "Leitores comuns via PC/SC, o padrão de smart card que já vem no Windows, macOS e Linux. Sem placa personalizada, sem leitor proprietário, sem driver de fabricante.",
+ "what6_title": "Offline, e os chips ganham uma segunda vida",
+ "what6_text": "O Pod lê e grava localmente; nada é enviado para fora. Um chip de carretel usado pode ser regravado como uma tag NDEF comum (uma URL, automação residencial, um cartão de visita) e depois voltar a ser uma TigerTag.",
+ "shells_title": "Duas carcaças para imprimir",
+ "shells_lead": "O TigerPOD é uma ideia só: dois leitores ACR122U frente a frente, mantidos na distância certa por um suporte impresso em 3D. As duas carcaças publicadas usam os mesmos dois leitores; escolha a que combina com a sua mesa.",
+ "mini_badge": "Recomendado",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Uma carcaça redesenhada e mais compacta: imprime mais rápido, gasta menos filamento, ocupa menos espaço na mesa e passa os cabos por dentro. Lê e grava tags TigerTag e OpenSpool (NDEF).",
+ "mini_alt": "O compacto TigerPOD Mini com um carretel de filamento, um leitor na vertical de cada lado",
+ "orig_title": "TigerPOD (original)",
+ "orig_text": "A primeira carcaça, dimensionada para um carretel padrão de 1 kg. Os mesmos dois leitores, os mesmos recursos.",
+ "open_makerworld": "Arquivos de impressão no MakerWorld",
+ "concept_title": "O formato é seu para mudar",
+ "concept_text": "Só os dois leitores frente a frente importam; o suporte em volta é um detalhe. Redesenhe para outro formato de carretel ou outro uso, e continua sendo um Pod. Compartilhe o seu remix no MakerWorld e abra uma issue com o link para ele.",
+ "concept_link": "Como contribuir",
+ "build_title": "Como montar um TigerPOD?",
+ "build_lead": "Montar um TigerPOD exige uma impressão 3D e dois leitores USB: sem conhecimento de eletrônica, sem solda, sem fiação.",
+ "step1_title": "Imprima uma carcaça",
+ "step1_text": "O TigerPOD Mini (recomendado) ou o original, ambos no MakerWorld, no filamento que você preferir.",
+ "step2_title": "Arrume dois leitores",
+ "step2_text": "Dois leitores NFC USB compatíveis com ACR122U de qualquer loja, e tags NTAG 213, 215 ou 216 para gravar.",
+ "step3_title": "Encaixe os leitores",
+ "step3_text": "Um leitor em cada encaixe da carcaça. Sem parafusos, sem cola, sem fiação.",
+ "step4_title": "Conecte",
+ "step4_text": "Ligue os dois leitores ao computador. Um divisor USB 2 para 1 deixa tudo em um cabo só; duas portas também funcionam.",
+ "step5_title": "Instale o Tiger Studio Manager",
+ "step5_text": "O aplicativo de desktop gratuito detecta os leitores automaticamente. Coloque um carretel.",
+ "parts_title": "Lista de peças",
+ "part_reader": "Leitor NFC compatível com ACR122U",
+ "part_reader_qty": "2, um para cada lado do carretel",
+ "part_tags": "Tags NTAG 213 / 215 / 216",
+ "part_tags_qty": "1 pacote: dois chips por carretel",
+ "part_shell": "Carcaça impressa em 3D",
+ "part_shell_qty": "1, impressa no seu filamento",
+ "part_splitter": "Divisor USB 2 para 1",
+ "part_splitter_qty": "opcional: duas portas USB também funcionam",
+ "reader_alt": "Leitor NFC USB compatível com ACR122U",
+ "splitter_alt": "Cabo divisor USB dois para um",
+ "affiliate_note": "Alguns links de hardware são links de afiliado da Amazon: como Associado Amazon, a TigerTag ganha com compras qualificadas, sem custo extra para você.",
+ "os_title": "Windows, macOS e Linux",
+ "os_windows": "Windows: reconhecido de cara, o serviço PC/SC já vem com o Windows. Se um driver auxiliar de emulação de cartão assumir o leitor, desinstale-o.",
+ "os_macos": "macOS: funciona com a pilha PC/SC nativa, sem driver extra.",
+ "os_linux": "Linux: instale o PC/SC e o driver ACS/CCID, depois confira se o serviço pcscd está rodando.",
+ "kit_title": "Ou compre o kit eletrônico",
+ "kit_lead": "A loja TigerTag vende a eletrônica pronta para encaixar: leitores com o logo oficial do projeto e o divisor. Comprar o kit financia o padrão aberto.",
+ "kit_bundle": "Kit TigerPOD: 2 leitores e divisor",
+ "kit_single": "Leitor avulso",
+ "kit_splitter": "Divisor avulso",
+ "kit_note": "O kit é só a eletrônica: a carcaça você mesmo imprime. Um Pod montado com peças genéricas é o mesmo Pod.",
+ "kit_shop": "Abrir a loja",
+ "colours_title": "Ele vem na cor do filamento que você carregar",
+ "colours_lead": "Você mesmo imprime, então o Pod ganha a cor e o acabamento do seu filamento: silk, galáxia, mármore, brilha no escuro.",
+ "colours_alt": "Carcaças TigerPOD impressas em quinze cores: vermelho, laranja, amarelo, verde, ciano, azul, roxo, rosa, dourado, cobre, prata, cinza, preto, branco e brilha no escuro",
+ "finishes_alt": "Carcaças TigerPOD com acabamentos especiais: oito cores silk, roxo galáxia, mármore, dois arco-íris e três impressões que brilham no escuro fotografadas com a luz apagada",
+ "colours_more": "Todas as fotos em resolução máxima, e também recortadas com fundo transparente, no repositório",
+ "eco_title": "Onde o TigerPOD se encaixa?",
+ "eco_lead": "O TigerPOD é o NFC do desktop no sistema TigerTag: o mesmo carretel é lido pelo Pod, pelo Tiger Studio Manager no computador e por um celular.",
+ "eco_alt": "O sistema TigerTag: um TigerPOD azul com um carretel, o Tiger Studio Manager na tela de um computador e o aplicativo móvel em um celular",
+ "eco_protocol_title": "O protocolo TigerTag",
+ "eco_protocol_text": "A especificação aberta e o registro público que o Pod lê e grava (CC-BY-4.0, concessão irrevogável de implementação).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "O aplicativo de desktop gratuito (MIT): inventário, impressoras e a casa do Pod. Ele controla os leitores via PC/SC.",
+ "eco_phone_title": "No celular, sem precisar do Pod",
+ "eco_phone_text": "Um chip TigerTag é uma tag NFC padrão: qualquer celular com NFC lê, e o aplicativo móvel grava usando o NFC do próprio celular.",
+ "eco_sdk_title": "SDKs",
+ "eco_sdk_text": "JavaScript e Python (Apache-2.0): decodifique uma tag offline a partir dos bytes brutos, no seu próprio código.",
+ "eco_community_title": "Comunidade",
+ "eco_community_text": "Dúvidas, fotos de montagem e remixes no Discord da TigerTag.",
+ "open": "Abrir",
+ "repo": "Repositório",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Como ler uma tag no meu próprio código?",
+ "dev_lead": "Uma TigerTag guarda tudo no chip, então a leitura é sempre os mesmos dois passos em qualquer linguagem, sem consulta e sem rede.",
+ "dev1_title": "1. Obtenha os bytes brutos",
+ "dev1_text": "Com qualquer biblioteca NFC, leia o UID de 7 bytes e a memória do usuário, páginas 0x04 a 0x27: 36 páginas de 4 bytes, 144 bytes. No desktop, nfc-pcsc (Node, usado pelo Tiger Studio Manager) ou pyscard (Python) controlam o ACR122U via PC/SC.",
+ "dev2_title": "2. Decodifique offline",
+ "dev2_text": "Passe esses bytes para o SDK TigerTag. Ele retorna material, marca, cor, temperaturas e peso, e pode verificar a assinatura. O SDK nunca acessa o leitor.",
+ "dev_play_title": "Teste o Pod no playground",
+ "dev_play_text": "Os dois SDKs vêm com um playground, um pequeno servidor local e uma página web. O de JavaScript se conecta ao ACR122U via PC/SC e mostra os eventos do cartão ao vivo: coloque um carretel no Pod e veja a decodificação no navegador.",
+ "faq_title": "Perguntas frequentes",
+ "faq1_q": "Posso usar só um leitor?",
+ "faq1_a": "Sim. Um único chip e um único leitor funcionam, mas você precisa apresentar o lado do carretel que tem a tag, e os dois chips de um carretel deixam de ser sincronizados automaticamente.",
+ "faq2_q": "Quais carretéis cabem no TigerPOD?",
+ "faq2_a": "Cerca de 99% dos carretéis de 1 kg, seja qual for o tipo: masterspools de plástico, carretéis de papelão, carretéis de plástico descartáveis e refis.",
+ "faq3_q": "NTAG 213, 215 ou 216: qual escolher?",
+ "faq3_a": "Elas diferem só na memória: cerca de 144 bytes na 213, 504 na 215 e 888 na 216. Qualquer uma comporta um registro TigerTag; escolha a 215 ou a 216 para ter mais folga. As três funcionam no Pod.",
+ "faq4_q": "Meu leitor não é detectado. O que devo verificar?",
+ "faq4_a": "Confira se é um leitor PC/SC compatível com ACR122U. No Linux, instale o driver CCID e inicie o serviço pcscd. Desconecte e reconecte o leitor uma vez e abra o Tiger Studio Manager de novo.",
+ "faq5_q": "Posso reutilizar as tags?",
+ "faq5_a": "Sim. As TigerTags nunca são bloqueadas: apague e regrave como novas TigerTags quantas vezes quiser, ou transforme em tags NDEF comuns para outro uso de NFC e depois volte.",
+ "faq6_q": "O Pod serve para outros usos de NFC além da TigerTag?",
+ "faq6_a": "Sim. São dois leitores ACR122U padrão, então ele lê, grava, regrava e apaga tudo o que um ACR122U suporta: ISO 14443 A e B, MIFARE Classic, Ultralight e DESFire, FeliCa, Topaz/Jewel e NFC Forum tipos 1 a 4.",
+ "faq7_q": "O TigerPOD precisa de conexão com a internet?",
+ "faq7_a": "Não. O Pod lê e grava localmente, e nada é enviado para fora.",
+ "faq8_q": "Preciso de um TigerPOD para ler uma TigerTag?",
+ "faq8_a": "Não. Um chip TigerTag é uma tag NFC padrão, então qualquer celular com NFC consegue ler, e o aplicativo móvel consegue gravar. O Pod é o NFC do desktop: leitura e gravação dos dois chips de um carretel, é só colocar.",
+ "join_title": "Monte o seu TigerPOD",
+ "join_text": "Imprima o Mini, encaixe dois leitores, instale o Tiger Studio Manager. Dúvidas e fotos da montagem são bem-vindas no Discord.",
+ "join_btn": "Imprimir o TigerPOD Mini",
+ "foot_licences": "Projeto e documentação do TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDKs: Apache-2.0.",
+ "foot_trademark": "O nome e o logo TigerTag são marcas registradas da TigerTag Corp.",
+ "foot_source": "Código-fonte deste site",
+ "foot_protocol": "Protocolo TigerTag"
+}
diff --git a/site/i18n/ru.json b/site/i18n/ru.json
new file mode 100644
index 0000000..6e4ecf2
--- /dev/null
+++ b/site/i18n/ru.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "Русский",
+ "skip": "Перейти к содержимому",
+ "theme_label": "Светлая или тёмная тема",
+ "lang_label": "Язык",
+ "meta_title": "TigerPOD: открытый NFC-считыватель для катушек филамента",
+ "meta_description": "Соберите настольный NFC-считыватель и программатор для катушек филамента из двух USB-ридеров и печатного корпуса. Открытый проект, CC-BY-4.0.",
+ "og_title": "TigerPOD: CD-проигрыватель для катушек",
+ "og_description": "Вставьте катушку филамента, и компьютер прочитает и запишет её NFC-чипы. Два обычных USB-ридера, один печатный корпус, без пайки.",
+ "og_alt": "Корпуса TigerPOD, напечатанные в девяти цветах, в каждом катушка филамента",
+ "nav_what": "Что он делает",
+ "nav_shells": "Корпуса",
+ "nav_build": "Собрать",
+ "nav_kit": "Набор",
+ "nav_colours": "Цвета",
+ "nav_eco": "Экосистема",
+ "nav_dev": "Разработчикам",
+ "nav_faq": "FAQ",
+ "hero_kicker": "Открытый NFC-считыватель и программатор для катушек филамента",
+ "hero_headline": "CD-проигрыватель для катушек.",
+ "hero_lead": "Вставьте катушку филамента для 3D-печати, и компьютер прочитает её чипы TigerTag: материал, бренд, цвет, температуры, сколько осталось. Запись метки работает так же. Два обычных USB NFC-ридера и напечатанный на 3D-принтере корпус, больше ничего.",
+ "hero_alt": "Девять корпусов TigerPOD: чёрный, синий, фиолетовый, розовый, красный, оранжевый, жёлтый, зелёный и белый, в каждом катушка филамента",
+ "cta_build": "Соберите свой TigerPOD",
+ "cta_kit": "Купить набор электроники",
+ "cta_repo": "Читать README",
+ "fact1_value": "2",
+ "fact1_label": "USB-ридера, совместимых с ACR122U, по одному напротив каждой стороны катушки",
+ "fact2_value": "0",
+ "fact2_label": "винтов, клея, проводов и пайки: ридеры просто вставляются в корпус",
+ "fact3_value": "~99%",
+ "fact3_label": "катушек на 1 кг подходят: пластиковые, картонные, одноразовые и рефилы",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "открытый дизайн и документация: печатайте, изменяйте и распространяйте свободно",
+ "what_title": "Что делает TigerPOD?",
+ "what_lead": "TigerPOD читает и записывает NFC-чипы катушки филамента прямо на вашем столе: два стандартных PC/SC-ридера, установленных друг напротив друга в печатном держателе, под управлением Tiger Studio Manager.",
+ "demo_alt": "Катушку вставляют в красный TigerPOD, и индикатор ридера загорается, когда чип прочитан",
+ "what1_title": "Просто вставьте, без прицеливания",
+ "what1_text": "По одному чипу с каждой стороны катушки и по ридеру напротив каждого чипа: какой стороной ни вставь катушку, чип всегда окажется перед ридером.",
+ "what2_title": "Оба чипа сразу",
+ "what2_text": "Pod читает и записывает оба чипа катушки одновременно, поэтому пара Twin Tag остаётся побайтно идентичной, а в инвентаре числится одна катушка, а не две метки.",
+ "what3_title": "Полный контроль над чипом",
+ "what3_text": "Прочитайте содержимое метки, запишите новую, измените её или сотрите до чистого состояния. TigerTag никогда не блокируется от записи: перезаписывайте его сколько угодно.",
+ "what4_title": "Универсальная NFC-станция",
+ "what4_text": "Всё, с чем работает ACR122U, умеет и Pod: ISO 14443 A и B, MIFARE Classic, Ultralight и DESFire, FeliCa, Topaz/Jewel, NFC Forum типов 1–4. Метки ISO 15693 он не поддерживает.",
+ "what5_title": "Не нужно разбираться в электронике",
+ "what5_text": "Обычные ридеры через PC/SC, стандарт смарт-карт, встроенный в Windows, macOS и Linux. Никакой самодельной платы, никакого проприетарного ридера, никаких драйверов от производителя.",
+ "what6_title": "Офлайн, и вторая жизнь для чипов",
+ "what6_text": "Pod читает и записывает локально и никуда не отправляет данные. Чип с пустой катушки можно перезаписать как обычную NDEF-метку (ссылка, умный дом, визитка) и обратно в TigerTag.",
+ "shells_title": "Два корпуса для печати",
+ "shells_lead": "TigerPOD — это одна идея: два ридера ACR122U друг напротив друга, которые печатный держатель удерживает на нужном расстоянии. Оба опубликованных корпуса рассчитаны на одни и те же два ридера; выберите тот, что подходит вашему столу.",
+ "mini_badge": "Рекомендуем",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "Переработанный, более компактный корпус: печатается быстрее, расходует меньше филамента, занимает меньше места на столе и прячет кабели внутри. Читает и записывает метки TigerTag и OpenSpool (NDEF).",
+ "mini_alt": "Компактный TigerPOD Mini с катушкой филамента и вертикальным ридером с каждой стороны",
+ "orig_title": "TigerPOD (оригинал)",
+ "orig_text": "Первый корпус, рассчитанный на стандартную катушку 1 кг. Те же два ридера, те же возможности.",
+ "open_makerworld": "Файлы для печати на MakerWorld",
+ "concept_title": "Форму можно менять как угодно",
+ "concept_text": "Важны только два ридера друг напротив друга; держатель вокруг них — деталь. Переделайте его под другой формат катушки или другую задачу, и это всё равно будет Pod. Опубликуйте свой ремикс на MakerWorld и откройте issue со ссылкой на него.",
+ "concept_link": "Как внести вклад",
+ "build_title": "Как собрать TigerPOD?",
+ "build_lead": "Для сборки TigerPOD нужны 3D-печать и два USB-ридера: без знаний электроники, без пайки, без проводки.",
+ "step1_title": "Напечатайте корпус",
+ "step1_text": "TigerPOD Mini (рекомендуем) или оригинал, оба на MakerWorld, любым филаментом на ваш вкус.",
+ "step2_title": "Купите два ридера",
+ "step2_text": "Два USB NFC-ридера, совместимых с ACR122U, из любого магазина и метки NTAG 213, 215 или 216 для записи.",
+ "step3_title": "Вставьте их",
+ "step3_text": "По одному ридеру в каждый слот корпуса. Без винтов, без клея, без проводки.",
+ "step4_title": "Подключите",
+ "step4_text": "Подключите оба ридера к компьютеру. USB-разветвитель 2-в-1 позволяет обойтись одним кабелем; два порта тоже подойдут.",
+ "step5_title": "Установите Tiger Studio Manager",
+ "step5_text": "Бесплатное настольное приложение само находит ридеры. Вставьте катушку.",
+ "parts_title": "Список компонентов",
+ "part_reader": "NFC-ридер, совместимый с ACR122U",
+ "part_reader_qty": "2, по одному на каждую сторону катушки",
+ "part_tags": "Метки NTAG 213 / 215 / 216",
+ "part_tags_qty": "1 упаковка: два чипа на катушку",
+ "part_shell": "Печатный корпус",
+ "part_shell_qty": "1, напечатанный вашим филаментом",
+ "part_splitter": "USB-разветвитель 2-в-1",
+ "part_splitter_qty": "необязательно: два USB-порта тоже подойдут",
+ "reader_alt": "USB NFC-ридер, совместимый с ACR122U",
+ "splitter_alt": "USB-кабель-разветвитель два в один",
+ "affiliate_note": "Некоторые ссылки на оборудование — партнёрские ссылки Amazon: как участник партнёрской программы Amazon, TigerTag получает комиссию с подходящих покупок, без дополнительных затрат для вас.",
+ "os_title": "Windows, macOS и Linux",
+ "os_windows": "Windows: распознаётся сразу, служба PC/SC входит в состав Windows. Если ридер перехватывает вспомогательный драйвер эмуляции карт, удалите его.",
+ "os_macos": "macOS: работает со встроенным стеком PC/SC, без дополнительных драйверов.",
+ "os_linux": "Linux: установите PC/SC и драйвер ACS/CCID, затем убедитесь, что служба pcscd запущена.",
+ "kit_title": "Или купите набор электроники",
+ "kit_lead": "Магазин TigerTag продаёт электронику, готовую к установке: ридеры с официальным логотипом проекта и разветвитель. Покупка набора финансирует открытый стандарт.",
+ "kit_bundle": "Набор TigerPOD: 2 ридера и разветвитель",
+ "kit_single": "Один ридер",
+ "kit_splitter": "Только разветвитель",
+ "kit_note": "В набор входит только электроника: корпус вы печатаете сами. Pod, собранный из обычных компонентов, — тот же самый Pod.",
+ "kit_shop": "Открыть магазин",
+ "colours_title": "Он будет того цвета, какой филамент вы заправите",
+ "colours_lead": "Вы печатаете его сами, поэтому Pod получает цвет и фактуру вашего филамента: шёлк, галактика, мрамор, светящийся в темноте.",
+ "colours_alt": "Корпуса TigerPOD, напечатанные в пятнадцати цветах: красном, оранжевом, жёлтом, зелёном, голубом, синем, фиолетовом, розовом, золотом, медном, серебряном, сером, чёрном, белом и светящемся в темноте",
+ "finishes_alt": "Корпуса TigerPOD с особой фактурой: восемь шёлковых цветов, фиолетовая галактика, мрамор, две радуги и три светящихся в темноте отпечатка, снятых при выключенном свете",
+ "colours_more": "Все фотографии в полном разрешении, а также вырезки на прозрачном фоне, в репозитории",
+ "eco_title": "Какое место занимает TigerPOD?",
+ "eco_lead": "TigerPOD — это настольный NFC в системе TigerTag: одну и ту же катушку читают Pod, Tiger Studio Manager на компьютере и телефон.",
+ "eco_alt": "Система TigerTag: синий TigerPOD с катушкой, Tiger Studio Manager на экране компьютера и мобильное приложение на телефоне",
+ "eco_protocol_title": "Протокол TigerTag",
+ "eco_protocol_text": "Открытая спецификация и публичный реестр, с которыми работает Pod при чтении и записи (CC-BY-4.0, безотзывное право на реализацию).",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "Бесплатное настольное приложение (MIT): инвентарь, принтеры и родной дом для Pod. Управляет ридерами через PC/SC.",
+ "eco_phone_title": "На телефоне, без Pod",
+ "eco_phone_text": "Чип TigerTag — стандартная NFC-метка: её прочитает любой телефон с NFC, а мобильное приложение запишет её через NFC самого телефона.",
+ "eco_sdk_title": "SDK",
+ "eco_sdk_text": "JavaScript и Python (Apache-2.0): декодируйте метку офлайн по её сырым байтам в собственном коде.",
+ "eco_community_title": "Сообщество",
+ "eco_community_text": "Вопросы, фото сборок и ремиксы в Discord TigerTag.",
+ "open": "Открыть",
+ "repo": "Репозиторий",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "Как прочитать метку в собственном коде?",
+ "dev_lead": "TigerTag хранит всё на самом чипе, поэтому чтение сводится к одним и тем же двум шагам на любом языке, без поиска по базе и без сети.",
+ "dev1_title": "1. Получите сырые байты",
+ "dev1_text": "Любой NFC-библиотекой прочитайте 7-байтовый UID и пользовательскую память, страницы с 0x04 по 0x27: 36 страниц по 4 байта, 144 байта. На компьютере ACR122U через PC/SC управляют nfc-pcsc (Node, используется в Tiger Studio Manager) или pyscard (Python).",
+ "dev2_title": "2. Декодируйте офлайн",
+ "dev2_text": "Передайте эти байты в TigerTag SDK. Он возвращает материал, бренд, цвет, температуры и вес, а также может проверить подпись. SDK никогда не обращается к ридеру.",
+ "dev_play_title": "Проверьте Pod в playground",
+ "dev_play_text": "Оба SDK поставляются с playground: небольшим локальным сервером и веб-страницей. Версия на JavaScript подключается к ACR122U через PC/SC и показывает события карты в реальном времени: вставьте катушку в Pod и смотрите, как она декодируется в браузере.",
+ "faq_title": "Часто задаваемые вопросы",
+ "faq1_q": "Можно ли обойтись одним ридером?",
+ "faq1_a": "Да. Один чип и один ридер работают, но катушку придётся подносить стороной с меткой, а два чипа катушки больше не будут синхронизироваться автоматически.",
+ "faq2_q": "Какие катушки помещаются в TigerPOD?",
+ "faq2_a": "Около 99% катушек на 1 кг любого типа: пластиковые мастер-катушки, картонные катушки, одноразовые пластиковые катушки и рефилы.",
+ "faq3_q": "NTAG 213, 215 или 216: какую выбрать?",
+ "faq3_a": "Они различаются только объёмом памяти: около 144 байт у 213, 504 у 215 и 888 у 216. В любую помещается запись TigerTag; берите 215 или 216, если нужен запас. В Pod работают все три.",
+ "faq4_q": "Ридер не определяется. Что проверить?",
+ "faq4_a": "Убедитесь, что это PC/SC-ридер, совместимый с ACR122U. В Linux установите драйвер CCID и запустите службу pcscd. Один раз отключите и снова подключите ридер, затем перезапустите Tiger Studio Manager.",
+ "faq5_q": "Можно ли использовать метки повторно?",
+ "faq5_a": "Да. TigerTag никогда не блокируются: стирайте и перезаписывайте их как новые TigerTag сколько угодно или превратите в обычные NDEF-метки для других задач NFC и обратно.",
+ "faq6_q": "Может ли Pod работать с NFC не только для TigerTag?",
+ "faq6_a": "Да. Это два стандартных ридера ACR122U, поэтому он читает, записывает, перезаписывает и стирает всё, что поддерживает ACR122U: ISO 14443 A и B, MIFARE Classic, Ultralight и DESFire, FeliCa, Topaz/Jewel и NFC Forum типов 1–4.",
+ "faq7_q": "Нужно ли TigerPOD подключение к интернету?",
+ "faq7_a": "Нет. Pod читает и записывает локально и никуда не отправляет данные.",
+ "faq8_q": "Нужен ли TigerPOD, чтобы прочитать TigerTag?",
+ "faq8_a": "Нет. Чип TigerTag — стандартная NFC-метка, поэтому её прочитает любой телефон с NFC, а мобильное приложение может её записать. Pod — это настольный NFC: чтение и запись обоих чипов катушки, достаточно её вставить.",
+ "join_title": "Соберите свой TigerPOD",
+ "join_text": "Напечатайте Mini, вставьте два ридера, установите Tiger Studio Manager. Вопросы и фото сборок ждём в Discord.",
+ "join_btn": "Напечатать TigerPOD Mini",
+ "foot_licences": "Дизайн и документация TigerPOD: CC-BY-4.0. Tiger Studio Manager: MIT. SDK: Apache-2.0.",
+ "foot_trademark": "Название и логотип TigerTag являются товарными знаками TigerTag Corp.",
+ "foot_source": "Исходный код этого сайта",
+ "foot_protocol": "Протокол TigerTag"
+}
diff --git a/site/i18n/zh.json b/site/i18n/zh.json
new file mode 100644
index 0000000..11fb913
--- /dev/null
+++ b/site/i18n/zh.json
@@ -0,0 +1,150 @@
+{
+ "lang_name": "中文",
+ "skip": "跳到正文",
+ "theme_label": "浅色或深色主题",
+ "lang_label": "语言",
+ "meta_title": "TigerPOD:开源耗材卷 NFC 读写器",
+ "meta_description": "用两个 USB 读卡器和一个 3D 打印外壳,自己动手搭建一台桌面 NFC 读写器,读写 3D 打印耗材卷的芯片。开放设计,CC-BY-4.0 许可。",
+ "og_title": "TigerPOD:耗材卷的 CD 播放机",
+ "og_description": "把耗材卷放进去,电脑就能读写它的 NFC 芯片。两个常见的 USB 读卡器,一个 3D 打印外壳,无需焊接。",
+ "og_alt": "九种颜色打印的 TigerPOD 外壳,每个都放着一卷耗材",
+ "nav_what": "功能",
+ "nav_shells": "外壳",
+ "nav_build": "动手制作",
+ "nav_kit": "套件",
+ "nav_colours": "颜色",
+ "nav_eco": "生态",
+ "nav_dev": "开发者",
+ "nav_faq": "常见问题",
+ "hero_kicker": "开源的耗材卷 NFC 读写器",
+ "hero_headline": "耗材卷的 CD 播放机。",
+ "hero_lead": "把一卷 3D 打印耗材放进去,电脑就能读取它的 TigerTag 芯片:材料、品牌、颜色、温度、剩余量。写入标签也是同样的操作。只需两个常见的 USB NFC 读卡器和一个 3D 打印外壳,别无其他。",
+ "hero_alt": "九个 TigerPOD 外壳,分别为黑、蓝、紫、粉、红、橙、黄、绿、白色,每个都放着一卷耗材",
+ "cta_build": "制作你的 TigerPOD",
+ "cta_kit": "获取电子套件",
+ "cta_repo": "阅读 README",
+ "fact1_value": "2",
+ "fact1_label": "个兼容 ACR122U 的 USB 读卡器,耗材卷两侧各对一个",
+ "fact2_value": "0",
+ "fact2_label": "螺丝、胶水、导线或焊接:读卡器直接插进外壳",
+ "fact3_value": "~99%",
+ "fact3_label": "的 1 kg 耗材卷都能放下:塑料盘、纸盘、一次性盘和补充装",
+ "fact4_value": "CC-BY-4.0",
+ "fact4_label": "开放的设计与文档,可自由打印、修改和分享",
+ "what_title": "TigerPOD 能做什么?",
+ "what_lead": "TigerPOD 在你的桌面上读写耗材卷的 NFC 芯片:两个标准 PC/SC 读卡器由 3D 打印支架面对面固定,由 Tiger Studio Manager 驱动。",
+ "demo_alt": "一卷耗材放进红色 TigerPOD,读取芯片时读卡器指示灯亮起",
+ "what1_title": "放进去就行,无需对准",
+ "what1_text": "耗材卷两侧各有一个芯片,每个芯片都正对一个读卡器,所以无论耗材卷怎么放,总有一个芯片在读卡器前面。",
+ "what2_title": "两个芯片同时读写",
+ "what2_text": "Pod 同时读写一卷耗材上的两个芯片,Twin Tag 这一对芯片的数据始终逐字节一致,库存里记的是一卷耗材,而不是两个标签。",
+ "what3_title": "完全掌控芯片",
+ "what3_text": "读取标签内容、写入新标签、修改或擦除为空白。TigerTag 从不写锁定:想重写多少次都可以。",
+ "what4_title": "通用 NFC 工作站",
+ "what4_text": "ACR122U 能处理的,Pod 都能处理:ISO 14443 A 和 B、MIFARE Classic、Ultralight 和 DESFire、FeliCa、Topaz/Jewel、NFC Forum 类型 1 至 4。ISO 15693 标签不在支持范围内。",
+ "what5_title": "无需学习电子知识",
+ "what5_text": "常见的读卡器,通过 PC/SC 工作,这是 Windows、macOS 和 Linux 内置的智能卡标准。没有定制电路板,没有专有读卡器,也不需要厂商驱动。",
+ "what6_title": "离线工作,芯片还能再利用",
+ "what6_text": "Pod 在本地读写,不会向外发送任何数据。用过的耗材卷芯片可以重写成普通的 NDEF 标签(网址、智能家居、名片),之后还能再改回 TigerTag。",
+ "shells_title": "两款可打印外壳",
+ "shells_lead": "TigerPOD 的核心只有一个思路:两个面对面的 ACR122U 读卡器,由 3D 打印支架保持合适的距离。两款已发布的外壳装的是同样的两个读卡器,选一款适合你桌面的即可。",
+ "mini_badge": "推荐",
+ "mini_title": "TigerPOD Mini",
+ "mini_text": "重新设计、更紧凑的外壳:打印更快、更省耗材、更省桌面空间,线缆走在内部。可读写 TigerTag 和 OpenSpool(NDEF)标签。",
+ "mini_alt": "紧凑的 TigerPOD Mini 放着一卷耗材,两侧各有一个竖立的读卡器",
+ "orig_title": "TigerPOD(原版)",
+ "orig_text": "第一款外壳,按标准 1 kg 耗材卷设计。同样的两个读卡器,同样的功能。",
+ "open_makerworld": "在 MakerWorld 获取打印文件",
+ "concept_title": "外形由你决定",
+ "concept_text": "关键只在于两个面对面的读卡器,外面的支架只是细节。为其他耗材卷规格或其他用途重新设计它,它依然是一台 Pod。在 MakerWorld 分享你的改版,并提交一个附上链接的 issue。",
+ "concept_link": "如何参与贡献",
+ "build_title": "如何制作 TigerPOD?",
+ "build_lead": "制作 TigerPOD 只需一次 3D 打印和两个 USB 读卡器:不需要电子知识,不需要焊接,也不需要接线。",
+ "step1_title": "打印外壳",
+ "step1_text": "TigerPOD Mini(推荐)或原版,都在 MakerWorld 上,用你喜欢的任何耗材打印。",
+ "step2_title": "准备两个读卡器",
+ "step2_text": "从任意商店购买两个兼容 ACR122U 的 USB NFC 读卡器,再准备用于写入的 NTAG 213、215 或 216 标签。",
+ "step3_title": "插入读卡器",
+ "step3_text": "外壳的每个槽位各插一个读卡器。无需螺丝、胶水或接线。",
+ "step4_title": "连接电脑",
+ "step4_text": "把两个读卡器都接到电脑上。用一根 USB 一分二线就只需一根线;接两个端口也可以。",
+ "step5_title": "安装 Tiger Studio Manager",
+ "step5_text": "这款免费桌面应用会自动识别读卡器。放入一卷耗材即可。",
+ "parts_title": "零件清单",
+ "part_reader": "兼容 ACR122U 的 NFC 读卡器",
+ "part_reader_qty": "2 个,耗材卷每侧一个",
+ "part_tags": "NTAG 213 / 215 / 216 标签",
+ "part_tags_qty": "1 包:每卷耗材两个芯片",
+ "part_shell": "3D 打印外壳",
+ "part_shell_qty": "1 个,用你的耗材打印",
+ "part_splitter": "USB 一分二线",
+ "part_splitter_qty": "可选:接两个 USB 端口也可以",
+ "reader_alt": "兼容 ACR122U 的 USB NFC 读卡器",
+ "splitter_alt": "USB 一分二线缆",
+ "affiliate_note": "部分硬件链接是亚马逊联盟链接:作为亚马逊联盟成员,TigerTag 会从符合条件的购买中获得佣金,你无需额外付费。",
+ "os_title": "Windows、macOS 和 Linux",
+ "os_windows": "Windows:开箱即可识别,Windows 自带 PC/SC 服务。如果某个卡模拟辅助驱动占用了读卡器,请将其卸载。",
+ "os_macos": "macOS:使用系统内置的 PC/SC 组件即可工作,无需额外驱动。",
+ "os_linux": "Linux:安装 PC/SC 和 ACS/CCID 驱动,然后确认 pcscd 服务正在运行。",
+ "kit_title": "或者购买电子套件",
+ "kit_lead": "TigerTag 商店出售可直接插入的电子部件:印有项目官方标志的读卡器,以及一分二线。购买套件可以支持这一开放标准。",
+ "kit_bundle": "TigerPOD 套装:2 个读卡器和一分二线",
+ "kit_single": "单个读卡器",
+ "kit_splitter": "单独的一分二线",
+ "kit_note": "套件只包含电子部件:外壳仍需你自己打印。用普通零件搭建的 Pod 也是同样的 Pod。",
+ "kit_shop": "打开商店",
+ "colours_title": "你装什么颜色,它就是什么颜色",
+ "colours_lead": "外壳由你自己打印,所以 Pod 的颜色和质感取决于你的耗材:丝绸、星空、大理石、夜光。",
+ "colours_alt": "十五种颜色打印的 TigerPOD 外壳:红、橙、黄、绿、青、蓝、紫、粉、金、铜、银、灰、黑、白和夜光",
+ "finishes_alt": "特殊质感的 TigerPOD 外壳:八种丝绸色、星空紫、大理石、两款彩虹色,以及三款关灯拍摄的夜光打印件",
+ "colours_more": "所有照片的全分辨率版本和透明背景抠图,都在代码仓库中",
+ "eco_title": "TigerPOD 在生态中处于什么位置?",
+ "eco_lead": "在 TigerTag 系统中,TigerPOD 是桌面端的 NFC:同一卷耗材可以被 Pod、电脑上的 Tiger Studio Manager 和手机读取。",
+ "eco_alt": "TigerTag 系统:放着一卷耗材的蓝色 TigerPOD、桌面屏幕上的 Tiger Studio Manager,以及手机上的移动应用",
+ "eco_protocol_title": "TigerTag 协议",
+ "eco_protocol_text": "Pod 读写所依据的开放规范和公共注册库(CC-BY-4.0,不可撤销的实现授权)。",
+ "eco_studio_title": "Tiger Studio Manager",
+ "eco_studio_text": "免费的桌面应用(MIT):管理库存和打印机,也是 Pod 的主程序。它通过 PC/SC 驱动读卡器。",
+ "eco_phone_title": "用手机,无需 Pod",
+ "eco_phone_text": "TigerTag 芯片是标准 NFC 标签:任何支持 NFC 的手机都能读取,移动应用还能用手机自带的 NFC 写入。",
+ "eco_sdk_title": "SDK",
+ "eco_sdk_text": "JavaScript 和 Python(Apache-2.0):在你自己的代码中,根据原始字节离线解码标签。",
+ "eco_community_title": "社区",
+ "eco_community_text": "在 TigerTag Discord 上提问、分享制作照片和改版。",
+ "open": "打开",
+ "repo": "代码仓库",
+ "eco_appstore": "App Store",
+ "eco_play": "Google Play",
+ "dev_title": "如何在自己的代码中读取标签?",
+ "dev_lead": "TigerTag 把所有信息都存储在芯片上,所以在任何语言中读取都是同样的两步,无需查询,无需联网。",
+ "dev1_title": "1. 获取原始字节",
+ "dev1_text": "用任意 NFC 库读取 7 字节的 UID 和用户存储区,即 0x04 到 0x27 页:36 页,每页 4 字节,共 144 字节。在桌面端,nfc-pcsc(Node,Tiger Studio Manager 所用)或 pyscard(Python)通过 PC/SC 驱动 ACR122U。",
+ "dev2_title": "2. 离线解码",
+ "dev2_text": "把这些字节交给 TigerTag SDK。它会返回材料、品牌、颜色、温度和重量,还能验证签名。SDK 从不直接操作读卡器。",
+ "dev_play_title": "在 playground 中测试 Pod",
+ "dev_play_text": "两个 SDK 都附带一个 playground:一个小型本地服务器加一个网页。JavaScript 版通过 PC/SC 连接 ACR122U 并实时显示卡片事件:把一卷耗材放进 Pod,就能在浏览器中看到解码结果。",
+ "faq_title": "常见问题",
+ "faq1_q": "只用一个读卡器可以吗?",
+ "faq1_a": "可以。一个芯片配一个读卡器也能工作,但你需要把耗材卷贴有标签的一侧对准读卡器,而且一卷耗材上的两个芯片将不再自动保持同步。",
+ "faq2_q": "哪些耗材卷能放进 TigerPOD?",
+ "faq2_a": "大约 99% 的 1 kg 耗材卷,无论类型:塑料母卷盘、纸盘、一次性塑料盘和补充装。",
+ "faq3_q": "NTAG 213、215 还是 216:选哪个?",
+ "faq3_a": "它们只有存储容量不同:213 约 144 字节,215 为 504 字节,216 为 888 字节。任何一种都能存下 TigerTag 记录;想留更多余量就选 215 或 216。三种都能在 Pod 中使用。",
+ "faq4_q": "读卡器无法识别,应该检查什么?",
+ "faq4_a": "确认它是兼容 ACR122U 的 PC/SC 读卡器。在 Linux 上,安装 CCID 驱动并启动 pcscd 服务。把读卡器拔下再插上一次,然后重新启动 Tiger Studio Manager。",
+ "faq5_q": "标签可以重复使用吗?",
+ "faq5_a": "可以。TigerTag 从不锁定:你可以随时擦除并重写为新的 TigerTag,或者改成普通 NDEF 标签用于其他 NFC 用途,之后再改回来。",
+ "faq6_q": "Pod 能做 TigerTag 以外的 NFC 工作吗?",
+ "faq6_a": "可以。它就是两个标准的 ACR122U 读卡器,所以 ACR122U 支持的一切它都能读取、写入、重写和擦除:ISO 14443 A 和 B、MIFARE Classic、Ultralight 和 DESFire、FeliCa、Topaz/Jewel 以及 NFC Forum 类型 1 至 4。",
+ "faq7_q": "TigerPOD 需要联网吗?",
+ "faq7_a": "不需要。Pod 在本地读写,不会向外发送任何数据。",
+ "faq8_q": "读取 TigerTag 一定需要 TigerPOD 吗?",
+ "faq8_a": "不需要。TigerTag 芯片是标准 NFC 标签,任何支持 NFC 的手机都能读取,移动应用还能写入。Pod 是桌面端的 NFC:放入即可读写一卷耗材上的两个芯片。",
+ "join_title": "制作你的 TigerPOD",
+ "join_text": "打印 Mini,插入两个读卡器,安装 Tiger Studio Manager。欢迎在 Discord 上提问和分享制作照片。",
+ "join_btn": "打印 TigerPOD Mini",
+ "foot_licences": "TigerPOD 设计与文档:CC-BY-4.0。Tiger Studio Manager:MIT。SDK:Apache-2.0。",
+ "foot_trademark": "TigerTag 名称和标志是 TigerTag Corp. 的商标。",
+ "foot_source": "本网站源代码",
+ "foot_protocol": "TigerTag 协议"
+}
diff --git a/site/og.jpg b/site/og.jpg
new file mode 100644
index 0000000..a98512b
Binary files /dev/null and b/site/og.jpg differ
diff --git a/site/seo_check.py b/site/seo_check.py
new file mode 100644
index 0000000..373fbd5
--- /dev/null
+++ b/site/seo_check.py
@@ -0,0 +1,200 @@
+"""Check the built site for what search engines and answer engines need.
+
+The rule behind each check is .agents/rules/seo-geo.md of the TigerTag protocol
+repository (TigerTag-RFID-Guide), applied to this product page. Run after
+`site/build.py`, on the folder it wrote:
+
+ python site/build.py --out _site && python site/seo_check.py _site
+
+Errors fail the run (exit 1): they break indexing or mislead a reader.
+Warnings are printed and do not: they cost snippet quality.
+"""
+
+import json
+import re
+import sys
+from html.parser import HTMLParser
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from build import LANGS, HTML_LANG, SITE_URL, page_path # noqa: E402
+
+TITLE_MAX, TITLE_HARD = 60, 70 # characters shown by search results / clearly broken
+DESC_MIN, DESC_MAX, DESC_HARD = 50, 160, 200
+REQUIRED_LD = {"Organization", "WebSite", "Product", "CreativeWork", "HowTo", "FAQPage"}
+
+
+class Page(HTMLParser):
+ """Collects what the checks read, without a third-party parser."""
+
+ def __init__(self):
+ super().__init__(convert_charrefs=True)
+ self.title, self.meta, self.links, self.imgs = "", {}, [], []
+ self.ids, self.hrefs, self.h1, self.faq_items, self.ld = set(), [], 0, 0, []
+ self._in_title = self._in_ld = False
+ self._ld_buf = ""
+
+ def handle_starttag(self, tag, attrs):
+ a = dict(attrs)
+ if "id" in a:
+ self.ids.add(a["id"])
+ if tag == "title":
+ self._in_title = True
+ elif tag == "meta" and ("name" in a or "property" in a):
+ self.meta.setdefault(a.get("name") or a.get("property"), []).append(a.get("content", ""))
+ elif tag == "link":
+ self.links.append(a)
+ elif tag == "img":
+ self.imgs.append(a)
+ elif tag == "a" and "href" in a:
+ self.hrefs.append(a["href"])
+ elif tag == "h1":
+ self.h1 += 1
+ elif tag == "details" and self._faq_depth():
+ self.faq_items += 1
+ elif tag == "script" and a.get("type") == "application/ld+json":
+ self._in_ld, self._ld_buf = True, ""
+ if tag == "div" and "faq" in (a.get("class") or "").split():
+ self._faq = True
+
+ def _faq_depth(self):
+ return getattr(self, "_faq", False)
+
+ def handle_endtag(self, tag):
+ if tag == "title":
+ self._in_title = False
+ elif tag == "script" and self._in_ld:
+ self._in_ld = False
+ self.ld.append(self._ld_buf)
+ elif tag == "section":
+ self._faq = False
+
+ def handle_data(self, data):
+ if self._in_title:
+ self.title += data
+ if self._in_ld:
+ self._ld_buf += data
+
+
+def check(out):
+ errors, warnings = [], []
+ expected_alternates = {HTML_LANG.get(l, l): SITE_URL + page_path(l) for l in LANGS}
+ expected_alternates["x-default"] = SITE_URL
+ titles, descs = {}, {}
+
+ for lang in LANGS:
+ rel = page_path(lang) + "index.html"
+ path = out / rel
+ if not path.exists():
+ errors.append(f"{rel}: page missing")
+ continue
+ p = Page()
+ p.feed(path.read_text(encoding="utf-8"))
+ where = rel
+
+ # Title and description: present, sized for a result snippet, unique per language.
+ title = p.title.strip()
+ desc = (p.meta.get("description") or [""])[0]
+ for label, value, lo, hi, hard in (("title", title, 10, TITLE_MAX, TITLE_HARD), ("description", desc, DESC_MIN, DESC_MAX, DESC_HARD)):
+ if not value:
+ errors.append(f"{where}: no {label}")
+ elif len(value) > hard:
+ errors.append(f"{where}: {label} is {len(value)} characters (over {hard}): {value!r}")
+ elif len(value) > hi:
+ warnings.append(f"{where}: {label} is {len(value)} characters (results show ~{hi})")
+ elif len(value) < lo and HTML_LANG.get(lang, lang) != "zh-Hans":
+ warnings.append(f"{where}: {label} is only {len(value)} characters")
+ titles.setdefault(title, []).append(lang)
+ descs.setdefault(desc, []).append(lang)
+
+ # One h1: the page's single subject.
+ if p.h1 != 1:
+ errors.append(f"{where}: {p.h1}
(exactly one expected)")
+
+ # Canonical and hreflang: every language points to every language, and x-default.
+ canon = [l.get("href") for l in p.links if l.get("rel") == "canonical"]
+ if canon != [SITE_URL + page_path(lang)]:
+ errors.append(f"{where}: canonical is {canon}, expected {SITE_URL + page_path(lang)}")
+ alts = {l.get("hreflang"): l.get("href") for l in p.links if l.get("rel") == "alternate" and l.get("hreflang")}
+ if alts != expected_alternates:
+ missing = sorted(set(expected_alternates) - set(alts))
+ wrong = sorted(k for k in alts if alts[k] != expected_alternates.get(k))
+ errors.append(f"{where}: hreflang set incomplete or wrong (missing {missing}, wrong {wrong})")
+
+ # Sharing cards.
+ for prop in ("og:title", "og:description", "og:image", "og:image:alt", "og:url", "twitter:card"):
+ if not (p.meta.get(prop) or [""])[0]:
+ errors.append(f"{where}: no {prop}")
+
+ # Images: an alt attribute on every one (empty only for a decorative duplicate).
+ for img in p.imgs:
+ if "alt" not in img:
+ errors.append(f"{where}: has no alt attribute")
+ if not any(img.get("alt") and "hero" in (img.get("src") or "").lower() for img in p.imgs):
+ errors.append(f"{where}: the hero picture has no alt text")
+
+ # The build guide in JSON-LD points at steps the reader sees.
+ step_ids = {i for i in p.ids if i.startswith("step")}
+
+ # Structured data: valid JSON, the expected types, the FAQ the reader sees.
+ types = []
+ for raw in p.ld:
+ try:
+ data = json.loads(raw)
+ except ValueError as e:
+ errors.append(f"{where}: JSON-LD does not parse ({e})")
+ continue
+ types.append(data.get("@type"))
+ if data.get("@type") == "FAQPage" and len(data.get("mainEntity", [])) != p.faq_items:
+ errors.append(f"{where}: FAQPage lists {len(data.get('mainEntity', []))} questions, the page shows {p.faq_items}")
+ if data.get("@type") == "HowTo":
+ for step in data.get("step", []):
+ anchor = (step.get("url") or "").partition("#")[2]
+ if anchor not in step_ids:
+ errors.append(f"{where}: HowTo step {step.get('position')} points at #{anchor}, not on the page")
+ missing_ld = REQUIRED_LD - set(types)
+ if missing_ld:
+ errors.append(f"{where}: JSON-LD missing {sorted(missing_ld)}")
+
+ # In-page links land somewhere.
+ for href in p.hrefs:
+ if href.startswith("#") and len(href) > 1 and href[1:] not in p.ids:
+ errors.append(f"{where}: link {href} has no target")
+
+ # The machine-readable description is advertised.
+ if not any(l.get("rel") == "alternate" and (l.get("href") or "").endswith("llms.txt") for l in p.links):
+ warnings.append(f"{where}: no to llms.txt")
+
+ for value, langs in list(titles.items()) + list(descs.items()):
+ if value and len(langs) > 1:
+ errors.append(f"same title or description in {', '.join(langs)}: {value!r} (an untranslated page?)")
+
+ sitemap = (out / "sitemap.xml").read_text(encoding="utf-8") if (out / "sitemap.xml").exists() else ""
+ for lang in LANGS:
+ if f"{SITE_URL + page_path(lang)}" not in sitemap:
+ errors.append(f"sitemap.xml: {SITE_URL + page_path(lang)} missing")
+ if "" not in sitemap:
+ warnings.append("sitemap.xml: no ")
+ robots = (out / "robots.txt").read_text(encoding="utf-8") if (out / "robots.txt").exists() else ""
+ if f"Sitemap: {SITE_URL}sitemap.xml" not in robots:
+ errors.append("robots.txt: no Sitemap line")
+ if re.search(r"(?m)^Disallow: /\s*$", robots):
+ errors.append("robots.txt: disallows the whole site")
+ if not (out / "llms.txt").exists():
+ errors.append("llms.txt missing at the site root")
+ return errors, warnings
+
+
+def main():
+ out = Path(sys.argv[1] if len(sys.argv) > 1 else "_site")
+ errors, warnings = check(out)
+ for w in warnings:
+ print(f"warning: {w}")
+ for e in errors:
+ print(f"error: {e}")
+ print(f"seo_check: {len(LANGS)} pages, {len(errors)} error(s), {len(warnings)} warning(s)")
+ sys.exit(1 if errors else 0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/site/site.css b/site/site.css
new file mode 100644
index 0000000..e0a60f3
--- /dev/null
+++ b/site/site.css
@@ -0,0 +1,221 @@
+/* The TigerPOD site: the look of the TigerTag protocol and Tiger Touch sites (dark by default,
+ light when the system asks for it or when chosen with the button). */
+:root {
+ --bg: #14161a; --card: #1e2128; --line: #2b2f38; --text: #f2f2f2;
+ --muted: #9aa0aa; --accent: #f58220; --link: #f58220; --code: #101216;
+ --shadow: rgba(0, 0, 0, .45);
+ color-scheme: dark;
+}
+@media (prefers-color-scheme: light) {
+ :root:not([data-theme="dark"]) {
+ --bg: #f4f5f7; --card: #ffffff; --line: #dde0e6; --text: #16181d;
+ --muted: #5d6470; --accent: #e06d0c; --link: #b04a08; --code: #f0f1f4;
+ --shadow: rgba(0, 0, 0, .12);
+ color-scheme: light;
+ }
+}
+:root[data-theme="light"] {
+ --bg: #f4f5f7; --card: #ffffff; --line: #dde0e6; --text: #16181d;
+ --muted: #5d6470; --accent: #e06d0c; --link: #b04a08; --code: #f0f1f4;
+ --shadow: rgba(0, 0, 0, .12);
+ color-scheme: light;
+}
+
+* { box-sizing: border-box; }
+html { scroll-behavior: smooth; overflow-x: clip; }
+body {
+ margin: 0; min-height: 100vh; background: var(--bg); color: var(--text);
+ font: 16px/1.55 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
+ /* The hero picture overflows its column on purpose: never let it scroll the page sideways. */
+ overflow-x: clip;
+}
+a { color: var(--link); }
+img { max-width: 100%; height: auto; }
+.wrap { width: min(1200px, 100% - 48px); margin-left: auto; margin-right: auto; }
+.skip { position: absolute; left: -999px; top: 8px; background: var(--card); padding: 8px 12px; border-radius: 8px; }
+.skip:focus { left: 8px; z-index: 10; }
+.muted, p { color: var(--muted); }
+p { margin: 0 0 14px; }
+b { color: var(--text); }
+h1, h2, h3 { line-height: 1.2; color: var(--text); }
+h2 { font-size: clamp(1.5rem, 1.1rem + 1.4vw, 2.2rem); margin: 0 0 8px; letter-spacing: -.01em; }
+h3 { font-size: 1.08rem; margin: 0 0 8px; }
+.sub { font-size: 1.05rem; max-width: 760px; margin-bottom: 22px; }
+.gap { margin-top: 48px; }
+section { margin-top: 64px; scroll-margin-top: 80px; }
+
+/* Header: the logo, the sections, the theme and the language. */
+header.bar { position: sticky; top: 0; z-index: 5; background: color-mix(in srgb, var(--bg) 88%, transparent); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); }
+header.bar .wrap { display: flex; align-items: center; gap: 18px; min-height: 64px; }
+.brandmark { display: flex; align-items: center; gap: 10px; text-decoration: none; color: var(--text); font-weight: 800; font-size: 1.2rem; letter-spacing: -.01em; }
+.brandmark b { color: var(--accent); }
+.brandmark img { height: 36px; width: auto; }
+.logo-light { display: none; }
+:root[data-shown="light"] .logo-light { display: block; }
+:root[data-shown="light"] .logo-dark { display: none; }
+.nav { display: flex; gap: 18px; flex: 1; justify-content: center; flex-wrap: wrap; }
+/* Longer words (French, German, Russian…) keep the menu on one line. */
+@media (max-width: 1320px) { .nav { gap: 12px; } .nav a { font-size: .88rem; } }
+.nav a { color: var(--muted); text-decoration: none; font-size: .95rem; }
+.nav a:hover { color: var(--text); }
+.tools { display: flex; gap: 8px; align-items: center; }
+.themebtn, .langbtn {
+ display: flex; align-items: center; gap: 6px; height: 40px; cursor: pointer; color: var(--muted);
+ background: var(--bg); border: 1px solid var(--line); border-radius: 10px; font: inherit; font-size: .9rem;
+}
+.themebtn { width: 40px; justify-content: center; }
+.langbtn { padding: 0 12px; list-style: none; }
+.langbtn::-webkit-details-marker { display: none; }
+.themebtn:hover, .langbtn:hover { border-color: var(--accent); color: var(--text); }
+.themebtn svg, .langbtn svg { width: 17px; height: 17px; flex: none; }
+.themebtn .sun { display: none; }
+:root[data-shown="light"] .themebtn .sun { display: block; }
+:root[data-shown="light"] .themebtn .moon { display: none; }
+.langbox { position: relative; }
+.langlist {
+ position: absolute; right: 0; top: 46px; margin: 0; padding: 6px; list-style: none; min-width: 180px;
+ background: var(--card); border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 12px 30px var(--shadow);
+}
+.langlist a { display: block; padding: 7px 10px; border-radius: 8px; color: var(--text); text-decoration: none; }
+.langlist a:hover, .langlist a[aria-current="true"] { background: var(--bg); color: var(--accent); }
+
+/* Hero. */
+.hero { display: grid; gap: 18px; justify-items: center; text-align: center; margin-top: 40px; }
+.hero .intro { max-width: 860px; }
+.hero .lead { max-width: 720px; margin-left: auto; margin-right: auto; }
+h1 { margin: 0; }
+h1 .kicker, h1 .name { display: block; }
+.kicker { color: var(--accent); font-weight: 650; text-transform: uppercase; letter-spacing: .08em; font-size: .85rem; margin-bottom: 10px; }
+.hero .name { margin: 0; font-size: clamp(3rem, 1.8rem + 5vw, 5.4rem); font-weight: 800; letter-spacing: -.02em; line-height: 1; }
+.hero .name span { color: var(--accent); }
+.headline { text-wrap: balance; margin: 16px 0 12px; color: var(--text); font-weight: 650; line-height: 1.25; font-size: clamp(1.25rem, 1rem + 1.1vw, 1.8rem); }
+.lead { font-size: 1.08rem; }
+.ctas { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 22px; justify-content: center; }
+.btn {
+ display: inline-flex; align-items: center; padding: 12px 20px; border-radius: 999px; text-decoration: none;
+ border: 1px solid var(--line); color: var(--text); background: var(--card); font-weight: 600;
+}
+.btn:hover { border-color: var(--accent); }
+.btn.primary { background: var(--accent); border-color: var(--accent); color: #1a0f05; }
+.btn.small { padding: 8px 14px; font-size: .9rem; }
+
+/* Four facts. */
+.facts { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-top: 36px; }
+.fact { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 18px 20px; }
+.fact b { display: block; font-size: 1.6rem; color: var(--accent); line-height: 1.2; }
+.fact span { color: var(--muted); font-size: .93rem; }
+
+/* Cards and grids. */
+.card { background: var(--card); border: 1px solid var(--line); border-radius: 18px; padding: 24px; }
+.card p:last-child { margin-bottom: 0; }
+.card.accent { border-color: var(--accent); }
+.grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
+.grid2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; margin-bottom: 16px; }
+.ico { width: 28px; height: 28px; fill: none; stroke: var(--accent); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; margin-bottom: 10px; }
+.more { display: inline-block; font-weight: 600; text-decoration: none; margin-top: 4px; }
+.more:hover { text-decoration: underline; }
+.links { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; }
+pre { margin: 0 0 14px; background: var(--code); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; overflow-x: auto; }
+code { font: .95rem ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--text); }
+
+/* How it works. */
+.steps { list-style: none; padding: 0; margin: 0 0 16px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
+.num { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; background: var(--accent); color: #1a0f05; font-weight: 800; margin-bottom: 12px; }
+.pg { aspect-ratio: 1; border-radius: 5px; display: grid; place-items: center; font: 600 .6rem ui-monospace, Menlo, monospace; color: #1a0f05; }
+.pg.data { background: var(--accent); }
+.pg.sig { background: color-mix(in srgb, var(--accent) 35%, var(--card)); color: var(--text); }
+
+
+
+/* FAQ. */
+.faq { display: grid; gap: 10px; }
+.faq details { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 4px 20px; }
+.faq summary { cursor: pointer; font-weight: 650; padding: 12px 0; color: var(--text); }
+.faq details p { padding-bottom: 6px; }
+
+/* The call at the end. */
+.join {
+ display: flex; align-items: center; justify-content: space-between; gap: 24px;
+ padding: 30px 32px; border-radius: 18px; color: #fff;
+ background: linear-gradient(120deg, #c2410c 0%, #b03a12 55%, #9a2f12 100%);
+}
+.join h2, .join p { color: #fff; margin: 0 0 6px; }
+.joinbtn { flex: none; padding: 14px 26px; border-radius: 999px; text-decoration: none; background: #fff; color: #9a2f12; font-weight: 700; white-space: nowrap; }
+footer.foot { margin-top: 48px; padding: 28px 0 48px; border-top: 1px solid var(--line); text-align: center; font-size: .9rem; }
+footer.foot .links { justify-content: center; }
+
+.small { font-size: .85rem; }
+.card--wide { grid-column: 1 / -1; }
+
+.pill { display: inline-block; font-weight: 700; font-size: .78rem; text-transform: uppercase; letter-spacing: .06em; color: #1a0f05; background: var(--accent); border-radius: 999px; padding: 3px 10px; margin-bottom: 12px; }
+
+/* Hero: the line-up of Pods, full width under the words. */
+.show { width: 100%; }
+.show img { display: block; width: min(1200px, 100%); margin: 0 auto; }
+
+/* What it does: the clip next to the six cards. */
+.what { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: 16px; align-items: start; }
+.what .grid2 { margin-bottom: 0; }
+.demo.card { padding: 0; }
+.demo { margin: 0; overflow: hidden; position: sticky; top: 84px; }
+.demo video { display: block; width: 100%; height: auto; }
+
+/* Shells. */
+.shells { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 16px; }
+.shells .mini { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1fr); gap: 24px; align-items: center; }
+.shells .mini img { display: block; width: 100%; max-height: 380px; object-fit: contain; }
+.shells-side { display: grid; gap: 16px; }
+
+/* Build: five steps, then the parts. */
+.steps { grid-template-columns: repeat(5, minmax(0, 1fr)); }
+.parts { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .8fr) minmax(0, 1.1fr); gap: 16px; align-items: stretch; }
+.partlist { list-style: none; padding: 0; margin: 0 0 14px; display: grid; gap: 10px; }
+.partlist li { display: flex; flex-direction: column; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
+.partlist a { font-weight: 650; text-decoration: none; }
+.partlist a:hover { text-decoration: underline; }
+.partlist span { color: var(--muted); font-size: .93rem; }
+.partpics { margin: 0; display: flex; gap: 8px; align-items: center; justify-content: center; background: #fff; }
+.partpics img { width: 31%; height: auto; }
+
+/* Kit. */
+.kit { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 24px; align-items: center; border-color: var(--accent); }
+.kit h2 { margin-bottom: 12px; }
+.kitlist { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; }
+.kitlist .btn { width: 100%; justify-content: center; text-align: center; }
+.kitlist li:last-child { text-align: center; }
+
+/* Colours. */
+.pods { margin: 0 0 12px; display: grid; grid-template-columns: repeat(15, minmax(0, 1fr)); gap: 6px; }
+.pods img { display: block; width: 100%; border-radius: 10px; }
+
+/* Ecosystem. */
+.eco { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 24px; align-items: center; }
+.eco-pic { margin: 0; }
+.eco-pic img { display: block; width: 100%; }
+.eco-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
+
+/* Tablet. */
+@media (max-width: 999px) {
+ .nav { display: none; }
+ header.bar .wrap { justify-content: space-between; }
+ .facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .grid3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .what, .shells, .eco, .kit { grid-template-columns: minmax(0, 1fr); }
+ .demo { position: static; max-width: 560px; margin: 0 auto; }
+ .parts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .parts > :last-child { grid-column: 1 / -1; }
+ .pods { grid-template-columns: repeat(8, minmax(0, 1fr)); }
+}
+/* Phone. */
+@media (max-width: 639px) {
+ .wrap { width: calc(100% - 32px); }
+ section { margin-top: 44px; }
+ .facts, .steps, .grid3, .grid2, .eco-list, .parts, .shells .mini { grid-template-columns: minmax(0, 1fr); }
+ .parts > :last-child { grid-column: auto; }
+ .pods { grid-template-columns: repeat(5, minmax(0, 1fr)); }
+ .card { padding: 20px; border-radius: 14px; }
+ .join { flex-direction: column; align-items: flex-start; padding: 24px 20px; }
+ .joinbtn { align-self: stretch; text-align: center; white-space: normal; }
+ .langbtn span { display: none; }
+}
diff --git a/site/site.js b/site/site.js
new file mode 100644
index 0000000..6db5e82
--- /dev/null
+++ b/site/site.js
@@ -0,0 +1,53 @@
+/* The theme button and the remembered language. Everything else on the site is
+ static HTML: each language is its own page, built by site/build.py. */
+(function () {
+ const root = document.documentElement;
+ const media = window.matchMedia("(prefers-color-scheme: light)");
+
+ function shown() {
+ const chosen = root.dataset.theme;
+ root.dataset.shown = chosen || (media.matches ? "light" : "dark");
+ }
+ shown();
+ media.addEventListener("change", shown);
+
+ const btn = document.getElementById("themebtn");
+ if (btn) {
+ btn.addEventListener("click", function () {
+ const next = root.dataset.shown === "light" ? "dark" : "light";
+ root.dataset.theme = next;
+ try { localStorage.setItem("tigertag-theme", next); } catch (e) {}
+ shown();
+ });
+ }
+
+ /* The language menu closes on a click outside it, or on Escape. */
+ const box = document.querySelector(".langbox");
+ if (box) {
+ document.addEventListener("click", function (e) { if (box.open && !box.contains(e.target)) box.open = false; });
+ document.addEventListener("keydown", function (e) { if (e.key === "Escape") box.open = false; });
+ }
+
+ /* The demo clip loops silently; it stays still for readers who ask for less motion. */
+ const clip = document.querySelector(".demo video");
+ if (clip && window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
+ clip.removeAttribute("autoplay");
+ clip.pause();
+ clip.controls = true;
+ }
+
+ /* A language picked in the menu is kept for the next visit to the English
+ root page, which then forwards to it (the TigerTag sites share this choice). Search engines read every page as it
+ is: the redirect only follows a choice the reader made. */
+ document.querySelectorAll(".langlist a[data-lang]").forEach(function (a) {
+ a.addEventListener("click", function () {
+ try { localStorage.setItem("tigertag-lang", a.dataset.lang); } catch (e) {}
+ });
+ });
+ if (root.dataset.lang === "en") {
+ let saved = null;
+ try { saved = localStorage.getItem("tigertag-lang"); } catch (e) {}
+ const target = saved && saved !== "en" && document.querySelector('.langlist a[data-lang="' + saved + '"]');
+ if (target) window.location.replace(target.href + window.location.hash);
+ }
+})();
diff --git a/site/template.html b/site/template.html
new file mode 100644
index 0000000..02b153c
--- /dev/null
+++ b/site/template.html
@@ -0,0 +1,271 @@
+
+
+
+
+
+{{meta_title}}
+
+
+{{@alternates}}
+
+
+
+{{@oglocalealt}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{@jsonld}}
+
+
+{{skip}}
+
+