# 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 1. Open Synq app 2. Type note, mark as TODO (opt), add tags (opt), save. 3. If home server accessible, post unsynced captures to lan-only service and appended to `synq.org`.

home-screen-v1 history-screen-v1 settings-v1

## Architecture ```text 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 ``` 1. user saves capture locally 2. app marks it pending 3. sync runs when server is reachable 4. app posts pending captures to fastapi 5. server validates, dedupes by id, appends to phone.org 6. app marks capture synced ## Build & Deploy 1. First, build and deploy `synq-server`, the docker container that listens for new notes and writes to the local file. 2. Then, build and install the `synq` app. 3. Finally, retrieve the token (`token.txt` in the docker container's data directory, or from the container logs `docker logs synq-server`) ### 1. synq-server (docker) ```bash # 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`: ```bash 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: ```bash cd android ./gradlew assembleRelease # output: app/build/outputs/apk/release/app-release-unsigned.apk ``` sideload to a connected device: ```bash adb install app/build/outputs/apk/release/app-release-unsigned.apk ``` ### releasing on gitea tag the commit and push the tag: ```bash 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.