Add GeoGuesser AI app to store

New CasaOS app for AI-powered geographic image location analysis.
Features:
- Three-tier architecture (PostgreSQL, Backend API, Frontend)
- Claude AI integration for image analysis
- All environment variables configurable
- Only frontend port exposed externally
- Container registry authentication required

Note: Icon file (icon.png) still needs to be added.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-26 22:52:18 +01:00
parent de21abedc7
commit d9c6d2f8ce
2 changed files with 216 additions and 0 deletions

View File

@@ -0,0 +1,156 @@
name: alxndrhi-geoguesser-ai
services:
postgres:
container_name: alxndrhi-geoguesser-ai-postgres
image: postgres:16-alpine
environment:
POSTGRES_USER: ${DB_USER:-geolocator}
POSTGRES_PASSWORD: ${DB_PASSWORD:-geolocator_password}
POSTGRES_DB: ${DB_NAME:-geolocator_db}
volumes:
- type: bind
source: /DATA/AppData/$AppID/postgres_data
target: /var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-geolocator} -d ${DB_NAME:-geolocator_db}"]
interval: 10s
timeout: 5s
retries: 5
network_mode: bridge
restart: unless-stopped
backend:
container_name: alxndrhi-geoguesser-ai-backend
image: git.hinrichs.dev/alexander/geoguesser-ai/backend:latest
environment:
ENV: ${ENV:-production}
PORT: ${PORT:-3000}
DATABASE_URL: postgresql://${DB_USER:-geolocator}:${DB_PASSWORD:-geolocator_password}@alxndrhi-geoguesser-ai-postgres:5432/${DB_NAME:-geolocator_db}?sslmode=${DB_SSLMODE:-disable}
CLAUDE_API_KEY: ${CLAUDE_API_KEY}
CLAUDE_API_URL: ${CLAUDE_API_URL:-https://api.anthropic.com/v1/messages}
CLAUDE_MODEL: ${CLAUDE_MODEL:-claude-sonnet-4-5}
USE_MOCK_AI: ${USE_MOCK_AI:-false}
MAX_IMAGE_SIZE_MB: ${MAX_IMAGE_SIZE_MB:-10}
ALLOWED_IMAGE_TYPES: ${ALLOWED_IMAGE_TYPES:-image/jpeg,image/png,image/webp}
OVERPASS_API_URL: ${OVERPASS_API_URL:-https://overpass-api.de/api/interpreter}
ELEVATION_API_URL: ${ELEVATION_API_URL:-https://api.open-elevation.com/api/v1/lookup}
ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-http://localhost:8080}
LOG_LEVEL: ${LOG_LEVEL:-info}
LOG_FORMAT: ${LOG_FORMAT:-json}
volumes:
- type: bind
source: /DATA/AppData/$AppID/uploads
target: /app/uploads
depends_on:
postgres:
condition: service_healthy
external_links:
- alxndrhi-geoguesser-ai-postgres:postgres
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/api/v1/health"]
interval: 30s
timeout: 10s
retries: 3
network_mode: bridge
restart: unless-stopped
frontend:
container_name: alxndrhi-geoguesser-ai-frontend
image: git.hinrichs.dev/alexander/geoguesser-ai/frontend:latest
ports:
- target: 8080
published: "8080"
protocol: tcp
depends_on:
- backend
external_links:
- alxndrhi-geoguesser-ai-backend:backend
network_mode: bridge
restart: unless-stopped
x-casaos:
envs:
- container: ENV
description:
en_us: Application environment (development/production)
- container: PORT
description:
en_us: Backend API port
- container: DB_USER
description:
en_us: PostgreSQL database username
- container: DB_PASSWORD
description:
en_us: PostgreSQL database password
- container: DB_NAME
description:
en_us: PostgreSQL database name
- container: DB_SSLMODE
description:
en_us: PostgreSQL SSL mode (disable/require)
- container: CLAUDE_API_KEY
description:
en_us: Anthropic Claude API key for AI analysis
- container: CLAUDE_API_URL
description:
en_us: Claude API endpoint URL
- container: CLAUDE_MODEL
description:
en_us: Claude model identifier to use
- container: USE_MOCK_AI
description:
en_us: Use mock AI responses (true/false)
- container: MAX_IMAGE_SIZE_MB
description:
en_us: Maximum upload image size in MB
- container: ALLOWED_IMAGE_TYPES
description:
en_us: Comma-separated list of allowed image MIME types
- container: OVERPASS_API_URL
description:
en_us: OpenStreetMap Overpass API endpoint
- container: ELEVATION_API_URL
description:
en_us: Elevation data API endpoint
- container: ALLOWED_ORIGINS
description:
en_us: CORS allowed origins (comma-separated)
- container: LOG_LEVEL
description:
en_us: Application log level (debug/info/warn/error)
- container: LOG_FORMAT
description:
en_us: Log output format (json/text)
ports:
- container: "8080"
description:
en_us: Web UI HTTP Port
volumes:
- container: /var/lib/postgresql/data
description:
en_us: PostgreSQL database storage
- container: /app/uploads
description:
en_us: Uploaded images storage
x-casaos:
architectures:
- amd64
- arm64
main: frontend
author: Alexander Hinrichs
category: Utilities
developer: Alexander Hinrichs
description:
en_us: An AI-powered geographic image analyzer that uses Claude AI to
identify locations from photos. Upload images and get detailed
geolocation analysis including coordinates, landmarks, and contextual
information. Requires Anthropic API key for Claude AI access.
tagline:
en_us: AI-powered geographic image location analyzer
icon: https://git.ct.hinrichs.dev/alexander/CasaOS-alexanders-AppStore/raw/branch/main/Apps/geoguesser-ai/icon.png
index: /
port_map: "8080"
scheme: http
store_app_id: geoguesser-ai
title:
en_us: GeoGuesser AI