Compare commits

...

11 Commits

Author SHA1 Message Date
Vincent Verbruggen
6c9371946e vault backup: 2026-03-16 17:20:05 2026-03-16 17:20:05 +01:00
Vincent Verbruggen
4968005873 vault backup: 2026-03-16 08:53:36 2026-03-16 08:53:37 +01:00
Vincent Verbruggen
756ce27740 vault backup: 2026-03-15 20:37:34 2026-03-15 20:37:34 +01:00
Jane
d95434202f Add lightweight watcher feature idea to backlog 2026-03-14 18:26:11 +01:00
9099659f84 Last Sync: 2026-03-14 15:15 (Mobile) 2026-03-14 15:15:09 +01:00
923c1a63f9 Last Sync: 2026-03-14 01:19 (Mobile) 2026-03-14 01:19:06 +01:00
Jane
caca5624a3 Add typing indicator fix to backlog 2026-03-13 21:51:05 +01:00
Jane
f22f9e02d5 Add backlog for pending tasks 2026-03-13 21:50:05 +01:00
Jane
179f648d5d Rewrite knee entry in third person 2026-03-13 21:24:37 +01:00
680836b6ad Last Sync: 2026-03-13 21:19 (Mobile) 2026-03-13 21:19:12 +01:00
Jane
f98d528f1c Add knee pain entry — March 2026 (overuse) 2026-03-13 21:12:43 +01:00
13 changed files with 141 additions and 18 deletions

View File

@@ -4,4 +4,5 @@ https://github.com/malikad778/Laravel-migration-guard
https://www.calebleak.com/posts/dog-game/
https://blog.sshh.io/p/how-i-use-every-claude-code-feature
https://blog.sshh.io/p/how-i-use-every-claude-code-feature
https://pudding.cool/2026/02/happy-map/

3
2026-02-26.md Normal file
View File

@@ -0,0 +1,3 @@
https://skills.laravel.cloud/skills/laravel-tdd
https://github.com/harris21/laravel-fuse

1
2026-02-27.md Normal file
View File

@@ -0,0 +1 @@
https://406.fail/

4
2026-03-16.md Normal file
View File

@@ -0,0 +1,4 @@
https://laravel-news.com/the-hidden-cost-of-mysql-defaults-in-laravel-apps
https://releem.com/blog/web-applications-performance#rec528181090
https://releem.com/pricing

9
Backlog.md Normal file
View File

@@ -0,0 +1,9 @@
# Backlog
Tasks and to-dos that need attention when time allows.
---
- [ ] Switch Jane to Opus 4.6 (claude-opus-4-6) in config
- [ ] Fix typing indicator to keep running during multi-message responses (currently stops after first message)
- [ ] Lightweight watcher system: let Jane write small code snippets (curl + diff) that run cheaply on a cron. Only wake the full AI model if the check returns something interesting. Two-tier: cheap watcher → full agent on trigger.

View File

View File

@@ -1,2 +1,6 @@
On the first of May, I fell while climbing over something and slipping, landing with my full weight just below my knee. Initially, it was painful but not more than you would expect, considering the circumstances. The swelling was less than I expected. I even finished my run and when on a run on the 5th.
However, the pain didn't disappear, so I stopped running and playing padel. I did continue with my strength training, although at a much lower weight when training my legs. On the 23rd of June (after about 7 weeks), I asked my doctor about it, and he told me to rest and take a non-steroidal anti-inflammatory drug for at least the next two weeks.
However, the pain didn't disappear, so I stopped running and playing padel. I did continue with my strength training, although at a much lower weight when training my legs. On the 23rd of June (after about 7 weeks), I asked my doctor about it, and he told me to rest and take a non-steroidal anti-inflammatory drug for at least the next two weeks.
---
Around Wednesday 11 March 2026, both knees started hurting again. On 13 March, a run was cut short after about 100 meters due to persistent aching. Likely overuse, unrelated to the previous injury.

View File

@@ -0,0 +1 @@
[New management asked me to use a no-code platform instead of our normal workflow to increase our speed : r/ExperiencedDevs](https://www.reddit.com/r/ExperiencedDevs/comments/1rcy0lr/new_management_asked_me_to_use_a_nocode_platform/)

View File

@@ -0,0 +1 @@
[New management asked me to use a no-code platform instead of our normal workflow to increase our speed : r/ExperiencedDevs](https://www.reddit.com/r/ExperiencedDevs/comments/1rcy0lr/new_management_asked_me_to_use_a_nocode_platform/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

View File

@@ -115,7 +115,7 @@
<circle cx="40" cy="1675" r="30" fill="none" stroke="#4a90d9" stroke-width="7" />
<circle cx="40" cy="1675" r="10" fill="#4a90d9" />
<!-- Drain -->
<circle cx="425" cy="875" r="25" fill="none" stroke="#999" stroke-width="5" />
<!-- <circle cx="425" cy="875" r="25" fill="none" stroke="#999" stroke-width="5" /> -->
<g transform="translate(425, 1675) scale(1,-1)">
<text text-anchor="middle" dominant-baseline="central" font-size="45" fill="#666">Bath</text>
</g>
@@ -127,7 +127,8 @@
<rect x="25" y="620" width="120" height="110" rx="8" fill="#aaa" fill-opacity="0.2"
stroke="#999" stroke-width="4" stroke-dasharray="10,6" />
<g transform="translate(200, 675) scale(1,-1)">
<text text-anchor="start" dominant-baseline="central" font-size="30" fill="#999">TISKEN baskets</text>
<text text-anchor="start" dominant-baseline="central" font-size="30" fill="#999">TISKEN
baskets</text>
</g>
<!-- Shower: nook, x=1500-2500, y=1600-2600 -->
@@ -137,9 +138,9 @@
<circle cx="2475" cy="2100" r="60" fill="none" stroke="#4a90d9" stroke-width="7" />
<circle cx="2475" cy="2100" r="20" fill="#4a90d9" />
<!-- Drain -->
<circle cx="2000" cy="2100" r="35" fill="none" stroke="#999" stroke-width="5" />
<line x1="1980" y1="2100" x2="2020" y2="2100" stroke="#999" stroke-width="5" />
<line x1="2000" y1="2080" x2="2000" y2="2120" stroke="#999" stroke-width="5" />
<!-- <circle cx="2000" cy="2100" r="35" fill="none" stroke="#999" stroke-width="5" /> -->
<!-- <line x1="1980" y1="2100" x2="2020" y2="2100" stroke="#999" stroke-width="5" /> -->
<!-- <line x1="2000" y1="2080" x2="2000" y2="2120" stroke="#999" stroke-width="5" /> -->
<g transform="translate(2000, 2200) scale(1,-1)">
<text text-anchor="middle" dominant-baseline="central" font-size="45" fill="#4a90d9">Shower</text>
</g>
@@ -163,30 +164,35 @@
</g>
<!-- Mirror light: 560mm, 60mm from wall E, on wall F above sink -->
<rect x="25" y="60" width="80" height="560" rx="10" fill="none" stroke="#f5a623" stroke-width="5"/>
<rect x="25" y="60" width="80" height="560" rx="10" fill="none" stroke="#f5a623"
stroke-width="5" />
<g transform="translate(160, 340) scale(1,-1)">
<text text-anchor="start" dominant-baseline="central" font-size="30" fill="#f5a623">Mirror 560mm</text>
<text text-anchor="start" dominant-baseline="central" font-size="30" fill="#f5a623">Mirror
560mm</text>
</g>
<!-- Shelf: wall A, 800mm long, 250mm deep, 500mm from wall F -->
<rect x="500" y="calc(2600 - 250)" width="800" height="250" fill="#c8b896" fill-opacity="0.3"
stroke="#999" stroke-width="5" />
<g transform="translate(900, 2475) scale(1,-1)">
<text text-anchor="middle" dominant-baseline="central" font-size="35" fill="#666">Shelf 800x250</text>
<text text-anchor="middle" dominant-baseline="central" font-size="35" fill="#666">Shelf
800x250</text>
</g>
<!-- Ceiling light: 1100 from wall F, 700 from wall A → (1100, 2600-700) = (1100, 1900), r=210 -->
<circle cx="1100" cy="1900" r="210" fill="none" stroke="#f5a623" stroke-width="6"/>
<line x1="1070" y1="1900" x2="1130" y2="1900" stroke="#f5a623" stroke-width="4"/>
<line x1="1100" y1="1870" x2="1100" y2="1930" stroke="#f5a623" stroke-width="4"/>
<circle cx="1100" cy="1900" r="210" fill="none" stroke="#f5a623" stroke-width="6" />
<line x1="1070" y1="1900" x2="1130" y2="1900" stroke="#f5a623" stroke-width="4" />
<line x1="1100" y1="1870" x2="1100" y2="1930" stroke="#f5a623" stroke-width="4" />
<g transform="translate(1100, 1830) scale(1,-1)">
<text text-anchor="middle" dominant-baseline="central" font-size="35" fill="#f5a623">Light (420mm)</text>
<text text-anchor="middle" dominant-baseline="central" font-size="35" fill="#f5a623">Light
(420mm)</text>
</g>
<!-- Vent: on wall D, 200mm wide, 750mm from wall E -->
<rect x="1400" y="750" width="100" height="200" fill="none" stroke="#888" stroke-width="5" stroke-dasharray="15,8"/>
<line x1="1400" y1="750" x2="1500" y2="950" stroke="#888" stroke-width="3"/>
<line x1="1500" y1="750" x2="1400" y2="950" stroke="#888" stroke-width="3"/>
<rect x="1400" y="750" width="100" height="200" fill="none" stroke="#888" stroke-width="5"
stroke-dasharray="15,8" />
<line x1="1400" y1="750" x2="1500" y2="950" stroke="#888" stroke-width="3" />
<line x1="1500" y1="750" x2="1400" y2="950" stroke="#888" stroke-width="3" />
<g transform="translate(1350, 850) scale(1,-1)">
<text text-anchor="end" dominant-baseline="central" font-size="35" fill="#888">Vent</text>
</g>
@@ -252,7 +258,8 @@
<text x="100" y="315" font-size="40" fill="#555">Door</text>
<circle cx="40" cy="360" r="18" fill="none" stroke="#f5a623" stroke-width="4" />
<text x="100" y="375" font-size="40" fill="#555">Light</text>
<rect x="15" y="405" width="50" height="50" fill="none" stroke="#888" stroke-width="3" stroke-dasharray="8,5" />
<rect x="15" y="405" width="50" height="50" fill="none" stroke="#888" stroke-width="3"
stroke-dasharray="8,5" />
<line x1="15" y1="405" x2="65" y2="455" stroke="#888" stroke-width="2" />
<line x1="65" y1="405" x2="15" y2="455" stroke="#888" stroke-width="2" />
<text x="100" y="440" font-size="40" fill="#555">Vent</text>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,91 @@
---
created: 2026-03-15
updated: 2026-03-15
status: planned
---
# Migration: TrueNAS to Ubuntu + Coolify
## Motivation
- TrueNAS is storage-first OS; not ideal for general-purpose app hosting and experimentation
- Server idles 99% of the time — underutilized capacity
- Coolify provides one-click app installs and git-push deploys (useful as a Laravel developer)
- Current setup makes experimenting with new apps slow (e.g., OpenClaw took 3-4 hours)
## Current Setup
- **OS:** TrueNAS Scale (Debian-based) on NVMe SSD (`nvme0n1`)
- **Storage:** ZFS stripe pool `tank` on two separate disks (~29T total, ~14.8T used)
- **Services:** Traefik, Gitea, Servarr stack (Gluetun/ProtonVPN, qBittorrent, Sonarr, Radarr, Lidarr, Prowlarr, Bazarr, Recyclarr), CrowdSec, Dozzle, Watchtower
- **Paths:** Stacks at `/mnt/tank/stacks/`, configs at `/mnt/tank/configs/`, media at `/mnt/tank/media/`
## Target Setup
- **OS:** Ubuntu Server on NVMe SSD
- **Storage:** Same ZFS stripe pool `tank`, imported as-is
- **Management:** Coolify for app deployment and management
- **Services:** Same as before, plus easy deployment of new apps and Laravel projects
## Migration Plan
### Before Wiping TrueNAS
1. **Document network config** — static IP, DNS settings, hostname, router port forwards
2. **Back up compose files and configs** — copy `/mnt/tank/stacks/` and `/mnt/tank/configs/` to USB stick or laptop (they're on the ZFS pool and will survive, but be safe)
3. **Export the ZFS pool cleanly:**
```bash
zpool export tank
```
4. **Note disk identifiers** for the pool (already known from `zpool status`)
### Install Ubuntu
5. **Install Ubuntu Server** on the NVMe SSD (wipes TrueNAS)
6. **Set up networking** — replicate static IP, hostname, DNS
### Restore Storage
7. **Install ZFS support:**
```bash
sudo apt install zfsutils-linux
```
8. **Import the pool** at the same mount point:
```bash
sudo zpool import -d /dev/disk/by-id tank
```
Pool should appear at `/tank` — if paths need to match old config, set the mountpoint:
```bash
sudo zfs set mountpoint=/mnt/tank tank
```
9. **Verify data integrity:**
```bash
zpool status tank
zpool scrub tank
```
### Install Coolify
10. **Install Coolify** (one-liner from their docs)
11. **Decide on reverse proxy strategy:**
- Option A: Use Coolify's built-in Traefik — simplest, let Coolify manage SSL and routing
- Option B: Keep existing Traefik + CrowdSec config — more control, but manage it outside Coolify
- Do NOT run both on port 443 simultaneously
12. **Re-deploy services** via Coolify using existing Docker Compose files from `/mnt/tank/stacks/`
### Post-Migration
13. **Verify Servarr stack** — confirm VPN routing through Gluetun works
14. **Verify Gitea** — confirm repos are accessible
15. **Set up disk monitoring:**
```bash
sudo apt install smartmontools
```
16. **Set up ZFS scrub cron** (Ubuntu may set this up automatically, verify)
17. **Test deploying a Laravel project** via git push to confirm Coolify workflow
## Gotchas
- **Mount point must match** — Docker Compose files reference `/mnt/tank/...` paths
- **Coolify has its own Traefik** — conflicts with existing Traefik if both claim port 443
- **ZFS pool must be exported cleanly** before wiping TrueNAS, otherwise force-import is needed
- **Servarr stack VPN routing** through Gluetun may need network config adjustments in Coolify's Docker environment

View File

@@ -0,0 +1 @@
[Tomorrow I have a 1:1, I'm burnt and I would like to know any way to drive an actual positive conversation. : r/ExperiencedDevs](https://www.reddit.com/r/ExperiencedDevs/comments/1rox7pg/tomorrow_i_have_a_11_im_burnt_and_i_would_like_to/)