## Context

The SSHKey model exists in the database but there's no API to create, list, or manage SSH keys. Users need SSH keys for git operations with external providers.

## Goals / Non-Goals

**Goals:**
- Generate Ed25519 SSH key pairs via API
- Encrypt private keys with Fernet before storage
- List user's SSH keys with public key display
- Support copying public keys to clipboard
- Allow deletion of SSH keys

**Non-Goals:**
- RSA key generation (Ed25519 only)
- Private key display/decryption to users
- SSH key editing (name changes only via update)
- Integration with git operations (separate feature)

## Decisions

1. **Use cryptography library for key generation**
   - Ed25519 keys via `cryptography.hazmat.primitives.asymmetric.ed25519`
   - Fernet symmetric encryption for private keys
   - Already in project dependencies

2. **Store private keys encrypted**
   - Never expose private keys through API
   - Fernet key derived from application secret
   - One-way encryption, no decryption endpoint

3. **Frontend uses simple table/list view**
   - Name, created date, public key preview
   - Copy button for full public key
   - Generate and delete actions

## Risks / Trade-offs

- **[Fernet key rotation loses access to old keys]** → Document that rotating JWT_SECRET effectively locks old SSH keys
- **[Private key storage is only as secure as Fernet key]** → Store Fernet key securely, use strong application secret

## Migration Plan

1. Create API endpoints
2. Add frontend page
3. Register router
4. Run tests

## Open Questions

- Should we allow SSH key naming during generation?
