kamaji e37cf878d0 Replace file-input capture with live camera viewfinder
The previous approach used setTimeout to re-trigger the file input
after each capture, which iOS Safari blocks because it loses the
user gesture context.

Now uses getUserMedia for a fullscreen camera viewfinder that stays
open between shots. Shutter button captures frames from the video
stream, saves to IndexedDB, and the camera remains open until the
user taps close. Includes flash feedback, session counter, and
camera flip. Falls back to single-shot file input if getUserMedia
is unavailable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 04:56:16 -06:00

NextSnap

Offline-first photo capture web app for Nextcloud.

Quick Start

Development

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python run.py

Visit http://localhost:5000/api/health to verify the server is running.

Docker Deployment

export SECRET_KEY="your-secret-key-here"
export NEXTCLOUD_URL="https://your-nextcloud-instance.com"
docker-compose up -d

Architecture

  • Backend: Flask + Gunicorn
  • Frontend: Vanilla JavaScript (no framework)
  • Offline Storage: IndexedDB via Dexie.js
  • Service Worker: For offline-first capabilities
  • Nextcloud Integration: WebDAV API for file operations

Build Order

See nextsnap.md for the complete specification and phased implementation plan.

Description
No description provided
Readme 339 KiB
Languages
JavaScript 42.2%
HTML 29.1%
Python 21.6%
CSS 5.6%
Makefile 0.6%
Other 0.9%