fix: remove Vercel Analytics for static export compatibility

Remove Vercel Analytics due to static export incompatibility.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
This commit is contained in:
v0 2025-11-02 21:58:23 +00:00
parent 85a2853d4e
commit 52639621f4
8 changed files with 119 additions and 71 deletions

View File

@ -28,8 +28,8 @@ export default function About() {
</div> </div>
<div className="relative h-[400px] rounded-lg overflow-hidden"> <div className="relative h-[400px] rounded-lg overflow-hidden">
<img <img
src="/rustic-log-cabin-in-forest-with-dog.jpg" src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122853_047-GiNIS8BNoexGmhj8mowW475waeD9TL.jpg"
alt="John's log cabin in the woods" alt="John standing next to massive old growth tree"
className="w-full h-full object-cover" className="w-full h-full object-cover"
/> />
</div> </div>
@ -199,8 +199,8 @@ export default function About() {
</div> </div>
<div className="relative h-[400px] rounded-lg overflow-hidden"> <div className="relative h-[400px] rounded-lg overflow-hidden">
<img <img
src="/shiitake-mushrooms-growing-on-logs-in-forest.jpg" src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122710_780-7GtAuktkY0yLGu87XmHgdeYN8ZiWf1.jpg"
alt="Shiitake cultivation" alt="John working with logs for shiitake cultivation"
className="w-full h-full object-cover" className="w-full h-full object-cover"
/> />
</div> </div>

View File

@ -33,13 +33,24 @@ export default function EventsPage() {
<Navigation /> <Navigation />
{/* Hero Section */} {/* Hero Section */}
<section className="py-16 px-4 bg-muted/30"> <section className="py-16 px-4 bg-muted/30 forest-texture">
<div className="container mx-auto max-w-4xl text-center"> <div className="container mx-auto max-w-6xl">
<h1 className="text-5xl font-bold text-foreground mb-6 text-balance">Mushroom Cultivation Courses</h1> <div className="grid md:grid-cols-2 gap-12 items-center">
<p className="text-xl text-muted-foreground leading-relaxed text-pretty"> <div>
Learn the ancient art of shiitake cultivation in the heart of a working forest. Hands-on courses taught by <h1 className="text-5xl font-bold text-foreground mb-6 text-balance">Courses and Events</h1>
someone who lives and breathes mushroom farming. <p className="text-xl text-muted-foreground leading-relaxed text-pretty">
</p> Learn the ancient art of shiitake cultivation in the heart of a working forest. Hands-on courses taught
by someone who lives and breathes mushroom farming.
</p>
</div>
<div className="relative h-[400px] rounded-lg overflow-hidden">
<img
src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122911_830-2Q0ZOzzzL4YAfdfMMCFpHnOyoCy87p.jpg"
alt="Vibrant coral mushrooms in the forest"
className="w-full h-full object-cover"
/>
</div>
</div>
</div> </div>
</section> </section>
@ -79,9 +90,33 @@ export default function EventsPage() {
</section> </section>
{/* Experience Section */} {/* Experience Section */}
<section className="py-16 px-4 bg-muted/30"> <section className="py-16 px-4 bg-muted/30 moss-texture">
<div className="container mx-auto max-w-6xl"> <div className="container mx-auto max-w-6xl">
<h2 className="text-3xl font-bold text-foreground mb-12 text-center">The Learning Experience</h2> <h2 className="text-3xl font-bold text-foreground mb-8 text-center">The Learning Experience</h2>
<div className="grid md:grid-cols-3 gap-6 mb-12">
<div className="relative h-[250px] rounded-lg overflow-hidden">
<img
src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122707_376-AQekit9vQDRnqWMpzrQY4xP8WvC8vI.jpg"
alt="Morel mushroom in the forest"
className="w-full h-full object-cover"
/>
</div>
<div className="relative h-[250px] rounded-lg overflow-hidden">
<img
src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122907_932-LpmXYCIUZszbpOlB2dHqAv8nJGCtZU.jpg"
alt="Yellow coral mushrooms on moss"
className="w-full h-full object-cover"
/>
</div>
<div className="relative h-[250px] rounded-lg overflow-hidden">
<img
src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122904_554-FMaSl7fxVmpFdmsHaZEX3E5Vh0NqGN.jpg"
alt="Ghost pipe plant in the forest"
className="w-full h-full object-cover"
/>
</div>
</div>
<div className="grid md:grid-cols-2 gap-8"> <div className="grid md:grid-cols-2 gap-8">
<Card className="border-border"> <Card className="border-border">

View File

@ -158,6 +158,7 @@
position: relative; position: relative;
} }
/* Increased overlay opacity and ensured text is above overlay */
.forest-texture::before { .forest-texture::before {
content: ""; content: "";
position: absolute; position: absolute;
@ -165,8 +166,16 @@
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
background-color: rgba(250, 245, 235, 0.85); background-color: rgba(250, 245, 235, 0.92);
pointer-events: none; pointer-events: none;
z-index: 0;
}
/* Ensure all content is above the overlay with full opacity */
.forest-texture > * {
position: relative;
z-index: 1;
opacity: 1;
} }
.moss-texture { .moss-texture {

View File

@ -1,15 +1,15 @@
import type { Metadata } from 'next' import type React from "react"
import { Geist, Geist_Mono } from 'next/font/google' import type { Metadata } from "next"
import { Analytics } from '@vercel/analytics/next' import { Geist, Geist_Mono } from "next/font/google"
import './globals.css' import "./globals.css"
const _geist = Geist({ subsets: ["latin"] }); const _geist = Geist({ subsets: ["latin"] })
const _geistMono = Geist_Mono({ subsets: ["latin"] }); const _geistMono = Geist_Mono({ subsets: ["latin"] })
export const metadata: Metadata = { export const metadata: Metadata = {
title: 'v0 App', title: "Shiitake John's Woodlot",
description: 'Created with v0', description: "Homegrown shiitake mushrooms from 20 acres of old growth forest on Texada Island",
generator: 'v0.app', generator: "v0.app",
} }
export default function RootLayout({ export default function RootLayout({
@ -19,10 +19,7 @@ export default function RootLayout({
}>) { }>) {
return ( return (
<html lang="en"> <html lang="en">
<body className={`font-sans antialiased`}> <body className={`font-sans antialiased`}>{children}</body>
{children}
<Analytics />
</body>
</html> </html>
) )
} }

View File

@ -39,8 +39,8 @@ export default function Home() {
</div> </div>
<div className="relative h-[400px] rounded-lg overflow-hidden"> <div className="relative h-[400px] rounded-lg overflow-hidden">
<img <img
src="/shiitake-mushrooms-growing-on-logs-in-forest.jpg" src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122857_357-qnZHfuPlKuvI6Qb5G9QucUFgve1FZk.jpg"
alt="Shiitake mushrooms on logs" alt="Turkey tail mushrooms growing on mossy log"
className="w-full h-full object-cover" className="w-full h-full object-cover"
/> />
</div> </div>
@ -110,26 +110,41 @@ export default function Home() {
endangered fish depend on for survival. Our careful stewardship ensures clean water flows into nearby endangered fish depend on for survival. Our careful stewardship ensures clean water flows into nearby
lakes, preserving habitat for these unique evolutionary treasures. lakes, preserving habitat for these unique evolutionary treasures.
</p> </p>
<Button <div className="flex flex-col sm:flex-row gap-4">
variant="outline" <Button
className="border-primary text-primary hover:bg-primary/10 bg-transparent" variant="outline"
asChild className="border-primary text-primary hover:bg-primary/10 bg-transparent"
> asChild
<a
href="https://bcinvasives.ca/news/texada-island-sticklebacks/"
target="_blank"
rel="noopener noreferrer"
> >
Learn more about the Endangered Stickleback <a
</a> href="https://bcinvasives.ca/news/texada-island-sticklebacks/"
</Button> target="_blank"
rel="noopener noreferrer"
>
Learn About the Stickleback
</a>
</Button>
<Button
variant="outline"
className="border-primary text-primary hover:bg-primary/10 bg-transparent"
asChild
>
<a
href="https://texada.org/texada-island-stickleback-society/"
target="_blank"
rel="noopener noreferrer"
>
Texada Stickleback Society
</a>
</Button>
</div>
</div> </div>
<div className="relative h-[400px] rounded-lg overflow-hidden bg-muted/50 flex items-center justify-center"> <div className="relative h-[400px] rounded-lg overflow-hidden bg-muted/50 flex items-center justify-center">
<div className="text-center p-8"> <img
<div className="text-6xl mb-4">🐟</div> src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122900_435-wb8VPiXxn7UUctygqQDrIINgVJkDZF.jpg"
<p className="text-lg font-semibold text-foreground mb-2">Texada Island Stickleback</p> alt="Moss and lichen in the forest watershed"
<p className="text-sm text-muted-foreground">One of Earth's youngest and rarest species</p> className="w-full h-full object-cover"
</div> />
</div> </div>
</div> </div>
</div> </div>
@ -141,8 +156,8 @@ export default function Home() {
<div className="grid md:grid-cols-2 gap-12 items-center"> <div className="grid md:grid-cols-2 gap-12 items-center">
<div className="relative h-[350px] rounded-lg overflow-hidden"> <div className="relative h-[350px] rounded-lg overflow-hidden">
<img <img
src="/rustic-log-cabin-in-forest-with-dog.jpg" src="https://hebbkx1anhila5yf.public.blob.vercel-storage.com/IMG_20251102_122849_429-trLTSHlz0FNvU5yO4XhGqSk8PakrO2.jpg"
alt="Log cabin in the woods" alt="Una the dog in the mossy forest"
className="w-full h-full object-cover" className="w-full h-full object-cover"
/> />
</div> </div>

View File

@ -16,7 +16,7 @@ export function Navigation() {
About Shiitake John About Shiitake John
</Link> </Link>
<Link href="/events" className="text-foreground hover:text-primary transition-colors"> <Link href="/events" className="text-foreground hover:text-primary transition-colors">
Events Courses and Events
</Link> </Link>
<Link href="/sponsor"> <Link href="/sponsor">
<Button className="bg-[#1a4d2e] hover:bg-[#153d24] text-white">Sponsor the Old Growth</Button> <Button className="bg-[#1a4d2e] hover:bg-[#153d24] text-white">Sponsor the Old Growth</Button>

View File

@ -37,7 +37,7 @@
"@radix-ui/react-toggle": "1.1.1", "@radix-ui/react-toggle": "1.1.1",
"@radix-ui/react-toggle-group": "1.1.1", "@radix-ui/react-toggle-group": "1.1.1",
"@radix-ui/react-tooltip": "1.1.6", "@radix-ui/react-tooltip": "1.1.6",
"@vercel/analytics": "latest", "@vercel/analytics": "1.3.1",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",

View File

@ -93,8 +93,8 @@ importers:
specifier: 1.1.6 specifier: 1.1.6
version: 1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) version: 1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@vercel/analytics': '@vercel/analytics':
specifier: latest specifier: 1.3.1
version: 1.5.0(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) version: 1.3.1(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)
autoprefixer: autoprefixer:
specifier: ^10.4.20 specifier: ^10.4.20
version: 10.4.20(postcss@8.5.0) version: 10.4.20(postcss@8.5.0)
@ -1201,31 +1201,16 @@ packages:
'@types/react@19.0.0': '@types/react@19.0.0':
resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==} resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==}
'@vercel/analytics@1.5.0': '@vercel/analytics@1.3.1':
resolution: {integrity: sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==} resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==}
peerDependencies: peerDependencies:
'@remix-run/react': ^2
'@sveltejs/kit': ^1 || ^2
next: '>= 13' next: '>= 13'
react: ^18 || ^19 || ^19.0.0-rc react: ^18 || ^19
svelte: '>= 4'
vue: ^3
vue-router: ^4
peerDependenciesMeta: peerDependenciesMeta:
'@remix-run/react':
optional: true
'@sveltejs/kit':
optional: true
next: next:
optional: true optional: true
react: react:
optional: true optional: true
svelte:
optional: true
vue:
optional: true
vue-router:
optional: true
aria-hidden@1.2.6: aria-hidden@1.2.6:
resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
@ -1634,6 +1619,9 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
server-only@0.0.1:
resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
sharp@0.34.4: sharp@0.34.4:
resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
@ -2720,7 +2708,9 @@ snapshots:
dependencies: dependencies:
csstype: 3.1.3 csstype: 3.1.3
'@vercel/analytics@1.5.0(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)': '@vercel/analytics@1.3.1(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)':
dependencies:
server-only: 0.0.1
optionalDependencies: optionalDependencies:
next: 16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: 16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react: 19.2.0 react: 19.2.0
@ -3086,6 +3076,8 @@ snapshots:
semver@7.7.3: semver@7.7.3:
optional: true optional: true
server-only@0.0.1: {}
sharp@0.34.4: sharp@0.34.4:
dependencies: dependencies:
'@img/colour': 1.0.0 '@img/colour': 1.0.0