There’s a particular kind of frustration that only developers who do lots of client work understand: the moment you switch from one project to another and realize you can’t remember where anything lives.
Not the code. The stuff around the code. The staging URL. The SSH alias. The Jira board. The Figma file. The Slack channel. The 1Password entry for the admin credentials. The contact who actually knows what the client wants.
I’d been solving this with a combination of bookmarks, grouped tabs, sticky notes, and a mental filing system that was quietly falling apart. It was hard to maintain and find individual bookmarks, grouped tabs got messy quick, and sticky notes get lost and my monitor looked like a meme. So I built something better using the tools I already leveraged.
The Idea: A YAML File Per Client
The setup is simple enough to explain in one sentence: every client gets a .yml file in a central directory on my machine, and a Raycast extension reads those files and puts everything one keyboard shortcut away.
~/.config/project-resources/
└── acme.yml
└── site1.yml
└── site2.yml
└── hounder.yml
Each manifest describes the full context of a project — environments, useful URLs, 1Password credential references, and contacts:
name: Acme Corp
type: drupal
stack: [drupal10, acquia, lando]
repo:
path: ~/Sites/acme
url: https://github.com/hounder/acme
environments:
production:
url: https://www.acme.com
ssh: [email protected]
dashboard: https://cloud.acquia.com/a/applications/xxx
local:
url: https://acme.lndo.site
resources:
- name: Jira Board
url: https://acme.atlassian.net/browse/ACME
- name: Figma Designs
url: https://figma.com/file/acme-figma-design
credentials:
- name: Drupal Admin
ref: op://Clients/Acme Drupal Admin/password
contacts:
- name: John Smith
email: [email protected]
The credentials block is just a 1Password op:// reference — the manifest itself has no secrets in it, so I can version control the whole directory without worrying if I want to.
Why Raycast
I thought about building this into Env Menu, my menubar app for managing local dev environments. However, it felt like too much of a stretch to have these files live alongside Lando or DDEV environments and it also would have made Env Menu far too complicated from it's original goal. But Raycast already lives at ⌘-Space on my machine, and the extension ecosystem made this genuinely easy to build. The flow ended up being exactly what I wanted:
⌘-Space → "projects" → client name → select resource → Enter
Three keystrokes from anywhere on my Mac to the right Jira board or the right SSH command. No context switching to a browser. No hunting through bookmarks folders.
The extension scans the manifests directory where all the yaml files live, builds a list of projects, and drills down into whatever you need. Environments open in the browser. SSH commands copy to clipboard. Contacts open in Mail. It’s not complicated — it’s just all in one place.
It Sounds Small Because It Is Small
I want to be honest about the scope here. This isn’t a grand architecture. It’s a YAML schema and a Raycast extension. The whole thing came together in a Saturday afternoon after mowing the lawn.
But the before-and-after is real.
Before: I'd prep for a client call and spend minutes gathering up or trying to find a URL I definitely had open within the last week.
After: I can join the call and bring up the right things while everyone is saying, "Hello".
The right tool doesn't have to be complicated, as long as it solves a problem or makes a process easier. Win!