A draggable bubble that opens a searchable list of every internal tool. It's running on this page right now — grab it, drag it anywhere, click it.
Add one line before </body> in any 986 app. Nothing else.
<script src="https://launcher.986enterprise.com/v1.js" defer></script>
In Next.js, put it in the root layout:
import Script from 'next/script'
<Script src="https://launcher.986enterprise.com/v1.js" strategy="lazyOnload" />
| Attribute | Default | What it does |
|---|---|---|
data-role | — | Shows tools tagged for this role, plus all untagged ones. |
data-accent | #14A99E |
Accent colour of the bubble and highlights. |
data-hotkey | alt+space |
Keyboard toggle. Use off to disable. |
data-hide-on | — | Comma-separated path prefixes to stay hidden on, e.g. /login,/signup. |
The bubble remembers where each person parked it, per browser. It never renders inside an iframe, and all its styling lives in a shadow root — it cannot leak into or inherit from the host app.
The list comes from public.launcher_tools in the shared
986-helpdesk Supabase project. Add a row, and it appears in every
app within ten minutes — no redeploy anywhere.
insert into public.launcher_tools
(name, description, url, category, icon, sort_order)
values
('New Tool', 'What it does', 'https://…', 'Work', '🧰', 130);
Set is_active = false to hide one. Set
roles = '{admin,pic}' to restrict it. Leave
roles null and everyone sees it.
This table is world-readable by design — the widget reads it with the public key. Tool names and URLs only. Never put PHI, credentials, or private notes in it.
__986Launcher.open() // open the panel
__986Launcher.close()
__986Launcher.refresh() // drop the cache, re-fetch the tools
__986Launcher.reset() // put the bubble back in the corner
__986Launcher.destroy()