{"id":15063602,"url":"https://github.com/fivehanz/qwynk","last_synced_at":"2026-01-02T22:36:41.032Z","repository":{"id":251247912,"uuid":"836839926","full_name":"fivehanz/qwynk","owner":"fivehanz","description":"url shortner made (making) w/ rust (loco.rs)","archived":false,"fork":false,"pushed_at":"2024-11-09T08:47:19.000Z","size":120,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T08:37:15.424Z","etag":null,"topics":["elixir","phoenix","url","urlshortner"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fivehanz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-01T17:03:23.000Z","updated_at":"2024-11-09T08:49:59.000Z","dependencies_parsed_at":"2024-08-01T19:20:03.798Z","dependency_job_id":"6443c7c4-6cce-43ce-bb9b-6f0d342d9774","html_url":"https://github.com/fivehanz/qwynk","commit_stats":null,"previous_names":["fivehanz/qwynk"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivehanz%2Fqwynk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivehanz%2Fqwynk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivehanz%2Fqwynk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivehanz%2Fqwynk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fivehanz","download_url":"https://codeload.github.com/fivehanz/qwynk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243778827,"owners_count":20346622,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elixir","phoenix","url","urlshortner"],"created_at":"2024-09-25T00:04:47.702Z","updated_at":"2026-01-02T22:36:41.027Z","avatar_url":"https://github.com/fivehanz.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Qwynk\n\n**Qwynk** is a high-performance, privacy-centric URL shortener and link manager. \n\n* It separates the redirect engine (ETS-backed) from the analytics engine (Async Batching).\n\n## Tech Stack\n* **Core:** Elixir 1.18+ / OTP 26+, Phoenix 1.8, Ash Framework 3.0\n* **Data:** PostgreSQL 16+, ETS (Erlang Term Storage)\n* **Frontend:** LiveView v1, Tailwind v4 + Daisy UI v5, D3.js\n* **Geo:** MaxMind GeoLite2 (Local MMDB)\n\n## Directory Structure\n* `lib/qwynk/traffic/` - Link management \u0026 Slug logic.\n* `lib/qwynk/analytics/` - Hit logging \u0026 GeoIP.\n* `lib/qwynk/accounts/` - User auth.\n\n## Architecture\n\n[Image of Qwynk Data Flow Diagram]\n\n1.  **The Bouncer:** Incoming traffic hits the Phoenix Endpoint.\n2.  **The Cache:** Lookups happen in RAM (ETS).\n3.  **The Vault:** Persistent data lives in Postgres, managed by Ash Resources.\n4.  **The Ledger:** Analytics are hashed (anonymized) and buffered before writing.\n\n## Prerequisites (FreeBSD)\n* Elixir 1.18+ \u0026 Erlang/OTP 26+ (verified in mise.toml)\n* PostgreSQL 16+\n* `gmake` and `clang` (Required for `picosat` NIF compilation)\n* MaxMind City Database (`GeoLite2-City.mmdb`) placed in `priv/geoip/`\n\n## Configuration\nSet the following environment variables in your `sys.rc` or `.env`:\n\n```bash\nexport SECRET_KEY_BASE=\"your_secure_key\"\nexport DATABASE_URL=\"postgres://user:pass@localhost/qwynk_prod\"\nexport PHX_HOST=\"jsmx.org\"\nexport POOL_SIZE=10\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffivehanz%2Fqwynk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffivehanz%2Fqwynk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffivehanz%2Fqwynk/lists"}