Skip to main content

The YAML File That Fixed My Context-Switching Problem

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!