Skip to main content

Projects

·510 words·3 mins·
Table of Contents

Most of what I have built belongs to somebody else. These are the ones that do not — small tools written to scratch my own itch, kept public in case the itch was not only mine.

They are all works in progress, and none of them are asking to be depended on. Have a look around anyway; issues and pull requests are welcome.

Repositories
#

org-roam-to-obsidian

Points at an org-roam vault and hands back notes Obsidian can open. ID links become wikilinks, org properties become YAML front matter, source blocks become fenced code, and the org-mode scaffolding is dropped on the way through. Standard library only, so there is nothing to install before you run it.
python3 convert.py --help
usage: convert.py [-h] [-i INPUT] [-o OUTPUT] [-p PROPERTIES [PROPERTIES ...]]
                  [--no-created] [--created-property CREATED_PROPERTY]

Convert org-roam files to Obsidian markdown format

options:
  -h, --help            show this help message and exit
  -i, --input INPUT     Input directory containing org-roam files (default:
                        ~/Documents/slip-box)
  -o, --output OUTPUT   Output directory for markdown files (default:
                        ./output)
  -p, --properties PROPERTIES [PROPERTIES ...]
                        Org-mode properties to extract (e.g., filetags
                        roam_refs)
  --no-created          Disable adding created timestamp from filename
  --created-property CREATED_PROPERTY
                        Use a specific org-mode property for created timestamp
                        instead of filename

PythonGPL-3.0

gwttr

A small command-line weather client for wttr.in. The client is a proof of concept and stays that way on purpose — the point was somewhere to hang a real Go toolchain, so it comes with tests, coverage reporting and a published module.
./gwttr
Weather report: honolulu

      \   /     Clear
       .-.      26 °C
    ― (   ) ―    23 km/h
       `-’      10 km
      /   \     0.0 mm

GoGPL-3.0

washing-instructions

Turns a CSV of laundry piles into two PDFs — one tall page for your phone at the machine, one A4 sheet to pin beside it. Every card is drawn for your appliances: you describe the washing machine and iron once in JSON, and each pile then shows the programme dial with the pointer where you turn it, the temperature and spin, which buttons to press, and the iron’s thermostat ring. Fascia labels are never translated — if the dial says Fijn/Zijde, so does the card.
bun run generate --help
Usage: bun run generate [csv] [--out <dir>] [--machine <file>]

  csv               instruction CSV to read (default: data/washing-instructions.csv,
                    falling back to the committed .dist)
  --out <dir>       where the PDFs go (default: out)
  --machine <file>  the appliances to draw (default: data/machine.json,
                    falling back to the committed .dist)

TypeScriptGPL-3.0

form-handler

Turns a contact form submission into an email, which is the whole job. It exists because a static site cannot open an SMTP connection and the mail for these domains is self-hosted, so routing the form through a third party was the alternative. One instance serves any number of forms across any number of domains, each with its own allowed origins, so one site cannot post to another’s form.
form-handler -help
Usage of ./form-handler:
  -healthcheck
    	probe the local /healthz and exit
  -version
    	print the version and exit

GoGPL-3.0