This is the source code of my personal website, were you're going to find my projects, who am I, and how to find me.
Powered by Steno
- Deno 2
deno task devSteno serves the site with live reload, normally at http://localhost:5735.
deno task doctor
deno task build
deno task previewThe static site is written to dist/.
The build uses the official Steno Tailwind and SEO plugins. The Tau layouts use
Tailwind utilities directly; the theme stylesheet only initializes Tailwind,
defines the bundled fonts and tokens, and contains interaction styles that need
pseudo-elements or keyframes. Tailwind scans the generated HTML and writes
dist/assets/tailwind.css. The SEO plugin writes dist/sitemap.xml,
dist/feed.xml, and dist/atom.xml.
The init README currently advertises Tailwind plugin ^0.8.0, but that release
is not available on JSR. This prototype uses the published, Steno-compatible
^0.3.0 line instead.
content/
.steno/config.yml # site, theme, and collection configuration
blog/ # Markdown posts
*.md # public routes
theme/
styles.css # Tailwind entry and every site style
layouts/ # Tau layouts
components/ # shared Tau components
scripts/ # browser scripts, written in TypeScript (source of truth)
assets/ # fonts, images, and *generated* browser JS — don't hand-edit assets/*.js
Browser scripts live in theme/scripts/*.ts and are transpiled (types stripped,
no bundling) to theme/assets/*.js via deno task build-assets, which runs
automatically before dev/build. theme/assets/*.js is gitignored — it's
build output. Type-check the scripts with deno task check.
The public site includes /, /projects, /gallery, /partnerships, and
/blog. Studio and its server APIs are intentionally not part of the Steno
content tree or static output.
Add posts under content/blog/ with this frontmatter:
---
layout: articletitle: My Postdate: 2026-07-31tags: [steno, web]draft: falsearchived: falsedescription: A short search and social description.canonical: https://gxbs.dev/blog/my-postimage: https://gxbs.dev/assets/og/blog/my-post.png
---Drafts are omitted from production builds. Archived posts remain public and are
listed under /blog/archive.