Back to Blog

Shipping a Feature I'll Never Use: the Ctrl+K Command Palette

This week EF-Map shipped a feature I will never use, and I'm completely fine with that. Press Ctrl+K anywhere on the map and a command palette appears. Type route A4T-SL7 O8B-FS7 and the route plots on the live 3D map, exactly as if you'd clicked through the routing panel. Type kills and the latest killmails print inline. Everything autocompletes as you type — commands, flags, and all 24,000+ EVE Frontier system names, fuzzily matched, with their regions shown alongside. It went from request to production in about a day, most of that spent on polish. And I, the person who runs this site, will never once reach for it, because I am a mouse person to my bones.

The request

Scetrov is one of the other builders in the EVE Frontier community — he wrote evefrontier-rs, an open-source Rust toolkit that does pathfinding and scouting for the game from a terminal. He doesn't use the mouse much. His browser runs Vimium (a plugin that makes web pages keyboard-navigable), and his ask was simple: he'd love a "pure EF-Map terminal" — somewhere he could just type route X Y instead of clicking.

My first reading of that was a whole separate terminal page. When we checked back with him, what he actually wanted was smaller and better: a command box behind a shortcut, inside the main interface, where typing a command does exactly what clicking the GUI does. VSCode calls this a command palette. Discord, Slack and GitHub all hide one behind the same Ctrl+K. In his words: "it's 100% a power user thing that 90% of people probably wouldn't use, but some of us come from a time before mice existed."

Vibe coding, but inverted

There's a running conversation on Reddit and in engineering blogs about "vibe coding" — people shipping AI-written code they haven't read and don't understand, and why that's dangerous. We've written before about how this site is built: I describe, the model builds, and honesty about that arrangement matters. This feature turned the usual worry on its head in a way I found genuinely funny.

The thing I didn't understand this time wasn't the code. It was the feature. I understand perfectly well what a command palette is at a high level. What I don't have — what I will never have — is the instincts of the person it's for. My first review notes were pure GUI-brain: shouldn't you be able to drag this window around? Pin it somewhere? Give it a minimize button like our other panels? Clicking off it closes it — that feels naff, surely that's a bug?

The model pushed back, politely and with receipts: command palettes are transient by convention. They pop up centered, dim everything behind them, and vanish on Escape — summon, command, disappear. That ephemerality is the point; it's why keyboard people love them. Parking one in a corner would make it a different, worse feature. We compromised exactly once: there's a small ✕ in the corner now, for anyone who opens it by accident and doesn't know the way out.

Then Scetrov replied to my questions, unprompted, describing the exact conventions the model had already cited — down to the detail that pressing Escape twice is the norm (once cancels what you're typing, twice closes the palette; Vim users will recognise the shape of that). The palette now does precisely this. Two parties in this project knew the conventions of a community I'm not part of, and neither of them was me. My job was different: I caught the visual jank, called the priorities, and owned the decision about what shipped. That division of labour is, I'd argue, what vibe coding looks like when it's done honestly.

The foundation nobody uses

Here's the part that makes the speed less magical and more interesting. Months ago we built natural-language AI commands for EF-Map — type or speak "plot a route from Nod to Brana" and an AI model parses it into a structured command that drives the map. Honest assessment: almost nobody uses it. Talking to your star map turns out to be slower than clicking it, and the novelty wears off in about ninety seconds.

But building it forced something valuable into existence: a structured command layer. To make natural language drive the map, every meaningful action — plot a route, select a system, set a jump range, open a panel, toggle an overlay, run the Scout Optimizer — had to be expressible as a typed command object with a single dispatcher behind it. That layer sat there, mostly idle, for months.

The command palette is a thin, deterministic grammar bolted onto that same layer. No AI in the loop this time — route, select, scout and friends parse in plain code and dispatch the same actions the voice feature used. That's why the first working version took about two hours rather than two weeks, and it's why every palette command behaves identically to its GUI equivalent: they are literally the same code path. A feature that "failed" became the foundation for one that a real user asked for by name. In this kind of development you often can't tell which work is a dead end and which is load-bearing until much later.

What's in the palette

  • route [from] <to> with jump range, fuel/jumps/explore optimization, and smart-gate options — plots on the live map
  • select, reachable, bubble, range — selection and reachability, keyboard-only
  • scout, yeet, trip, shiprange — the Scout Optimizer, Yeet Planner and calculators
  • system, gates, nearby, search, kills — answers printed inline, from data already in your browser
  • panel <name> — opens any panel: killboard, intelligence, blueprint calculator, System Finder, and more
  • Live autocomplete for everything, fuzzy system names (a4tsl7 finds A4T-SL7), command history, and a help command

One design constraint mattered to me from the first message: this is not an API. Nothing new is exposed for scripts to call. The palette runs entirely in your browser against the same locally-loaded map database and routing engine the GUI uses. It's a keyboard skin, not a service.

The feedback loop did the designing

The first preview went to Scetrov within hours of his message. His one-line reply — "the main thing I would love to see is auto-complete on the entities" — exposed that our Tab completion, while present, was invisible: nothing appeared until you pressed Tab, so it didn't read as autocomplete at all. The visible as-you-type dropdown shipped the same evening. His second note supplied the Escape convention. Between his replies, my own pass caught a layout niggle where our rotating tip pill could slide under the toolbar, and turned up a small pre-existing bug: the AI command for opening the settings panel had been pointing at a panel id that doesn't exist, silently doing nothing. Wiring the palette through the same path found and fixed it.

None of these rounds took longer than a couple of hours, and that's the actual headline for me. Not that an AI wrote a command palette — that a niche power feature for EVE Frontier's most keyboard-committed players could go request → prototype → user feedback → convention fixes → production inside a day or so, without the site's operator ever needing to become someone who uses command palettes. A power user asked for a power feature and the cost of saying yes was low enough to just say yes.

Try it, and ask for more

It's live now on the map. Press Ctrl+K (Cmd+K on Mac), type help, and go from there — the Help & Guide panel has a full Command Palette section too. If there's a command you'd use that isn't there, email [email protected] and tell us; the command layer makes most additions cheap, and as this whole story shows, we don't need to be the target audience to build it properly for you.

Related Posts

command palette keyboard navigation vibe coding eve frontier ai development power users autocomplete ef-map