rockcampbell.com/layouts/index.html
Rock Campbell e132d6f2fb Add all missing tools to homepage grid, nav, and site index
The homepage's featured Tools grid (layouts/index.html) had drifted
out of sync with the actual set of apps on the site — only 6 of 13
were listed there. Brought it up to full parity: added Weather,
FlightWatch, Flights, Volleyball Score, Pixel Art, ASCII Art, and Ops
Dashboard.

Also added the two genuinely new ones (Weather, FlightWatch) to the
Explore nav dropdown (hugo.toml) and the Site Index page
(content/explore.md), which were both otherwise complete.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018pkC97LryUBHRQWsnFM69x
2026-09-12 19:08:06 +00:00

114 lines
4.8 KiB
HTML

{{ define "main" }}
<section class="homepage-tools">
<h2 class="homepage-tools__heading">Tools</h2>
<div class="homepage-tools__grid">
<a href="/earth" class="tool-card">
<span class="tool-card__icon">🌍</span>
<span class="tool-card__name">Earth View</span>
<span class="tool-card__desc">Live NASA satellite imagery on an interactive 3D globe</span>
</a>
<a href="/airbrief" class="tool-card">
<span class="tool-card__icon">✈️</span>
<span class="tool-card__name">AirBrief</span>
<span class="tool-card__desc">Aviation weather lookup — METARs, TAFs, and PIREPs</span>
</a>
<a href="/status" class="tool-card">
<span class="tool-card__icon">📡</span>
<span class="tool-card__name">Status Dashboard</span>
<span class="tool-card__desc">Kansas City situation awareness — weather, traffic, cameras</span>
</a>
<a href="/ytdl" class="tool-card">
<span class="tool-card__icon">⬇️</span>
<span class="tool-card__name">ytdl</span>
<span class="tool-card__desc">Download video or audio from YouTube and other sites</span>
</a>
<a href="https://geopulse.rockcampbell.com" class="tool-card">
<span class="tool-card__icon">📍</span>
<span class="tool-card__name">GeoPulse</span>
<span class="tool-card__desc">Self-hosted location tracking — a private replacement for Google Timeline</span>
</a>
<a href="https://shlink.rockcampbell.com" class="tool-card">
<span class="tool-card__icon">🔗</span>
<span class="tool-card__name">Shlink</span>
<span class="tool-card__desc">Self-hosted URL shortener with QR code generation and scan tracking</span>
</a>
<a href="/weather" class="tool-card">
<span class="tool-card__icon">🌦️</span>
<span class="tool-card__name">Weather</span>
<span class="tool-card__desc">Current conditions and hourly forecast, with a live radar map</span>
</a>
<a href="/flightwatch" class="tool-card">
<span class="tool-card__icon">🛫</span>
<span class="tool-card__name">FlightWatch</span>
<span class="tool-card__desc">Live flight-following map for Airshare's Managed + Fractional fleet</span>
</a>
<a href="/flights" class="tool-card">
<span class="tool-card__icon">🗓️</span>
<span class="tool-card__name">Flights</span>
<span class="tool-card__desc">Flight schedule processor</span>
</a>
<a href="/volleyball-score" class="tool-card">
<span class="tool-card__icon">🏐</span>
<span class="tool-card__name">Volleyball Score</span>
<span class="tool-card__desc">Volleyball scorekeeping app</span>
</a>
<a href="/pixel-art" class="tool-card">
<span class="tool-card__icon">🎨</span>
<span class="tool-card__name">Pixel Art</span>
<span class="tool-card__desc">Pixel art editor</span>
</a>
<a href="/ascii-art" class="tool-card">
<span class="tool-card__icon">🔤</span>
<span class="tool-card__name">ASCII Art</span>
<span class="tool-card__desc">Image to ASCII art converter</span>
</a>
<a href="https://ops.rockcampbell.com" class="tool-card">
<span class="tool-card__icon">🛠️</span>
<span class="tool-card__name">Ops Dashboard</span>
<span class="tool-card__desc">Internal ops dashboard for the rocklab homelab</span>
</a>
</div>
</section>
{{- $pages := where .Site.RegularPages "Section" "posts" }}
{{- $paginator := .Paginate $pages }}
<ul class="post-list">
{{- range $paginator.Pages }}
<li class="post-list__entry">
<div class="post-list__meta">
<time class="post-list__date" datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "Jan 2, 2006" }}</time>
{{- with .Params.categories }}
<span class="post-list__category">{{ index . 0 | lower }}</span>
{{- end }}
</div>
<div class="post-list__body">
<a href="{{ .Permalink }}" class="post-list__title">{{ .Title }}</a>
{{- /* Use frontmatter description first (richer for Morning Brief posts),
fall back to auto-generated summary */}}
{{- $excerpt := or .Description (.Summary | plainify) }}
{{- if $excerpt }}
<p class="post-list__excerpt">{{ $excerpt | truncate 220 }}</p>
{{- end }}
</div>
</li>
{{- end }}
</ul>
{{- /* Pagination controls — only shown when there's more than one page */}}
{{- if gt $paginator.TotalPages 1 }}
<nav class="post-list-pagination" aria-label="Post navigation">
<span>
{{- if $paginator.HasPrev }}
<a href="{{ $paginator.Prev.URL | absURL }}">← Newer posts</a>
{{- end }}
</span>
<span>Page {{ $paginator.PageNumber }} of {{ $paginator.TotalPages }}</span>
<span>
{{- if $paginator.HasNext }}
<a href="{{ $paginator.Next.URL | absURL }}">Older posts →</a>
{{- end }}
</span>
</nav>
{{- end }}
{{ end }}