Initial commit: postcard v1

Phone photo -> composited postcard (canvas templates, stamp corner,
EXIF-aware date/location, self-hosted handwriting font) with a small
server for share links, day-context caption drafting off goonk's
day-summary API, and Nominatim reverse geocoding.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Fredrik Johansson
2026-08-06 19:49:03 +02:00
co-authored by Claude Sonnet 5
commit cf0f5fca2c
24 changed files with 2839 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
services:
app:
image: ${IMAGE}
container_name: postcard
restart: unless-stopped
pull_policy: always
ports:
- "${HOST_PORT:-3098}:3098"
environment:
- TTL_HOURS=${TTL_HOURS:-72}
- MAX_UPLOAD_BYTES=${MAX_UPLOAD_BYTES:-20971520}
- RATE_LIMIT_PER_HOUR=${RATE_LIMIT_PER_HOUR:-30}
# Day-context source for caption drafting — see README. Left unset,
# captions fall back to generic postcard-voice lines.
- DAY_SUMMARY_URL=${DAY_SUMMARY_URL:-}
# Reverse-geocoding endpoint for the stamp corner's location line.
# Defaults to the public Nominatim instance if unset.
- NOMINATIM_URL=${NOMINATIM_URL:-}
volumes:
# Named volume, not a bind mount into the build context — the SQLite
# db and image blobs live here and must survive image redeploys.
- postcard-data:/app/data
volumes:
postcard-data: