diff --git a/app/[username]/profile/page.tsx b/app/[username]/profile/page.tsx index bd15e69..1033f03 100644 --- a/app/[username]/profile/page.tsx +++ b/app/[username]/profile/page.tsx @@ -117,9 +117,10 @@ export async function generateMetadata( } -export default async function ProfilePage({ params }: { params: { username: string } }) { +export default async function ProfilePage({ params }: { params: Promise<{ username: string }> }) { + const { username } = await params; const currentUser = await auth(); - const profile = await getUser(params.username, currentUser?.user?.name === params.username); + const profile = await getUser(username, currentUser?.user?.name === username); const isOwnProfile = currentUser?.user && profile && currentUser.user?.id === profile.id; if (!profile) redirect("/404"); @@ -185,7 +186,7 @@ export default async function ProfilePage({ params }: { params: { username: stri className="object-cover w-full h-full transition-transform group-hover:scale-105" /> -
+

{new Date(image.createdAt).toLocaleDateString()} diff --git a/app/about/showcase.tsx b/app/about/showcase.tsx index c423012..e5a6ae8 100644 --- a/app/about/showcase.tsx +++ b/app/about/showcase.tsx @@ -62,7 +62,7 @@ export function ProjectShowcase() { className="object-cover w-full h-full transition-transform group-hover:scale-105" /> -

+

{project.title}

Click to learn more

diff --git a/app/api/save/route.ts b/app/api/save/route.ts index 64afa1b..7d90051 100644 --- a/app/api/save/route.ts +++ b/app/api/save/route.ts @@ -100,7 +100,7 @@ async function uploadImageToCloudflare(file: FormData, userId: string, viz: "PUB } const processedFormData = new FormData(); - processedFormData.append("file", new Blob([fileBuffer]), `image.${fileType.toLowerCase()}`); + processedFormData.append("file", new Blob([new Uint8Array(fileBuffer)]), `image.${fileType.toLowerCase()}`); processedFormData.append("requireSignedURLs", "false"); const response = await fetch( diff --git a/app/community/image-gallery.tsx b/app/community/image-gallery.tsx index 81b8373..81d5f23 100644 --- a/app/community/image-gallery.tsx +++ b/app/community/image-gallery.tsx @@ -51,8 +51,8 @@ export function ImageGallery({ images, currentUserId, title, description }: Imag className="flex gap-[6px]" columnClassName="flex flex-col gap-[2px] bg-background" > -
-

+
+

{title}

@@ -76,7 +76,7 @@ export function ImageGallery({ images, currentUserId, title, description }: Imag {images.map((image, index) => (

setSelectedIndex(index)} tabIndex={0} role="button" @@ -88,7 +88,7 @@ export function ImageGallery({ images, currentUserId, title, description }: Imag className="w-full object-cover rounded-sm" draggable={false} /> -
+
@@ -238,7 +238,7 @@ export default function ImageViewer({ images, selectedIndex, setSelectedIndex }:
- + @@ -249,7 +249,7 @@ export default function ImageViewer({ images, selectedIndex, setSelectedIndex }:
{selectedImage.user.name} diff --git a/app/studio/page.tsx b/app/studio/page.tsx index 55e3247..9a9b11b 100644 --- a/app/studio/page.tsx +++ b/app/studio/page.tsx @@ -1,8 +1,7 @@ import { StudioNavbar } from "@/components/navigation/studio"; +import Canvas from "@/components/studio/canvas-loader"; import { Sidebar } from "@/components/sidebar"; -import Spinner from "@/components/spinner/spinner"; import { Metadata } from "next"; -import dynamic from "next/dynamic"; export const metadata: Metadata = { generator: 'Next.js Baby!', @@ -49,14 +48,6 @@ export const metadata: Metadata = { }, } -const Canvas = dynamic(() => import('@/components/studio/studio-main'), { - ssr: false, - loading: () => -
- -
-}) - export default function StudioPage() { {/* Remember this select-none for the future if we dont like it */} return ( diff --git a/bun.lockb b/bun.lockb index 017fdfa..5a3a81e 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/components/animated-shniy-text.tsx b/components/animated-shniy-text.tsx index 5974392..acbfbb3 100644 --- a/components/animated-shniy-text.tsx +++ b/components/animated-shniy-text.tsx @@ -24,10 +24,10 @@ const AnimatedShinyText: FC = ({ "mx-auto max-w-md text-neutral-600/70 dark:text-neutral-400/70", // Shine effect - "animate-shiny-text bg-clip-text bg-no-repeat [background-position:0_0] [background-size:var(--shiny-width)_100%] [transition:background-position_1s_cubic-bezier(.6,.6,0,1)_infinite]", + "animate-shiny-text bg-clip-text bg-no-repeat bg-position-[0_0] bg-size-[var(--shiny-width)_100%] [transition:background-position_1s_cubic-bezier(.6,.6,0,1)_infinite]", // Shine gradient - "bg-gradient-to-r from-transparent via-black/80 via-50% to-transparent dark:via-white", + "bg-linear-to-r from-transparent via-black/80 via-50% to-transparent dark:via-white", className, )} diff --git a/components/color-picker.tsx b/components/color-picker.tsx index 63e7835..e20903f 100644 --- a/components/color-picker.tsx +++ b/components/color-picker.tsx @@ -46,7 +46,7 @@ export default function ColorPicker({ setColor(color) onChange(color) }} - className="h-full w-full rounded-md border-[#22262b] bg-primary/10 px-3 py-3 text-center text-gray-100 focus:border-[#8e8ece] focus:outline-none focus:ring-1 focus:ring-[#8e8ece] md:text-sm" + className="h-full w-full rounded-md border-[#22262b] bg-primary/10 px-3 py-3 text-center text-gray-100 focus:border-[#8e8ece] focus:outline-hidden focus:ring-1 focus:ring-[#8e8ece] md:text-sm" />
diff --git a/components/marketing/banner.tsx b/components/marketing/banner.tsx index 86f88f8..4236307 100644 --- a/components/marketing/banner.tsx +++ b/components/marketing/banner.tsx @@ -71,11 +71,11 @@ export function Banner({ if (!show) return null return ( -
+
diff --git a/components/marketing/call-to-action.tsx b/components/marketing/call-to-action.tsx index 56918fd..c99c7c9 100644 --- a/components/marketing/call-to-action.tsx +++ b/components/marketing/call-to-action.tsx @@ -43,11 +43,11 @@ export function CallToAction() { -
-
-
-
-
+
+
+
+
+
{/* prevent weird ass edges */} -
+
@@ -70,7 +70,7 @@ export function CallToAction() { repeatDelay={1} className={cn( "-translate-y-40", - "[mask-image:radial-gradient(500px_circle_at_center,white,transparent)]", + "mask-[radial-gradient(500px_circle_at_center,white,transparent)]", "inset-x-0 inset-y-[-30%] h-[200%] skew-y-12", )} /> diff --git a/components/marketing/features/card.tsx b/components/marketing/features/card.tsx index f108a18..0bc6b29 100644 --- a/components/marketing/features/card.tsx +++ b/components/marketing/features/card.tsx @@ -31,7 +31,7 @@ interface AlternateFeatureCardProps { export const FeatureCardAlternate = ({ title, description, icon }: AlternateFeatureCardProps) => { return ( -
+
{icon}
diff --git a/components/marketing/features/main.tsx b/components/marketing/features/main.tsx index 9c1e835..70a251a 100644 --- a/components/marketing/features/main.tsx +++ b/components/marketing/features/main.tsx @@ -3,7 +3,7 @@ import { FeatureGrid } from './grid'; export function Features() { return ( -
+
Features diff --git a/components/marketing/floating-icons.tsx b/components/marketing/floating-icons.tsx index e780461..d25af17 100644 --- a/components/marketing/floating-icons.tsx +++ b/components/marketing/floating-icons.tsx @@ -4,37 +4,37 @@ export function FloatingElements() { return (
-
+
-
+
-
+
-
-
+
+
-
+
-
+
@@ -43,20 +43,20 @@ export function FloatingElements() { {/* omit - for now since its in the way of the prod screenshot
-
+
-
+
*/} -
-
-
+
+
+
diff --git a/components/marketing/hero/blur-fade.tsx b/components/marketing/hero/blur-fade.tsx index cc3d772..88e5e19 100644 --- a/components/marketing/hero/blur-fade.tsx +++ b/components/marketing/hero/blur-fade.tsx @@ -33,7 +33,7 @@ export function FadeIn({ children, delay = 0, className = '' }: FadeInProps) { className={`transition-all duration-1000 ${className} ${ hasAnimated || isInView ? 'opacity-100 translate-y-0 blur-none' - : 'opacity-0 translate-y-8 blur-sm' + : 'opacity-0 translate-y-8 blur-xs' }`} style={{ transitionDelay: `${delay}ms` }} > diff --git a/components/marketing/hero/bouncing-text.tsx b/components/marketing/hero/bouncing-text.tsx index 17d5059..dbae2d1 100644 --- a/components/marketing/hero/bouncing-text.tsx +++ b/components/marketing/hero/bouncing-text.tsx @@ -8,17 +8,17 @@ import { useEffect, useRef, useState } from 'react'; const getRandomColor = () => { const colors = [ - 'bg-gradient-to-r from-fuchsia-500 to-pink-500 dark:from-fuchsia-700 dark:to-pink-700', // synthwave - 'bg-gradient-to-r from-green-600 to-green-700 dark:from-green-700 dark:to-green-800', // green terminal - 'bg-gradient-to-r from-blue-500 to-teal-500 dark:from-blue-600 dark:to-teal-600', // ocean - 'bg-gradient-to-r from-yellow-400 to-orange-500 dark:from-yellow-500 dark:to-orange-600'// sunset + 'bg-linear-to-r from-fuchsia-500 to-pink-500 dark:from-fuchsia-700 dark:to-pink-700', // synthwave + 'bg-linear-to-r from-green-600 to-green-700 dark:from-green-700 dark:to-green-800', // green terminal + 'bg-linear-to-r from-blue-500 to-teal-500 dark:from-blue-600 dark:to-teal-600', // ocean + 'bg-linear-to-r from-yellow-400 to-orange-500 dark:from-yellow-500 dark:to-orange-600'// sunset ]; const bgToTextMap: Record = { - 'bg-gradient-to-r from-fuchsia-500 to-pink-500 dark:from-fuchsia-700 dark:to-pink-700': 'text-white', - 'bg-gradient-to-r from-green-600 to-green-700 dark:from-green-700 dark:to-green-800': 'text-white', - 'bg-gradient-to-r from-blue-500 to-teal-500 dark:from-blue-600 dark:to-teal-600': 'text-white', - 'bg-gradient-to-r from-yellow-400 to-orange-500 dark:from-yellow-500 dark:to-orange-600': 'text-white' + 'bg-linear-to-r from-fuchsia-500 to-pink-500 dark:from-fuchsia-700 dark:to-pink-700': 'text-white', + 'bg-linear-to-r from-green-600 to-green-700 dark:from-green-700 dark:to-green-800': 'text-white', + 'bg-linear-to-r from-blue-500 to-teal-500 dark:from-blue-600 dark:to-teal-600': 'text-white', + 'bg-linear-to-r from-yellow-400 to-orange-500 dark:from-yellow-500 dark:to-orange-600': 'text-white' }; const randomBgColor = colors[Math.floor(Math.random() * colors.length)]; @@ -45,7 +45,7 @@ export function BouncingText({ speed = 0.2, state }: BouncingTextProps) { const textRef = useRef(null); const controls = useAnimationControls(); const [colors, setColors] = useState(getRandomColor()); - const animationRef = useRef(); + const animationRef = useRef(undefined); const positionRef = useRef({ x: 0, y: 0 }); const velocityRef = useRef({ x: speed, y: speed }); const lastCollisionRef = useRef(0); @@ -189,9 +189,9 @@ export function BouncingText({ speed = 0.2, state }: BouncingTextProps) { ref={textRef} animate={controls} initial={{ x: 0, y: 0 }} - className={`absolute flex items-center w-auto max-w-full break-words + className={`absolute flex items-center w-auto max-w-full wrap-break-word ${!isMobile && colors.background} - backdrop-blur-sm md:px-4 py-2 rounded-lg transition-colors duration-200 bg-opacity-80`} + backdrop-blur-xs md:px-4 py-2 rounded-lg transition-colors duration-200 bg-opacity-80`} > {switcher || isMobile ? diff --git a/components/marketing/hero/image.tsx b/components/marketing/hero/image.tsx index 5a0ec4e..c3178e8 100644 --- a/components/marketing/hero/image.tsx +++ b/components/marketing/hero/image.tsx @@ -11,7 +11,7 @@ export default function HeroImage() { return (
-
+
diff --git a/components/marketing/hero/toggle.tsx b/components/marketing/hero/toggle.tsx index dcee550..0cfd0aa 100644 --- a/components/marketing/hero/toggle.tsx +++ b/components/marketing/hero/toggle.tsx @@ -42,7 +42,7 @@ const BlueToggle = React.forwardRef { className="flex items-center gap-2" > - + Star Seleneo on GitHub diff --git a/components/marketing/product.tsx b/components/marketing/product.tsx index 4117c70..a4ade1b 100644 --- a/components/marketing/product.tsx +++ b/components/marketing/product.tsx @@ -54,7 +54,7 @@ export function ProductShowcase() { {screenshots.map((item, index) => ( {index !== 0 && ( -
+
)} -
+
@@ -32,7 +32,7 @@ export function TimelineStep({ icon: Icon, title, description, imageUrl, index }

{description}

-
+
{title} +

-
+
{gradients.map(({ gradient, background, type }: Gradient) => ( diff --git a/components/ui/badge.tsx b/components/ui/badge.tsx index e87d62b..3afe1e3 100644 --- a/components/ui/badge.tsx +++ b/components/ui/badge.tsx @@ -4,16 +4,16 @@ import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" const badgeVariants = cva( - "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2", { variants: { variant: { default: - "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + "border-transparent bg-primary text-primary-foreground shadow-sm hover:bg-primary/80", secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", destructive: - "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + "border-transparent bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/80", outline: "text-foreground", }, }, diff --git a/components/ui/breadcrumb.tsx b/components/ui/breadcrumb.tsx index 60e6c96..2784067 100644 --- a/components/ui/breadcrumb.tsx +++ b/components/ui/breadcrumb.tsx @@ -19,7 +19,7 @@ const BreadcrumbList = React.forwardRef<
    @@ -208,7 +208,7 @@ const ChartTooltipContent = React.forwardRef< !hideIndicator && (
    { return ( - + {children} @@ -44,7 +44,7 @@ const CommandInput = React.forwardRef< {children} - + Close diff --git a/components/ui/dropdown-menu.tsx b/components/ui/dropdown-menu.tsx index 082639f..5f00d17 100644 --- a/components/ui/dropdown-menu.tsx +++ b/components/ui/dropdown-menu.tsx @@ -27,7 +27,7 @@ const DropdownMenuSubTrigger = React.forwardRef< svg]:size-4 [&>svg]:shrink-0", + "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0", inset && "pl-8", className )} @@ -100,7 +100,7 @@ const DropdownMenuCheckboxItem = React.forwardRef< >( {children}{" "}