A static Hexo blog using the npm-packaged Landscape theme. Posts are ordinary
Markdown files in source/_posts/. The blog initially has no posts.
Install the Node 24 version listed in .node-version, which GitHub Actions also
uses. From this repository, run:
npm ci
npm run serverOpen http://localhost:4000. Stop the preview with Ctrl+C.
npm run new -- "Post title"Edit the created file in source/_posts/, keeping its YAML front matter. Preview
with npm run server, then commit and push. Dates use Europe/Stockholm and post
URLs use year/month/day/title. There is no global Hexo installation requirement.
npm run clean
npm run buildThe build writes public/. Do not commit that directory, node_modules/, or
db.json. The lockfile should be committed. .local-tools/ and .npm-cache/
are ignored repository-local validation tools/cache, not required by the blog.
Before the first deployment, set Settings → Pages → Build and deployment →
Source to GitHub Actions, and ensure Actions are enabled for this repository.
Review and commit this migration before pushing: pushing to master triggers
publication. Pull requests build without deploying. The Pages workflow can also
be run manually from master after the Pages setting is configured.
The workflow installs the lockfile dependencies, builds the site, and deploys
the public/ artifact. No personal access token or Git deployment plugin is
needed. The site URL is https://brocadedarkness.github.io.
Site settings live in _config.yml; theme settings in _config.landscape.yml.
The original banner is retained in source/images/banner.jpg. Landscape is
installed through npm, with no local fork. FancyBox is disabled. Search,
sharing, and the theme's own JavaScript remain as provided by Landscape because
they are built into its templates. No legacy scripts are carried over.
The generated 2015 site remains available in Git history. Its posts and URLs are not migrated.
scripts/empty-blog.js supplies empty homepage/archive/feed routes while there are no
posts, since the standard generators omit them. It yields to those generators
automatically after the first post. It does not create any post content.