From a053be98211603174543149593c2abbf706120f8 Mon Sep 17 00:00:00 2001 From: YanNaingWinn Date: Wed, 11 Mar 2026 20:46:16 +0700 Subject: [PATCH 1/9] Implemented documentation landing page --- index.html | 375 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 369 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index 68d00c7..9ef529a 100644 --- a/index.html +++ b/index.html @@ -1,9 +1,372 @@ - + + + + + + Cryptnox Docs + + + -

Cryptnox Docs

- + +
+ + +
+ +
+ +
+

Technical Documentation

+ +
+ +
+
+
+

Get your hardware

+

Cryptnox smart cards and compatible readers available at the official shop.

+
+ + Shop Now → + +
+
+ +
+ + + From ed531656e533a0ebb003289a6bac01789b88927d Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 12 Mar 2026 09:16:59 +0100 Subject: [PATCH 2/9] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 2ba720e..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs-v2.cryptnox.com From 8ae58dede5fa64bfb42373865b280dc21da6843d Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 12 Mar 2026 09:17:02 +0100 Subject: [PATCH 3/9] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..8d673cd --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs-v2.cryptnox.com \ No newline at end of file From e5debb95edc9aa3ddc5167dbc1dfbe3df3def88f Mon Sep 17 00:00:00 2001 From: YanNaingWinn Date: Thu, 12 Mar 2026 15:29:43 +0700 Subject: [PATCH 4/9] Update CNAME --- CNAME | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CNAME b/CNAME index 8d673cd..0cc0e04 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -docs-v2.cryptnox.com \ No newline at end of file +docs-v3.cryptnox.com \ No newline at end of file From 284044f2a112a7d8c552c8e62a5c249d1be9657a Mon Sep 17 00:00:00 2001 From: YanNaingWinn Date: Thu, 12 Mar 2026 15:30:00 +0700 Subject: [PATCH 5/9] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 0cc0e04..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs-v3.cryptnox.com \ No newline at end of file From 05fbb11bbb5d87cf3c55906d3b17e040832c212a Mon Sep 17 00:00:00 2001 From: YanNaingWinn Date: Thu, 12 Mar 2026 15:56:34 +0700 Subject: [PATCH 6/9] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..8d673cd --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs-v2.cryptnox.com \ No newline at end of file From b205454ce9ffb7b552af2220b090d68e71593438 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 12 Mar 2026 10:05:22 +0100 Subject: [PATCH 7/9] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 8d673cd..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs-v2.cryptnox.com \ No newline at end of file From 10b6549190a8c66d8cc654f538b1f26747c6545e Mon Sep 17 00:00:00 2001 From: YanNaingWinn Date: Thu, 12 Mar 2026 18:54:07 +0700 Subject: [PATCH 8/9] Implemented sphinx --- .github/workflows/deploy.yml | 48 ++++ .gitignore | 4 + docs/Makefile | 12 + docs/source/_static/custom.css | 337 ++++++++++++++++++++++++++ docs/source/_templates/layout.html | 123 ++++++++++ docs/source/conf.py | 43 ++++ docs/source/index.rst | 87 +++++++ index.html | 372 ----------------------------- requirements.txt | 1 + 9 files changed, 655 insertions(+), 372 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 .gitignore create mode 100644 docs/Makefile create mode 100644 docs/source/_static/custom.css create mode 100644 docs/source/_templates/layout.html create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst delete mode 100644 index.html create mode 100644 requirements.txt diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..22a5a79 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,48 @@ +name: Deploy Sphinx to GitHub Pages + +on: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: pip install -r requirements.txt + + - name: Build Sphinx + run: sphinx-build -b html docs/source _site + + - name: Add CNAME for custom domain + run: echo "docs.cryptnox.com" > _site/CNAME + + - uses: actions/upload-pages-artifact@v3 + with: + path: _site + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b8887a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +docs/build/ +*.swp +__pycache__/ +*.pyc \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..26c0cd6 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,12 @@ +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = _build + +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css new file mode 100644 index 0000000..2e25140 --- /dev/null +++ b/docs/source/_static/custom.css @@ -0,0 +1,337 @@ +/* ── Reset ───────────────────────────────────────────────────────────── */ +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +:root { + --bg: #111827; + --bg-card: #1E2133; + --bg-card-hover: #263046; + --text: #F8FAFC; + --text-muted: #94A3B8; + --accent: #06B6D4; + --accent-hover: #0891B2; + --border: #374151; + --indigo: #6366F1; +} + +/* ── Base ────────────────────────────────────────────────────────────── */ +html, body { + background: var(--bg); + color: var(--text); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, sans-serif; + min-height: 100vh; + display: flex; + flex-direction: column; +} + +/* ── Sphinx basic theme layout overrides ─────────────────────────────── */ +div.document { + max-width: 1100px; + margin: 0 auto; + padding: 2.5rem 2rem 4rem; + width: 100%; + flex: 1; +} + +div.documentwrapper { + width: 100%; + float: none; +} + +div.bodywrapper { + margin: 0; +} + +div.body { + background: transparent; + color: var(--text); + padding: 0; + min-width: unset; + max-width: unset; + font-size: 1rem; +} + +/* Hide sidebar and prev/next footer generated by basic theme */ +div.sphinxsidebar, +div.sphinxsidebarwrapper, +div.related, +div.footer { display: none; } + +/* ── Page title (h1) ─────────────────────────────────────────────────── */ +/* Hide Sphinx heading anchor symbols */ +a.headerlink { display: none; } + +div.body h1 { + font-size: 1.5rem; + font-weight: 700; + letter-spacing: -0.02em; + color: var(--text); + border-bottom: none; + padding-bottom: 0; + margin-bottom: 2rem; +} + +/* ── Cards grid ──────────────────────────────────────────────────────── */ + +/* The top-level section becomes the grid container */ +#cryptnox-product-documentation { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; +} + +/* Title, toctree, and hr span full width and sit outside the card grid */ +#cryptnox-product-documentation > h1, +#cryptnox-product-documentation > .toctree-wrapper { + grid-column: 1 / -1; +} + +/* Hide RST transition rulers and toctree block */ +#cryptnox-product-documentation > hr, +#cryptnox-product-documentation > .toctree-wrapper { + display: none; +} + +/* ── Product cards ───────────────────────────────────────────────────── */ +#cryptnox-hardware-wallet, +#cryptnox-cli, +#cryptnox-sdk-for-python { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 12px; + padding: 2rem; + display: flex; + flex-direction: column; + gap: 0.75rem; + position: relative; + overflow: hidden; + transition: border-color 0.2s, background 0.2s, transform 0.2s; +} + +/* ── Card icon ───────────────────────────────────────────────────────── */ +.card-icon { + width: 44px; + height: 44px; + background: rgba(6, 182, 212, 0.1); + border: 1px solid rgba(6, 182, 212, 0.25); + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + color: var(--accent); + flex-shrink: 0; + margin-bottom: 0.25rem; +} + +.card-icon svg { + width: 22px; + height: 22px; + stroke: var(--accent); +} + +/* Top accent line on hover */ +#cryptnox-hardware-wallet::before, +#cryptnox-cli::before, +#cryptnox-sdk-for-python::before { + content: ''; + position: absolute; + top: 0; left: 0; right: 0; + height: 2px; + background: linear-gradient(90deg, var(--accent), var(--indigo)); + opacity: 0; + transition: opacity 0.2s; +} + +#cryptnox-hardware-wallet:hover, +#cryptnox-cli:hover, +#cryptnox-sdk-for-python:hover { + border-color: var(--accent); + background: var(--bg-card-hover); + transform: translateY(-2px); +} + +#cryptnox-hardware-wallet:hover::before, +#cryptnox-cli:hover::before, +#cryptnox-sdk-for-python:hover::before { + opacity: 1; +} + +/* ── Card heading (h2) ───────────────────────────────────────────────── */ +div.body h2 { + font-size: 1.15rem; + font-weight: 700; + letter-spacing: -0.02em; + color: var(--text); + border-bottom: none; + padding-bottom: 0; + margin-bottom: 0.25rem; +} + +/* ── Card description (p) ────────────────────────────────────────────── */ +div.body section p, +div.body .section p { + color: var(--text-muted); + font-size: 0.9rem; + line-height: 1.65; + margin-bottom: 0; +} + +/* ── Card link list ──────────────────────────────────────────────────── */ +div.body section ul, +div.body .section ul { + list-style: none; + padding-left: 0; + margin-top: auto; + padding-top: 0.5rem; +} + +div.body section ul li, +div.body .section ul li { + margin: 0; +} + +div.body section ul li p, +div.body .section ul li p { + color: var(--text-muted); + margin: 0; +} + +/* ── Links ───────────────────────────────────────────────────────────── */ +div.body a { + color: var(--accent); + text-decoration: none; + font-weight: 600; + transition: color 0.2s; +} + +div.body a:hover { + color: var(--accent-hover); + text-decoration: none; +} + +/* ── Other resources section ─────────────────────────────────────────── */ +#other-resources { + grid-column: 1 / -1; + background: transparent; + border: none; + border-top: 1px solid var(--border); + border-radius: 0; + padding: 1.5rem 0 0; + gap: 0.5rem; + transform: none !important; +} + +#other-resources:hover { + border-color: var(--border); + background: transparent; + transform: none; +} + +#other-resources::before { display: none; } + +#other-resources h2 { + font-size: 0.875rem !important; + font-weight: 600; + color: var(--text-muted) !important; + text-transform: uppercase; + letter-spacing: 0.08em; + margin-bottom: 0.75rem; +} + +#other-resources ul { + display: flex; + flex-wrap: wrap; + gap: 1.5rem; + padding-top: 0; + margin-top: 0; +} + +#other-resources ul li p { + margin: 0; +} + +#other-resources a { + color: var(--text-muted) !important; + font-size: 0.875rem; + font-weight: 400 !important; +} + +#other-resources a:hover { + color: var(--accent) !important; +} + +/* ── Custom Header ───────────────────────────────────────────────────── */ +.cnx-header { + border-bottom: 1px solid var(--border); + padding: 1.25rem 2rem; + display: flex; + align-items: center; + background: var(--bg); +} + +.cryptnox-logo { + display: flex; + align-items: center; + text-decoration: none; +} + +.cryptnox-logo svg { + height: 32px; + width: auto; +} + +.cnx-header nav { + margin-left: auto; + display: flex; + gap: 1.5rem; +} + +.cnx-header nav a { + color: var(--text-muted); + text-decoration: none; + font-size: 0.875rem; + font-weight: 400; + transition: color 0.2s; +} + +.cnx-header nav a:hover { + color: var(--accent); +} + +/* ── Custom Footer ───────────────────────────────────────────────────── */ +.cnx-footer { + border-top: 1px solid var(--border); + padding: 1.25rem 2rem; + display: flex; + justify-content: center; + align-items: center; + background: var(--bg); + margin-top: auto; +} + +.footer-address { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.footer-copyright { + color: var(--text-muted); + font-size: 0.8rem; +} + +.footer-flag img { + width: 24px; + height: 24px; + display: block; + flex-shrink: 0; +} + +/* ── Responsive ──────────────────────────────────────────────────────── */ +@media (max-width: 860px) { + #cryptnox-product-documentation { + grid-template-columns: 1fr; + } + .cnx-header nav { display: none; } + .cnx-footer { flex-direction: column; align-items: flex-start; gap: 0.5rem; } + div.document { padding: 1.5rem 1rem 3rem; } +} diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html new file mode 100644 index 0000000..07136e2 --- /dev/null +++ b/docs/source/_templates/layout.html @@ -0,0 +1,123 @@ +{% extends "!layout.html" %} + +{# ── SEO / head ────────────────────────────────────────────────────── #} +{% block extrahead %} +{{ super() }} + + + + + + + + + + + + + + + + + + + + + + + + + + +{% endblock %} + +{# ── Custom header ─────────────────────────────────────────────────── #} +{% block header %} +
+ + +
+{% endblock %} + +{# ── Hide prev/next bars ───────────────────────────────────────────── #} +{% block relbar1 %}{% endblock %} +{% block relbar2 %}{% endblock %} + +{# ── Custom footer ─────────────────────────────────────────────────── #} +{% block footer %} +
+ +
+{% endblock %} diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..270838d --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,43 @@ +# Configuration file for the Sphinx documentation builder. + +# -- Project information ----------------------------------------------------- + +project = 'Cryptnox Docs' +copyright = '2026, Cryptnox' +author = 'Cryptnox' +release = '1.0' + +# -- General configuration --------------------------------------------------- + +extensions = [] + +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +language = 'en' + +# -- SEO meta tags ----------------------------------------------------------- + +html_baseurl = 'https://docs.cryptnox.com/' + +html_meta = { + 'description': 'Access the official Cryptnox technical documentation. Explore setup guides, features, and integration details for secure and efficient solutions.', + 'keywords': 'Cryptnox, hardware wallet, smartcard, JavaCard, CLI, SDK, documentation, BIP32, ECDSA, NFC, secure element', + 'author': 'Cryptnox', + 'robots': 'index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large', +} + +# -- Options for HTML output ------------------------------------------------- + +html_theme = 'basic' +html_static_path = ['_static'] + +html_css_files = [ + 'custom.css', +] + +# Disable sidebar — landing page needs no navigation panel +html_sidebars = {'**': []} + +html_show_sourcelink = False +html_copy_source = False diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..9cb3a36 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,87 @@ +================================ +Cryptnox Product Documentation +================================ + +.. toctree:: + :maxdepth: 3 + :caption: CONTENTS + + +Cryptnox Hardware Wallet +========================= + +.. raw:: html + +
+ + + + + +
+ +*Cryptnox Hardware Wallet* is a JavaCard Open Platform 3 smartcard with an EAL6+ Common Criteria +certified secure element. It provides hardware-secured private key storage and transaction signing +for cryptocurrency applications over NFC and contact (T=1) interfaces. + +All communication is protected by a secure channel based on GlobalPlatform SCP03, ensuring +confidentiality, authentication, and integrity. The card supports SECP256k1 and SECP256r1 curves +with ECDSA and BIP340 Schnorr signing, BIP32/SLIP10 hierarchical key derivation, and multiple +authentication methods including PIN, user key challenge-response, and FIDO. + +* **Hardware Wallet Technical Reference** [`View Docs `__] + + +------------------------- + + +Cryptnox CLI +============= + +.. raw:: html + +
+ + + +
+ +*Cryptnox CLI* is a command-line tool for interacting with Cryptnox smartcards from the terminal. +It handles card initialization, secure channel establishment, PIN management, seed generation, +key derivation, and transaction signing through a straightforward command interface. + +* **Cryptnox CLI User Guide** [`View Docs `__] + + +------------------------- + + +Cryptnox SDK for Python +========================= + +.. raw:: html + +
+ + + +
+ +*Cryptnox SDK for Python* is a library that enables developers to integrate Cryptnox smartcard +functionality into their own applications. It provides programmatic access to secure channel +establishment, APDU communication, key derivation, and signing operations, allowing custom +wallet software and automation workflows to leverage the card's hardware security. + +* **Cryptnox SDK for Python** [`View Docs `__] + + +------------------------- + + +Other resources +=============== + +* `Cryptnox Website `_ +* `Cryptnox on GitHub `_ diff --git a/index.html b/index.html deleted file mode 100644 index 9ef529a..0000000 --- a/index.html +++ /dev/null @@ -1,372 +0,0 @@ - - - - - - Cryptnox Docs - - - - - -
- - -
- -
- -
-

Technical Documentation

- -
- -
-
-
-

Get your hardware

-

Cryptnox smart cards and compatible readers available at the official shop.

-
- - Shop Now → - -
-
- -
- -
- -
- - - diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6966869 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +sphinx From 041a42f10e0bf834b1714045393585d553ded061 Mon Sep 17 00:00:00 2001 From: YanNaingWinn Date: Thu, 12 Mar 2026 19:04:29 +0700 Subject: [PATCH 9/9] Added CNAME and modified deploy.yml --- .github/workflows/deploy.yml | 4 ++++ CNAME | 1 + 2 files changed, 5 insertions(+) create mode 100644 CNAME diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 22a5a79..5743524 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,6 +3,8 @@ name: Deploy Sphinx to GitHub Pages on: push: branches: [main] + pull_request: + branches: [main] workflow_dispatch: permissions: @@ -38,6 +40,8 @@ jobs: path: _site deploy: + # Only deploy on push to main or manual trigger — not on PR builds + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..2ba720e --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs-v2.cryptnox.com