GoLinks
Type: Software Status: In Progress Deadline: TBD (side project, no rush) Created: 2026-03-25
What is this?
A personal go link shortener — type go/docs in your browser and get redirected to the real URL. Three components: a Chrome extension for interception + quick-create, a Go backend API with SQLite, and a simple web UI for browsing/searching all links.
Motivation
Go links are high-leverage productivity tools common inside top tech companies (Google, Stripe, etc.), but there’s no clean, lightweight, self-hosted option that’s easy to run personally AND enterprise-approvable. This fills that gap — start personal, grow to team/org use without re-architecting.
What does success look like?
A working system that I use daily, packaged well enough that someone else could set it up from the README in under 10 minutes. No security footguns, no external dependencies beyond the single binary + Chrome extension.
Technical
- Stack: Go backend (net/http + go-sqlite3), Chrome extension (Manifest V3), vanilla HTML/JS web UI
- Repo:
~/projects/golinks - Deploy target: Local binary to start; designed for easy Docker/VM deployment later
- Intended users: Me first, then shareable with friends/coworkers; designed for eventual enterprise approval
Architecture
┌─────────────────┐ ┌──────────────────────┐
│ Chrome Extension │────▶│ Go Backend (:80) │
│ (Manifest V3) │ │ ┌──────────────────┐ │
└─────────────────┘ │ │ SQLite DB │ │
│ └──────────────────┘ │
┌─────────────────┐ │ ┌──────────────────┐ │
│ Browser (Web UI)│────▶│ │ Static HTML/JS │ │
└─────────────────┘ │ └──────────────────┘ │
└──────────────────────┘
Design principles
- Single binary — no runtime deps, no managed DB
- Auth middleware slot — noop locally, plug in SSO/OIDC later
- Audit log — every create/update/delete logged with timestamp + user
- No external calls — fully self-contained, nothing phones home
Roadmap
Phase 1 — Core (done) M-1 through M-7. Backend, web UI, Chrome extension, Docker, launchd, Render config, tests + CI. The tool works end-to-end on a single machine.
Phase 2 — Personal polish (done)
M-8: Single make setup command, dashboard UX (inline edit, sort, favicons), import/export, extension badge + omnibox, aliases.
Phase 3 — Multi-device M-9: Deploy a real Render instance. Extension falls back to remote when local is unavailable. API key auth for remote access. HTTPS. Decide sync model (remote-primary vs bidirectional).
Phase 4 — Open source M-10: License, cleanup, Chrome Web Store listing, public repo, launch post. Goal: someone can go from zero to working go links in under 10 minutes.
Phase 5 — Enterprise M-11: Fork to Georgian GitHub. SSO/OIDC auth, corporate DNS, enterprise Chrome extension distribution, admin UI, security review, IT runbook. This is a separate fork — the open source version stays clean and personal-first.