software engineer
Wihan Uys
I build Terraform providers for Dokploy and Clerk, and I run the servers this site lives on. Payments infrastructure at work; the rest of the time it is a NixOS machine, a Dokploy box, and a Factorio server, all declared in code from DNS to deploy.
Projects
all projects →- terraform-provider-dokploy
Terraform provider for the Dokploy PaaS: projects, environments, services with Docker Swarm settings, databases, domains, backups, servers, git providers, notifications, users, and API keys.
Gov1.9.1maintained
- terraform-provider-clerk
Terraform provider for Clerk. JWT templates, restrictions, API keys, machines, domains, webhooks, organizations, SSO.
Gov0.7.0maintained
- factorio-server
Headless Factorio behind Factorio Server Manager, deployed as a Dokploy compose stack from Terraform.
Dockeractive
- weather-app
An animated weather station. SvelteKit 2, Svelte 5 runes, GSAP; the server keeps the OpenWeather key private.
Svelteactive
On the registry
provider docs →- vanillauys/dokployv1.9.1registry.terraform.iopushed 2026-10-15source ↗
- vanillauys/clerkv0.7.0registry.terraform.iopushed 2026-08-30source ↗
Writing
all posts →Runs on
- site
- Astro on Bun, server rendered, in one container
- deploy
- Dokploy on a VPS; the project, domains, and DNS are Terraform
- edge
- Cloudflare: DNS, TLS, and a one-day page cache purged on deploy
- machine
- NixOS flake ("ripple"), zsh + starship, JetBrains and nvim
- secrets
- 1Password service accounts through devenv; no .env files
The docs section renders both provider references. The configs and games pages serve the live dotfiles and server files as plain text. Every project, post, and docs page has a markdown twin: append .md to its URL.