Adds human-readable aliases for project groups (the wrapping label
around services), useful when orchestrators like Coolify or Dokploy
generate cryptic project keys.
- New server module `src/server/project-aliases.ts` with load/save
helpers, a 64-char max, and control-char sanitization.
- New endpoints: GET /api/project-aliases, PUT /api/project-aliases,
DELETE /api/project-aliases/:project. Aliases also returned in
/api/init for first-paint hydration.
- GroupNode header is now click-to-edit: short names prefill so users
can tweak them, long cryptic names start blank for a fresh alias.
The compose suffix (PROD/DEV/etc) stays visible and is not part of
the alias. Reset icon appears only when an alias differs from the
original project key.
- App.tsx wires the alias state, the project filter dropdown shows
the alias plus the compose suffix list joined by " - ".
- MonitoringPage uses the alias in: project filter dropdown, the
totals card title, and per-service card subtitles (which show only
THAT service's compose, not the whole project list).
- engine/layout.ts exports getComposeKey and stores the raw `project`
key in group node data so the same alias scope matches the filter.
- i18n: 4 new keys (EN + ES) for rename / reset / save / cancel.