Skip to content

Commit de5fcff

Browse files
authored
Merge pull request #57 from JonnieSparkles/docs/update-site-hosting-guide
2 parents c883275 + 13f6bb9 commit de5fcff

File tree

1 file changed

+67
-7
lines changed

1 file changed

+67
-7
lines changed

content/build/guides/hosting-decentralized-websites.mdx

Lines changed: 67 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: "Hosting Decentralized Websites"
33
description: "Build permanent, censorship-resistant websites on Arweave using manifests and deployment tools"
44
---
55

6-
Create **permanent websites** that can't be censored, taken down, or modified after deployment. Host your content on Arweave and serve it through AR.IO gateways for a truly decentralized web experience.
6+
Create **permanent websites** that cannot be censored, taken down, or modified after deployment. Host your content on Arweave and serve it through AR.IO gateways for a truly decentralized web experience.
77

88
## What Makes It Different?
99

@@ -79,14 +79,22 @@ Create **permanent websites** that can't be censored, taken down, or modified af
7979
- File management
8080
- Website building
8181
- Deployment workflows
82+
- ArNS integration
83+
84+
**Turbo App** - [Quick UI based workflows](https://turbo.ar.io) for:
85+
86+
- Quick deployments
87+
- Single or multiple file support
88+
- Deployment workflows
89+
- ArNS integration
8290

8391
### 3. ArNS Integration
8492

85-
**Primary Names** - [Decentralized domain names](/learn/arns) that:
93+
**Domain Names** - [Decentralized domain names](/learn/arns) that:
8694

8795
- Point to your website's manifest
8896
- Provide human-readable URLs
89-
- Can be updated to point to new versions
97+
- Can be updated to point to new versions or to load dynamic data
9098
- Are owned and controlled by you
9199

92100
## Quick Start
@@ -100,11 +108,11 @@ Create **permanent websites** that can't be censored, taken down, or modified af
100108
npm install permaweb-deploy --save-dev
101109
npx permaweb-deploy --deploy-folder ./build --arns-name your-domain
102110

103-
# Using arlink (web interface)
104-
# Visit the arlink website and upload through the browser
111+
# Using Turbo App (web interface)
112+
# Visit the [Turbo App](https://turbo.ar.io) and upload through the browser
105113
```
106114

107-
**3. Get an ArNS domain** - Register a primary name to point to your website
115+
**3. Get an ArNS domain** - Register a domain name to point to your website
108116

109117
**4. Access your site** - Visit `https://your-domain.arweave.net` or any AR.IO gateway
110118

@@ -114,4 +122,56 @@ npx permaweb-deploy --deploy-folder ./build --arns-name your-domain
114122
- **Censorship resistance** - Cannot be taken down by authorities
115123
- **Cost efficiency** - Pay once, host forever
116124
- **Global distribution** - Served from multiple AR.IO gateways
117-
- **Version control** - Update your ArNS domain to point to new versions
125+
- **Version control** - Update your ArNS domain to point to new versions, while always retaining access to the old ones
126+
127+
## Loading dynamic content into your static site
128+
129+
Need a static site that updates dynamically without re-deployment? Use an ArNS undername as a moving pointer to a tiny JSON index of your content.
130+
131+
- **Home**: `ar://my-site` (your main site)
132+
- **Data undername**: `ar://data_my-site` → points to a JSON "index" (TXID)
133+
- **Publish flow**:
134+
1) Upload the new post (HTML/MD/JSON)
135+
2) Upload an updated `index.json` listing your posts
136+
3) Update the `data` undername to the new `index.json` TXID
137+
138+
This keeps page loads simple - your homepage fetches a single JSON file and renders associated content.
139+
140+
**Example index.json**
141+
142+
```json
143+
{
144+
"updatedAt": "2025-10-30T12:00:00Z",
145+
"posts": [
146+
{ "id": "POST_TXID_1", "title": "Hello World", "date": "2025-10-01" },
147+
{ "id": "POST_TXID_2", "title": "Second Post", "date": "2025-10-29" }
148+
]
149+
}
150+
```
151+
152+
**Minimal client-side render (use fetch)**
153+
154+
```html
155+
<ul id="posts"></ul>
156+
<script type="module">
157+
async function loadPosts() {
158+
// Follow the current domain/gateway dynamically
159+
const dataUrl = `${window.location.protocol}//data_${window.location.hostname}`;
160+
const res = await fetch(dataUrl, { cache: 'no-cache' });
161+
const index = await res.json();
162+
const list = document.getElementById('posts');
163+
list.innerHTML = '';
164+
for (const post of index.posts) {
165+
const li = document.createElement('li');
166+
const postUrl = `${window.location.origin}/${post.id}`; // open on current gateway/domain
167+
li.innerHTML = `<a href="${postUrl}">${post.title}</a> — ${post.date}`;
168+
list.appendChild(li);
169+
}
170+
}
171+
loadPosts();
172+
}</script>
173+
```
174+
175+
Notes:
176+
- ArNS undernames use underscores: `data_my-site`, not periods.
177+
- Update the `data` record each time you publish. You can do this with your preferred tool (e.g., Permaweb Deploy, Turbo, etc).

0 commit comments

Comments
 (0)