Qwynk is a high-performance, privacy-centric URL shortener and link manager.
- It separates the redirect engine (ETS-backed) from the analytics engine (Async Batching).
- Core: Elixir 1.18+ / OTP 26+, Phoenix 1.8, Ash Framework 3.0
- Data: PostgreSQL 16+, ETS (Erlang Term Storage)
- Frontend: LiveView v1, Tailwind v4 + Daisy UI v5, D3.js
- Geo: MaxMind GeoLite2 (Local MMDB)
lib/qwynk/traffic/- Link management & Slug logic.lib/qwynk/analytics/- Hit logging & GeoIP.lib/qwynk/accounts/- User auth.
[Image of Qwynk Data Flow Diagram]
- The Bouncer: Incoming traffic hits the Phoenix Endpoint.
- The Cache: Lookups happen in RAM (ETS).
- The Vault: Persistent data lives in Postgres, managed by Ash Resources.
- The Ledger: Analytics are hashed (anonymized) and buffered before writing.
- Elixir 1.18+ & Erlang/OTP 26+ (verified in mise.toml)
- PostgreSQL 16+
gmakeandclang(Required forpicosatNIF compilation)- MaxMind City Database (
GeoLite2-City.mmdb) placed inpriv/geoip/
Set the following environment variables in your sys.rc or .env:
export SECRET_KEY_BASE="your_secure_key"
export DATABASE_URL="postgres://user:pass@localhost/qwynk_prod"
export PHX_HOST="jsmx.org"
export POOL_SIZE=10