← phanes.net

Projects

jsde.mepersonal sitePersonal site and digital identity hub.

jsde.me is my primary digital identity — a lightweight static site that serves as a single source of truth for who I am and what I work on. It links out to projects, social presence, and contact info without any tracking or third-party requests. Built with Next.js, deployed to the edge.

phanes.netthis sitePersonal project showcase. Minimal client-side JS, fully static, monospace purple.

The site you're looking at. Built with Next.js 16 App Router, React Server Components, and Tailwind CSS v4. Client-side JavaScript is limited to two animation components — the ASCII art typewriter on the home page and the twinkling star effect on the blog. Everything else is statically rendered: no database, no CMS, no tracking. Blog powered by MDX files in the repo. Projects sorted by last GitHub commit via the GitHub API with 6-hour ISR revalidation.

PeakMotomotorcycle navFree & open-source motorcycle navigation app — curvy road routing, offline maps, no tracking.

PeakMoto is a privacy-first motorcycle navigation app built with Flutter. It uses OpenStreetMap for map rendering and BRouter for motorcycle-optimised routing with adjustable curvy-road intensity. Turn-by-turn voice guidance, offline maps, and GPX import/export are built in. All compute-heavy work — routing, rendering, GPX processing — runs on-device; there is no account, no tracking, and no subscription. Touch targets are sized for gloved operation and the dark theme is designed for outdoor readability. Licensed under AGPL-3.0.

Solunsolun.pmMinimal, secure text sharing. End-to-end encrypted or fast encrypted-at-rest — ephemeral by default.

Solun has two modes. Quick pastes are AES-256-GCM encrypted at rest with a server-side key and deleted after the first read — zero effort for the sender. Secure pastes are end-to-end encrypted in the browser via the Web Crypto API; the decryption key lives only in the URL fragment and is never transmitted to the server. Both modes are burn-after-read by default. The stack is a pnpm monorepo: Next.js 16 frontend, Express + Prisma + PostgreSQL API, deployed via Docker. Available as a hosted service at solun.pm and fully self-hostable under MIT.

omarchy-kurenai-themecolor schemeDeep crimson color scheme for the Omarchy platform — Neovim, VS Code, Zed, btop, Hyprland, and more.

A cohesive dark color scheme built around deep crimson and warm amber tones, inspired by Japanese aesthetics. Ships with configurations for Neovim, VS Code, Zed, btop, Obsidian, Hyprland, and Waybar. Colors are managed via a central TOML palette and meet WCAG AA contrast requirements. Includes five matching wallpapers.

commitgen.nvimNeovim pluginNeovim plugin that generates conventional commit messages from staged changes via OpenAI.

commitgen.nvim reads your staged diff (git diff --cached) and sends it to OpenAI's chat completions API to generate a conventional commit message. The result appears in an editable floating window inside Neovim — press Enter to commit, Esc to cancel. The entire flow runs asynchronously via vim.fn.jobstart so Neovim never blocks. Supports model selection, language preference, auto-staging, and SSH commit signing with FIDO hardware keys. Built for lazy.nvim, written in pure Lua, MIT-licensed.

NyxProxyrotating IPv6 proxyHigh-performance Go proxy that assigns a fresh IPv6 address to every request from your own /64 subnet.

Every hosting provider that gives you a /64 IPv6 subnet hands you 18 quintillion addresses. NyxProxy puts them to work: a pre-populated pool of 200 IPs is kept ready, each replaced after 100 uses or 30 minutes. The result is a different exit IP per request with no coordination overhead. Single-IP proxies get rate-limited, fingerprinted, and blocked. NyxProxy makes each request look like a different user. Written in Go, MIT-licensed, ships with a one-command Debian/Ubuntu installer and a systemd unit. Typical use cases: web scraping without rate limits, multi-user API testing, and privacy-conscious browsing.

Workflowsreusable CI/CDShared GitHub Actions workflows — one source of truth for CI/CD across all projects.

A centralised collection of reusable GitHub Actions workflows. Instead of duplicating pipeline logic across every repo, projects call these workflows directly. Changes propagate everywhere at once, keeping CI/CD consistent and easy to maintain.

sequencesshmulti-server SSHCLI tool to run a command on multiple SSH servers simultaneously from a single line.

sqssh reads named server lists from ~/.config/sqssh/config and fans out a single command to every host in the list via SSH, displaying each server's output in sequence. Useful for fleet management, batch deployments, or any situation where you need the same command to run across a group of servers without reaching for a full orchestration tool.

win11-tsl12-enableRaspberry Pi PicoPico-based HID automation to apply the TLS 1.2 registry fix required for Uni-Paderborn certificates on Windows 11.

Built during my apprenticeship as a helper tool for a former employer. A Raspberry Pi Pico running CircuitPython acts as a USB HID keyboard and executes a Ducky Script payload that applies the Windows registry entry needed to enable TLS 1.2 for Uni-Paderborn user certificates. Plug in, wait half a second, done — no manual steps. A GPIO jumper puts the device into setup mode so you can edit the payload without it triggering on your own machine.

Contributions

Plunkuseplunk/plunkOpen-source email platform on AWS SES — transactional emails, campaigns, workflows, and analytics.

Open-source email platform on AWS SES — transactional emails, campaigns, workflows, and analytics.

gh/useplunk/plunk