Compare commits

...

16 Commits

Author SHA1 Message Date
1d50502131 another lil update
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-01-07 21:56:15 -08:00
63c4125655 frenzy
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-01-07 21:44:33 -08:00
e9cfdd0c53 small updoot
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-01-07 21:30:25 -08:00
839de7cf97 rotato chip. I should do a local deploy before committing next time
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 14:57:58 -08:00
7ef3267f26 all the dashes
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 14:54:28 -08:00
78197278c2 dash not underscore 2025-12-24 14:52:54 -08:00
04a0730bab crate pic, updated image script
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 14:50:31 -08:00
bf7200fa6d image file types
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 14:30:18 -08:00
257d6a3797 minor changes
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 14:26:54 -08:00
e494afd914 forgot perms are committed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 14:24:06 -08:00
10337f4d3d I actually want it in the root dir for consistency
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 14:23:12 -08:00
e3b4e566f7 ship script 2025-12-24 14:22:46 -08:00
89d707bd2c removed image.pngs and specified webp paths
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-12-24 13:53:34 -08:00
7b518755cb 1 replica 2025-12-24 13:50:29 -08:00
5ce46815ca tikka and script improvement 2025-12-24 13:48:24 -08:00
db98ba9757 x-poster 2025-12-24 13:31:04 -08:00
15 changed files with 203 additions and 21 deletions

View File

@@ -8,9 +8,3 @@ hugo new [folder]/[newpage].md (i.ie hugo new posts/friyay.md)
edit the file, making sure to un-draft it if desired edit the file, making sure to un-draft it if desired
./scripts/make_webp.sh ./scripts/make_webp.sh
git add, commit, and push git add, commit, and push
log on to p0
go to blog scripts directory
git pull
chmod +x update.sh
./update.sh

View File

@@ -5,7 +5,7 @@ draft: false
--- ---
Here you are: Here you are:
![bluster_pic](/img/bluster_pic.webp) ![bluster pic](/img/bluster-pic.webp)
I have six Raspberry Pi's networked together with a shared NAS. That Coral chip is mostly for manual fun for now, but expect an interactive site later. I have six Raspberry Pi's networked together with a shared NAS. That Coral chip is mostly for manual fun for now, but expect an interactive site later.
@@ -36,4 +36,7 @@ Notes on improvements:
- I had it with my gitlab and pipelines, but again I decided to not redo gitlab. some kind of interactivity needs to happen though - I had it with my gitlab and pipelines, but again I decided to not redo gitlab. some kind of interactivity needs to happen though
- family site would still be fun. some kind of app too - family site would still be fun. some kind of app too
- still a great idea, turns out email on kubernetes is not trivial at the moment... - still a great idea, turns out email on kubernetes is not trivial at the moment...
- Set up PVCs and using the NVMe volume mount - Set up PVCs and using the NVMe volume mount
--- Updates:
You are now on a beelink EQ series running Omarchy (for fun) headless. Still K3s with a bunch of additions, and now with the power of Claude I can create an entire subdomain in less than five minutes- including checked in code, images on the registry, TLS, etc. It's amazing!

View File

@@ -0,0 +1,32 @@
---
title: "Frenzy"
date: 2026-01-07T21:36:32-08:00
draft: false
---
# YOU'RE NOT WORKING HARD ENOUGH
Hardstyle2 By Fred Again (et al) has been my motto lately, and I've been pumping out a lot of work on my "spare" time as my wife studies for the last two tests of her SE exam. I've been pumping out a lot of websites, both for external clients and for fun. Here are some:
- [airt.scottyah.com](https://airt.scottyah.com) (AI Art! I have AI develop their own web based art)
- [arvit.scottyah.com](https://arvit.scottyah.com) (Potential client, just showing a friend how easy it'd be to have a website for their side business)
- [awards.scottyah.com](https://awards.scottyah.com) I got an idea to give neighborhood awards out. This was early AI and needs some love
- [scottyah.com](https://scottyah.com),[blog.scottyah.com](https://blog.scottyah.com),[scotthatlen.com](https://scotthatlen.com) this blog
- [calbo.us](https://calbo.us) Please buy a towel
- [git.scottyah.com](https://git.scottyah.com) my git server
- [harbor.scottyah.com](https://harbor.scottyah.com) my image registry
- [obsidian.scottyah.com](https://obsidian.scottyah.com) I self host an autistic note-taking app, this is the backend api
- [paragliding.scottyah.com](https://paragliding.scottyah.com) Trying to create what I want in a forecasting site for my local paragliding site
- [secretsanta.scottyah.com](https://secretsanta.scottyah.com) I made a website for my family to do secret santas on
- [admin.pearfectname.app](https://admin.pearfectname.app) The next three are the latest project for a friend/client
- [dashboard.pearfectname.app](https://dashboard.pearfectname.app)
- [pearfectname.app](https://pearfectname.app)
- [vincedemo.scottyah.com](https://vincedemo.scottyah.com) Made this to show my coworker how my infrastructure works
- [woodpecker.scottyah.com](https://woodpecker.scottyah.com) Supposed to be CI/CD but honestly it's so buggy I might use Tekton
- [wweb.scottyah.com](https://wweb.scottyah.com) My wedding website, the start of self-hosting
There are a few more that I didn't really want to include yet.
Most of my work has been focused on my actual paying client- setting up a super sick smart home system from a cool dude I met at a Cursor networking event.
I also have been doing a lot to get a baby naming app into the app store. Apple took awhile to approve my developer account and I started going out of scope, and now have to work to get it deployable haha.

View File

@@ -3,5 +3,3 @@ title: "Test"
date: 2025-12-16T22:04:51-08:00 date: 2025-12-16T22:04:51-08:00
draft: true draft: true
--- ---
Testing woodpecker

View File

@@ -1,7 +1,7 @@
--- ---
title: "Home Server" title: "Home Server"
date: 2025-12-17T15:42:08-08:00 date: 2025-12-17T15:42:08-08:00
draft: true draft: false
--- ---
So things have changed since the raspberry pi days. I got a beelink for @250 and it blows the 6 pi cluster out of the water in terms on compute and latency. I have installed k3s on it as well, but it's a bit upgraded as I have learned a lot more about kubernetes since the last go-round. So things have changed since the raspberry pi days. I got a beelink for @250 and it blows the 6 pi cluster out of the water in terms on compute and latency. I have installed k3s on it as well, but it's a bit upgraded as I have learned a lot more about kubernetes since the last go-round.

View File

@@ -28,3 +28,11 @@ My wife and I have been gathering abandoned toys on our morning walks for awhile
## Finished! ## Finished!
The box came out more lopsided than imagined, but it works great! It's been about a month and there have been multiple full cycles of toys. I'm thrilled that the community has been accepting of it, and that it hasn't been removed. The box came out more lopsided than imagined, but it works great! It's been about a month and there have been multiple full cycles of toys. I'm thrilled that the community has been accepting of it, and that it hasn't been removed.
## And Death
We ended up moving further away and went to the beach less, and the check-ins got to be more depressing, typically mostly trash and it was used more as a lost and found for kids socks. I kept putting toys in, but they would dissapear too quickly. I noticed there were usually toys I didn't add, but none would last more than a week.
One day I cam back, it was in its place but it looks like people tried to use it for their fire, but it must have burnt abysmally with all the waterproofing I did.
It was in an unsafe state, so I came by later and took it away. It was a fun experiment, but ultimately the sucky people beat out the good ones. I have no plans to make a new one here.
![burnt_crate](/img/burnt-crate.webp)

View File

@@ -0,0 +1,16 @@
---
title: "X Poster"
date: 2025-12-24T13:22:54-08:00
draft: false
---
I found myself unable to post consistent posts on X, so I did what any lazy programmer would do equipped with Claude and a home server- I automated it.
I had to spend more time getting an X developer account and API keys (selfies, gov ID scans, etc) than I spent having Claude draft up another k8s.yaml and dockerfile. I now have a configmap I try to keep full, and it posts daily at the schedule that it thought would have highest visibility. So far, nobody has liked or commented on a post so I'm still just talking to a brick wall, but now I'm doing it with \~~ t e c h n o l o g y ~~
![person speaking to a brick wall](/img/brick-wall.webp)
Follow me as I try to find my niche [https://x.com/calboDev](https://x.com/calboDev)

View File

@@ -4,10 +4,19 @@ date: 2023-06-02T21:12:46-07:00
draft: false draft: false
--- ---
![tikka](/img/tikka.webp)
## To be expanded upon soon / someday... - Rifle: Tikka T3x Roughtech Ember in .308 win
- Scope: Leupold VX-3HD 4.5-14x40
- Limbsaver
Rifle: Tikka T3x Roughtech Ember in .308 win The rifle is absolutely gorgeous, and took a bit to get since only a Beretta shop in NYC was selling it. I went to a local family FFL shop and started with "So, I've found my dream rifle but it's in New York..."
Scope: Leupold VX-3HD 4.5-14x40 They were very helpful, friendly people who guided me through the process, and the Beretta store left a nice hand-written note for me.
Limbsaver
It's an incredibly dependable, rugged, precise, and tested brand that makes rifles for the Canadian Rangers and are from Finland. This version is their lightweight one with a fluted bolt and barrel, but still stainless steel.
I got a really good upper-mid range scope to go with it (made in USA), and a Limbsaver which (when combined with the integrated muzzle brake) makes it feel more like a .22 than a .308!
Overall I am very happy with the setup, it had our hunting teacher "singing praises" about us after my brother in law, cousin, and I all got at least 2/3 shots on a 4" target at 200 yards it's first day being fired, after I bore scoped it once with one follow up adjustment shot!
Shout out to Randy at Bitterwater Outfitters in SLO for being an amazing teacher for our first boar hunt.

View File

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -22,7 +22,7 @@ spec:
selector: selector:
matchLabels: matchLabels:
app: blog app: blog
replicas: 3 replicas: 1
template: template:
metadata: metadata:
labels: labels:

View File

@@ -1,12 +1,26 @@
#!/bin/bash #!/bin/bash
# Find all files of type PNG, JPEG, or TIFF SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
files=$(find ../hugo-content/static/img/ -type f -iname "*.png" -o -iname "*.jpg" -o -iname "*.tif")
# Find all files of type PNG, JPEG, TIFF, or HEIC
files=$(find "$SCRIPT_DIR/../hugo-content/static/img/" -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.tif" -o -iname "*.tiff" -o -iname "*.heic" \))
# Loop through all the files in the directory # Loop through all the files in the directory
for file in $files; do for file in $files; do
# Convert the file to WEBP output="${file%.*}.webp"
cwebp -resize 1500 0 $file -o "${file%.*}.webp"
# Check if file is HEIC format
if [[ "$file" == *.heic ]] || [[ "$file" == *.HEIC ]]; then
# Convert HEIC to WebP using sips (built into macOS) and cwebp
temp_png="${file%.*}_temp.png"
sips -s format png "$file" --out "$temp_png" >/dev/null 2>&1
cwebp -resize 1500 0 "$temp_png" -o "$output"
rm "$temp_png"
else
# Convert other formats directly with cwebp
cwebp -resize 1500 0 "$file" -o "$output"
fi
# Delete old file # Delete old file
rm $file rm "$file"
done done

108
ship.sh Executable file
View File

@@ -0,0 +1,108 @@
#!/bin/bash
set -e
# Blog Build & Deploy Script
REGISTRY="harbor.scottyah.com"
NAMESPACE="scottyah"
IMAGE_NAME="blog"
FULL_IMAGE="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}"
# Parse flags
BUILD_ONLY=false
DEPLOY_ONLY=false
while [[ $# -gt 0 ]]; do
case $1 in
--build-only)
BUILD_ONLY=true
shift
;;
--deploy-only)
DEPLOY_ONLY=true
shift
;;
-h|--help)
echo "Usage: ./ship.sh [OPTIONS]"
echo ""
echo "Build and deploy Blog to Kubernetes"
echo ""
echo "Options:"
echo " --build-only Only build and push Docker image"
echo " --deploy-only Only deploy to Kubernetes (skip build)"
echo " -h, --help Show this help message"
echo ""
echo "Examples:"
echo " ./ship.sh # Build and deploy"
echo " ./ship.sh --build-only # Only build"
echo " ./ship.sh --deploy-only # Only deploy"
exit 0
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;;
esac
done
# BUILD PHASE
if [ "$DEPLOY_ONLY" = false ]; then
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
# Tags
TAG_TIMESTAMP="${FULL_IMAGE}:${TIMESTAMP}"
TAG_LATEST="${FULL_IMAGE}:latest"
echo "🐦 Building Blog Docker image..."
echo "Registry: ${REGISTRY}"
echo "Image: ${FULL_IMAGE}"
echo "Timestamp: ${TIMESTAMP}"
echo ""
# Build image
echo "Building Docker image..."
docker build \
--network=host \
-t "${TAG_TIMESTAMP}" \
-t "${TAG_LATEST}" \
"."
echo ""
echo "✅ Build complete!"
echo ""
echo "Tagged as:"
echo " - ${TAG_TIMESTAMP}"
echo " - ${TAG_LATEST}"
echo ""
# Push images
echo "Pushing images to registry..."
docker push "${TAG_TIMESTAMP}"
docker push "${TAG_LATEST}"
echo ""
echo "🚀 Images pushed to Harbor registry!"
echo ""
fi
# DEPLOY PHASE
if [ "$BUILD_ONLY" = false ]; then
echo "🐦 Deploying Blog to Kubernetes..."
echo ""
# Apply Kubernetes configuration
echo "Applying Kubernetes configuration..."
kubectl apply -f "k8s.yaml"
echo ""
echo "Waiting for namespace to be ready..."
kubectl wait --for=condition=Ready --timeout=10s namespace/blog 2>/dev/null || true
echo ""
echo "✅ Deployment complete!"
echo ""
fi
if [ "$BUILD_ONLY" = false ] && [ "$DEPLOY_ONLY" = false ]; then
echo "✨ Build and deployment complete!"
fi