Arabica#
Coffee brew tracking application build on ATProto
Development is on GitHub, and is mirrored to Tangled:
GitHub is currently the primary repo, but that may change in the future.
Features#
- Track coffee brews with detailed parameters
- Store data in your AT Protocol Personal Data Server
- Community feed of recent brews from registered users (polling or real-time firehose)
- Manage beans, roasters, grinders, and brewers
- Export brew data as JSON
- Mobile-friendly PWA design
Tech Stack#
- Backend: Go with stdlib HTTP router
- Storage: AT Protocol Personal Data Servers + BoltDB for local cache
- Templates: Templ (type-safe Go templates)
- Frontend: HTMX + Alpine.js + Tailwind CSS
Quick Start#
# Using Nix
nix run
# Or with Go
go run cmd/server/main.go
Access at http://localhost:18910
Configuration#
Command-Line Flags#
--known-dids <file>- Path to file with DIDs to backfill on startup (one per line)
Environment Variables#
PORT- Server port (default: 18910)SERVER_PUBLIC_URL- Public URL for reverse proxy deployments (e.g., https://arabica.example.com)ARABICA_DB_PATH- BoltDB path (default: ~/.local/share/arabica/arabica.db)ARABICA_FEED_INDEX_PATH- Firehose index BoltDB path (default: ~/.local/share/arabica/feed-index.db)ARABICA_PROFILE_CACHE_TTL- Profile cache duration (default: 1h)OAUTH_CLIENT_ID- OAuth client ID (optional, uses localhost mode if not set)OAUTH_REDIRECT_URI- OAuth redirect URI (optional)SECURE_COOKIES- Set to true for HTTPS (default: false)LOG_LEVEL- Logging level: debug, info, warn, error (default: info)LOG_FORMAT- Log format: console, json (default: console)
Development#
With Nix:
# Enter development environment
nix develop
# Run server
go run cmd/server/main.go
# Run tests
go test ./...
# Build
go build -o arabica cmd/server/main.go
Without Nix, you'll need to have Go, Templ, and tailwindcss installed (just is optional but recommended).
# Generate CSS files
tailwindcss -i static/css/app.css -o static/css/output.css --minify
# Compile Templ
templ generate
# Run the appview
go run cmd/server/main.go
# with just
just run
Deployment#
Reverse Proxy Setup#
When deploying behind a reverse proxy (nginx, Caddy, Cloudflare Tunnel, etc.), set the SERVER_PUBLIC_URL environment variable to your public-facing URL:
# Example with nginx reverse proxy
SERVER_PUBLIC_URL=https://arabica.example.com
SECURE_COOKIES=true
PORT=18910
# The server listens on localhost:18910
# But OAuth callbacks use https://arabica.example.com/oauth/callback
The SERVER_PUBLIC_URL is used for OAuth client metadata and callback URLs, ensuring the AT Protocol OAuth flow works correctly when the server is accessed via a different URL than it's running on.
NixOS Deployment#
See docs/nix-install.md for NixOS deployment instructions.
License#
MIT