RULER FIELD · ELEVATION 1:1SHORTENER INPUT · TYPED STATErakhmanov.xyz/craft05101520253035404550TITLEDESCRIPTIONPRESS ENTER TO PUBLISH1470 / 5 SLOTSTRACK_W 700 = 50 SLOTS × 14364876CARET 2 × 28 · BLINK 1.8sGEIST MONO 20 · TRACK +2MAJOR 22 / MINOR 12ENRICHED ON PUBLISH
EXPLODED AXONOMETRIC · LAYER ORDER01 CHAR ROW36 · GLYPHS02 RULER48 · 51 TICKS03 INDEX76 · ×504 METATITLE / DESCSTACK ORDER · TOP TO FOOT
Blueprint
Tolerances
X.X
± 0.4
X.XX
± 0.20
X.XXX
± 0.100
ANGLES
± 0.5°
Do not scale drawings
XSXL
rakhmanov

Notice of unproprietary property:

Please do not maintain confidentiality.

Use it as you see fit. With love n shi.

TitleRuler
Rev.01
SwagMAX
SHT1OF1

An overdesigned URL shortener, because I hate generic ones.

Built in one super early morning.

It's mobile unfriendly.

I woke up and thought: why isn't there a URL ruler?

The idea

You have long links. You want to shorten them. You use something like bit.ly. Why?

I am going to argue that such URLs offer a negative UX and disincentivise clicking.

One critical function of domains is to signal credibility. The moment it's a bitly slop of characters you are neither aware of where the link is taking you nor are certain you can trust it.

Basically - build you own shortner please

Surfaces

Well, I wanted to. But given it's 2026 and you can't have something that is not agentic - how do we make a URL shortner agent?

This microproject comprises of a web ui, a REST/MCP transport and a slack agent that can use the same tools the web UI has.

Read until the end for a neat "next steps" concept around link retrieval.

Fig. 02A link created on the web UI is stored in ruler and returned to a teammate asking in Slack; any MCP surface can plug into the same coreweb uislackruleranything mcp/ab12xypitch deck?/ab12xy
Multi-surface build, because even URL shortners can't escape the agents

Logic Layer

Firstly - all operations run the same server side methods but are accessible via either a REST API or an MCP.

Okay now that "we're building for agents" I needed to quickly think of semantic retrieval too. Enrichment based on the metadata from which we can create an embedding and store it in postgres. A nonchalant vector search should do the trick.

Importantly the embeddings / enrichment shouldn't be blocking to the core task at hand so we delegate it into a durable background function that handles the retries / etc.

Fig. 03REST and MCP requests pass through one shared resource layer to Postgres; enrichment workflows run asynczodrestmcpresourcespostgresworkflows
Building for agents, yeah

Result

I think it turned out pretty fun! Building this wouldn't make sense until Vercel's team cooked with eve. Minimal boilerplate to push out slack agents with cool observability and infra!

No mobile friendly UI for now, as this was also an exercise on superfluous microinteractions that only make sense on desktop.

The Ruler agent shortening a link from inside Slack
Slack.
The Ruler shortener on the web
Web.

Decisions

Design DecisionOver the top UI + solid API that is agent ready + semantic lookup of the links. Lay out some foundations for good software design with durable functions at least.
SearchNothing fancy - simple embeddings via openai and pgvector + fallback on character matching.
AuthUnkey keys, per-key limits, one verification path for both transports.
StackNext.js 16, React 19, Tailwind 4, motion, eve · Supabase Postgres + pgvector · Vercel, two deploys
BuildOne early morning: an evening of scaffold, two hours of build

further concept

How would we design it if it was deployed in at a large org?

The thing about links is that they are frequently lost and the slacking in channels or dms is a valid reason to have a tool there that answers your questions.

However - as we scale and may have many matches, how do we handle both efficient lookup but also relevance where confidence is not helpful?

The concept is to iteratively create a revealed org chart. As people use or request links, we could start mapping the connections out and either filter the DB requests or utilise this information for ranking purposes.

Probably overengineering here. Thanks for reading!

Fig. 04People in an org exchanging links; frequent pairs earn a confirmed edgeARMKJTSOELDP
Pairs that exchange often enough are heuristics for filtering or ranking purposes