AnimalSounds · Static Next.js 14 soundboard for GitHub Pages
A static Next.js 14 soundboard built with Bun, NextUI, and Tailwind CSS. Audio ships as offline-ready MP3s from public/audio, imagery from bundled assets with optional Pexels enrichment, and analytics/favorites persist locally in localStorage. Deployed to GitHub Pages.User need
I wanted a simple, offline-capable soundboard app to learn static export with Next.js 14 and Bun. The app needed to ship its own audio files so it works without a network, keep favorites and usage stats without a backend, and deploy cleanly to GitHub Pages with proper base path handling.
What I built
A static Next.js 14 soundboard deployed to GitHub Pages. Audio ships from public/audio as offline-ready MP3s, and imagery comes from bundled assets with optional Pexels enrichment. Analytics and favorites persist locally in localStorage — no server required. A GitHub Actions workflow handles the static export with NEXT_PUBLIC_BASE_PATH injection so asset paths resolve correctly under the GitHub Pages subdirectory.
User interface
- Navbar with navigation and theme toggle
- Hero section introducing the soundboard
- Filters for browsing sounds by category
- Favorites bar for quick access to saved sounds
- Sound cards with playback controls
- Stats overview showing usage analytics
- NextUI components with Tailwind CSS styling
Technical implementation
- Next.js 14 static export for GitHub Pages
lib/base-path.jsfor base path resolution in static hostinglib/analytics.jsfor local analytics load/save/summarize- localStorage persistence for favorites and usage stats
- GitHub Actions workflow with
NEXT_PUBLIC_BASE_PATHinjection - Optional Pexels API for image enrichment (disabled during static export)
- Offline-ready MP3s shipped from
public/audio
What I did
- Solo developer — built the entire application (1 contributor)
- Configured Next.js 14 static export with Bun for GitHub Pages deployment
- Built soundboard components: navbar, hero, filters, favorites-bar, sound-card, stats-overview, theme-toggle, providers
- Implemented base path resolution for correct asset paths under GitHub Pages
- Built local analytics and favorites persistence with localStorage
- Set up GitHub Actions workflow with NEXT_PUBLIC_BASE_PATH injection
- Integrated optional Pexels image enrichment
Real artifacts you can verify
- GitHub repo: github.com/BradleyMatera/AnimalSounds
- Live demo: bradleymatera.github.io/AnimalSounds
- Created: October 26, 2024
- Commits: 23 commits, 1 contributor
- Languages: JavaScript (97.7%), CSS (2.3%)
- License: MIT
- Components: navbar, hero, filters, favorites-bar, sound-card, stats-overview, theme-toggle, providers
- Deployment: GitHub Actions workflow publishes static export to Pages
- Honest limitations: Analytics and favorites stay in localStorage (no server persistence). Pexels API disabled during static export. No backend — fully client-side.
Technologies used
Next.js 14BunNextUITailwind CSSJavaScriptlocalStorageGitHub PagesGitHub Actions
