# synq, a tiny android-to-org capture system.
synq consists of an Android app for capturing notes items and a docker 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`.
## 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
First, clone the repo.
Build and deploy `synq-server`, the docker container that listens for new notes and writes to the local file.
Then, build and install the `synq` app.
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)
- Build from `docker build -t synq-server ./server`
- Run (replace paths and token as needed):
```docker
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`.
### 2. synq (android)
Download apk from Releases, on the right
Or, build from source:
Open `android/` in Android Studio and hit **Sync**. then either:
- **run on device/emulator directly** from Android Studio (▶), or
- **build a release APK**
Then sideload to a connected device:
- terminal: `adb install app/build/outputs/apk/release/app-release-unsigned.apk`