Patrick Britton
93a2c45a92
feat: Reaction system for Quips feed + fix groups 500 + reduce jank
...
- Replace heart/like in Quips sidebar with full reaction system:
tap = quick ❤️ , long-press = full ReactionPicker dialog
- Add reactionPackageProvider (CDN → local assets → emoji fallback)
- Switch ReactionPicker to ConsumerStatefulWidget using provider
- Add CachedNetworkImage support in ReactionPicker + _ReactionIcon
- Fix CreateGroup handler: use 'privacy' column, drop non-existent
'is_private'/'banner_url' columns (were causing 500 on group creation)
- Cache overlayJson parsing in QuipVideoItem initState/didUpdateWidget
to eliminate double jsonDecode per build frame (was causing 174ms jank)
- Add post_hides table + HidePost handler + feed filtering
- Add showNavActions param to TraditionalQuipsSheet for clean Quips header
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 08:11:08 -06:00
Patrick Britton
5b5e89e383
feat: Add overlay_json field for Quip text/sticker decorations
...
- Go: Add overlay_json to Post model, CreatePost handler, and all post queries
- Flutter: Rename QuipTextOverlay → QuipOverlayItem with type enum (text/sticker)
- QuipOverlayItem: add id field, content replaces text, backward-compat alias
- quip_video_item: parse overlay_json and render non-interactive overlays in feed
- quip_upload_provider: accept overlayJson param and pass to publishPost
- api_service: add overlayJson param to publish
2026-02-17 20:06:53 -06:00
Patrick Britton
0753fd91e6
fix: Resolve Flutter compile errors across 15 files
...
- Fix GroupCategory enum duplication (group.dart re-exports from cluster.dart)
- Fix stitchVideos arg count (use stitchVideosLegacy in quip_recorder)
- Fix enhanced_quip_recorder: getter/field conflict, XFile→File, static calls, CameraLensDirection, setState syntax
- Fix blocking_service: imports, ShareXFiles, SnackBar content, nullable bool
- Fix audio_overlay_service: path_provider import, getOutput() stub, fade icons
- Fix enhanced_beacon_detail_screen: flutter_map v8 interactionOptions, const constraints, Uri.parse
- Fix private_capsule_screen: add api_provider import
- Stub e2ee_device_sync_service (packages not in pubspec)
- Add generic post()/delete() helpers to api_service
- Fix repost_service: remove static, migrate StateNotifier→Notifier (Riverpod 3.x)
- Fix repost_widget: Repost? null assertion, RepostState type, Post field names, timeago, context param
- Fix sojorn_swipeable_post: close if-block, remove undefined _updateChainSetting
- Fix draggable_widget_grid: use this.widget for isEditable/theme/callbacks when ProfileWidget param shadows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-17 17:43:30 -06:00
Patrick Britton
135bb7f08d
feat: Audio overlay system — AudioLibraryScreen, Funkwhale proxy, ffmpeg audio mix
...
Go:
- GET /audio/library?q= — Funkwhale tracks proxy (503 until FUNKWHALE_BASE set)
- GET /audio/library/:trackId/listen — audio stream proxy
- FUNKWHALE_BASE config key added (env var)
Flutter:
- AudioLibraryScreen: Device tab (file_picker) + Library tab (Funkwhale)
- VideoStitchingService.stitchVideos(): audioOverlayPath + audioVolume params
— second FFmpeg pass: amix with configurable volume, falls back if mix fails
- EnhancedQuipRecorderScreen: music button, audio chip + volume slider, wired to stitcher
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-17 16:00:55 -06:00
Patrick Britton
56a9dd032f
feat: Add enhanced video moderation with frame extraction and implement placeholder UI methods
...
- Add VideoProcessor service to PostHandler for frame-based video moderation
- Implement multi-frame extraction and Azure OpenAI Vision analysis for video content
- Enhance VideoStitchingService with filters, speed control, and text overlays
- Add image upload dialogs for group avatar and banner in GroupCreationModal
- Implement navigation placeholders for mentions, hashtags, and URLs in sojornRichText
2026-02-17 13:32:58 -06:00