🕳️🔍️

Approach

My approach is largely manual, where it's interesting, and automated where it isn't. By automated, I mean triggering human-authored scripts to perform repetitive task (like deploying, or updating text).

This approach is based largely out of a desire to, I guess, be seen in some limited capacity. But while you might witness some flourishes, my style is still sadly pretty corpo-brained; perhaps because that's where I've spent most of my computer-life, or maybe I'm just that self-domesticated.

Dev Setup

Because I'm kind of corpo brained, I have a fairly formal setup. I've got a README.md, and a Dockerfile, and an example nginx.conf--lol, yup.

Kind of pathetic, I admit. But it does make for smooth developer experience when I come in trying to make some changes after months on hiatus elsewheres.

Some more specifics: I use the NPM package live-server to get live-reloading as I save.

I'm trying to keep the architecture/framework/tooling ((I'm sorry I can't help how I talk)) relatively low-impact (at least compared to what I'd be forced to make for work). So that means no ReactJS, no express, no "sythetics" (lol), and not even a webserver. It's just a plain old nginx container listening behind a reverse proxy.

Dockerfile


    FROM nginx:latest

    WORKDIR /etc/nginx

    COPY ./config/nginx.conf ./
    COPY ./config/derelict.ink ./

    RUN mkdir html

    COPY ./static ./html/static
    COPY ./stubs ./html/stubs
    COPY ./pages ./html/pages

    RUN nginx -t
                    
And a docker compose file for easy deploys. Which lets me do like DOCKER_HOST="ssh://${REMOTE_HOST}" docker compose up -d to redeploy to whatever remote(s) I want with minimal fuss.

compose.yml

    name: derelict.ink
    services:
      web:
        build: .
        container_name: derelict.ink
        ports:
          - 127.0.0.1:1234:1234
                    

I did this so I could take advantage of Server-Side Includes (SSI), because I wanted to follow the DRY principle, which lets me do nice things like use the following at the top of this HTML file:

Example SSIs

Note these are inside special "SSI Command" HTML comments (<--# -->), but wrapping them here would cause the command to be executed!


    # set var="browser-title" value="Colophon"
    # set var="page-title" value="🕳️🔍️"
    # include file="/stubs/header.shtml"
                    

Git hooks

I use this post-commit hook to make the changelog on the left.

#!/bin/sh # Append breaks so we can source file directly git log --format='%ad %s' --date=short \ | sed 's/$/<br \/>/' \ > static/text/changelog.txt echo changelog.txt updated exit 0

Okay, I've actually since updated this to an incredibly hideous sed one-liner that I'm not going to paste here. Shoot me an email if you want it, and I'll gladly share, though.

Version Control

I use git.

Specifically, I have several repositories. Local (obviously), one corp instance (you know the place), Codeberg, and backup on another VPS that I run.

Actually it's so easy to set up your own private git server. Cross-reference with any missing pieces here, but once you've got your git user set up, you can just do the following to add a backup for an existing repository:

From your git user's home dir (on the remote)

    # Easiest to just scp a copy of the repo to the remote
    # and use it, rather than faffing about with permissions
    # pulling down a repo from some secondary remote...
    git clone --bare /home/git/repo-name repo-name

    # If you get this error when pushing:
    #   fatal: detected dubious ownership in repository at
    # make sure file ownership is set to git user
    chown -R git:git repo-name
                    

Then from your working repository (on your local)

    # Add an additional push target (fetch source (AKA source of truth))
    # will still live at whatever you have before
    git remote set-url --add --push origin git@example.com:repo-name

    # Verify remotes
    git remote show origin
                    

Changelog

Here's a list of the dates and subjects of the git commits that have gone into making this website. See Git hooks under Dev setup for details on how its made.

2025-10-26 content(colophon): fix typos, phrasing
2025-09-11 content: remove unused blinkies
2025-09-10 content(colophon): add a bit more detail to approach
2025-09-10 chore: tweak local dev script
2025-09-10 content(colophon): increase changelog height
2025-09-10 content(home): add title to n64 button
2025-09-05 content(home): add more blinkies
2025-09-05 content: tone and phrasing tweaks
2025-09-05 style: add background colour
2025-08-30 content(colophon): more deployment details
2025-08-30 content(colophon): swap vcs and dev sections
2025-08-30 chore: slightly less hideous sed pat/replacement
2025-08-30 style(changelog): add some variation to git messages
2025-08-30 style: better code styling
2025-08-30 style: better mobile experience
2025-08-29 content(home): phrasing
2025-08-29 style: init mobile media queries
2025-08-29 content(colophon): shallower indents on code snippets
2025-08-29 content: add more aliases
2025-08-27 chore: rename publish script to deploy
2025-08-27 chore: move tools to scripts
2025-08-27 chore: remove old script
2025-08-27 chore: use docker compose
2025-08-27 content: remove stubbed pages from navbar
2025-08-27 chore: update publish script to use docker
2025-08-27 content: remove caution divider
2025-08-27 refactor: simplify home path
2025-08-27 chore: move instruction out of readme to scripts
2025-08-27 chore: remove todo file
2025-08-27 chore: move bg image to proper dir
2025-08-27 doc: add docker deploy instructions
2025-08-27 chore: move index.html to pages/home.html
2025-08-22 chore: check for uncommitted changes before deploying
2025-08-22 content: remove colophon from home page
2025-08-21 chore: add deploy script
2025-08-21 content: add info about derelict to about page
2025-08-21 content: remove cringe images from homepage lol
2025-08-21 content: init colophon page
2025-08-21 doc: update post-commit hook example in README
2025-08-21 content: fix typo
2025-08-21 chore: update local dev instructions
2025-07-25 chore: init Dockerfile
2025-07-25 chore: update sync script
2025-07-25 content: add more blinkies
2025-07-25 content: some tweaks, bunch of todos
2025-07-25 revert: "chore: add nginx config"
2025-06-02 chore: add nginx config
2025-03-30 content: add some pseudonyms
2025-03-30 chore: remove duplicate blinky
2025-03-30 content: more detail for writing page
2025-03-30 content: move email details to contact page
2025-03-30 content: fix homepage typos
2025-03-30 doc: add changelog tip
2025-03-30 chore: remove example page
2025-03-30 feat: make use of nginx ssi module
2025-03-30 chore: remove guest book
2025-03-30 doc: add nginx live-reload instructions
2025-03-30 chore: update todo
2025-03-30 content: fix typo
2025-03-29 style: add ego to PGP dropdown
2025-03-29 content: fill in left section of index
2025-03-29 content: more blinkies
2025-03-29 content: init empty shrines index
2025-03-29 chore: update todo
2025-03-29 content: add more blinkies
2025-03-29 fix: update cautiondivider img path
2025-03-29 content: change guestbook to atabook
2025-03-29 content: add guestbook
2025-03-21 content: MORE blinkies MORE 😆
2025-03-21 chore: move images to own dir
2025-03-21 content: add more blinkies
2025-03-17 content: add PGP key for email
2025-03-17 content: more blinkies
2025-03-13 content: fix typo on about page
2025-03-13 content: update about page wording
2025-03-13 fix: publish script source .env
2025-03-13 content: add stub links
2025-03-13 content: add adorable dog blinky
2025-03-12 content: add page stubs
2025-03-12 content: add a template
2025-03-12 fix: use absolute path for images
2025-03-12 chore: add todo
2025-03-12 chore: ignore changelog
2025-03-12 refactor: move pages to pages/
2025-03-12 chore: mv public script
2025-03-12 content: add some blinkies
2025-03-12 content: add todo.txt
2025-03-12 refactor: move css and bg to static dir
2025-03-12 refactor: move blinkies to static folder
2025-03-12 content: just add all the blinkies
2025-03-12 chore: add public script
2025-02-26 content: update currentlies
2025-02-26 content: status.cafe widget yay!
2025-02-26 style: fix unicode on hole emoji from 🕳 to 🕳️
2025-02-26 fix: remove dead links
2025-02-26 style: fix anchor tag colour
2025-02-26 content: add writing page stub
2025-02-26 style: fix section view
2025-02-26 content: fix missing hyperlinks
2025-02-26 style: add bg image
2025-02-25 style: greyscale everything
2025-02-25 style: remove unnecessary items
2025-02-25 doc: add README
2025-02-25 fix: add missing in-progress image
2025-02-25 style: add favicon
2025-02-25 content: flesh out About page
2025-02-25 style: view sizing fixes
2025-02-24 style: add link, divider
2025-02-23 content: add blinkies, status
2025-02-23 style: fix layout
2025-02-23 init