diff --git a/index.html b/index.html index 995f996f..b0fe470c 100644 --- a/index.html +++ b/index.html @@ -3,8 +3,14 @@ + + + - Imwald 🌲 + Imwald - - - + + + + - + - + - +
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index 8d0a6c0e..cd8693bb 100644 Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ diff --git a/public/banner.png b/public/banner.png new file mode 100644 index 00000000..b42fe2d5 Binary files /dev/null and b/public/banner.png differ diff --git a/public/brand-atmosphere-dark.png b/public/brand-atmosphere-dark.png new file mode 100644 index 00000000..b42fe2d5 Binary files /dev/null and b/public/brand-atmosphere-dark.png differ diff --git a/public/brand-atmosphere-light.png b/public/brand-atmosphere-light.png new file mode 100644 index 00000000..b42fe2d5 Binary files /dev/null and b/public/brand-atmosphere-light.png differ diff --git a/public/favicon-96x96.png b/public/favicon-96x96.png index d3b391ca..a33a8476 100644 Binary files a/public/favicon-96x96.png and b/public/favicon-96x96.png differ diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 00000000..31e73954 Binary files /dev/null and b/public/favicon.png differ diff --git a/public/og-image.png b/public/og-image.png new file mode 100644 index 00000000..93bff78b Binary files /dev/null and b/public/og-image.png differ diff --git a/public/pwa-192x192.png b/public/pwa-192x192.png index 2bf47b93..da14693b 100644 Binary files a/public/pwa-192x192.png and b/public/pwa-192x192.png differ diff --git a/public/pwa-512x512.png b/public/pwa-512x512.png index f8ff4ed1..5319551f 100644 Binary files a/public/pwa-512x512.png and b/public/pwa-512x512.png differ diff --git a/public/pwa-maskable-192x192.png b/public/pwa-maskable-192x192.png index f0c8cfe0..da14693b 100644 Binary files a/public/pwa-maskable-192x192.png and b/public/pwa-maskable-192x192.png differ diff --git a/public/pwa-maskable-512x512.png b/public/pwa-maskable-512x512.png index 82309473..5319551f 100644 Binary files a/public/pwa-maskable-512x512.png and b/public/pwa-maskable-512x512.png differ diff --git a/resources/banner.png b/resources/banner.png new file mode 100644 index 00000000..b42fe2d5 Binary files /dev/null and b/resources/banner.png differ diff --git a/resources/favicon.png b/resources/favicon.png new file mode 100644 index 00000000..31e73954 Binary files /dev/null and b/resources/favicon.png differ diff --git a/resources/logo-dark.svg b/resources/logo-dark.svg deleted file mode 100644 index 18406178..00000000 --- a/resources/logo-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/logo-light.svg b/resources/logo-light.svg deleted file mode 100644 index f1e3c92b..00000000 --- a/resources/logo-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/og-image.png b/resources/og-image.png index cbda6249..93bff78b 100644 Binary files a/resources/og-image.png and b/resources/og-image.png differ diff --git a/resources/open-sats-logo.svg b/resources/open-sats-logo.svg deleted file mode 100644 index 1fbe833e..00000000 --- a/resources/open-sats-logo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/PageManager.tsx b/src/PageManager.tsx index 0ec7cd5e..1ba97d0a 100644 --- a/src/PageManager.tsx +++ b/src/PageManager.tsx @@ -5,6 +5,7 @@ import logger from '@/lib/logger' import { ChevronLeft } from 'lucide-react' import { NavigationService } from '@/services/navigation.service' // Page imports needed for primary note view +import { ImwaldBrandBar } from '@/assets/Logo' import LiveActivitiesStrip from '@/components/LiveActivitiesStrip' import NoteDrawer from '@/components/NoteDrawer' import storage from '@/services/local-storage.service' @@ -921,16 +922,12 @@ function MainContentArea({ // flex + min-h-0 + min-w-0 so primary pages get a real height in flex parents and can shrink horizontally (double-pane). return (
-
+
{primaryNoteView ? ( // Show note view with back button
-
- - Imwald - -
-
+ +
+ ) + } + return inner } diff --git a/src/components/AboutInfoDialog/index.tsx b/src/components/AboutInfoDialog/index.tsx index ee61f313..156e65b3 100644 --- a/src/components/AboutInfoDialog/index.tsx +++ b/src/components/AboutInfoDialog/index.tsx @@ -43,7 +43,7 @@ export default function AboutInfoDialog({ children }: { children: React.ReactNod const content = ( <> -
Imwald 🌲
+
Imwald
A user-friendly Nostr client focused on relay feed browsing, publications, and relay discovery
diff --git a/src/components/BottomNavigationBar/index.tsx b/src/components/BottomNavigationBar/index.tsx index 6469becd..9f1a6045 100644 --- a/src/components/BottomNavigationBar/index.tsx +++ b/src/components/BottomNavigationBar/index.tsx @@ -11,7 +11,7 @@ export default function BottomNavigationBar() { return (
diff --git a/src/components/Sidebar/SidebarItem.tsx b/src/components/Sidebar/SidebarItem.tsx index 4e035746..9f202daf 100644 --- a/src/components/Sidebar/SidebarItem.tsx +++ b/src/components/Sidebar/SidebarItem.tsx @@ -13,7 +13,8 @@ const SidebarItem = forwardRef< ) } diff --git a/src/pages/primary/NoteListPage/index.tsx b/src/pages/primary/NoteListPage/index.tsx index d63524a8..6a5c8459 100644 --- a/src/pages/primary/NoteListPage/index.tsx +++ b/src/pages/primary/NoteListPage/index.tsx @@ -26,6 +26,7 @@ import { useTranslation } from 'react-i18next' import { FavoriteRelaysActiveStripMobileBar } from '@/components/FavoriteRelaysActiveStrip' import FavoriteRelaysFeedPicker from '@/components/FavoriteRelaysFeedPicker' import HelpAndAccountMenu from '@/components/HelpAndAccountMenu' +import Logo from '@/assets/Logo' import FollowingFeed from './FollowingFeed' import RelaysFeed from './RelaysFeed' import { usePrimaryPage } from '@/contexts/primary-page-context' @@ -290,16 +291,18 @@ function NoteListPageTitlebar({ )}
{isSmallScreen && ( -
+
)} diff --git a/src/pages/secondary/NotePage/index.tsx b/src/pages/secondary/NotePage/index.tsx index 7c3a6825..d781bda2 100644 --- a/src/pages/secondary/NotePage/index.tsx +++ b/src/pages/secondary/NotePage/index.tsx @@ -259,18 +259,18 @@ const NotePage = forwardRef(({ id, index, hideTitlebar = false, initialEvent }: // Reset to default meta tags with richer information const defaultUrl = window.location.href const truncatedDefaultUrl = defaultUrl.length > 150 ? defaultUrl.substring(0, 147) + '...' : defaultUrl - updateMetaTag('og:title', 'Imwald 🌲') + updateMetaTag('og:title', 'Imwald') updateMetaTag('og:description', `${truncatedDefaultUrl} - A user-friendly Nostr client focused on relay feed browsing and relay discovery. The Imwald edition focuses on publications and articles.`) - updateMetaTag('og:image', 'https://jumble.imwald.eu/pwa-512x512.png') + updateMetaTag('og:image', 'https://jumble.imwald.eu/og-image.png') updateMetaTag('og:type', 'website') updateMetaTag('og:url', window.location.href) - updateMetaTag('og:site_name', 'Imwald 🌲') + updateMetaTag('og:site_name', 'Imwald') // Twitter card meta tags updateMetaTag('twitter:card', 'summary_large_image') - updateMetaTag('twitter:title', 'Imwald 🌲') + updateMetaTag('twitter:title', 'Imwald') updateMetaTag('twitter:description', `${truncatedDefaultUrl} - A user-friendly Nostr client focused on relay feed browsing and relay discovery. The Imwald edition focuses on publications and articles.`) - updateMetaTag('twitter:image', 'https://jumble.imwald.eu/pwa-512x512.png') + updateMetaTag('twitter:image', 'https://jumble.imwald.eu/og-image.png') // Remove article:tag if it exists const articleTagMeta = document.querySelector('meta[property="article:tag"]') @@ -359,7 +359,7 @@ const NotePage = forwardRef(({ id, index, hideTitlebar = false, initialEvent }: } if (!image) { // Use default OG image with green forest theme - image = 'https://jumble.imwald.eu/pwa-512x512.png' + image = 'https://jumble.imwald.eu/og-image.png' } const tags = eventMetadata?.tags || [] @@ -370,8 +370,8 @@ const NotePage = forwardRef(({ id, index, hideTitlebar = false, initialEvent }: // Enhanced title with profile info const ogTitle = authorName - ? `${eventTitle} by @${authorName} - Imwald 🌲` - : `${eventTitle} - Imwald 🌲` + ? `${eventTitle} by @${authorName} - Imwald ` + : `${eventTitle} - Imwald ` updateMetaTag('og:title', ogTitle) updateMetaTag('og:description', ogDescription) @@ -381,7 +381,7 @@ const NotePage = forwardRef(({ id, index, hideTitlebar = false, initialEvent }: updateMetaTag('og:image:alt', `${eventTitle}${authorName ? ` by @${authorName}` : ''} on Imwald`) updateMetaTag('og:type', ogType) updateMetaTag('og:url', window.location.href) - updateMetaTag('og:site_name', 'Imwald 🌲') + updateMetaTag('og:site_name', 'Imwald ') // Add profile data - always include if available if (authorProfile) { @@ -434,12 +434,12 @@ const NotePage = forwardRef(({ id, index, hideTitlebar = false, initialEvent }: // Reset to default on unmount with richer information const cleanupUrl = window.location.href const truncatedCleanupUrl = cleanupUrl.length > 150 ? cleanupUrl.substring(0, 147) + '...' : cleanupUrl - updateMetaTag('og:title', 'Imwald 🌲') + updateMetaTag('og:title', 'Imwald ') updateMetaTag('og:description', `${truncatedCleanupUrl} - A user-friendly Nostr client focused on relay feed browsing and relay discovery. The Imwald edition focuses on publications and articles.`) - updateMetaTag('og:image', 'https://jumble.imwald.eu/pwa-512x512.png') + updateMetaTag('og:image', 'https://jumble.imwald.eu/og-image.png') updateMetaTag('og:type', 'website') updateMetaTag('og:url', window.location.href) - updateMetaTag('og:site_name', 'Imwald 🌲') + updateMetaTag('og:site_name', 'Imwald ') // Remove article:tag meta tags document.querySelectorAll('meta[property="article:tag"]').forEach(meta => meta.remove()) @@ -448,7 +448,7 @@ const NotePage = forwardRef(({ id, index, hideTitlebar = false, initialEvent }: authorMeta.remove() } - document.title = 'Imwald 🌲' + document.title = 'Imwald ' } }, [finalEvent, articleMetadata, authorProfile]) diff --git a/src/pages/secondary/ProfilePage/index.tsx b/src/pages/secondary/ProfilePage/index.tsx index c16f03f6..e87e736e 100644 --- a/src/pages/secondary/ProfilePage/index.tsx +++ b/src/pages/secondary/ProfilePage/index.tsx @@ -48,25 +48,25 @@ const ProfilePage = forwardRef(({ id, index, hideTitlebar = false }: { id?: stri // Reset to default meta tags const defaultUrl = window.location.href const truncatedDefaultUrl = defaultUrl.length > 150 ? defaultUrl.substring(0, 147) + '...' : defaultUrl - updateMetaTag('og:title', 'Imwald 🌲') + updateMetaTag('og:title', 'Imwald ') updateMetaTag('og:description', `${truncatedDefaultUrl} - A user-friendly Nostr client focused on relay feed browsing and relay discovery. The Imwald edition focuses on publications and articles.`) - updateMetaTag('og:image', 'https://jumble.imwald.eu/pwa-512x512.png') + updateMetaTag('og:image', 'https://jumble.imwald.eu/og-image.png') updateMetaTag('og:type', 'profile') updateMetaTag('og:url', window.location.href) - updateMetaTag('og:site_name', 'Imwald 🌲') + updateMetaTag('og:site_name', 'Imwald ') // Twitter card meta tags updateMetaTag('twitter:card', 'summary') - updateMetaTag('twitter:title', 'Imwald 🌲') + updateMetaTag('twitter:title', 'Imwald ') updateMetaTag('twitter:description', `${truncatedDefaultUrl} - Profile`) - updateMetaTag('twitter:image', 'https://jumble.imwald.eu/pwa-512x512.png') + updateMetaTag('twitter:image', 'https://jumble.imwald.eu/og-image.png') return } // Build description matching fallback card: username, hostname, URL const username = profile.username || '' - const ogTitle = username ? `@${username} - Imwald 🌲` : 'Profile - Imwald 🌲' + const ogTitle = username ? `@${username} - Imwald ` : 'Profile - Imwald ' // Truncate URL to 150 chars const fullUrl = window.location.href @@ -86,7 +86,7 @@ const ProfilePage = forwardRef(({ id, index, hideTitlebar = false }: { id?: stri // Use profile avatar or default image with green theme const image = profile.avatar ? `https://jumble.imwald.eu/api/avatar/${profile.pubkey}` - : 'https://jumble.imwald.eu/pwa-512x512.png' + : 'https://jumble.imwald.eu/og-image.png' updateMetaTag('og:title', ogTitle) updateMetaTag('og:description', ogDescription) @@ -96,7 +96,7 @@ const ProfilePage = forwardRef(({ id, index, hideTitlebar = false }: { id?: stri updateMetaTag('og:image:alt', `${username ? `@${username}` : 'Profile'} on Imwald`) updateMetaTag('og:type', 'profile') updateMetaTag('og:url', window.location.href) - updateMetaTag('og:site_name', 'Imwald 🌲') + updateMetaTag('og:site_name', 'Imwald ') // Add profile-specific meta tags if (profile.username) { @@ -121,13 +121,13 @@ const ProfilePage = forwardRef(({ id, index, hideTitlebar = false }: { id?: stri // Reset to default on unmount const cleanupUrl = window.location.href const truncatedCleanupUrl = cleanupUrl.length > 150 ? cleanupUrl.substring(0, 147) + '...' : cleanupUrl - updateMetaTag('og:title', 'Imwald 🌲') + updateMetaTag('og:title', 'Imwald ') updateMetaTag('og:description', `${truncatedCleanupUrl} - A user-friendly Nostr client focused on relay feed browsing and relay discovery. The Imwald edition focuses on publications and articles.`) - updateMetaTag('og:image', 'https://jumble.imwald.eu/pwa-512x512.png') + updateMetaTag('og:image', 'https://jumble.imwald.eu/og-image.png') updateMetaTag('og:type', 'website') updateMetaTag('og:url', window.location.href) - updateMetaTag('og:site_name', 'Imwald 🌲') - document.title = 'Imwald 🌲' + updateMetaTag('og:site_name', 'Imwald ') + document.title = 'Imwald ' } }, [profile]) diff --git a/src/services/nip89.service.ts b/src/services/nip89.service.ts index 585d4825..860fa1c7 100644 --- a/src/services/nip89.service.ts +++ b/src/services/nip89.service.ts @@ -207,7 +207,7 @@ class Nip89Service { name: 'Imwald', description: 'A modern Nostr client with advanced features for content discovery, discussions, and community building.', website: 'https://jumble.imwald.eu', - picture: 'https://jumble.imwald.eu/pwa-512x512.png', + picture: 'https://jumble.imwald.eu/og-image.png', supportedKinds: [ kinds.ShortTextNote, kinds.Repost, diff --git a/src/services/web.service.ts b/src/services/web.service.ts index 7bee4a6b..4f057916 100644 --- a/src/services/web.service.ts +++ b/src/services/web.service.ts @@ -125,7 +125,7 @@ function parseOpenGraphFromHtml(html: string, pageUrl: string): TWebMetadata { const urlObj = new URL(pageUrl) const isAppCanonicalHost = urlObj.hostname === 'jumble.imwald.eu' const isAppDefaultTitle = - title?.includes('Imwald 🌲') || + title?.includes('Imwald ') || title?.includes('Jumble - Imwald Edition') || title?.includes('Jumble Imwald Edition') const isAppDefaultDesc = description?.includes( diff --git a/tailwind.config.js b/tailwind.config.js index a98f796f..df734ecf 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -4,6 +4,9 @@ export default { content: ['./index.html', './src/**/*.{ts,tsx}'], theme: { extend: { + fontFamily: { + display: ['"Playfair Display"', 'Georgia', 'serif'] + }, borderRadius: { lg: 'var(--radius)', md: 'calc(var(--radius) - 2px)', @@ -13,6 +16,12 @@ export default { surface: { background: 'hsl(var(--surface-background))' }, + content: { + canvas: 'hsl(var(--content-canvas))' + }, + brand: { + wordmark: 'hsl(var(--brand-wordmark))' + }, background: 'hsl(var(--background))', foreground: 'hsl(var(--foreground))', card: { @@ -26,7 +35,8 @@ export default { primary: { DEFAULT: 'hsl(var(--primary))', foreground: 'hsl(var(--primary-foreground))', - hover: 'hsl(var(--primary-hover))' + hover: 'hsl(var(--primary-hover))', + active: 'hsl(var(--primary-active))' }, secondary: { DEFAULT: 'hsl(var(--secondary))',