Commit Graph

54 Commits

Author SHA1 Message Date
Alex Gleason a796f279a5 release: v2.2.2 2026-03-29 15:48:26 -05:00
Mary Kate Fain 6c067a3ae6 Rename "Vines" to "Divines" in all user-facing strings
Update sidebar label, page title, feed empty states, search filter
labels, notification kind nouns, comment context labels, and
documentation to use "Divines" instead of "Vines".

Closes #194
2026-03-28 13:05:08 -05:00
Chad Curtis f7821451c7 release: v2.2.1 2026-03-28 10:15:52 -05:00
Chad Curtis 3ee880d1dd release: v2.2.0 2026-03-28 08:00:41 -05:00
Alex Gleason 0bd4877dd3 release: v2.1.1 2026-03-27 20:22:00 -05:00
Alex Gleason 58a5c470bd release: v2.1.0 2026-03-26 23:14:03 -05:00
Alex Gleason 95db4e4dcf release: v2.0.1 2026-03-26 22:39:07 -05:00
Alex Gleason c1b33e17c8 release: v2.1.0 2026-03-26 22:31:54 -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
Alex Gleason ed05c568fc Update webmanifest description to align with Ditto philosophy 2026-03-18 23:09:32 -05:00
Alex Gleason 9193c4de56 Use longer description in PWA manifest 2026-03-18 21:08:54 -05:00
Alex Gleason 962f97fbfc Update tagline to 'Your content. Your vibe. Your rules.' 2026-03-18 21:04:43 -05:00
Alex Gleason 441326f721 Add screenshots to webmanifest and Zapstore config via Blossom 2026-03-18 19:56:10 -05:00
Alex Gleason a8fcb60e8e Update og:image 2026-03-18 03:36:31 -05:00
Chad Curtis ae60146390 Merge branch 'feat/pwa-notifications' into 'main'
Add Web Push notifications via "nostr-push"

See merge request soapbox-pub/ditto!83
2026-03-17 13:39:05 +00:00
Chad Curtis d53a43b33d fix: update assetlinks.json with correct APK signing certificate fingerprint 2026-03-16 05:29:56 -05:00
Lemon 8e8aed69c0 Add Web Push notifications via nostr-push
Replace the browser Notification constructor (tab-must-be-open) with nostr-push
Web Push notifications that work even when the browser is closed.

- Add service worker (public/sw.js) for receiving and displaying push events
- Add nostr-push RPC client (src/lib/nostrPush.ts) using an ephemeral device
  keypair for signing — the user's Nostr signer is never prompted
- Add usePushNotifications hook managing the full lifecycle: SW registration,
  VAPID key fetch, pushManager.subscribe, and nostr-push registration
- Replace the web path in useNativeNotifications with push registration that
  auto-enables/disables based on the notificationsEnabled encrypted setting
- Android native Capacitor path is unchanged
- Requires VITE_NOSTR_PUSH_PUBKEY env var (hex pubkey of the nostr-push server)
2026-03-16 00:17:05 -07:00
Chad Curtis 947bbfccb0 Add deep linking for ditto.pub Android App Links
- Add Android intent-filter with autoVerify for https://ditto.pub/*
- Create DeepLinkHandler component to handle appUrlOpen events at runtime
- Mount DeepLinkHandler in AppRouter inside BrowserRouter context
- Add public/.well-known/assetlinks.json with pub.ditto.app package and signing cert fingerprint
2026-03-16 01:39:56 -05:00
Alex Gleason 932398c0aa Add favicon.ico generated from logo.png 2026-03-11 13:03:14 -05:00
Chad Curtis c2651dd36e Add lists intro image and remove rename input focus ring 2026-03-06 17:47:45 -06:00
Chad Curtis ac09b0670a Losslessly compress public and Android image assets
Reduced PNG file sizes using sharp (compressionLevel 9, effort 10) with
no quality loss. Saved ~132K from public/ and ~960K from Android res/.
2026-03-04 03:21:37 -06:00
Chad Curtis e4cc47ba51 Add Magic settings page with Magic Mouse cursor fire effect
- Add /settings/magic entry to settings page with magic-intro.png icon
- New MagicSettingsPage with toggle for Magic Mouse mode
- Add magicMouse boolean to AppConfig (optional, defaults to false)
- CursorFireEffect: canvas overlay emitting fire particles in primary color
- Mount CursorFireEffect in MainLayout when magicMouse is enabled
2026-02-28 03:47:07 -06:00
Chad Curtis dee8001eec fix: use APK launcher icon for PWA icons instead of logo SVG 2026-02-27 22:17:59 -06:00
Chad Curtis 9eac74d31c fix: add iOS PWA icons and update manifest with PNG icons
- Generate apple-touch-icon.png (180x180 RGBA) for iOS home screen
- Generate icon-192.png (192x192 RGBA) for Android/PWA
- Update apple-touch-icon link in index.html to use PNG instead of SVG
- Add viewport-fit=cover for iPhone notch/safe-area support
- Add theme-color meta tags for light and dark mode
- Update manifest.webmanifest with PNG icons (192, 512) alongside SVG fallback
2026-02-27 22:16:49 -06:00
Alex Gleason e7f7d74085 Fix theme.js to match current ThemeConfig format
The preloader script was reading customTheme.background/primary directly,
but the app now stores colors under customTheme.colors.{background,primary}.
Also fixes the light theme builtin colors, adds support for configured
theme overrides (cfg.themes), and removes obsolete legacy preset handling
(legacy themes are migrated to 'custom' by AppProvider on load).
2026-02-27 17:43:49 -06:00
Chad Curtis 317cf6376c Add advanced illustration to settings menu 2026-02-26 22:13:54 -06:00
Chad Curtis c58ce9fe3f Update theme illustration 2026-02-26 22:13:54 -06:00
Chad Curtis d09fb23d1f Add theme and notification illustrations to settings menu 2026-02-26 22:13:54 -06:00
Alex Gleason 8d03d32b0d Simplify theme system to 4 core colors (background, text, primary, secondary)
Replace the 19-token ThemeTokens interface with a 4-field CoreThemeColors
for config storage, Nostr events, and encrypted settings. All other
Tailwind CSS tokens (card, muted, border, etc.) are now derived
automatically via deriveTokensFromCore().

- Add CoreThemeColors interface: { background, text, primary, secondary }
- Keep ThemeTokens as internal type for CSS variable injection
- Update builtinThemes and themePresets to store CoreThemeColors
- Add backward-compatible parsing for legacy 19-token format in Nostr
  events, encrypted settings, and localStorage
- Simplify ThemeBuilderPage: remove Surface/UI color sections, just 4
  color pickers with auto-derivation always on
- Update all consumers: ThemeSelector, ScopedTheme, ThemeUpdateCard,
  MobileDrawer, LeftSidebar, ProfilePage, InitialSyncGate, etc.
2026-02-25 22:46:27 -06:00
Alex Gleason 7a85ec73ed Refactor theme system: separate builtin themes from custom presets
Restructure the theme architecture so 'light', 'dark', and 'system' are
builtin themes with build-time colors (customizable by self-hosters),
while 'black', 'pink', and future themes become presets that apply to a
single 'custom' theme slot.

Key changes:
- Theme type is now 'light' | 'dark' | 'system' | 'custom'
- builtinThemes (light/dark) and themePresets (black/pink/etc.) are
  separate maps in themes.ts
- AppConfig gains optional customTheme (ThemeTokens) field
- useTheme exposes applyCustomTheme(tokens) for applying presets
- Custom theme tokens sync across devices via encrypted settings
- Backward compat: legacy 'black'/'pink' values in localStorage and
  encrypted settings auto-migrate to custom + preset tokens
- All UI surfaces updated: ThemeSelector, LeftSidebar dropdown,
  MobileDrawer cycle, and onboarding ThemeStep
2026-02-24 21:46:28 -06:00
Alex Gleason b42ca9434a Add 'system' theme option that follows OS prefers-color-scheme 2026-02-24 20:56:17 -06:00
Chad Curtis 1af6a45a77 Fix preloader flash and green logo on light/pink themes
Defer body inline style removal until CSS variables are injected by
useApplyTheme, preventing a one-frame flash of unstyled background.

Replace preloader logo <img> with CSS mask technique matching the React
DittoLogo component, so the logo uses the theme's primary color instead
of filter:invert() which turned purple into green.
2026-02-24 00:39:27 -06:00
Alex Gleason cd29071f6b Make the icon purple by default 2026-02-23 18:00:46 -06:00
Alex Gleason 77bb7d2037 Run all public assets through Trimage 2026-02-23 17:55:46 -06:00
Alex Gleason 5fa5bff401 Swap out og:image 2026-02-23 17:54:54 -06:00
Alex Gleason cc74443010 Render DittoLogo using CSS mask with primary color 2026-02-23 13:10:47 -06:00
Alex Gleason 1f035f4a6e Rename Mew to Ditto across entire codebase
- Update all branding: titles, meta tags, OG tags, manifest
- Rename MewLogo component to DittoLogo
- Update Capacitor config: appId to pub.ditto.app, hostname to ditto.pub
- Migrate Android Java package from com.mew.app to pub.ditto.app
- Rename MewNotificationPlugin to DittoNotificationPlugin
- Update all localStorage keys from mew: to ditto: prefix
- Update Nostr encrypted settings d-tag from mew-metadata to ditto-metadata
- Update all page titles, zap comments, and UI strings
- Rename ic_stat_mew.xml drawable to ic_stat_ditto.xml
- Update build script references (mew.apk -> ditto.apk)
- Update all domain references (mew.shakespeare.wtf -> ditto.pub)
2026-02-23 11:50:00 -06:00
Chad Curtis 916adf7fb6 Invert preloader logo to dark on light/pink themes 2026-02-20 21:29:05 -06:00
Chad Curtis 313b66f8fd Use saved theme for pre-React loading spinner
Read the user's theme from localStorage before first paint so the
preloader background and spinner colors match dark/light/black/pink.
Uses a small blocking script (public/theme.js) that runs before
the preloader is visible.
2026-02-20 21:28:01 -06:00
Chad Curtis 2f02e65ab6 Add Android Capacitor build system
- Install Capacitor dependencies (@capacitor/cli, @capacitor/core, @capacitor/android, @capacitor/app, @capacitor/status-bar, sharp)
- Create capacitor.config.ts with app configuration
- Update .gitignore to exclude Android build outputs and keystore files
- Generate icon-512.png from logo.svg
- Add scripts for icon generation, APK building, and keystore creation
- Initialize Capacitor Android platform
- Configure build.gradle with signing support
- Generate Android app icons in all required densities
- Add npm scripts: 'icons' and 'build:apk'
2026-02-19 06:18:02 -06:00
shakespeare.diy d519fe82bd Replace favicon and logo with new SVG design
- Added new mew_logo_2.svg to public directory
- Updated MewLogo component to use SVG instead of PNG
- Updated index.html favicon references to use SVG format
- Updated manifest.webmanifest icon references to use SVG with 'any' size
- SVG provides better scalability and smaller file size (3.5KB vs 4.2KB PNG)

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-19 06:11:34 -06:00
shakespeare.diy 955b4d61de Add intro image and description to Feed Tabs section
- Added community-intro.png image
- Added "Feed Navigation" heading
- Added description about managing feed tabs and communities
- Matches styling of Other Stuff and Muted Content sections
- Consistent visual presentation across all collapsible sections

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-19 00:52:48 -06:00
shakespeare.diy a2680f1e1b Redesign relays tab to match feed/mutes/profile presentation style
- Added intro section with relay-intro.png image and description
- Reorganized layout with cleaner visual hierarchy and border separators
- Reduced font sizes for consistency (text-xs, text-sm labels)
- Removed rounded borders and card-style backgrounds
- Added hover states to relay rows (hover:bg-muted/20)
- Improved spacing and padding throughout
- Smaller icon sizes (h-4 w-4 for relays, h-5 w-5 for section headers)
- Reduced button sizes and input heights (h-9) to match other tabs
- Simplified "Add Relay" button text and styling
- Updated popover label sizes to text-xs for consistency

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-19 00:29:02 -06:00
shakespeare.diy d4d745e883 Redesign profile tab to match feed/mutes presentation style
- Added intro section with profile-intro.png image and description
- Reorganized form layout with cleaner visual hierarchy and border separators
- Reduced font sizes and spacing to match feed tab style (text-xs labels)
- Moved "Bot Account" setting under collapsible "Advanced Settings" section
- Improved input heights (h-9) and button sizes for consistency
- Enhanced image upload field styling with smaller previews and buttons
- Updated form descriptions to be more concise
- Added proper spacing with border-b separators between sections

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-19 00:14:36 -06:00
shakespeare.diy c3c1370090 Redesign mutes tab to match feed tab presentation style
- Refactored MuteSettings component to follow feed tab layout pattern
- Added intro section with image and description
- Reorganized mute type sections with cleaner visual hierarchy
- Removed card-based layout in favor of borderless sections
- Improved spacing and typography consistency
- Added mute-intro.png image for visual consistency
- Streamlined add mute interface with better label styling
- Enhanced muted items list with hover states and better visual feedback

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-19 00:04:12 -06:00
shakespeare.diy 01bdb9322d Replace intro art with custom mew_boy illustration, update blend logic
- Swapped to provided gray-on-white line art
- Light/pink: darken blend (gray lines show naturally)
- Dark/black: lighten + invert (lines become light on dark bg)

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-18 03:01:19 -06:00
shakespeare.diy e379b03a7a Replace intro illustration with charming chibi-style Nintendo manual art
- Polished white line illustration with cute character and detailed icons
- Clapperboard, bar chart, treasure chest, palette, party popper floating above
- Clean confident linework that reads well at small sizes

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-18 02:47:59 -06:00
shakespeare.diy ecb2a53ad1 Update intro illustration and remove box wrapper
- New whimsical stick figure head with floating doodle icons
- Removed rounded box/card wrapper, image sits openly in the layout
- Sized down illustration for subtlety

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-18 02:43:00 -06:00
shakespeare.diy c66e5aad0b Move kind badges to descriptions, add fun intro with illustration
- Kind badges now appear as [xxxxx] prefix on description lines, not titles
- Added Nintendo-style instruction illustration explaining "Other Stuff"
- Rewrote intro copy to be friendlier and more fun
- Removed old webp illustration file

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-18 02:40:30 -06:00
shakespeare.diy 3400e33207 Fix og-image not loading on Signal: exclude static files from SPA redirect
The catch-all /* -> /index.html redirect was serving HTML for /og-image.png,
so Signal's crawler got text/html instead of image/png. Added explicit rules
for static files (og-image.png, logo.png, robots.txt, manifest.webmanifest)
before the SPA fallback so they serve with correct content types.

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 06:12:31 -06:00