diff --git a/app/foundation/donate/page.tsx b/app/foundation/donate/page.tsx new file mode 100644 index 00000000..c9517dd6 --- /dev/null +++ b/app/foundation/donate/page.tsx @@ -0,0 +1,75 @@ +import Image from 'next/image' +import { cn } from '@/utils' +import { PayPalStackedButton } from '@/components/paypal-button' + +const paragraphSx = 'mb-4 indent-8 text-left' +const listSx = cn( + 'mb-1 ml-12 space-y-2 -indent-6', //layout + "[&>li]:before:mr-2 [&>li]:before:content-['—']", // dash-bullets + '[&>li]:after:content-[";"] [&>li]:last-of-type:after:content-["."]', // colons and full stop +) + +export default function Donate() { + return ( + <> +

Donate

+

+ Your generosity helps us safeguard and share the legacy of historical weather instruments + for future generations. Every donation — large or small — plays a vital role in conserving + our collection, supporting research, and making this heritage accessible to the public. +

+

You can support the Foundation through the following channels:

+ + +
+
+ Bitcoin + Bitcoin +

bc1q6g0etsc0pu2s2zjk8t3rdej9624stxzq0hlm5f

+
+
+ Ethereum + Ethereum + {/* TODO: add copy button */} +

0x29B67cDAd027266Ed497b66a0c708e750d4436FA

+
+
+ + + ) +} diff --git a/app/foundation/layout.tsx b/app/foundation/layout.tsx new file mode 100644 index 00000000..a44a4759 --- /dev/null +++ b/app/foundation/layout.tsx @@ -0,0 +1,19 @@ +import { type PropsWithChildren } from 'react' + +export default function Layout({ children }: PropsWithChildren) { + return ( + <> +
+

The Art of Weather Instruments Foundation

+

+ Preserving the Beauty and Function of Historical Weather Instruments +

+
+ {children} + + ) +} diff --git a/app/foundation/page.tsx b/app/foundation/page.tsx new file mode 100644 index 00000000..40ccf54b --- /dev/null +++ b/app/foundation/page.tsx @@ -0,0 +1,247 @@ +import Image from 'next/image' +import Link from 'next/link' +import { cn } from '@/utils' +import { Separator } from '@/components/ui' +import { FrontRoutes } from '@/constants' + +const paragraphSx = 'mb-4 indent-8 text-left' +const sectionSx = 'mt-10' +const header3Sx = 'mb-5 mt-10' +const listSx = cn( + 'mb-1 ml-12 space-y-2 -indent-6', //layout + "[&>li]:before:mr-2 [&>li]:before:content-['—']", // dash-bullets + '[&>li]:after:content-[";"] [&>li]:last-of-type:after:content-["."]', // colons and full stop +) +const linkSx = 'decoration-muted-foreground hover:decoration-foreground underline' +const contactTxSx = 'text-sm text-muted-foreground' + +export default function Foundation() { + return ( + <> +
+

Mission

+ Art of Weather Instruments Foundation +

+ The mission of the foundation is to preserve and expand the distinguished collection of + historical meteorological instruments assembled with dedication and expertise by its + founder, Leo Shirokov, in doing so fostering, promoting, and safeguarding the traditions + of decorative, applied, and artisanal arts, with a particular emphasis on Europe's + cultural and scientific heritage, and encouraging international collaboration and the + exchange of knowledge. +

+

The foundation seeks to achieve its objectives through:

+ +

+ Particular attention is given to the scholarly quality, public accessibility, and cultural + relevance of the foundation's activities. +

+
+
+

Message from the Founder

+

+ 'My journey into the world of antique barometers and other meteorological artifacts began + as a deeply personal quest — a way to connect with the beauty, ingenuity, and spirit of + past centuries. What started as a personal passion has grown into a cultural mission. I + founded The Art of Weather Instruments Foundation and developed it into a + cultural project dedicated to preserving and expanding this unique heritage, making it + accessible to collectors, researchers, designers, students, and the wider public.' +

+

+ 'This is not merely a private collection, but a living encyclopedia of the history of + science and aesthetics. These instruments are more than scientific tools — they are + tangible connections to the ingenuity, craftsmanship, and artistry of past centuries. By + investing your attention, time, or resources, you help ensure that this legacy is + documented, accessible, and alive, continuing to inspire future generations around the + world.' +

+

+ 'It is not simply a “display” — it is a comprehensive platform that connects people with + history through real, physical objects. In a world where the digital often displaces the + tangible, my project offers access to things that can be seen, understood, and experienced + as part of our material culture. It preserves the traditions of craftsmanship and design, + and in doing so, works not only to safeguard the past but also to inspire the future — for + artisans, artists, engineers, historians, and all who value the meeting of science and + beauty.' +

+

L. Shirokov

+ +
+

Founding Board

+
+
+ Leo Shirokov +

Leonid Shirokov — Chair & Co-Founder

+
+
+ Alex Shenshin +

+ Aleksandr Shenshin — Treasurer/Secretary & Co-Founder +

+
+
+
+
+

Policy Plan

+ Culture code +

+ The Art of Weather Instruments Foundation is an independent, non-profit organization + dedicated to the preservation, study, and promotion of historical meteorological + instruments as part of Europe's cultural and scientific heritage. +

+

+ The Foundation's mission is to provide access to a collection of exceptional artistic + and historical value, comprising meteorological measuring instruments from various + periods, along with associated documents, contextual data, and accumulated expertise. + This access is intended for the general public, researchers, collectors, and museum + institutions — both in physical and digital form. +

+

Strategy

+

The Foundation aims to:

+
    +
  • + Ensure the safeguarding and long-term conservation of meteorological instruments and + related documents as carriers of scientific, artisanal, and cultural history +
  • +
  • + Research the provenance, dating, stylistic, and technical characteristics of the + collection's objects, including attribution and provenance documentation +
  • +
  • + Carry out professional cataloguing and systematic classification of the collection + according to museum standards +
  • +
  • + Provide digital access to the collection via the website{' '} + + www.barometers.info + + , including imagery and descriptions +
  • +
  • + Collaborate with museums, archives, private collectors, scientific institutions, + restorers, and cultural heritage funds +
  • +
  • + Foster public interest in meteorology as a visual, historical, and educational + phenomenon +
  • +
  • + Develop publications — catalogues, scholarly and popular science articles, books, and + studies on the collection and its broader context +
  • +
  • + Explore the possibility of establishing, in the future, an independent museum or + permanent exhibition space dedicated to meteorological instruments, with the aim of + engaging the public with the history of science, technology, and aesthetics in an + accessible and inspiring manner +
  • +
+

Activity plan

+

Over the next three years, the Foundation intends to:

+
    +
  • + Further expand the collection with objects of high historical value, rarity, or + uniqueness — including prototypes, signature works by renowned makers, and + under-documented types of instruments +
  • +
  • + Undertake restoration of instruments when necessary, in cooperation with qualified + professionals and in accordance with ethical heritage preservation guidelines +
  • +
  • + Develop and integrate a digital collection management database into the public website +
  • +
  • + Compile provenance dossiers and connect objects with their makers, owners, and + historical contexts +
  • +
  • + Organize temporary and online exhibitions in cooperation with other institutions +
  • +
  • Prepare, edit, and publish knowledge-based materials on the collection
  • +
  • + Inventory historical literature and archives, embedding them into the broader + knowledge framework of instrument production and distribution +
  • +
  • + Invite external experts and authors to contribute to research and public engagement +
  • +
  • + Participate in grant programs, strengthen international networks, and represent the + Foundation at relevant scientific and cultural forums +
  • +
+
+
+
+
+ Logo +

+ awif +

+
+
+

Reg. name

+

Stichting Art of Weather Instruments

+

Trade name

+

The Art of Weather Instruments Foundation

+

KVK

+

98055216

+

RSIN

+

868340911

+

Reg. address

+

Jonker Florislaan 64 Nuenen 5673ML Netherlands

+

E-mail

+ + post@barometers.info + +
+
+
+
+ + ) +} diff --git a/app/globals.css b/app/globals.css index 3297c274..153dd18a 100644 --- a/app/globals.css +++ b/app/globals.css @@ -230,11 +230,11 @@ } /* H2 is used for page headers */ h2 { - @apply text-2xl leading-tight font-semibold tracking-wider capitalize; + @apply xs:text-2xl text-xl leading-tight font-semibold tracking-wider capitalize; } h3 { - @apply text-xl leading-tight font-semibold tracking-wide capitalize; + @apply xs:text-xl text-lg leading-tight font-semibold tracking-wide capitalize; } h4 { diff --git a/app/history/page.tsx b/app/history/page.tsx index 1a8ca9b5..f9618c75 100644 --- a/app/history/page.tsx +++ b/app/history/page.tsx @@ -2,8 +2,7 @@ import 'server-only' import NextImage from 'next/image' import { ShowMore } from '../../components/showmore' -import { customImageLoader } from '@/utils' -import { cn } from '@/utils' +import { customImageLoader, cn } from '@/utils' export const dynamic = 'force-static' diff --git a/components/containers/header/tabs.tsx b/components/containers/header/tabs.tsx index ec23ba23..6630dd14 100644 --- a/components/containers/header/tabs.tsx +++ b/components/containers/header/tabs.tsx @@ -70,7 +70,7 @@ export function WideScreenTabs({ menu: menuData = [], ...props }: Props) { > -

{nestedItem.label}

+

{nestedItem.label}

diff --git a/components/heading-image/heading-image.tsx b/components/heading-image/heading-image.tsx index 6b1e4360..30d790a2 100644 --- a/components/heading-image/heading-image.tsx +++ b/components/heading-image/heading-image.tsx @@ -1,6 +1,8 @@ import NextImage from 'next/image' import './animations.css' import { customImageLoader } from '@/utils' +import Link from 'next/link' +import { FrontRoutes } from '@/constants' export const HeadingImage = () => { return ( @@ -15,9 +17,11 @@ export const HeadingImage = () => { />
-

- Industrial Era Barometer Collection -

+ +

+ Art of weather instruments foundation +

+
diff --git a/components/paypal-button/index.ts b/components/paypal-button/index.ts new file mode 100644 index 00000000..114f6093 --- /dev/null +++ b/components/paypal-button/index.ts @@ -0,0 +1 @@ +export { PayPalStackedButton } from './paypal-stacked-button' diff --git a/components/paypal-button/paypal-stacked-button.tsx b/components/paypal-button/paypal-stacked-button.tsx new file mode 100644 index 00000000..52fad0b3 --- /dev/null +++ b/components/paypal-button/paypal-stacked-button.tsx @@ -0,0 +1,73 @@ +'use client' + +import { useCallback, useEffect, useRef, useState } from 'react' +import { cn } from '@/utils' +import Script from 'next/script' + +interface PayPalHostedButton { + hostedButtonId: string +} + +interface PayPalHostedButtons { + (config: PayPalHostedButton): { + render: (container: HTMLElement) => void + } +} + +declare global { + interface Window { + paypal?: { + HostedButtons: PayPalHostedButtons + } + } +} + +export function PayPalStackedButton({ + className, + ...divProps +}: React.HTMLAttributes) { + const containerRef = useRef(null) + const [isRendered, setIsRendered] = useState(false) + + const renderButton = useCallback(() => { + if (window.paypal && containerRef.current && !isRendered) { + // Clear container before rendering to avoid duplicates + containerRef.current.innerHTML = '' + + window.paypal + .HostedButtons({ + hostedButtonId: 'LEG7JKHVDZ6WA', + }) + .render(containerRef.current) + + setIsRendered(true) + } + }, [isRendered]) + + useEffect(() => { + // If PayPal is already loaded, render immediately + if (window.paypal) { + renderButton() + } + }, [renderButton]) + + return ( + <> +