This is a GitHub-hosted memorial website for the bestest boy, Elliott.
Elliott was more than just a pet - he was a faithful companion, a bossy dog who often became the alpha in every situation. He was always gentle, kind, and loving, with a passion for toy ducks, chasing cats, swimming, camping, ice cream, car rides, and watching TV.
Elliott passed away peacefully on October 8, 2025, at around 12 years old, and this website serves as a digital memorial to celebrate his life and preserve precious memories.
This memorial website is built as a static site hosted on GitHub Pages with an automated photo gallery system:
- Frontend: Simple HTML/CSS/JavaScript static site using Bootstrap for responsive design
- Photo Gallery: Dynamic JSON-based gallery system that automatically indexes photos
- Backend: Go-based photo indexer that processes images and generates gallery data
- Deployment: GitHub Actions workflow for automated building and deployment
The heart of this site is the automated photo gallery powered by a Go script (scripts/indexer.go):
- Photo Scanning: Scans the
web/photos/directory for image files - Description Loading: Reads descriptions from
web/photos/description.json - Pagination: Automatically creates paginated gallery data (15 photos per page)
- JSON Generation: Creates
index.jsonandpageN.jsonfiles inweb/index/ - Frontend Integration: JavaScript loads and displays the gallery dynamically
The GitHub Actions workflow (deploy.yml) handles everything automatically:
- Triggers: Runs on any push to the main branch
- Gallery Generation: Executes the Go indexer to process photos
- Commit Changes: Auto-commits generated gallery files
- Deploy: Publishes the complete site to GitHub Pages
├── .github/workflows/
│ └── deploy.yml # CI/CD workflow
├── web/ # Website root
│ ├── photos/ # Gallery photos
│ │ └── description.json # Photo descriptions
│ ├── no-index-photos/ # Non-gallery photos
│ ├── index/ # Generated gallery JSON files
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript
│ └── index.html # Main page
├── scripts/ # Build tools
│ ├── indexer.go # Photo gallery generator
│ └── go.mod # Go module file
├── generate_description_gemini.ps1 # AI description generator
└── README.md # This file
To create your own memorial website:
- Fork this repository to your GitHub account
- Edit the content in
web/index.htmlto reflect your loved one - Add photos to the
web/photos/directory - Update descriptions in
web/photos/description.jsonmanually, or use the AI script (see below). - Push to main branch - GitHub Actions will automatically build and deploy
- Place image files in
web/photos/ - Add descriptions to
web/photos/description.json:
{
"photo1.jpg": "Description of photo 1",
"photo2.jpg": "Description of photo 2"
}- Push changes - the gallery will automatically update
This project includes a PowerShell script, generate_description_gemini.ps1, to automatically generate photo descriptions using AI.
- The Google Gemini CLI. Make sure it's installed and authenticated.
- Place your new photos in the
web/photos/directory. - Open a PowerShell terminal at the root of the project.
- Run the script:
.\generate_description_gemini.ps1
- The script will find photos without descriptions, call the Gemini API to generate them, and save them to
web/photos/description.json.
You can customize the prompt inside the script by editing the $PromptTemplate variable.
Anyone is free to reuse this code for their own memorial websites.
This project is shared with love in hopes that it can help others create beautiful tributes for their beloved companions. Whether it's for a pet, family member, or friend, feel free to adapt this codebase for your own memorial needs.
This project, including this README, was created with the assistance of AI. We welcome contributions and feedback!
- Showcase Your Memorial: If you use this template, we would be delighted to see it. Please create a GitHub issue to share a link to your project!
- Contribute Changes: Fixes and improvements are always welcome! Please feel free to submit a Pull Request with a detailed description of your changes.
- Go (for running the photo indexer)
- GitHub Pages enabled on your repository
- GitHub Actions enabled for automated builds
Elliott - Forever in our hearts and memories. A life well-lived, a love well-shared.
"Until one has loved an animal, a part of one's soul remains unawakened." - Anatole France