+
+
diff --git a/src/content.config.ts b/src/content.config.ts
index 87ae8d9..c29250d 100644
--- a/src/content.config.ts
+++ b/src/content.config.ts
@@ -14,7 +14,8 @@ const blog = defineCollection({
}),
});
-// Projektsider (/projekter/): én markdown-fil pr. værktøj jeg udgiver.
+// Projektsider: én markdown-fil pr. værktøj jeg udgiver. Dansk i roden
+// (/projekter/), engelsk i en/ (/en/projects/) med samme filnavn.
// Frontmatter bærer de faste links, så siden og søgeindekset kan vise dem ens.
const projekter = defineCollection({
loader: glob({ pattern: '**/*.md', base: './src/content/projekter' }),
@@ -31,6 +32,7 @@ const projekter = defineCollection({
date: z.coerce.date(), // første udgivelse
updated: z.coerce.date().optional(),
draft: z.boolean().default(false),
+ lang: z.enum(['da', 'en']).default('da'),
}),
});
diff --git a/src/content/projekter/en/ahfail.md b/src/content/projekter/en/ahfail.md
new file mode 100644
index 0000000..9daace1
--- /dev/null
+++ b/src/content/projekter/en/ahfail.md
@@ -0,0 +1,56 @@
+---
+title: "ahfail"
+description: "A screen locker for Linux and macOS. Type the wrong password and Dennis Nedry shows up to tell you \"ah ah ah, you didn't say the magic word\"."
+repo: gtk-ahfail
+sprog: Rust
+licens: AGPL-3.0-only
+platforme: [Linux (Wayland), Linux (X11), macOS]
+aur: [ahfail, ahfail-bin]
+tags: [linux, wayland, x11, macos, pam, rust]
+date: 2026-09-30
+updated: 2026-09-30
+lang: en
+---
+
+Get the password wrong and a looping animation of my own face photoshopped onto Dennis Nedry from Jurassic Park appears, while the "ah ah ah, you didn't say the magic word" clip plays. The volume goes all the way up, so whoever tried to sneak into your machine gets the full experience (`--no-max-volume` if you'd rather be discreet). Under the joke it's a real screen locker.
+
+```bash
+ahfail # lock the screen
+ahfail test # see the effect without locking
+ahfail doctor # what is this machine missing?
+```
+
+It's one program on Linux, and it works out by itself whether you run Wayland or X11. On Wayland it locks through `ext-session-lock-v1`, so it works in sway, Hyprland, niri, river, labwc and KDE Plasma 6. GNOME doesn't let other programs lock the screen, so it's out there. On X11 it does what i3lock does: full-screen windows on every monitor and a grab on keyboard and pointer, and if it can't get the grab it refuses to lock rather than show a lock screen your keystrokes go straight through.
+
+The password is checked through its own PAM service, `/etc/pam.d/ahfail`, which the package installs. It doesn't touch any other package's PAM configuration, the same way swaylock and gtklock don't. It includes `login`, so the system's `pam_faillock` policy applies, and on Arch that means three wrong passwords within fifteen minutes lock the account for ten. Worth knowing before you show it off on a Friday afternoon.
+
+A screen locker sits right in the authentication path, so a bug in it could weaken the lock in the worst case. There are no guarantees, and you install it at your own risk. The package says so too.
+
+## Install
+
+On Arch Linux, from source or prebuilt:
+
+```bash
+yay -S ahfail
+yay -S ahfail-bin
+```
+
+Run `ahfail doctor` afterwards. It tells you whether the session type is supported, whether the PAM file is in place, whether GStreamer can play the clip and whether the volume can be controlled, with the exact fix if something is missing.
+
+To lock automatically, point your idle daemon at it:
+
+```bash
+swayidle -w timeout 300 'ahfail' before-sleep 'ahfail' # Wayland
+xss-lock -- ahfail # X11
+```
+
+## macOS
+
+On a Mac the system lock screen does the locking, and the effect comes from a PAM hook installed through Homebrew:
+
+```bash
+brew tap asger-weirsoee/tap
+brew install ahfail
+```
+
+Homebrew then prints the one line to add to `/etc/pam.d/screensaverui`. That's the only manual step.
diff --git a/src/content/projekter/en/pi3-smart-workspace.md b/src/content/projekter/en/pi3-smart-workspace.md
new file mode 100644
index 0000000..983db3b
--- /dev/null
+++ b/src/content/projekter/en/pi3-smart-workspace.md
@@ -0,0 +1,48 @@
+---
+title: "pi3-smart-workspace"
+description: "A small i3 helper that makes $mod+1 the first workspace on the screen your mouse is on, instead of workspace 1 somewhere else entirely."
+repo: pi3-smart-workspace
+sprog: Python
+licens: Apache-2.0
+platforme: [Linux (i3)]
+aur: [pi3-smart-workspace]
+tags: [i3, linux, python]
+date: 2020-09-04
+updated: 2026-09-30
+lang: en
+---
+
+With several monitors in i3, workspaces are numbered globally. Press `$mod+1` and you jump to workspace 1, even if it lives on the left screen and you're working on the right one. `pi3-smart-workspace` turns that around: the key picks the N-th workspace on the screen your mouse is on. `$mod+1` is always the first workspace wherever the mouse is, and a multi-monitor setup feels a lot more coherent.
+
+It reads your running i3 config and uses three things from it: output names (`set $