A static website for hotel room reviews, built with Hugo.
room.ventures is a static site that showcases and reviews hotel rooms. Photos are dumped into a folder, processed by an AI agent that extracts EXIF data, analyzes room quality, and generates static Markdown content pages with ratings. The final site features an interactive dark-themed map of all reviewed locations.
- Static Site Generator: Hugo
- Content Format: Markdown with TOML front matter
- EXIF Extraction: ExifTool
- Image Analysis: llama3.2-vision via Ollama
- Interactive Map: Leaflet.js with OpenStreetMap tiles
- Map Tiles (Detail Pages): Static OpenStreetMap tile images
- Image Storage: Git LFS
- Container: Docker (Hugo build + nginx)
- CI/CD: GitHub Actions (build to GHCR, deploy via SSH)
Drop geotagged hotel room photos (JPEG) into photos/inbox/ and run OpenCode with:
based on the defined workflow, process all images in photos/inbox
The AI agent will automatically:
- Deduplicate -- compute SHA-256 hashes and skip any photo already in
photos/processed_hashes.json - Extract EXIF -- pull date, GPS coordinates, and camera info via ExifTool
- Group -- cluster photos by timestamp proximity into hotel room visits
- Reverse-geocode -- resolve GPS coordinates to hotel name, city, and country (prompts you if ambiguous)
- Analyze -- assess each photo with llama3.2-vision for style, condition, luxury level, and cleanliness
- Generate rating -- produce a composite 1-5 star rating
- Download map tile -- fetch a static OpenStreetMap tile for the location
- Create review page -- generate a Hugo content page in
content/reviews/with full metadata - Update map data -- add the location to
data/locations.jsonfor the homepage map - Move photos -- copy processed images to
static/images/reviews/<slug>/ - Update manifest -- add new SHA-256 hashes to
photos/processed_hashes.json
Photos must be JPEG files with EXIF GPS coordinates embedded (most smartphone cameras do this by default). The agent needs:
- ExifTool (installed automatically via Homebrew if missing)
- Ollama with
llama3.2-vision:11b(pulled automatically if missing)
Commit and push the generated files:
git add content/ data/ static/ photos/processed_hashes.json
git commit -m "Add new hotel reviews"
git pushThe GitHub Actions pipeline will automatically build the Docker image and deploy.
- Hugo (extended edition recommended)
- ExifTool
- Ollama with
llama3.2-vision:11b - Git LFS
- Docker (for containerized builds)
git lfs install
git lfs track "*.jpg" "*.jpeg" "*.png" "*.webp"hugo server -Ddocker build -t room-venture .
docker run -p 8080:80 room-venturehugoThe generated site will be in the public/ directory.
room.ventures/
├── photos/
│ ├── inbox/ # Drop raw photos here for processing
│ └── processed_hashes.json # SHA-256 manifest for duplicate detection
├── content/
│ └── reviews/ # Generated review pages (Markdown)
├── static/
│ └── images/
│ ├── reviews/ # Processed review photos
│ └── maps/ # Static OpenStreetMap tile images
├── layouts/
│ ├── _default/ # Base layout, homepage with map
│ └── reviews/ # Review list and detail templates
├── data/
│ └── locations.json # Location data for the homepage map
├── .github/
│ └── workflows/ # Build and deploy pipelines
├── Dockerfile # Multi-stage build (Hugo + nginx)
├── hugo.toml # Hugo configuration
├── AGENTS.md # AI agent instructions
└── README.md