code
Clone this repository
https://tangled.org/bretton.dev/coves-mobile
git@knot.bretton.dev:bretton.dev/coves-mobile
For self-hosted knots, clone URLs may differ based on your setup.
Prevents users from being trapped in the app when their atProto profile
is misconfigured or not found. Adds optional secondary action support
to FullScreenError widget.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Integrate the new social.coves.actor.getComments backend endpoint
into the profile page's Comments tab:
- Add getActorComments() method to CovesApiService
- Add CommentsState model with immutable list (List.unmodifiable)
- Add ActorCommentsResponse model with proper documentation
- Add loadComments/loadMoreComments/retryComments to UserProfileProvider
- Wire up lazy loading in profile screen (loads on first tab switch)
- Display comments using existing CommentCard widget
- Handle pagination, loading states, and errors
- Properly handle 404 as "User not found" (not empty state)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add banner image support with gradient fallback
- Add avatar drop shadow for depth
- Display handle and DID (with QR icon) instead of display name
- Add "Joined" date with calendar icon
- Add tabbed content bar with icons (Posts, Comments, Likes)
- Implement frosted glass effect on collapsed header
- Show Memberships stat instead of Communities/Reputation
- Add UserProfile model and UserProfileProvider
- Add TappableAuthor widget for navigating to profiles
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tapping the feed tab while already on the feed screen now scrolls the
current feed to the top, matching common social media app behavior.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add hasMore prop to FeedPage widget to track pagination state
- Show "You're all caught up!" message with checkmark when feed ends
- Add _shouldShowFooter getter for cleaner footer logic
- Prevents confusing bounce behavior when reaching end of feed
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Adjust post detail text sizing to match feed (title 16px, text 14px)
- Remove bold styling from title and author handle
- Reduce author avatar size from 24px to 20px
- Keep external embed images at same height as feed view (180px)
- Add sources section for megathread posts with clickable source links
- Add EmbedSource model with URI validation and security checks
- Add SourceLinkBar widget matching ExternalLinkBar styling
- Improve ValueKey comment clarity in feed_page.dart
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add external link embed support (link cards with thumbnail, title, description)
- Add BlueskyExternalEmbed model with domain extraction
- Improve quoted posts: show handle, timestamp, media placeholder
- Handle unavailable quoted posts (blocked, deleted, detached)
- Add official Bluesky SVG icons (reply, repost, like, logo)
- Match Bluesky's dim theme colors exactly
- Remove text truncation for posts (Bluesky has 300 char limit)
- Add formatCount and formatFullDateTime utilities
- Add comprehensive tests for Bluesky post models (67 tests)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add UI components to render Bluesky crosspost embeds in feeds with
Bluesky-styled post cards.
New files:
- lib/models/bluesky_post.dart: Data models for BlueskyPostEmbed,
BlueskyPostResult with URL helpers and robust JSON validation
- lib/constants/bluesky_colors.dart: Bluesky brand color palette
- lib/widgets/bluesky_action_bar.dart: Disabled action bar showing
engagement counts (view-only)
- lib/widgets/bluesky_post_card.dart: Main card widget with avatar,
author info, text, media placeholder, quote posts, and action bar
Changes:
- lib/models/post.dart: Add BlueskyPostEmbed parsing for
social.coves.embed.post type, fix nullable text field handling
- lib/widgets/post_card.dart: Conditionally render BlueskyPostCard
when embed is present
- lib/services/coves_api_service.dart: Add catch blocks for parsing
errors to prevent silent failures
Features:
- 42px circular avatar (tappable → opens Bluesky profile)
- Author name, handle, and relative timestamp
- Post text with max 6 lines
- Media placeholder with "View on Bluesky" link
- Nested quote post support (1 level)
- Disabled action bar with reply/repost/like counts
- "View on Bluesky" footer link
- Graceful unavailable post handling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>