Properties2
| Type | Practice |
| Note created | Jul 1, 2026 |
My blog is a static Hugo site, but its posts can also live on the AT Protocol as standard.site records — discoverable by ATProto aggregators while diego.codes stays the canonical home. The tool that bridges an existing SSG to standard.site is Sequoia, an interactive CLI. Each post becomes a site.standard.document record on my PDS.
Steps to publish
Before using the CLI, you need to create an app password at bsky.app/settings/app-passwords (assuming Bluesky is your identity provider). Then, from the command line:
# Install the CLI
npm i -g sequoia-cli
# Authenticate
sequoia login
# Configure the integration (more below)
sequoia init
# Check what will be published
sequoia publish --dry-run
# Go ahead and publish, you can check after at https://site-validator.fly.dev/
sequoia publishThe interactive sequoia init will help you configure everything for your publication. These are the answers for my blog, as you can see in my sequoia.json file:
| Prompt | Answer |
|---|---|
| Site URL | https://diego.codes |
| Content directory | content/post |
| Cover images directory | (blank — images live inside each page bundle) |
| Public/static directory | static |
| Build output directory | public |
| URL path prefix for posts | /post |
| Frontmatter — title | title |
| Frontmatter — description | (blank — falls back to an auto-summary) |
| Frontmatter — publish date | date |
| Frontmatter — cover image | (blank) |
| Frontmatter — tags | (blank) |
| Frontmatter — draft status | draft |
| Publication setup | Create a new publication |
| Publication name | Diego Vicente |
| Publication description | My personal blog |
| Icon image path | static/images/logo.png |
| Enable automatic Bluesky posting | No |
| Publish the full post content | Yes |
One thing the wizard misses for Hugo, or at least my personal configuration: because posts are page bundles (content/post/<slug>/index.md), the generated slugs come out as <slug>/index and the canonical URLs break. Fix it by adding "removeIndexFromSlug": true to sequoia.json. You can verify with sequoia publish --dry-run --verbose, which prints the resolved URL for each post.