From 86b89f55182bd98424c2466e9367c94ead9b0259 Mon Sep 17 00:00:00 2001 From: Bjorn Lammers Date: Thu, 17 Apr 2025 02:43:14 +0200 Subject: [PATCH] feat(website): visually enhance website - Update UI with refined rose-themed styling throughout the site - Add mobile-responsive improvements to header and hero sections - Create new 'Recently Added Icons' component with animated cards - Improve icon details view with better visual hierarchy and theme indicators - Implement better hover effects and transitions for interactive elements - Add mobile menu for better navigation on smaller screens - Update license notice wording - Remove grid background in favor of refined blur effects --- web/public/site.webmanifest | 27 ++- web/src/app/icons/[icon]/page.tsx | 69 ++++++- web/src/app/icons/components/icon-search.tsx | 65 +++++-- web/src/app/icons/page.tsx | 45 ++++- web/src/app/layout.tsx | 56 +++--- web/src/app/page.tsx | 14 +- web/src/app/sitemap.ts | 20 +- web/src/components/client-header.tsx | 161 ++++++++++++++++ web/src/components/command-menu.tsx | 62 ++++--- web/src/components/footer.tsx | 97 ++++++++++ web/src/components/grid-background.tsx | 23 --- web/src/components/header-nav.tsx | 12 +- web/src/components/header-wrapper.tsx | 5 + web/src/components/header.tsx | 157 ++++++++++++++-- web/src/components/hero.tsx | 184 +++++++++++++++---- web/src/components/icon-details.tsx | 71 ++++--- web/src/components/icon-submission-form.tsx | 7 +- web/src/components/license-notice.tsx | 4 +- web/src/components/recently-added-icons.tsx | 114 ++++++++++++ web/src/components/theme-switcher.tsx | 20 +- web/src/lib/api.ts | 14 ++ 21 files changed, 997 insertions(+), 230 deletions(-) create mode 100644 web/src/components/client-header.tsx create mode 100644 web/src/components/footer.tsx delete mode 100644 web/src/components/grid-background.tsx create mode 100644 web/src/components/header-wrapper.tsx create mode 100644 web/src/components/recently-added-icons.tsx diff --git a/web/public/site.webmanifest b/web/public/site.webmanifest index d8091890..3c963dc8 100644 --- a/web/public/site.webmanifest +++ b/web/public/site.webmanifest @@ -1 +1,26 @@ -{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#FA5252","background_color":"#1B1B1D","display":"standalone"} \ No newline at end of file +{ + "name": "Dashboard Icons", + "short_name": "DashIcons", + "description": "A collection of curated icons for services, applications and tools, designed specifically for dashboards and app directories.", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ], + "theme_color": "#FA5252", + "background_color": "#1B1B1D", + "start_url": "/", + "display": "standalone", + "orientation": "portrait", + "scope": "/", + "categories": ["tools", "utilities", "productivity"] +} diff --git a/web/src/app/icons/[icon]/page.tsx b/web/src/app/icons/[icon]/page.tsx index e1e5021b..bfb11e16 100644 --- a/web/src/app/icons/[icon]/page.tsx +++ b/web/src/app/icons/[icon]/page.tsx @@ -1,6 +1,6 @@ import { IconDetails } from "@/components/icon-details" import { BASE_URL } from "@/constants" -import { getAllIcons, getAuthorData } from "@/lib/api" +import { getAllIcons, getAuthorData, getTotalIcons } from "@/lib/api" import type { Metadata, ResolvingMetadata } from "next" import { notFound } from "next/navigation" @@ -36,7 +36,10 @@ export async function generateMetadata({ params, searchParams }: Props, parent: const iconImageUrl = `${BASE_URL}/png/${icon}.png` const pageUrl = `${BASE_URL}/icons/${icon}` - const formattedIconName = icon.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ') + const formattedIconName = icon + .split("-") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" ") return { title: `${formattedIconName} Icon | Dashboard Icons`, @@ -101,9 +104,65 @@ export default async function IconPage({ params }: { params: Promise<{ icon: str notFound() } - // Pass originalIconData directly, assuming IconDetails can handle it - const iconData = originalIconData + // Fetch total icons + const { totalIcons } = await getTotalIcons() + // Format icon name + const formattedIconName = icon + .split("-") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" ") const authorData = await getAuthorData(originalIconData.update.author.id) - return + + return ( +
+ {/* Background glow effect */} +