A local-first mission command environment. Runs entirely on a Raspberry Pi. Access from any browser on your home network.
Install on the Pi:
# Node.js 20+
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# libheif (for HEIC/iPhone photo support)
sudo apt-get install -y libheif-dev
# Claude Code CLI (open claw bot)
npm install -g @anthropic-ai/claude-code-
Clone and install
git clone <repo> ~/sojourn cd ~/sojourn npm install cd client && npm install cd ../server && npm install
-
Build the client
cd ~/sojourn npm run build
-
Create your config
cp sojourn.config.sample.json sojourn.config.json
Edit
sojourn.config.json:auth_token— generate a long random string:openssl rand -hex 32vault_path— absolute path to your Obsidian vault directory on the Pistorage_root— where uploaded images will live (e.g./home/pi/sojourn-storage)db_path— where SQLite database lives (e.g./home/pi/sojourn.db)
-
Start the server
cd ~/sojourn ./start.sh
Find your Pi's local IP:
hostname -I | awk '{print $1}'Then open http://<pi-ip>:3000 in any browser on your home WiFi — including your phone.
On login, enter your name and the auth_token from your config.
Point vault_path at the root of your Obsidian vault directory on the Pi.
- Notes in the vault sync automatically into the Archive within ~2 seconds of saving.
- Notes you create in Sojourn's Archive are written to
<vault_path>/sojourn-inbox/as.mdfiles. These appear in Obsidian as a new folder. - Sojourn never edits your existing Obsidian notes — only reads them.
If your vault is on another machine, sync it to the Pi first (e.g. via Syncthing, rsync, or iCloud Drive via rclone).
To keep Sojourn running after you close the terminal, install the systemd service:
sudo cp sojourn.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable sojourn
sudo systemctl start sojournCheck logs:
journalctl -u sojourn -fRun server and client dev servers together:
npm run devClient runs on port 5173 (proxies /api and /ws to port 3000).
Server runs on port 3000.