Architecture

Simple Page is a markdown-first publishing system built on ENS, IPFS, and Ethereum.

Overview

The three-tier architecture: smart contracts on Ethereum, the browser frontend, and Simple Page Nodes connected to IPFS.

Simple Page has three main layers:

Layer Role
Smart contracts Track Simple Page subscriptions as NFTs and calculate subscription fees.
Browser frontend Edits markdown, manages files/settings, stages content, reviews drafts, and publishes ENS contenthash transactions.
Simple Page Node Pins and stages CARs, indexes Ethereum/ENS events, serves lightweight CARs and raw blocks, and syncs off-chain refs.

The permanent public pointer is always the ENS contenthash. Every publish changes that pointer on-chain to a new IPFS CID.

Browser Publish Flow

Edit markdown and files
-> build a new IPFS root locally
-> upload a CAR to a Simple Page Node
-> sign an ENS contenthash transaction
-> node indexes the event and finalizes the pin

The browser editor uses the @simplepg/repo package as the canonical content engine. It builds markdown pages, HTML pages, settings, theme CSS, manifests, RSS, sidebar navigation, and history links into one UnixFS root.

CLI Draft Flow

Clone or create local markdown repo
-> edit files locally
-> authorize CLI agent with the ENS owner wallet
-> push signed off-chain draft
-> review draft in browser
-> owner publishes selected CID on ENS

This separates contribution from publication. Agents can prepare drafts without holding the ENS owner key.

Static Site Flow

Build a static site locally
-> push output directory as a raw signed draft
-> preview CID in browser
-> owner publishes selected CID on ENS

Static builds use the same Node and ENS contenthash publication path, but they do not use Simple Page markdown rendering.

Read Flow

Visitor opens yourname.eth.link
-> gateway resolves ENS contenthash
-> gateway serves IPFS content
-> Simple Page frontend enhances the page when JavaScript is available

Published pages include static HTML, so content can render before the app hydrates.

Data Stored In A Published Root

Important paths in a Simple Page root include:

Path Purpose
index.md, */index.md Markdown source for pages.
index.html, */index.html Rendered HTML for visitors.
_files/ Uploaded files and generated avatar/favicon artifacts.
_prev/0/ Previous published root, recursively preserving history.
_template.html HTML template used to render pages.
settings.json Site settings such as themes, search, and edit button style.
theme.css Generated theme CSS from settings.
manifest.json, manifest.webmanifest Web app metadata and icons.
rss.xml Generated RSS feed when pages opt in.
sidenav.json Generated left-sidebar navigation data.
_redirects Gateway redirects, including /feed to /rss.xml.

Service Discovery

Frontend and CLI clients discover Simple Page Nodes through the dservice text record on new.simplepage.eth. Multiple endpoints can be listed. Clients randomize endpoint order and try available nodes.

Advanced users can override endpoints with query parameters:

?ds-new.simplepage.eth=https://your-node.example
?ds-rpc-1=https://your-mainnet-rpc.example
?ds-rpc-11155111=https://your-sepolia-rpc.example

The main editor currently supports RPC overrides for mainnet, Sepolia, and local development.

Next

  • Components - what each package and contract does.
  • Protocol - how content moves through the network.
  • API - Node endpoints for content, refs, capabilities, and history.