Compare commits
16 Commits
05f7a691d9
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 1d50502131 | |||
| 63c4125655 | |||
| e9cfdd0c53 | |||
| 839de7cf97 | |||
| 7ef3267f26 | |||
| 78197278c2 | |||
| 04a0730bab | |||
| bf7200fa6d | |||
| 257d6a3797 | |||
| e494afd914 | |||
| 10337f4d3d | |||
| e3b4e566f7 | |||
| 89d707bd2c | |||
| 7b518755cb | |||
| 5ce46815ca | |||
| db98ba9757 |
@@ -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
|
|
||||||
@@ -5,7 +5,7 @@ draft: false
|
|||||||
---
|
---
|
||||||
|
|
||||||
Here you are:
|
Here you are:
|
||||||

|

|
||||||
|
|
||||||
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!
|
||||||
32
hugo-content/content/posts/frenzy.md
Normal file
32
hugo-content/content/posts/frenzy.md
Normal 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.
|
||||||
@@ -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
|
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|

|
||||||
16
hugo-content/content/projects/x-poster.md
Normal file
16
hugo-content/content/projects/x-poster.md
Normal 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 ~~
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
Follow me as I try to find my niche [https://x.com/calboDev](https://x.com/calboDev)
|
||||||
|
|
||||||
@@ -4,10 +4,19 @@ date: 2023-06-02T21:12:46-07:00
|
|||||||
draft: false
|
draft: false
|
||||||
---
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## 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.
|
||||||
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
BIN
hugo-content/static/img/brick-wall.webp
Normal file
BIN
hugo-content/static/img/brick-wall.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
BIN
hugo-content/static/img/burnt-crate.webp
Normal file
BIN
hugo-content/static/img/burnt-crate.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 417 KiB |
BIN
hugo-content/static/img/tikka.webp
Normal file
BIN
hugo-content/static/img/tikka.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
2
k8s.yaml
2
k8s.yaml
@@ -22,7 +22,7 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: blog
|
app: blog
|
||||||
replicas: 3
|
replicas: 1
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
|
|||||||
@@ -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
108
ship.sh
Executable 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
|
||||||
Reference in New Issue
Block a user