diff --git a/assets/sass/style.scss b/assets/sass/style.scss index 6cc8b0d..06338fa 100644 --- a/assets/sass/style.scss +++ b/assets/sass/style.scss @@ -801,28 +801,6 @@ body { pointer-events: none; } -/* Cables on desk - now using SVG for curves */ -.desk-cables { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - pointer-events: none; - z-index: 7; -} - -.cable-svg { - position: absolute; - bottom: 20%; - z-index: 4; - pointer-events: none; -} - -.cable-svg svg { - filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.5)); -} - /* Secondary monitors on desk */ /* Secondary CRT monitors - positioned relative to main monitor */ .secondary-screen { @@ -833,11 +811,6 @@ body { text-decoration: none !important; } -/* Wall-mounted CRT 1 - upper left relative to main */ - -/* Wall-mounted CRT 2 - upper right, larger, closely stacked */ - -/* Wall-mounted CRT 4 - lower left relative to main */ /* Desk-mounted CRT - on desk left side */ .desk-monitor { @@ -896,54 +869,6 @@ body { animation: pulse 2s ease-in-out infinite; } -/* Small equipment on desk */ -.desk-equipment { - position: absolute; - bottom: 10%; - background: linear-gradient(145deg, #4a4a4a 0%, #2a2a2a 100%); - box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.6); - z-index: 8; -} - -.modem { - right: 25%; - width: 35px; - height: 12px; -} - -.modem::after { - content: ""; - position: absolute; - top: 50%; - right: 5px; - transform: translateY(-50%); - width: 2px; - height: 2px; - background: #0f0; - border-radius: 50%; - box-shadow: 0 0 4px #0f0; - animation: pulse 1s ease-in-out infinite; -} - -.power-strip { - left: 35%; - width: 50px; - height: 8px; - background: linear-gradient(145deg, #1a1a1a 0%, #0a0a0a 100%); -} - -.power-strip::before { - content: ""; - position: absolute; - top: 50%; - left: 10px; - transform: translateY(-50%); - width: 3px; - height: 3px; - background: #f00; - border-radius: 50%; - box-shadow: 0 0 4px #f00; -} .monitor-stand-small { position: absolute; bottom: -20px; @@ -1099,53 +1024,6 @@ body { } } -/* Widgets and gadgets */ -.widget { - position: absolute; - bottom: 8%; - border-radius: 2px; - z-index: 6; -} - -.router { - left: 25%; - width: 170px; - height: 50px; - background: linear-gradient(180deg, #2a2a2a 0%, #1a1a1a 100%); - border: 1px solid #333; - box-shadow: - 0 2px 8px rgba(0, 0, 0, 0.5), - inset 0 1px 2px rgba(255, 255, 255, 0.1); -} - -.router::before { - content: ""; - position: absolute; - top: 50%; - left: 10px; - transform: translateY(-50%); - width: 4px; - height: 4px; - background: #0f0; - border-radius: 50%; - box-shadow: 0 0 5px #0f0; - animation: blink-fast 1s infinite; -} - -.router::after { - content: ""; - position: absolute; - top: 50%; - left: 20px; - transform: translateY(-50%); - width: 4px; - height: 4px; - background: #ff0; - border-radius: 50%; - box-shadow: 0 0 5px #ff0; - animation: blink-fast 1.5s infinite; -} - @keyframes blink-fast { 0%, 100% { @@ -1156,30 +1034,7 @@ body { } } -.hard-drive { - left: 30%; - bottom: 20%; - width: 55px; - height: 35px; - background: linear-gradient(180deg, #3a3a3a 0%, #2a2a2a 100%); - border: 1px solid #444; - box-shadow: - 0 2px 8px rgba(0, 0, 0, 0.5), - inset 0 1px 2px rgba(255, 255, 255, 0.1); -} -.hard-drive::before { - content: ""; - position: absolute; - top: 8px; - right: 8px; - width: 3px; - height: 3px; - background: #f00; - border-radius: 50%; - box-shadow: 0 0 5px #f00; - animation: pulse-slow 2s infinite; -} @keyframes pulse-slow { 0%, diff --git a/content/blog/2026-01-02-week-2-new-year/index.md b/content/blog/2026-01-02-week-2-new-year/index.md index ab09fe0..ccbd10d 100644 --- a/content/blog/2026-01-02-week-2-new-year/index.md +++ b/content/blog/2026-01-02-week-2-new-year/index.md @@ -15,7 +15,21 @@ draft: false ## Links I Found Interesting -- [name](https://url) - desc +- [POSSE](https://indieweb.org/POSSE) - I have killed off pretty much all social media, but I might look into posting more on Bluesky or setting up a Mastodon again, and this would be something to keep in mind. + +## Weekly Listening Stats + +**Total Tracks:** 231 + +**Top 5 Artists:** + +- [Lazerhawk](https://www.last.fm/music/Lazerhawk) - 14 plays +- [System of a Down](https://www.last.fm/music/System+of+a+Down) - 14 plays +- [Mystery Skulls](https://www.last.fm/music/Mystery+Skulls) - 8 plays +- [Carpenter Brut](https://www.last.fm/music/Carpenter+Brut) - 7 plays +- [Gunship](https://www.last.fm/music/Gunship) - 7 plays + +_Note: Not all my devices scrobble, so this is just what I have listened to at a computer._ ## Next Week diff --git a/lastfm-week.sh b/lastfm-week.sh new file mode 100755 index 0000000..a4fb1f5 --- /dev/null +++ b/lastfm-week.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# Last.fm Weekly Stats Script +# Usage: ./lastfm-weekly.sh + +# Load environment variables from .env file +if [ -f .env ]; then + export $(cat .env | grep -v '^#' | xargs) +else + echo "Error: .env file not found" + exit 1 +fi + +# Check required variables +if [ -z "$LASTFM_API_KEY" ] || [ -z "$LASTFM_USERNAME" ]; then + echo "Error: LASTFM_API_KEY and LASTFM_USERNAME must be set in .env file" + exit 1 +fi + +API_BASE="http://ws.audioscrobbler.com/2.0/" + +# Get current Unix timestamp +NOW=$(date +%s) +# Get timestamp from 7 days ago +WEEK_AGO=$((NOW - 604800)) + +# Fetch top artists for the week +TOP_ARTISTS=$(curl -s "${API_BASE}?method=user.gettopartists&user=${LASTFM_USERNAME}&api_key=${LASTFM_API_KEY}&format=json&period=7day&limit=5") + +# Fetch recent tracks to count this week's scrobbles +RECENT_TRACKS=$(curl -s "${API_BASE}?method=user.getrecenttracks&user=${LASTFM_USERNAME}&api_key=${LASTFM_API_KEY}&format=json&from=${WEEK_AGO}&to=${NOW}&limit=1") + +# Get total track count +TOTAL_TRACKS=$(echo "$RECENT_TRACKS" | jq -r '.recenttracks["@attr"].total') + +# Output in markdown format +echo "## Last.fm Weekly Stats" +echo "" +echo "**Total Tracks:** ${TOTAL_TRACKS}" +echo "" +echo "**Top 5 Artists:**" +echo "" + +# Parse and display top 5 artists as markdown links +echo "$TOP_ARTISTS" | jq -r '.topartists.artist[] | "- [\(.name)](\(.url)) - \(.playcount) plays"' \ No newline at end of file