Routing

One short link, the right place for everyone.

Send Berlin to the German store, iPhone taps into the App Store, and split the rest 50/50 between two landing pages, all from a single pcol.ink URL. Simple rules that stack into surprisingly capable flows.

Evaluation On the redirect
Conditions 5 signals
Splits Cookie-free
Rules · /launch
pcol.ink/launch 3 rules · 1 fallback
1
if country = DE
shop.acme.de
⋮⋮
2
else if device = mobile
apps.apple.com/…
⋮⋮
3
else split · 50 / 50
v2 · v3
⋮⋮
⤿
Fallback · always
acme.com/launch
+ add condition saved · just now
One link · four paths
/LAUNCH country = DE device = mobile split A / B fallback shop.acme.de German store App Store iOS · Android v2 / v3 weighted split acme.com everyone else
first match wins one 302
on the redirect
first-match · one hop
How it works

Build the ladder. Picolink runs it on every click.

Stack if/else conditions in the order you want them checked, set a fallback for everyone who doesn't match, and ship. Picolink evaluates them on the same hop as the redirect.

1
compose
country=DE⋮⋮
device=mobile⋮⋮
browser=safari⋮⋮
language=de⋮⋮
drag to reorder

Compose the rule, no code required.

Pick from click-side signals (country, device, OS, browser and language) and combine them in one rule. Conditions in a rule are AND-ed: a visitor has to match all of them. Drag to reorder.

2
first match wins
click · Berlin · mobile
country = US
country = DE HIT
device = desktop
fallback
stops at the first hit

Walked top-to-bottom, in your order.

Picolink runs the list once, takes the first rule that matches, and stops. Reorder a rule and you change who lands where. No hidden priority, no scoring. Just the ladder you wrote.

3
one redirect
pcol.ink/launch 302
shop.acme.de/launch RULE #1 · COUNTRY = DE
1 hop only

One redirect, straight to the destination.

The visitor gets a single 302 to the chosen URL. No middle page, no router subdomain, no extra DNS lookup. Same behaviour as a plain link, just pointed at the right place.

Under the hood

Predictable rules. Sensible defaults.

Routing gets ugly when it tries to be clever. Picolink keeps it boring: explicit signals, explicit order, explicit fallback. Small parts that compose into whatever flow you need.

01

Five signals, read on the redirect.

Every condition comes from request metadata the redirect server already has: IP-derived country, the device, OS and browser from the User-Agent, and the Accept-Language header. Nothing on your destination page changes.

country DE · JP
device mobile
os iOS · win
browser safari
language de · ja · es
02

First match wins, by the order you set.

The list you see is the list that runs. Picolink doesn't reweight or score. It walks top-to-bottom, takes the first match, and ignores the rest. Reordering is dragging. No surprises in production.

1 if country = US SKIP
2 else if country = DE MATCH ✓
3 else if device = mobile NOT REACHED
⤿ fallback acme.com NOT REACHED
03

Simple parts. Complex flows.

Conditions AND together inside a rule, rules form a first-match priority ladder, and each rule can fan out to a weighted split. That's enough to express "German mobile → store, German desktop → site, everyone else → A/B test" on one link.

country = DE device = mobile
AND
A · 70 B · 30
04

A/B splits without the cookie tax.

Give a rule several destinations with weights. Picolink hashes a few stable request signals into a bucket, so the same visitor always lands on the same variant: no cookie, no flicker, no consent banner.

A · 50 B · 30 C · 20
landing-v250%
landing-v330%
holdout20%
05

Every link has a fallback.

If nothing matches (odd User-Agent, missing geo, a country you didn't list), the fallback catches it. A routed link never dead-ends in a 404.

country = DE
device = iOS
language = ja
acme.com/launchFALLBACK
06

Evaluated inline. One hop.

Rules run in the same request that issues the redirect: no extra service, no second lookup, no router subdomain. The visitor sees exactly one 302.

visitor picolink · eval → 302 → dest
Why teams reach for it

One URL, four jobs. A small sampler.

Routing is what teams add when a short link has to follow the visitor: app stores, country stores, partner pages, experiments. Things you used to need four separate links for.

One QR, both app stores.

iOS taps go to the App Store, Android to Google Play, desktop to a clean preview page. One sticker on the back of the phone case.

Country-aware launch links.

One link in the press release. German readers land on the German page, Japan on a translated mirror, everyone else on the global page.

Cookie-free A/B tests.

Split traffic between two landing pages by weight, no tag manager. The same visitor stays on the same variant, so your numbers stay clean.

Stacked, not scattered.

Combine geo, device and a split in one link: German mobile to the store, German desktop to the site, the rest into an experiment.

The fine print

Specs, in plain numbers.

Signals 5 conditions Country, device, OS, browser and language, all read from the request and AND-ed within a rule.
Rules per link 10 max Walked in order, first match wins. Reorder by dragging. The list is the logic.
Split 5 weighted Up to five weighted destinations per rule, chosen by a stable cookie-free hash.
Fallback 1 always Every routed link keeps its default destination as a catch-all. Picolink never serves a 404.

Turn one short link into a small router.

Open any link, add a rule, stack a few conditions. No SDK, no tag manager, no extra hop. Just the right destination for everyone.