a4591655b71d272ce7134a660f77b52fc2b2b04c
versionCode 1->2, versionName 0.1.0->1.0.1 isMinifyEnabled=true with proguard-android-optimize.txt add proguard-rules.pro (keep Room, OkHttp, kotlinx.serialization) gitignore: add .claude/ to suppress worktree noise Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
synq, a tiny android-to-org capture system.
synq consists of:
- an Android app for capturing notes items
- a docker-based agent that pulls notes and saves them to a local .org file
- Open Synq app
- Type note, mark as TODO (opt), add tags (opt), save.
- If home server accessible, post unsynced captures to lan-only service and appended to
synq.org.
Architecture
android app
kotlin + jetpack compose
room sqlite local queue
workmanager + manual sync
okhttp/retrofit client
home server
docker container on jeeves/unraid
python + fastapi
sqlite idempotency store
append-only org writer
- user saves capture locally
- app marks it pending
- sync runs when server is reachable
- app posts pending captures to fastapi
- server validates, dedupes by id, appends to phone.org
- app marks capture synced
Build & Deploy
- First, build and deploy
synq-server, the docker container that listens for new notes and writes to the local file. - Then, build and install the
synqapp. - Finally, retrieve the token (
token.txtin the docker container's data directory, or from the container logsdocker logs synq-server)
1. synq-server (docker)
# build
docker build -t synq-server ./server
# run (replace paths and token as needed)
docker run -d --name synq --restart=unless-stopped \
-p 8765:8765 \
-v /mnt/user/synq/data:/data \
synq-server
The server generates a random token on first start and logs it prominently. copy it into the android app settings. To use a fixed token instead, pass -e PHONE_CAPTURE_TOKEN=yourtoken.
To rebuild after a git pull:
git pull
docker build -t synq-server ./server
docker stop synq && docker rm synq
# re-run the docker run command above
2. synq (android)
Open android/ in Android Studio and hit Sync. then either:
- run on device/emulator directly from Android Studio (▶), or
- build a release APK from the terminal:
cd android
./gradlew assembleRelease
# output: app/build/outputs/apk/release/app-release-unsigned.apk
sideload to a connected device:
adb install app/build/outputs/apk/release/app-release-unsigned.apk
releasing on gitea
tag the commit and push the tag:
git tag v1.0.0
git push gitea v1.0.0
then go to Releases → New Release in the Gitea UI, pick the tag, and drag the APK into the assets box. anyone on the LAN can download it from there.
Description


