Open links in your browser from Zapier, n8n, or any webhook-capable automation tool.
- Install the browser extension - generates a unique webhook URL
- Copy your webhook URL - shown in the extension popup
- Send links to the webhook - from Zapier, n8n, or any tool
- Links open automatically - in your browser within ~30 seconds
| Browser | Status |
|---|---|
| Chrome / Edge | Load unpacked |
| Firefox | Load temporary |
See the extension README for installation, development, and self-hosting configuration.
Click the "Deploy with Vercel" button above. During setup:
- Connect your GitHub account
- Configure the Upstash Redis integration (automatically provides Redis credentials)
- Deploy!
That's it! All environment variables have sensible defaults. The app will auto-detect your Vercel URL.
# Clone the repository
git clone https://github.com/tobyurff/openthatlink.git
cd openthatlink
# Install dependencies
pnpm install
# Start Redis locally
redis-server
# Start the dev server
pnpm devAdd links to the queue for the Chrome extension to open.
GET /api/:secret?link=example.com
GET /api/:secret?link=a.com,b.com,c.com
POST /api/:secret with {"links": ["example.com", "other.com"]}
Query Parameters:
link- Single URL or comma-separated URLslinks[]- Array of URLs
JSON Body:
link- Single URL stringlinks- Array of URL strings
Response:
{
"ok": true,
"queued": 2,
"links": ["https://example.com/", "https://other.com/"],
"message": "Queued 2 link(s)."
}Used by the Chrome extension to retrieve and consume queued links.
GET /api/:secret/extension-poll
Response:
{
"ok": true,
"delivered": 2,
"links": ["https://example.com/", "https://other.com/"]
}All environment variables are optional and have sensible defaults.
| Variable | Default | Description |
|---|---|---|
APP_NAME |
My Personal OpenThat.Link |
Application name |
PUBLIC_BASE_URL |
Auto-detected from Vercel | Public URL of your deployment |
RECOGNIZABLE_TOKEN |
OTL |
Token embedded in secrets |
SECRET_TOTAL_LEN |
16 |
Total length of generated secrets |
SECRET_INSERT_POS |
8 |
Position to insert token |
QUEUE_KEY_PREFIX |
otl:q: |
Redis key prefix |
MAX_QUEUE_SIZE |
100 |
Max links per queue |
MAX_DELIVER_PER_POLL |
10 |
Max links returned per poll |
QUEUE_ITEM_TTL_SECONDS |
172800 |
Queue item TTL (2 days) |
For Vercel (Production): The Upstash integration automatically provides credentials. We support both naming conventions:
UPSTASH_REDIS_REST_URL/KV_REST_API_URLUPSTASH_REDIS_REST_TOKEN/KV_REST_API_TOKEN
For Local Development:
REDIS_URL- Local Redis connection string (default:redis://localhost:6379)
openthatlink/
├── apps/
│ ├── web/ # Next.js web app
│ └── extension/ # Browser extension (Chrome, Firefox, Edge)
├── packages/
│ └── shared/ # Shared types and utilities
├── .env.example
├── pnpm-workspace.yaml
└── README.md
| Command | Description |
|---|---|
pnpm dev |
Start web app dev server |
pnpm build |
Build web app for production |
pnpm ext:dev |
Start extension dev mode (Chrome) |
pnpm ext:dev:firefox |
Start extension dev mode (Firefox) |
pnpm ext:build |
Build extension for Chrome |
pnpm ext:build:firefox |
Build extension for Firefox |
pnpm ext:build:all |
Build extension for all browsers |
pnpm ext:zip |
Build + zip for Chrome Web Store |
pnpm ext:zip:all |
Build + zip for all stores |
This project is designed to be easily white-labeled. Simply set the environment variables:
APP_NAME- Your custom app namePUBLIC_BASE_URL- Your custom domainRECOGNIZABLE_TOKEN- Your custom token (e.g., your initials)
MIT