Skip to content
View sasin91's full-sized avatar

Organizations

@IA-GHC

Block or report sasin91

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
sasin91/README.md

Jonas Hansen

Software developer in Slagelse, Denmark. I have worked with PHP and Laravel since 2015, and have helped build a ticketing agency, a video streaming platform and a recruitment platform along the way. I like designing and delivering solid, tailored solutions — and I do not mind being the one who listens to what users are actually struggling with.

Available for work — jonas.kerwin.hansen@gmail.com

Right now I am building AthletOS: a training app that prescribes the weights and records what you actually lifted next to what it asked for. Rust backend, one FreeBSD box, two jails behind Caddy.

On the side, trongate.cloud: hosting for Trongate apps on Kubernetes. You push, we deploy. Still a work in progress.

Writing

I write occasionally at sasin91.xyz, mostly about things that broke and what fixed them.

Tools

PHP · Laravel · Symfony · Go · Rust · Nuxt · React · Kubernetes · Linux · FreeBSD


This repository is the source of sasin91.xyz — a static site generated by a small Rust binary from Djot content. See docs/development.md to build it.

Developing the site

With mise, mise install sets up Rust, Node and watchexec, and these tasks cover the day to day:

mise run serve   # build, then serve ./public at http://localhost:8000
mise run dev     # the same, rebuilding and restarting on every change
mise run check   # everything CI checks

Without mise, the same thing in plain cargo:

cargo run --release                  # build into ./public
cargo run --release -- serve [port]  # build, then serve it (default port 8000)

serve is a small built-in server (src/serve.rs) that resolves URLs the way the live Caddy config does, /blog → /blog/ redirect included.

Checks, as CI runs them:

cargo fmt --check
cargo clippy -- -D warnings
cargo test
node --test js/retrieval.test.mjs   # after a build; Node 22+, nothing to install

Posts live in content/blog/, the CV in content/cv.toml, and the AI article's knowledge nodes in content/ai/ — see docs/knowledge-nodes.md.

sasin91.xyz/cv is itself the source of the downloadable cv_jonas_hansen_software_developer.pdf: the site binary writes cv_jonas_hansen_software_developer.pdf directly from the same content/cv.toml the page renders from, so the content cannot diverge even though the two layouts differ. The CV is edited in content/cv.toml, never in a PDF editor.

Popular repositories Loading

  1. laravel-interactions laravel-interactions Public

    Laravel 5 Interactions.

    PHP 2 1

  2. wow-emulator-communication wow-emulator-communication Public

    Remote API Communication package for WoW private servers

    PHP 2

  3. game-server-cloud-manager game-server-cloud-manager Public

    Inspired by Taylorotwell/laravel-cloud, this is a project to quickly deploy, monitor and manage game servers. I envisioned a bit like if Laravel Forge & OpenGamePanel had a bastard child.

    PHP 2 2

  4. Laravel-TrinityCore-Interactions Laravel-TrinityCore-Interactions Public

    Interact with a TrinityCore server through Soap.

    PHP 1 1

  5. HOC-login-api HOC-login-api Public

    Heralds of Cosmos login api

    PHP 1

  6. php-framework php-framework Public archive

    PHP 1