Commit Graph

4447 Commits

Author SHA1 Message Date
Alex Gleason b2f62e12c7 Add build info env vars and pre-release banner to changelog
Expose COMMIT_SHA and COMMIT_TAG via import.meta.env at build time.
In CI, these come from GitLab env vars; locally they fall back to git.

The changelog page now shows:
- A pre-release banner when the build is untagged, with a link to
  the GitLab diff between the latest release and main
- An external link icon on each version card header linking to the
  GitLab release page for that version
2026-03-26 22:19:12 -05:00
Alex Gleason 79571cc5b3 Add spacing between changelog header and content 2026-03-26 22:05:41 -05:00
Chad Curtis 3e6b947893 Fix gift attachment blocking backdrop clicks to close letter dialog 2026-03-26 22:00:01 -05:00
Alex Gleason cc59035c62 Redesign changelog page with parsed structured entries
Parse Keep a Changelog markdown into structured data and render
version cards with colored category badges instead of raw markdown.
2026-03-26 21:57:49 -05:00
Chad Curtis 9b1615480f Polish letter attachment: use actual color moment pattern, theme-derived text color, more spacing 2026-03-26 21:56:22 -05:00
Alex Gleason ad59299581 fix: strip duplicate title from changelog page 2026-03-26 21:53:16 -05:00
Alex Gleason a11be64d94 Add in-app changelog page with runtime fetch from public/CHANGELOG.md 2026-03-26 21:47:10 -05:00
Chad Curtis a32c620b4e Add letter attachment: tap to apply embedded color moment or theme as your Ditto theme 2026-03-26 21:40:30 -05:00
Chad Curtis 7a8fbe3ee5 Fix review items 6-10: use default relays, lazy-load fonts, paginate letters, cap SVG size, fix exhaustive-deps 2026-03-26 21:32:18 -05:00
Chad Curtis 13480d528a Replace LetterRecipientInput with ProfileSearchDropdown, fix compose padding 2026-03-26 21:20:59 -05:00
Alex Gleason cbbb576b26 Add release system with semver versioning, changelog, and release skill
- Switch from CalVer (date+SHA) to semantic versioning starting at v2.0.0
- Create release skill (.agents/skills/release/) with full AI-guided release workflow
- Add CHANGELOG.md with initial 2.0.0 entry
- Update CI tag regex to match semver tags (v2.0.0 instead of v2026.03.24-sha)
- Extract changelog content into GitLab release descriptions
- Update Android versionName to 2.0.0 in build.gradle
- Update iOS MARKETING_VERSION to 2.0.0 in pbxproj
- Expose VERSION (semver) and BUILD_DATE (ISO 8601) as build-time constants
- Display version and build date in Settings page footer
- Remove npm release script (releases are now done via the AI skill)
2026-03-26 21:15:35 -05:00
Chad Curtis 7ddaf135b4 Link about dialogs to in-app routes for color moments, themes, and emoji packs 2026-03-26 20:48:05 -05:00
Chad Curtis 848ac15ef0 Fix CI: remove unused prop, centralize color helpers, extract constants, memoize Sets, move @types/dompurify to devDeps 2026-03-26 19:45:51 -05:00
Chad Curtis ae1f97eb08 Letters: bigger wax seals, adaptive text, inline labels, font loading, SVG sticker fix 2026-03-26 19:17:58 -05:00
Chad Curtis a2fa2a6b96 Letters: redesign inbox as Wii Mail-style envelope grid with modal detail view 2026-03-26 18:51:45 -05:00
filemon 2d9ff34ded Fix sad eye tracking/blinking integration and slow down tears
- Hide original highlights by adding opacity=0 inside blobbi-eye groups
- Inject sad highlights INTO blobbi-eye groups so they track with pupil movement
- Sad highlights now move with eye tracking and participate in blinking
- Blue water fill stays as overlay (on eye white, doesn't need tracking)
- Slow tears: duration 6s with 3s pause between cycles
- Alternating tear mode: tears switch sides each cycle (no flickering)
- Only affects SAD emotion, angry/neutral unchanged
2026-03-26 20:32:18 -03:00
filemon d1a85659ba Fix sad eye visuals: reposition water shape and highlights
- Position blue water shape relative to eye white (not pupil center)
- Water now sits at bottom of eye white like pooled tears
- Reposition highlights: upper (larger) and lower (smaller) with clear separation
- Upper highlight at cy - radius*0.55, lower at cy + radius*0.35
- Only affects SAD emotion (generateSadEyeEffects), angry unchanged
2026-03-26 20:28:44 -03:00
filemon d832e6e364 Fix Blobbi sad emotion visuals and dev panel labeling
- Lower sad mouth position by adding Y offset based on curve amount
- Fix sad eye highlights: larger top-left, smaller right-side
- Change blue watery fill to proper lower 1/3 semicircle shape using path
- Fix baby eye detection to match gradient fills (url(#...Pupil...))
- Swap sad/angry eyebrow angles: sad now worried (/\), angry now aggressive (\/)
- Replace mouth safely using regex-only approach (no section slicing)
- Update dev panel to label default as 'Default' with happy emoji
2026-03-26 20:24:05 -03:00
Chad Curtis 08a5c808f8 Letters: send animation with envelope, wax seal, Ditto logo, and pre-rendered letter 2026-03-26 18:22:15 -05:00
filemon 66cfe9ee45 Add Blobbi emotion system with DEV testing panel
- Add EmotionDevContext and BlobbiEmotionPanel for dev-only emotion testing
- Create emotions.ts with configurable emotion overlays (sad, happy, angry, surprised, sleepy)
- Use deterministic tear selection (hash-based) to prevent flickering
- Add marker-based SVG detection with regex fallback for mouth/eye elements
- Update visual components to pass emotion prop through hierarchy
- Add SVG comment markers to all Blobbi base SVGs for reliable element detection
2026-03-26 19:47:36 -03:00
Chad Curtis c2b14e4f07 Letters: send animation scoped to feed column, inbox updates immediately 2026-03-26 17:40:13 -05:00
Chad Curtis 628dd47772 Letters: send animation with envelope, wax seal, and Ditto logo 2026-03-26 17:35:31 -05:00
Chad Curtis f8612ee20e Letters: arc tab bars for compose, prefs, and inbox 2026-03-26 17:31:15 -05:00
Chad Curtis 172bebe24a Move letter tool buttons into SubHeaderBar below app top bar
- LetterEditor: replace stickyHeader/headerLeft with renderToolbar render prop;
  callers decide where to place the tool buttons
- Both ComposeLetterSheet and LetterPreferencesSection: use SubHeaderBar noArc
  + useLayoutOptions({ hasSubHeader: true }) so tools sit in the sticky sub-header
  matching every other tabbed/sub-header page in the app
2026-03-26 16:58:02 -05:00
Chad Curtis 3c45641ef4 Letters inbox: replace custom FAB with FabButton 2026-03-26 16:53:18 -05:00
Chad Curtis 5eb6af1ab6 Compose send: use FabButton matching app FAB shape; extract FabButton component
- Extract FabButton from FloatingComposeButton (avatar shape mask + primary bg)
- FloatingComposeButton now delegates to FabButton
- ComposeLetterSheet: replace inline send button with FabButton FAB,
  fixed bottom-right on mobile, sticky in column on desktop
- Remove separate page-level send button from compose header
2026-03-26 16:51:31 -05:00
Chad Curtis c1b48058d5 Compose header: use ArcBackground to match app top nav curve 2026-03-26 16:45:42 -05:00
Chad Curtis 33ebeec2ac Compose header: sticky, no border 2026-03-26 16:43:39 -05:00
Chad Curtis a3e5ff9f4a Fix letter preferences header to match app PageHeader style
- LetterEditor: add stickyHeader prop (default true); when false renders a plain
  border-b toolbar row instead of sticky backdrop-blurred header
- LetterPreferencesPage: restore PageHeader (back arrow + title) as the page header
- LetterPreferencesSection: use stickyHeader={false}, remove headerLeft slot usage
2026-03-26 16:41:06 -05:00
Chad Curtis 203ef9dd44 Fix letter stationery theme sync and remove drawer card shape
- useLetterPreferences: simplify to just expose raw saved prefs + isThemeDefault flag,
  no longer conflates theme stationery with saved stationery
- LetterPreferencesSection: always pull from useThemeStationery directly when
  isThemeDefault, persist only on explicit user picks (handleSetStationery),
  sync preview live when theme changes
- ComposeLetterSheet: same pattern — init from themeStationery, switch to saved
  pref once settings load, track explicit user picks to avoid theme override
- LetterEditor drawer: remove bg-background / rounded-b-3xl / border-b card shape
2026-03-26 16:27:31 -05:00
Chad Curtis bdfb8f9dc6 Fix letter compose/prefs: use Ditto theme, single toolbar, inline send button
- ComposeLetterSheet: use themeStationery immediately (no parchment fallback),
  switch to saved pref once encrypted settings load, sync with theme changes
- ComposeLetterSheet: move send button to inline flow below the card (no more fixed overlay)
- LetterPreferencesPage: remove PageHeader — back button + title now live inside
  LetterEditor's headerLeft slot, eliminating the double bar
2026-03-26 16:23:45 -05:00
Chad Curtis 865fabce98 Add Letters inbox page with full letter composing from lief
- Port letter protocol (kind 8211, NIP-44 encrypted) from lief
- LettersPage at /letters with inbox and sent tabs
- ComposeLetterSheet with full stationery, font, frame, sticker, drawing support
- LetterCard with expand-to-read animation and deletion
- LetterPreferencesSection stored in encrypted settings (NIP-78)
- /settings/letters route for letter preferences
- Letters added to sidebar nav
- All letter lib utilities: letterTypes, letterUtils, colorUtils extensions, sanitizeSvg, svgDrawing
- StationeryBackground, StationeryPicker, FramePicker, StickerPicker, DrawingCanvas all ported
2026-03-26 16:11:29 -05:00
Alex Gleason 143b383a62 Remove /messages route and navigation entry 2026-03-26 10:18:22 -05:00
Alex Gleason 5253abf4be Increase badge tilt max rotation from 18 to 30 degrees 2026-03-25 23:00:05 -05:00
Alex Gleason 7aba81cea6 Expand badge tilt interaction zone beyond the image
Add 80px of invisible padding around the badge so the mouse starts
influencing the 3D tilt well before it reaches the image itself.
Negative margin compensates so the layout is unaffected. Glare
coordinates are remapped to the image area within the padded zone.
2026-03-25 22:59:39 -05:00
Alex Gleason 2d14e8e332 Fix 3D badge tilt treating transparent PNG pixels as opaque
Mask the specular glare overlay to the badge image's own alpha
channel so effects only paint over visible pixels. Also remove
the hard-coded rounded-2xl and ring overlay that imposed an opaque
rectangular shape on transparent badge images.
2026-03-25 22:57:36 -05:00
Alex Gleason fe2fa7cfce Add interactive 3D tilt effect to badge detail hero image
Hovering the mouse across the badge image now rotates it in
perspective space with a specular glare overlay that tracks the
cursor, making the badge feel like a tangible, glossy object.

Introduces a reusable useCardTilt hook for pointer-driven 3D
perspective transforms with configurable max tilt and scale.
2026-03-25 22:50:50 -05:00
Alex Gleason 0e46804e25 Support NIP-51 encrypted private items in people lists (kind 30000) 2026-03-25 21:59:21 -05:00
Alex Gleason 0af04eebd2 Reposition profile status speech bubble closer to banner edge with diagonal tail 2026-03-25 21:52:27 -05:00
Alex Gleason d64b19ae1f Fix poll results not showing after voting until page refresh 2026-03-25 21:42:29 -05:00
Alex Gleason 6c626076a5 Remove separate quotes button from action bar, restore combined repost+quotes count 2026-03-25 21:22:38 -05:00
Alex Gleason 5736ea63ba Render theme dialog titles with the selected title font
Apply the theme's title font to the DialogTitle in both the theme
builder dialog (ThemeSelector) and the Edit Profile Theme dialog
(ProfilePage), so users get a live preview of their chosen title
font in the dialog heading.
2026-03-25 20:50:29 -05:00
Alex Gleason 2680bae818 Fall back title font to body font when publishing theme events
When no title font was explicitly set (undefined), published theme
events omitted the title font tag entirely. This happened easily
when users selected Inter as the title font (the default), which
toggled back to undefined due to the deselect behavior.

Now resolveThemeForPublishing falls back titleFont to the body font,
ensuring published events always include both font tags when a body
font is present.
2026-03-25 20:38:21 -05:00
Alex Gleason ddb8c45a70 Fix custom title fonts not loading on app startup
The useApplyFonts hook in AppProvider only loaded body fonts
(activeConfig.font) but never loaded title fonts (activeConfig.titleFont).
The loadAndApplyTitleFont function and CSS variable --title-font-family
existed but were never called on startup/theme change, so components
referencing the variable always fell back to inherit.
2026-03-25 20:29:40 -05:00
Alex Gleason 7511578bf2 Merge branch 'main' of gitlab.com:soapbox-pub/ditto 2026-03-25 20:11:00 -05:00
Alex Gleason 938c9a2f76 Apply title font to all sidebar item types consistently 2026-03-25 20:10:40 -05:00
Alex Gleason 62c026a9a3 Make repost rows in InteractionsModal link to the repost event
Replace UserRow (profile link) with RepostRow (nevent link) in the
reposts tab so clicking a repost navigates to the repost event detail
view, matching the existing behavior for reactions.
2026-03-25 19:13:38 -05:00
Alex Gleason d09629c100 Add standalone repost event views and separate quotes count display
- Render kind 6/16 repost events as standalone viewable cards (similar to
  kind 7 reactions): compact activity-style card showing repost icon, author
  avatar, author name, 'reposted' label, and timestamp
- Support both normal and threaded layouts for repost events in NoteCard
- Add repost detail view in PostDetailPage with full action buttons (reply,
  repost, react, share, more) and ancestor thread pointing to reposted event
- Register kind 6/16 in all kind label registries: CommentContext KIND_ICONS,
  extraKinds KIND_SPECIFIC_LABELS/ICONS, and shellTitleForKind
- Separate quotes count from reposts in action buttons: reposts button now
  shows only repost count, new Quote button shows quote count separately
- Quote button on detail page opens InteractionsModal on the quotes tab
- Quote count sourced from useEventInteractions for accurate counts
  (NIP-85 doesn't provide quote_cnt)
2026-03-25 18:40:58 -05:00
Alex Gleason e530e38721 fix: prevent font picker clicks from passing through to theme selector
Fixes #171
2026-03-25 18:35:25 -05:00
Alex Gleason 50d0bcb5ad Apply title font to sidebar nav items and widget headings
Use the --title-font-family CSS custom property on left sidebar
navigation labels and all right sidebar widget titles (Trends,
Hot Posts, New Accounts, Media, Profile fields). Falls back to
inherit when no title font is configured. Also removes the font
preview section from FontSection.
2026-03-25 18:32:36 -05:00