new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Link Guide is a modern, minimalistic URL shortener that transforms long links into concise, trackable URLs.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A modern, self-hosted URL shortener with advanced features including multiple redirect modes, password protection, custom pages, and Cloudflare Turnstile integration.README 전문 보기 ↗A modern, self-hosted URL shortener with advanced features including multiple redirect modes, password protection, custom pages, and Cloudflare Turnstile integration.
For automated installation on Linux servers:
curl -fsSL --retry 5 --retry-delay 5 --retry-all-errors https://github.com/tonyliuzj/link-guide/releases/latest/download/link-guide.sh -o link-guide.sh && chmod +x link-guide.sh && bash link-guide.sh
The download is retried automatically because the file is briefly unavailable while a new version is being published.
This will download and run the installer, which supports both systemd and Docker deployments. Choose Docker install (Compose) in the installer to run the published Docker image.
The installer shows a menu: Install, Update, Start, Stop, Restart, Status, Logs and Uninstall.
Run the installer again and choose Update. It pulls the latest code, then:
Local edits to package-lock.json are discarded during an update. Any other locally modified file is stashed (not lost); restore it afterwards with git stash pop.
Always download a fresh link-guide.sh with the command above before updating, so you run the newest installer. Existing databases are migrated automatically on the next start.
The Docker image is published to Docker Hub for linux/amd64 and linux/arm64:
tonyliuzj/link-guide:latest
tonyliuzj/link-guide:<commit-sha>
A new image is published after every push to main, once lint, type checking and tests pass.
docker run -d \
--name link-guide \
--restart unless-stopped \
-p 3000:3000 \
-v link-guide-data:/app/data \
-e SESSION_PASSWORD="$(openssl rand -base64 32)" \
-e AUTH_TRUST_HOST=true \
-e DATABASE_URL=/app/data/link-guide.sqlite \
tonyliuzj/link-guide:latest
Visit http://localhost:3000/setup after the container starts.
git clone https://github.com/tonyliuzj/link-guide.git
cd link-guide
cp example.env.local .env.local
Edit .env.local for Docker (see Environment variables for everything you can set, including SMTP):
SESSION_PASSWORD=replace-with-openssl-rand-base64-32
AUTH_TRUST_HOST=true
DATABASE_URL=/app/data/link-guide.sqlite
PORT=3000
Optional Compose settings go in .env:
HOST_PORT=3000
CONTAINER_PORT=3000
DOCKER_IMAGE=tonyliuzj/link-guide:latest
Start with the Docker Hub image:
docker compose pull
docker compose up -d --no-build
Or build locally from the checkout:
docker compose build
docker compose up -d --no-build
To update later, run docker compose pull && docker compose up -d --no-build again. The database lives in ./data, which is kept across updates.
Useful commands:
docker compose ps
docker compose logs -f
docker compose down
git clone https://github.com/tonyliuzj/link-guide.git
cd link-guide
npm install
Copy the example environment file and edit it:
cp example.env.local .env.local
Example .env.local:
SESSION_PASSWORD=your-random-32-character-secret-here
AUTH_TRUST_HOST=true
DATABASE_URL=./data/linkguide.db
PORT=3000
Generate a session secret with openssl rand -base64 32. All options are listed under Environment variables.
npm run build
Development mode:
npm run dev
Production mode:
npm start
http://localhost:3000/setup/)The app will create the database automatically if it doesn't exist.
| Variable | Required | Description |
|---|---|---|
SESSION_PASSWORD | Yes | Random secret used to sign sessions. Generate with openssl rand -base64 32. |
AUTH_TRUST_HOST | Recommended | Set to true behind reverse proxies, custom domains and production hosts. Host trust is on by default unless this is explicitly false. |
DATABASE_URL | No | SQLite file path. Default ./data/linkguide.db (the installer and Docker use link-guide.sqlite). |
PORT | No | Server port. Default 3000. |
APP_URL | No | Public base URL used in emailed links. Defaults to the site domain from settings. |
SMTP_HOST | For email | SMTP server. Email features turn on when SMTP_HOST and SMTP_FROM are both set. |
SMTP_FROM | For email | Sender address, for example LinkGuide <[email protected]>. |
SMTP_PORT | No | Default 587. |
SMTP_USER, SMTP_PASSWORD | No | Credentials, if your server requires login. |
SMTP_SECURE | No | true for implicit TLS, false for STARTTLS. Defaults to true only on port 465. |
If deploying behind nginx, add these headers to your proxy configuration:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Client IPs (used for rate limiting and click stats) are read from CF-Connecting-IP, X-Real-IP, or the last X-Forwarded-For entry, so run the app behind a proxy that sets one of them.
Set the SMTP variables above in .env.local to enable:
Under Settings → Email, admins can see whether SMTP is configured and send a test message to themselves. This is the quickest way to check your SMTP settings; when sending fails the message includes a hint if SMTP_SECURE looks wrong.
Under Settings → Backup & Restore, admins can download a snapshot of the whole database and restore one from a file. A restore replaces all current data in place, signs everyone out, and saves the previous contents next to the database as <database file>.pre-restore. Backups from older versions restore too; columns they lack take their defaults. Backups contain password hashes and Turnstile secret keys, so store them privately.
Settings also has Keep click statistics for (days); older click records are deleted automatically (0 keeps everything). Each link's edit page has an Export clicks (CSV) button.
Cloudflare Turnstile is configured per-domain in the dashboard (not in .env):
Site-wide Turnstile (guest link creation, login and signup) is configured under Settings.
Manage domains in Dashboard > Domains:
Admin users can manage users in Dashboard > Users:
Emails are case-insensitive. Demoting or deleting a user takes effect immediately, even for sessions that are already signed in.
Prevent specific short codes in Dashboard > Blacklist. Application routes such as login, signup, api, forgot-password, reset-password and verify-email are reserved by default.
X-Content-Type-Options, Referrer-Policy and X-Frame-Options.npm audit to check.LinkGuide uses SQLite with automatic initialization and migrations. The database and data/ directory are created automatically on first run.
address already in use when starting Docker: if the app was previously installed directly, the installer stops and disables its systemd service first (both modes use the same data/ folder, so nothing is lost) and retries if the old container is still releasing the port. If something else is using the port, the installer prints the process and its PID. Stop it or change HOST_PORT in .env.SMTP_SECURE and the port.npm run dev # start the dev server
npm test # unit and route tests (vitest, uses a temporary SQLite database)
npm run lint
npx tsc --noEmit
GitHub Actions runs lint, typecheck and tests before every Docker image publish, and on pull requests.
MIT