upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/docs/site.md
blob: 522da1013ea7674e590778e12c538ef14cba24c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Public Site Contract

The public Bitflash sites are generated from this repository. If a deployed
page and the source disagree, the deployed page is stale.

## Canonical Navigation

Every public page should use the same top navigation:

| label | target |
|---|---|
| home | `https://bitflash.network/` |
| code | `https://git.bitflash.network/bitflash/bitflash` |
| docs | `https://docs.bitflash.network/` |
| downloads | `https://releases.bitflash.network/` |
| explorer | `https://explorer.bitflash.network/` |
| status | `https://status.bitflash.network/` |

The `code` link intentionally points at the repository, not the Forgejo
instance root. A visitor choosing "code" wants the source tree.

## Documentation Pages To Publish

The docs index should expose these source files:

| page | source | why it matters |
|---|---|---|
| Manual | `README.md` | run, mine, recover, operate |
| Key derivation and address format | `docs/derivation.md` | independent wallet recovery |
| Release verification | `docs/release-verification.md` | pinned signing-key flow |
| Dependencies | `docs/dependencies.md` | pinned secp256k1/RandomX supply chain |
| Rendezvous and .btf addressing | `docs/rendezvous.md` | network design and caveats |
| Tor mode | `docs/tor.md` | `-tor`, `-socks`, onion relay operation |
| Fair launch verifier | `docs/fair-launch.md` | no-premine launch audit |
| UTXO set commitment | `docs/utxo-commitment.md` | deterministic supply/root audit |
| UTXO inclusion proofs | `docs/utxo-proofs.md` | proof for one unspent output |
| Mining calculator | `docs/mining-calculator.md` | local WhatToMine-style estimates |
| Public pool directory | `docs/pool-directory.md` | `pool_status.json`, `pools.json`, ranking |

## Release Mirror Aliases

Each release remains under its versioned directory:

```text
https://releases.bitflash.network/v1.2.18/SHA256SUMS
https://releases.bitflash.network/v1.2.18/SHA256SUMS.asc
```

The release root should also alias the latest files:

```text
https://releases.bitflash.network/SHA256SUMS
https://releases.bitflash.network/SHA256SUMS.asc
https://releases.bitflash.network/Bitflash-latest-windows.zip
https://releases.bitflash.network/Bitflash-latest-x86_64.AppImage
https://releases.bitflash.network/bitflash-node-latest-x86_64
```

The aliases are convenience only. Verification must still require the pinned
release key documented in `docs/release-verification.md`.

## Static Explorer

`scripts/build-explorer.py` writes a static explorer with no backend:

```text
index.html
style.css
explorer.js
logo.png
blocks.json
block/<height>.json
```

Serve it with a strict content policy:

```text
default-src 'none';
img-src 'self';
style-src 'self';
script-src 'self';
connect-src 'self';
base-uri 'none';
form-action 'none';
frame-ancestors 'none';
```

The viewer must never use `innerHTML` for chain data. A malicious transaction
must be rendered as text, not interpreted as markup.

## Cache Policy

Recommended defaults:

| path | cache |
|---|---|
| HTML pages | `public, max-age=0, must-revalidate` |
| `status.json` | `no-store` |
| `blocks.json`, `block/*.json` | `public, max-age=0, must-revalidate` |
| release assets | `public, max-age=14400, must-revalidate` |
| `SHA256SUMS`, signatures, keys | `public, max-age=0, must-revalidate` |

## Security Headers

Recommended for all static pages:

```text
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
Permissions-Policy: interest-cohort=(), geolocation=(), camera=(), microphone=()
```

Forgejo has its own application headers and should not blindly inherit the
static-site CSP.