diff --git a/.gitignore b/.gitignore index e7d733d..6f9b8e5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ data fetch-and-convert.sh deploy.sh hugo.toml +content/playlists diff --git a/generate-playlist-pages.sh b/generate-playlist-pages.sh new file mode 100755 index 0000000..affb3f1 --- /dev/null +++ b/generate-playlist-pages.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# ============================================ +# Generate Hugo Playlist Pages from JSON +# ============================================ + +DATA_FILE="data/playlists/playlists.json" +CONTENT_DIR="content/playlists" + +# Check if data file exists +if [ ! -f "$DATA_FILE" ]; then + echo "❌ Error: $DATA_FILE not found. Run fetch-playlist.sh first." + exit 1 +fi + +# Create content directory +mkdir -p "$CONTENT_DIR" + +# Create _index.md if it doesn't exist +if [ ! -f "$CONTENT_DIR/_index.md" ]; then + cat > "$CONTENT_DIR/_index.md" << 'EOF' +--- +title: "Playlists" +--- +EOF +fi + +# Clear old playlist pages (keep _index.md) +find "$CONTENT_DIR" -maxdepth 1 -type f -name "*.md" ! -name "_index.md" -delete + +# Process each playlist +cat "$DATA_FILE" | jq -c '.playlists[]' | while read -r playlist; do + NAME=$(echo "$playlist" | jq -r '.name // "Untitled Playlist"') + SLUG=$(echo "$NAME" | tr ' ' '-' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]//g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//') + + # If slug is empty, use the ID + if [ -z "$SLUG" ] || [ "$SLUG" = "untitled-playlist" ]; then + SLUG=$(echo "$playlist" | jq -r '.id' | head -c 12) + fi + + DESCRIPTION=$(echo "$playlist" | jq -r '.description // ""') + IMAGE=$(echo "$playlist" | jq -r '.image // ""') + TRACKS=$(echo "$playlist" | jq -c '.tracks') + PLAYLIST_ID=$(echo "$playlist" | jq -r '.id') + CREATED_AT=$(echo "$playlist" | jq -r '.created_at') + + # Convert created_at to date + CREATED_DATE=$(date -d "@$CREATED_AT" "+%Y-%m-%d" 2>/dev/null || echo $(date "+%Y-%m-%d")) + + cat > "$CONTENT_DIR/$SLUG.md" < +

Playlists

+

Explore all my curated playlists from the Nostr network

+ +
+ {{ range .Pages }} + {{ $name := .Title }} + {{ $description := .Params.playlist_description | default "" }} + {{ $image := .Params.playlist_image | default "" }} + {{ $tracks := .Params.playlist_tracks | default slice }} + + + {{ end }} +
+ +{{ end }} \ No newline at end of file diff --git a/themes/one-pager/layouts/playlists/single.html b/themes/one-pager/layouts/playlists/single.html new file mode 100644 index 0000000..9c2a107 --- /dev/null +++ b/themes/one-pager/layouts/playlists/single.html @@ -0,0 +1,137 @@ +{{ define "main" }} +{{ $name := .Title }} +{{ $description := .Params.playlist_description | default "" }} +{{ $image := .Params.playlist_image | default "" }} +{{ $tracks := .Params.playlist_tracks | default slice }} +{{ $created_at := .Params.playlist_created_at | default 0 }} + +
+
+
+ {{ if $image }} + {{ $name }} + {{ end }} +
+

{{ $name }}

+ {{ if $description }} +

{{ $description }}

+ {{ end }} +
+ 🎵 {{ len $tracks }} tracks + {{ if $created_at }} + 📅 {{ dateFormat "January 2, 2006" (time $created_at) }} + {{ end }} +
+
+
+
+ +
+ {{ if $tracks }} + {{ range $index, $track := $tracks }} +
+
{{ add $index 1 }}
+ {{ if $track.image }} + {{ $track.title }} + {{ end }} +
+ {{ $track.title | default "Untitled" }} + {{ $track.artist | default "Unknown Artist" }} + {{ if $track.album }} + {{ $track.album }} + {{ end }} + {{ if $track.duration }} + {{ $track.duration }}s + {{ end }} + {{ if $track.tags }} +
+ {{ range $track.tags }} + {{ . }} + {{ end }} +
+ {{ end }} +
+
+ {{ if $track.url }} + + {{ end }} + {{ if $track.id }} + + {{ end }} +
+
+ {{ end }} + {{ else }} +

No tracks found for this playlist.

+ {{ end }} +
+ + {{ if $tracks }} +
+ +
+ {{ end }} + + +
+ + +{{ end }} \ No newline at end of file