Source for www.zerosharp.com, blog.zerosharp.com, and about.zerosharp.com — built with Hugo and (eventually) deployed to Cloudflare Pages.
From the repo root:
hugo serverThen open http://localhost:1313/. Hugo rebuilds on file change with livereload.
Hugo extended v0.161+ is required (needed for the SCSS pipeline). Install via your package manager: choco install hugo-extended (Windows), brew install hugo (macOS), or download a release binary.
To produce a static build into public/ without serving:
hugozerosharp/
├── hugo.toml # site config: baseURL, brand params, taxonomies, Chroma
├── archetypes/default.md # template used by `hugo new …`
├── assets/
│ └── scss/ # compiled by Hugo Pipes — main.scss is the entry
│ ├── _tokens.scss # CSS variables for palette, type, spacing
│ ├── _base.scss # reset, body, generic .zs-* helpers
│ ├── _site.scss # yellow header, paper-wrap, footer, landing hero
│ ├── _post.scss # eyebrow, title, meta, byline, post-nav, comments
│ ├── _syntax.scss # dark Solarized code frame + token colours
│ ├── _responsive.scss # ≤768px breakpoint
│ └── main.scss
├── content/
│ ├── _index.md # / (landing — actual hero is in layouts/index.html)
│ ├── about/_index.md # /about/ (bio with floating photo)
│ └── blog/ # /blog/ + /<slug>/ (individual posts)
│ ├── _index.md
│ └── *.md # one file per post (slug = filename)
├── layouts/
│ ├── index.html # standalone landing page (does NOT use baseof)
│ ├── _default/
│ │ ├── baseof.html # html/head/header/main/footer wrapper
│ │ ├── single.html # post / page renderer
│ │ └── list.html # generic section list (taxonomies)
│ ├── blog/list.html # /blog/ — title + blurb + paginated post list
│ ├── partials/ # site-header, site-footer, post-meta, byline,
│ │ # post-nav, comments-disqus
│ └── shortcodes/ # pullquote, gist, highlight (Octopress-era inline)
├── static/
│ ├── fonts/ # VAG Rounded Std Bold / Light / Thin .otf
│ ├── images/ # ~190 images carried over from Octopress
│ └── favicon.svg
└── scripts/
└── port-octopress-posts.py # one-shot Octopress → Hugo migration helper
The blog section uses /<slug>/ (NOT /blog/<slug>/) so existing
blog.zerosharp.com/<slug>/ URLs continue to resolve. This is set in hugo.toml:
[permalinks]
blog = "/:slug/"When writing a new post, set slug = "..." in the front-matter and Hugo will emit it at /<slug>/.
hugo new content blog/my-new-post.md
# then edit content/blog/my-new-post.mdThe archetype gives you draft = true. To preview drafts in the local server use hugo server -D. Drop draft (or set to false) when ready to publish.
Not yet deployed. Plan: connect this repo to Cloudflare Pages with build command hugo and output public/. Custom domains:
zerosharp.com(apex) andwww.zerosharp.com→ both serve the landing pageblog.zerosharp.com→ also serves the same site, where/<slug>/paths give the post pages
The same public/ build is served at all hostnames; URL paths handle the routing.
- Line endings. Repo is currently writing with whatever
core.autocrlfis set to in your global git config. If you start seeing 200+ "modified" files showing as line-ending churn (CRLF↔LF), add a.gitattributeswith* text=auto eol=lfand re-normalize. - Disqus identifiers. Each ported post sets
disqus_identifieranddisqus_urlin front-matter to the originalhttp://ZeroSharp.github.com/<slug>/so historical comment threads stay attached. Don't drop those. - Images. Octopress's
{% img right /p alt %}floated images right with text wrapping. The migration script preserves this by emitting<img class="img-{right,left,center}">HTML; the SCSS in_post.scssdoes the float + responsive collapse on small screens. - Code blocks. Fenced blocks (```csharp) get the dark Solarized frame with traffic-light header via Chroma. 4-space-indented blocks fall back to a plainer dark frame (no traffic lights, no syntax highlighting) — see
_post.scss.entry-content pre.
See DECISIONS.md for the architectural rationale and CHANGELOG.md for what's been done and what's pending.