🕳️🔍️

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 for 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/user/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 on the right here, for details on how its made.

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