feat: add onboarding flow for first-time users
Redirect users to /onboarding after OAuth if they don't have a Grain profile.
The onboarding page prefills with their Bluesky profile data (displayName,
description, avatar). Users can save their profile or skip to continue.
- Add hasGrainProfile and getBlueskyProfile queries to grain-api.js
- Add updateProfile and createEmptyProfile mutations to mutations.js
- Create grain-onboarding.js component with avatar crop support
- Modify OAuth callback to check profile and redirect accordingly
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>