Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "content"]
path = content
url = https://github.com/ethereum/iptf-map.git
url = https://github.com/ethsystems/map.git
22 changes: 11 additions & 11 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## Project Overview

This is the IPTF (Institutional Privacy Task Force) website repository. Astro static site deployed at https://iptf.ethereum.org/.
This is the EthSystems website repository. Astro static site deployed at https://ethsystems.org/.

Map content (patterns, approaches, use-cases, vendors, domains, jurisdictions) is the projection of the [`iptf-map`](https://github.com/ethereum/iptf-map) repo, pinned as a submodule at `content/`. Blog writeups live in `src/posts/`.
Map content (patterns, approaches, use-cases, vendors, domains, jurisdictions) is the projection of the [`map`](https://github.com/ethsystems/map) repo, pinned as a submodule at `content/`. Blog writeups live in `src/posts/`.

## Tech Stack

Expand All @@ -17,8 +17,8 @@ Map content (patterns, approaches, use-cases, vendors, domains, jurisdictions) i
## Key Files

- `astro.config.mjs` — Astro config (site URL, integrations).
- `content/` — iptf-map submodule.
- `scripts/build-graph.mjs` — Reads iptf-map → `src/data/graph.json`.
- `content/` — map submodule (`ethsystems/map`).
- `scripts/build-graph.mjs` — Reads the map submodule → `src/data/graph.json`.
- `src/posts/` — Blog post markdown (filename: `YYYY-MM-DD-slug.md`).
- `src/pages/` — Routes. `blog/[slug].astro` is the post detail page.
- `src/layouts/` — `Guide.astro` (default), `Post.astro` (writeups).
Expand All @@ -39,7 +39,7 @@ Requires Node 22.

## Source-of-truth rule

iptf-map main is the only source of truth for map content. Anything sourced from the submodule renders verbatim. Render sites are marked with `SOURCE: iptf-map field — do not alter` comments.
The map repo (`ethsystems/map`) main is the only source of truth for map content. Anything sourced from the submodule renders verbatim. Render sites are marked with `SOURCE: map field — do not alter` comments.

UI chrome (landing copy, FAQ, blog index, post layout) is the site's own and stays curated.

Expand All @@ -63,24 +63,24 @@ title: "Post Title"
description: "Brief description (shown in social cards and the blog index)."
date: 2026-01-09
author: "Author Name"
image: /assets/images/2026-01-09-slug/hero.png
image: ../assets/posts/2026-01-09-slug/hero.png
---
```

The published URL derives from the title via Jekyll-compatible slugify. Hero images live under `public/assets/images/`. Set `published: false` to keep a post out of the live site.
The published URL derives from the title via Jekyll-compatible slugify. Set `published: false` to keep a post out of the live site.

### Hero images

- Recommended size: 1200x600px (2:1 ratio) for OG / Twitter cards.
- Location: `public/assets/images/<date-slug>/`.
- Format: JPG, PNG, WEBP, or SVG.
- Location: `src/assets/posts/<date-slug>/`, referenced from frontmatter and inline `![]()` markdown images by a path **relative to the post file** (e.g. `../assets/posts/<date-slug>/hero.png`). Images must live under `src/` — the `image` field uses Astro's content-collection `image()` schema helper (`src/content.config.ts`), so hero/thumbnail images get resized and converted to WebP automatically wherever they're rendered via `<Image>`. Files placed in `public/` are served verbatim and bypass this entirely.
- Format: JPG, PNG, WEBP, or SVG (source format — output is optimized at build time).

## Updating iptf-map content
## Updating map content

```bash
git submodule update --remote content
git add content
git commit -m "chore(content): bump iptf-map submodule"
git commit -m "chore(content): bump map submodule"
```

## Deployment
Expand Down
27 changes: 13 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
# IPTF Website
# EthSystems Website

Static website for the Institutional Privacy Task Force (IPTF), live at [https://iptf.ethereum.org/](https://iptf.ethereum.org/).
Static website for EthSystems, live at [https://ethsystems.org/](https://ethsystems.org/).

Astro static site. Content for patterns, approaches, use-cases, vendors, domains, and jurisdictions is sourced from the [`iptf-map`](https://github.com/ethereum/iptf-map) repo via a git submodule at `content/`. Writeups (blog posts) live in `src/posts/`.
Astro static site. Content for patterns, approaches, use-cases, vendors, domains, and jurisdictions is sourced from the [`map`](https://github.com/ethsystems/map) repo via a git submodule at `content/`. Writeups (blog posts) live in `src/posts/`.

## How it works

- **Astro** generates every page at build time from data in `content/` (iptf-map) and `src/posts/` (writeups).
- **Astro** generates every page at build time from data in `content/` (the map submodule) and `src/posts/` (writeups).
- **GitHub Pages** auto-deploys from `main` via `.github/workflows/deploy.yml`. Changes go live within a few minutes.
- **CNAME** (`public/CNAME`) points the deployment at `iptf.ethereum.org`.
- **CNAME** (`public/CNAME`) points the deployment at `ethsystems.org`.

## Repository layout

```
iptf-web/
web/
├── astro.config.mjs Astro configuration (site URL, integrations)
├── content/ iptf-map submodule (patterns, approaches, etc.)
├── content/ map submodule (patterns, approaches, etc.)
├── public/ Static assets served verbatim
│ ├── assets/images/ Post hero images, diagrams
│ ├── assets/css/
Expand All @@ -24,7 +24,7 @@ iptf-web/
│ ├── CNAME
│ └── robots.txt
├── scripts/
│ └── build-graph.mjs Reads iptf-map → src/data/graph.json
│ └── build-graph.mjs Reads the map submodule → src/data/graph.json
├── src/
│ ├── data/ Generated at build (graph.json, glossary.json)
│ ├── posts/ Blog post markdown
Expand Down Expand Up @@ -79,17 +79,17 @@ The published URL is derived from the title (`/<title-slugified>/`). Hero images

Set `published: false` in frontmatter to keep a post out of the deployed site.

## Updating the iptf-map content
## Updating the map content

```bash
git submodule update --remote content
git add content
git commit -m "chore(content): bump iptf-map submodule"
git commit -m "chore(content): bump map submodule"
```

## Source-of-truth rule

iptf-map main is the only source of truth for patterns, approaches, vendors, etc. Anything sourced from the submodule renders verbatim. Pages that emit map content mark each render site with `SOURCE: iptf-map field — do not alter`.
The map repo (`ethsystems/map`) main is the only source of truth for patterns, approaches, vendors, etc. Anything sourced from the submodule renders verbatim. Pages that emit map content mark each render site with `SOURCE: map field — do not alter`.

UI chrome (landing copy, FAQ, blog index, post layout) is the site's own and stays curated here.

Expand All @@ -101,9 +101,8 @@ UI chrome (landing copy, FAQ, blog index, post layout) is the site's own and sta

## Contact

- Email: [[email protected]](mailto:[email protected])
- [Institutions form](https://forms.gle/6Za8suF5QHyRamcW7)
- [Vendors form](https://forms.gle/znifD8h9Uw6VEX6Q9)
- Email: [[email protected]](mailto:[email protected])
- [Book a call](https://calendar.app.google/yFK6o5Mzk7fKuu91A)

## License

Expand Down
9 changes: 7 additions & 2 deletions astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import react from '@astrojs/react';
import sitemap from '@astrojs/sitemap';

export default defineConfig({
site: 'https://iptf.ethereum.org',
site: process.env.OVERRIDE_URL || 'https://ethsystems.org',
trailingSlash: 'always',
build: {
format: 'directory',
inlineStylesheets: 'always',
},
// Legacy Jekyll URLs (permalink: /:title/, slug from filename) → new
// title-derived slugs under /blog/. Keeps inbound links alive post-migration.
Expand Down Expand Up @@ -41,5 +42,9 @@ export default defineConfig({
wrap: true,
},
},
integrations: [mdx(), react(), sitemap()],
integrations: [
mdx(),
react(),
sitemap(),
],
});
2 changes: 1 addition & 1 deletion content
Submodule content updated 179 files
Loading
Loading