DRFT is a self-hosted photo and video cloud built as a single Go service with PostgreSQL metadata and SSD-backed file storage.
Today the repo includes:
- a Go backend in
backend/with auth, media storage, streaming, and admin management - a web client built with React, Vite, JavaScript, and vanilla CSS
- an Expo-based Android/mobile client for browsing, upload, and viewer flows
- a user-facing landing site in
site/for GitHub Pages
Mobile roadmap note:
v0.1.0ships with the current Expo-based Android clientv0.2.0is planned to move Android to a native Kotlin app for stronger media, upload, and playback control
Landing page note:
site/is the public-facing DRFT product site- it is intended for GitHub Pages deployment
Full project documentation lives in docs/.
Start here:
- Docs home
- v0.1.0 release checklist
- Current status
- Architecture
- Backend and API
- Frontend and UX
- Setup and operations
- Roadmap and milestones
Node.js:
node -vExpected:
v20.xBackend:
make runFrontend:
make frontend-devMobile:
cd mobile
npm run start -- --clearDocker full stack, development:
make docker-up- web:
http://localhost:3000 - api:
http://localhost:8080
Note:
make docker-upusesdocker-compose.dev.ymland builds from source- the Go service now lives under
backend/ - if your network uses a custom npm registry, proxy, or trusted CA, pass them through Docker build args via environment variables:
DRFT_NPM_REGISTRYDRFT_NPM_STRICT_SSLDRFT_EXTRA_CA_CERT_BASE64HTTP_PROXYHTTPS_PROXYNO_PROXY
Docker production stack:
cp .env.prod.example .env.prod
make docker-prod-upmake docker-prod-upusesdocker-compose.prod.yml- production compose expects published images:
dockermaninthehouse/drft-apidockermaninthehouse/drft-web
- production data is stored on explicit host paths from
.env.prod:DRFT_POSTGRES_DATA_PATHDRFT_STORAGE_PATHDRFT_BACKUPS_PATH
Publish images:
./scripts/publish-images.sh v0.1.0-rcThis pushes:
dockermaninthehouse/drft-api:v0.1.0-rcdockermaninthehouse/drft-web:v0.1.0-rc
And, by default, also updates latest.
GitHub Actions image publishing:
- workflow file:
/.github/workflows/publish-images.yml - automatic publish on pushed git tags like
v0.1.0-rc - manual publish through
workflow_dispatch - required GitHub repository secrets:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN
Production backup and restore:
- automatic backup service is included in
docker-compose.prod.yml - manual backup now:
sh ./scripts/backup-prod-now.sh- manual restore from a backup directory:
sh ./scripts/restore-prod-backup.sh ./backups/<timestamp>- first-admin bootstrap and JWT login
- role-aware user management
- password reset by email code and master CLI
- image/video upload with metadata extraction
- protected media preview and playback
- per-user media libraries
- storage usage stats
- mobile server setup flow before login
- mobile session persistence
- mobile swipeable media viewer with local save and delete