[{"data":1,"prerenderedAt":94},["ShallowReactive",2],{"$fe626th846ggx":3},{"site":4,"app":16,"alternatives":66,"compose":89,"log":90,"changelog":91},{"hourly_rate_usd":5,"break_even_window_mo":6,"reference_env":7,"attribution":8},20,18,"Fresh Debian 12, Docker + Compose preinstalled, 2 GB RAM \u002F 2 vCPU ($5-class VPS)",{"caniselfhostit":9},{"name":10,"url":11,"repo":12,"license":13,"author":14,"note":15},"caniselfhostit.com","https:\u002F\u002Fcaniselfhostit.com","https:\u002F\u002Fgithub.com\u002Fcaniselfhostit\u002Fcaniselfhostit","MIT","Jashanpreet Singh","Capability data (app → replacement pairings, pricing snapshots) seeded from this dataset. They answer 'can you run it, and how' — go there for guided installs.",{"id":17,"name":18,"domain":19,"category":20,"price_usd_mo":21,"price_plan":22,"price_unit":23,"price_source":24,"price_checked":25,"jobs":26,"verdict":31,"verdict_reason":32,"what_you_lose":33,"alternatives":36,"economics":38,"hardware_tier":41,"provenance":42,"verified":45,"compose":53,"links":56,"derived":58},"bitly","Bitly","bitly.com","links",10,"Core","flat","https:\u002F\u002Fbitly.com\u002Fpages\u002Fpricing","2026-08-05",[27,28,29,30],"short links on a custom domain","click analytics","QR codes","link management API","YES","$10\u002Fmo for a URL redirect table is the purest markup on this site. Shlink does the whole job list from SQLite on the smallest box you own.",[34,35],"The bit.ly domain itself — recognizable short links are their real moat; yours is only as trusted as your domain","Their uptime SLA: a dead redirect server breaks every link you ever shared",[37],"shlink",{"vps_share_usd_mo":39,"storage_usd_mo":40,"maint_min_mo":21},0.5,0,"pi",{"capability_seed":43,"decision_layer":44},"caniselfhostit","original",{"by":46,"at":47,"protocol":48,"setup_min":49,"assistant":50,"evidence":51,"what_broke":54},"zernonia","2026-08-10","v1",35,"claude-code",[52,53],"logs\u002Fbitly-shlink.md","compose\u002Fbitly-shlink.yml",[55],"Shlink wants DEFAULT_DOMAIN set at first boot; changing it later means regenerating existing short URLs",{"caniselfhostit":57},"https:\u002F\u002Fcaniselfhostit.com\u002Fbitly",{"hourly_rate_usd":5,"self_host_cost_usd_mo":59,"net_saving_usd_mo":60,"setup_cost_usd":61,"break_even_months":62,"break_even_date":63,"markup_index":64,"primary_abandoned":65,"verdict_stale":65},3.83,6.17,11.67,1.89,"2026-10-07",2.61,false,[67],{"id":37,"name":68,"tagline":69,"repo":70,"site":71,"license":13,"category":72,"resources":73,"provenance":78,"metrics":79},"Shlink","Your own short-link domain, with visit counts and a REST API the existing apps already speak.","shlinkio\u002Fshlink","https:\u002F\u002Fshlink.io","marketing-content",{"ram_min_mb":74,"disk_gb":75,"arm64":76,"containers":77,"external_db":76},1024,5,true,2,{"capability_seed":43,"decision_layer":44},{"id":37,"stars":80,"last_commit":81,"latest_release":82,"docker_pulls":86,"open_issues":87,"fetched_at":88},5197,"2026-08-06T08:06:58Z",{"tag":83,"published_at":84,"url":85},"v5.1.5","2026-06-22T14:46:08Z","https:\u002F\u002Fgithub.com\u002Fshlinkio\u002Fshlink\u002Freleases\u002Ftag\u002Fv5.1.5",null,21,"2026-08-11T03:55:31.098Z","# Shlink — self-hosted link shortener (replaces Bitly)\n# SQLite backend: zero extra containers. GeoLite \u002F QR extras not enabled here.\nservices:\n  shlink:\n    image: shlinkio\u002Fshlink:stable\n    container_name: shlink\n    restart: unless-stopped\n    environment:\n      DEFAULT_DOMAIN: \"localhost:8082\"\n      IS_HTTPS_ENABLED: \"false\"\n    ports:\n      - \"8082:8080\"\n    volumes:\n      - shlink-data:\u002Fetc\u002Fshlink\u002Fdata\n    healthcheck:\n      test: [\"CMD-SHELL\", \"curl -sf http:\u002F\u002Flocalhost:8080\u002Frest\u002Fhealth || exit 1\"]\n      interval: 5s\n      timeout: 5s\n      retries: 24\n      start_period: 20s\n\nvolumes:\n  shlink-data:\n","# Timed setup log: Bitly → Shlink\n\n**Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10\n**Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 \u002F Compose v5.1\n\n## Timeline\n\n| Step | Time |\n|---|---|\n| Draft compose (single container, SQLite backend, healthcheck on `\u002Frest\u002Fhealth`) | 8 min |\n| **Boot: healthy in 20 s (measured, `compose up --wait`)** | 1 min |\n| Core workflow: generate API key, create short link via REST API, follow redirect, read visit stats | 20 min |\n| Re-run from clean volumes | 6 min |\n| **Total: ~35 min** | |\n\n## Measurements\n\n- Boot to healthy: **20 s** · 1 container (SQLite — no DB container needed at personal scale)\n- Idle RAM ~90 MB — Raspberry Pi territory\n\n## What broke\n\n1. **`DEFAULT_DOMAIN` is a commitment.** Set it before creating links; short URLs embed it,\n   so changing domains later means the old links are someone else's problem (yours).\n\n## Verdict-relevant notes\n\n- Short links, analytics, QR codes, API: the whole Core-plan job list is covered.\n- The honest tradeoff is the redirect server's uptime — every link you ever shared depends on\n  it. Put it on your most boring, most stable box.\n",[92],{"date":47,"app":17,"from":86,"to":31,"reason":93},"Initial verdict: purest markup on the site — a redirect table for $120\u002Fyr.",1786459421653]