Compare commits

...

13 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
13 changed files with 175 additions and 10 deletions

View File

@@ -5,7 +5,7 @@ draft: false
---
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.
@@ -37,3 +37,6 @@ Notes on improvements:
- 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...
- 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

@@ -1,7 +1,7 @@
---
title: "Home Server"
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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

View File

@@ -28,3 +28,11 @@ My wife and I have been gathering abandoned toys on our morning walks for awhile
## 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.
## 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

@@ -9,7 +9,7 @@ I found myself unable to post consistent posts on X, so I did what any lazy prog
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](brick_wall.png)
![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)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

View File

@@ -4,6 +4,8 @@ date: 2023-06-02T21:12:46-07:00
draft: false
---
![tikka](/img/tikka.webp)
- Rifle: Tikka T3x Roughtech Ember in .308 win
- Scope: Leupold VX-3HD 4.5-14x40
- Limbsaver

View File

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 129 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

View File

@@ -1,14 +1,26 @@
#!/bin/bash
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
# Find all files of type PNG, JPEG, or TIFF
files=$(find $SCRIPT_DIR/../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
for file in $files; do
# Convert the file to WEBP
cwebp -resize 1500 0 $file -o "${file%.*}.webp"
output="${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
rm $file
rm "$file"
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