[ ->fletcher_holt█ ]
> ▌
#*****++#%
#**++===;;=+%
***++==;;;;;=*#
#**+++++==;;;=++##
*******++=;;;=++*##
*****#**+=;:;;=++++++ .@@@@@@.
*++*##***+=;:::;+*+++++++@@@@@@@@@@
+=+###**++=::::+%%++++++@@@@@@@;;@@ *****#**#%
+==###***+=;:,+%@%++++++@@@@@@@@@@@++++ ******+++++**#%
==+###**+=;::*%%@++++++@@@@@@@@@@@++++++++% ++**++++==++=+++*%
==*#**+==;;;+*#%+++++++:@@@@@@@@:++++++++###% ***+++=======+++++++*
+***+==;;=;=+*++++++++ :@@@@: +++++++++####***+====+======++++++*+*
++==;;===+++++++++++**********+++++###########++++++=====+++*****#
:===+++++++*+++***********++++#@@@@@@@@@@#++++++++++++****###
+;=++++++++++++**********++++@@::@@@@@@@@++++++++*****####%
=;=++++++++=+++**********++++@@@@@@@@@@@#++++++****######%
=++++++++=+++***********+++++#@@@@@@@@#+++++++######%#%
++++++++==++++**********++++++#######+++++++++######%
**+++++++++++++*****************+=;;;===+++*#####**#
+++******+++++++****************++*+==;=+++++==+**
+=+++******+++++*****************+++++++++*+
===++*****+++++**:==:#***********++++++++**
===+++*****++++*=@@@@=#***********++++****+
;;;=++*****+=+*@@@@@@@@*************++++*+
;:,,;+***++=+**@@@@@@@@#***++********++++
=:,.:=+*++==+**#:@@@@:;;**++++******++++
+;:,.:=++=;=+*#,,,@@ @@,,*++********+++
+=:::,,:;;;;=+*#,,,@@ @@,,+********++++
==;:::,,,,:::=+**,,=,==,=,,******+++++++
+=;;;:::::::,,:;=+*#;==++=;*****+===++++
+=;:::::::;:,..:+;==+++**++***+=;::;===++
===;:,,,:::==,...++++==*#+:;;==;::;;===+++*
++;==;:,,,,:=;,,.:**#*#%@@=:;;;===++++++++***
=====;:,,.,:;;;:,;=**#@@%+;=++++**+++**++*****
=======;,,.,::;;;::::;=+*+=+++++++++++++********
====+++=;,,,,::::::;;===;==++++++++++*************
====++++=;,,::;;;=====++===++++++++*********+*****+
;;=**++++=======+++++++++==+++++**+******++++++***
;;;=++++++++++++++++++++++=+++++****+****=;==+*****
=;::::;=++*+*****++++++++++++++++***++**++=.:+******************
;;:::::;;=++***###**+=+++++++++++**+++=++=;;+++*****#############*************##*
;::::::::;;=+***#%%%#*+=+++++++++++=++===++*+****#**#*********************++*****
;;::::::::::;=++***###%#*++=+++++++=;;=+***********+**++======;;;;;;;======;=
;:::::::::,,::;++***##%%%#*++++++;;;+************+++==
;:::::::::,,,,:=****####%%#+++=;,;+************+++=
:,,,,:::::::,:;****#####%#*+=:,;+***********+++=;
:,,,,,::::::,,:+*****######=,.;+***++******++++;
::,,,,:::::,,,,;+*****##*#*:..;++**+**++**+++++=
:::,,,:::::,,,,,;+******#+;;:,,:;=+==+++*++++++;
:::,,:::::::,,,,,;===+==;===;::,:=;;=+**++++++=
:::,,::::::::::::::;;;;;=====+=;====++*****+**=
;:::,,:::::;;;;;============+++++===+++********
;;:::,,,::;;;;;;;============+===++==+++++++***+
====;;:::,,,::;;;;;;;;;============+=====++++++**++=
++++**++=;=;;;,,,::;;;;;;;;;;;=========++=;==+++++=++++++
+**+**********+++====;:;:,::;;;;;;;;;;;===============+==;;+++++++++
;=+++**************++====:::::,::;;;;;;;;;;;;=====;=====;;:::=+==+++++*+++
;===++****#******++++=;;;;,..,,,,:::;;;;;:::;;;;;===;;;: ====+++*******+=
:;+*+*******+**++===; ...,,,::::::::::::: :===*+=+**#******+
:;==;=+****+++== ,:=+*+:=****+++**#*
,:=++=== ,;+**,;=*##*;
:+##= ;=+++
,+++
guest@fholt ~ % fetch ───────────────────────── name fletcher holt role developer / graphic designer base north west, england langs swift · typescript · python · c ships websites, macos apps, tools email [email protected] github fletcherholt discord _rokor cv read / print status building you first visit
#projects
formatted as man pages. one shipped, one launching soon, one i cannot talk about. bugs sections are honest.
frisk(1) — security scanner for any public github repo
SYNOPSIS
friskit.dev/<owner>/<repo> — or swap github.com for friskit.dev in any repo url
DESCRIPTION
Free, no-login scan of a repository before you clone it: leaked secrets, malware, malicious packages, typosquats, vulnerable dependencies via OSV and bad binaries via VirusTotal. Paste a repo url, read the report.
DESIGN
The URL trick came before the scanner. Swap github.com for friskit.dev and you are already scanning; I had the way in working before I had anything to show once you got there.
BUILT WITH
TypeScript
BUGS
Some college networks MITM it. That is the network's bug, not mine.
SEE ALSO
kryla-culture(7) — editorial site for a ukrainian community art organisation
SYNOPSIS
krylaculture.co.uk (coming-soon page live, in english and ukrainian)
DESCRIPTION
Designed and built end to end for Kryla Culture CIC, a Ukrainian community art organisation in the North West of England: a bespoke editorial layout, bilingual throughout, with a self-hosted editor so the team run the site themselves without touching code.
DESIGN
The editor is the real product. A small organisation cannot ring a developer every time it wants to change a sentence, so the CMS is theirs to run: self-hosted, with no subscription tying them to me.
BUILT WITH
Astro
BUGS
None I will admit to before launch.
SEE ALSO
████████(1) — ██████ █████████ ████
SYNOPSIS
under nda
DESCRIPTION
There is a project here. It is █████████ ██ █ ██████████ and it involves ████ ███████████ █████, which is frankly the best part. More when the paperwork says so.
BUILT WITH
██████████
BUGS
Disclosing them would be one.
SEE ALSO
Nothing. You saw nothing.
#more
~/more ├── album-collections album folders inside spotify ├── spicetify-playlist-undo undo for spotify playlist edits └── morphe-patches patches for morphe.software
#files
this machine has files. some of them are for you.
~/.plan — what i'm on right now
last update: 2026-07-09 current: this site, and a project i cannot talk about launching: krylaculture.co.uk always: frisk stays free the rat is fed. the grain is calibrated. back to work.
/var/log/site.log — this site's own history
2026-07-09 07:48 first boot. grid, man pages, boot rom 2026-07-09 08:01 restyled: iosevka, hashboxes, brackets 2026-07-09 08:15 field live: wake, ripples, ascii donut 2026-07-09 08:26 linux cursors drawn, then replaced 2026-07-09 08:31 with the real desktop set instead 2026-07-09 08:32 tux moved in 2026-07-09 08:39 tux evicted. the rat moved in 2026-07-09 08:54 rat rebuilt from a scan of the clay 2026-07-09 09:04 rat given his proper eyes 2026-07-09 09:07 rat given his proper mouth 2026-07-09 --:-- rat briefly given legs. revoked. 2026-07-09 --:-- he stays on the card now. calmer.
~/projects/frisk/notes.txt — why frisk exists
you should not need an account to find out whether a repo will hurt you. that was the whole reason i built it. the url trick (swap github.com for friskit.dev) came before the scanner did. i had the way in before i had anything worth showing once you were through it.
~/.secret — hm
you opened the dotfile. of course you did. achievement unlocked: nosy (the good kind) the konami code changes the phosphor. the console has a message in it. the source has a drawing at the top. you're one for three at best. off you go.
#about
I'm a developer and a graphic designer, both, on purpose. Everything above was designed and built by one person at one desk, which is why it hangs together.
I like small computers, terminals, and interfaces that have obviously been thought about. I dislike templates. This site runs on one typeface, one accent colour and no framework. Not much to it, but I chose all of it.
Right now: this site, and something I can't talk about yet.
#contact
contact
├── email [email protected]
├── github fletcherholt
└── discord _rokor
Set in Iosevka. Everything sits on a character grid; the texture is a single SVG noise filter. It's one HTML file, one stylesheet and one script, with no framework and no build step. There's a print stylesheet too, in case you ever print it.
last built 2026-07-09 · 60kb of code · works without javascript
guest@fholt ~ % logout
connection to fholt closed.