From 06cd245b8c22d3d65116bb9f67ed6a5ad8a30eb7 Mon Sep 17 00:00:00 2001 From: Saksham Jain Date: Wed, 29 Jul 2026 01:27:22 +0530 Subject: [PATCH 1/7] feat(template): upgrade template repo with webpage-starter architecture, i18n, and client-side pages --- AGENTS.md | 38 + CLAUDE.md | 1 + README.md | 361 +++++--- app/favicon.ico | Bin 25931 -> 0 bytes app/globals.css | 26 - app/layout.tsx | 34 - app/page.tsx | 65 -- brand/Brand.md | 39 + brand/favicon.ico | Bin 0 -> 16166 bytes brand/logo.svg | 1 + next.config.ts | 14 +- package-lock.json | 896 ++++++++++++++++++-- package.json | 13 +- public/.well-known/ai-plugin.json | 18 + public/.well-known/assetlinks.json | 12 + public/assets/icons/aossie_logo.svg | 1 + public/assets/icons/favicon.ico | Bin 0 -> 16166 bytes public/llms.txt | 38 + public/robots.txt | 8 + src/app/[locale]/error.tsx | 57 ++ src/app/[locale]/globals.css | 84 ++ src/app/[locale]/layout.tsx | 59 ++ src/app/[locale]/not-found.tsx | 45 + src/app/[locale]/page.tsx | 65 ++ src/app/sitemap.ts | 21 + src/components/LanguageSwitcher.tsx | 40 + src/components/ThemeToggle.tsx | 84 ++ src/components/providers/lenis-provider.tsx | 13 + src/components/providers/theme-provider.tsx | 15 + src/config/languages.ts | 12 + src/i18n/metadata.ts | 45 + src/i18n/navigation.ts | 4 + src/i18n/request.ts | 16 + src/i18n/routing.ts | 8 + src/messages/en.json | 17 + src/messages/hi.json | 17 + src/proxy.ts | 19 + tsconfig.json | 2 +- 38 files changed, 1881 insertions(+), 307 deletions(-) create mode 100644 AGENTS.md create mode 100644 CLAUDE.md delete mode 100644 app/favicon.ico delete mode 100644 app/globals.css delete mode 100644 app/layout.tsx delete mode 100644 app/page.tsx create mode 100644 brand/Brand.md create mode 100644 brand/favicon.ico create mode 100644 brand/logo.svg create mode 100644 public/.well-known/ai-plugin.json create mode 100644 public/.well-known/assetlinks.json create mode 100644 public/assets/icons/aossie_logo.svg create mode 100644 public/assets/icons/favicon.ico create mode 100644 public/llms.txt create mode 100644 public/robots.txt create mode 100644 src/app/[locale]/error.tsx create mode 100644 src/app/[locale]/globals.css create mode 100644 src/app/[locale]/layout.tsx create mode 100644 src/app/[locale]/not-found.tsx create mode 100644 src/app/[locale]/page.tsx create mode 100644 src/app/sitemap.ts create mode 100644 src/components/LanguageSwitcher.tsx create mode 100644 src/components/ThemeToggle.tsx create mode 100644 src/components/providers/lenis-provider.tsx create mode 100644 src/components/providers/theme-provider.tsx create mode 100644 src/config/languages.ts create mode 100644 src/i18n/metadata.ts create mode 100644 src/i18n/navigation.ts create mode 100644 src/i18n/request.ts create mode 100644 src/i18n/routing.ts create mode 100644 src/messages/en.json create mode 100644 src/messages/hi.json create mode 100644 src/proxy.ts diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..40d426f --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,38 @@ + +# This is NOT the Next.js you know + +This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. + + +# AOSSIE Webpage Starter + +Project specific context and directives for AI agents. + +## 🛠️ Stack & Commands + +- **Stack:** Next.js 16.2.11 App Router (Turbopack), React 19, Tailwind CSS v4, `next-intl` (i18n), `next-themes` (light/dark state manager). +- **Build:** `npm run build` +- **Develop:** `npm run dev` + +--- + +## 🎨 Styles & Theme System + +- **Class-Based Dark Mode:** Tailwind CSS v4 is configured for class-based overrides using `@custom-variant dark (&:where(.dark, .dark *))` in [`globals.css`](file:///x:/Work/Dev/AOSSIE/webpage-starter/src/app/[locale]/globals.css). +- **Semantic Tokens:** Do **not** write inline layout dark utilities (e.g., `dark:bg-black` or `dark:text-zinc-50`). Always write semantic classes linked to the central theme variables (e.g., `bg-background-primary`, `text-foreground-primary`). +- **Typography:** The default font family is **Inter**. It is mapped to `--font-sans` in globals.css. + +--- + +## 🌐 i18n & l10n Routing + +- **Dynamic segement:** All localized pages and layouts must be nested inside [`src/app/[locale]/`](file:///x:/Work/Dev/AOSSIE/webpage-starter/src/app/[locale]/). +- **Awaiting params:** Layout and Page `params` props are Promises in Next.js 15/16. Always `await params` before accessing `locale`. +- **Navigation:** Never import `Link`, `useRouter`, or `usePathname` from standard `next/link` or `next/navigation`. Always import them from local configuration helpers in [`src/i18n/navigation.ts`](file:///x:/Work/Dev/AOSSIE/webpage-starter/src/i18n/navigation.ts). + +--- + +## 📦 Project Boundaries + +- **Config alias map:** Webpack & Turbopack alias resolvers are manually defined in [`next.config.ts`](file:///x:/Work/Dev/AOSSIE/webpage-starter/next.config.ts) mapping `"next-intl/config"` to our local request setup. Do not import the native `@swc/core` compiler plugin wrapper `createNextIntlPlugin` directly to avoid security policy native module blocks. +- **Branding Assets:** The official branding logo, favicon, and style specifications reside inside [`brand/`](file:///x:/Work/Dev/AOSSIE/webpage-starter/brand/). diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..43c994c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/README.md b/README.md index 64c32c1..d03a3db 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@
- Stability Nexus - + AOSSIE
  @@ -12,177 +11,323 @@
-[![Static Badge](https://img.shields.io/badge/Stability_Nexus-/TODO-228B22?style=for-the-badge&labelColor=FFC517)](https://TODO.stability.nexus/) - - +[![Static Badge](https://img.shields.io/badge/AOSSIE-Webpage--Starter-228B22?style=for-the-badge&labelColor=FFC517)](https://aossie.org/)

- + Telegram Badge    - -X (formerly Twitter) Badge + +X Badge    Discord Badge -   - - - Medium Badge -   - - - LinkedIn Badge -   - - - Youtube Badge

---
-

TODO: Project Name

+

AOSSIE Webpage Starter

-[TODO](https://TODO.stability.nexus/) is a ... TODO: Project Description. +A high-performance, developer-friendly webpage starter kit built on **Next.js 16 (App Router)**, **React 19**, **Tailwind CSS v4**, and pre-configured for **Internationalization (i18n)** and **Localization (l10n)** using **next-intl**. + +This starter is designed for organizations looking to kickstart their web presence with a fully accessible, multi-lingual, and responsive architecture out-of-the-box. + +--- + +## 📋 Project Maturity & TODO Checklist + +In the checklist below, mark the items that have been completed for your project: + +* [x] The project has a logo (`brand/logo.svg`). +* [x] The project has a favicon (`brand/favicon.ico`). +* [x] The web frontend: + - [x] Has proper title and metadata. + - [x] Has proper open graph metadata, to ensure that it is shown well when shared in social media. + - [x] Has a footer and header with AOSSIE logos and social handles. + - [x] Is fully static and client-side (`"use client"` configured for pages). + - [x] Is deployed to GitHub Pages via a GitHub Workflow (`.github/workflows/nextjs.yml`). + - [x] Has automated CI build and lint validation (`.github/workflows/ci.yml`). + - [x] Has CodeRabbit automated AI code review (`.coderabbit.yml`). + - [x] Has open-source legal compliance (`DCO.md`, `COPYRIGHT.md`, `Contributors.md`). --- -## Project Maturity - -TODO: In the checklist below, mark the items that have been completed and delete items that are not applicable to the current project: - -* [ ] The project has a logo. -* [ ] The project has a favicon. -* [ ] The protocol: - - [ ] has been described and formally specified in a paper. - - [ ] has had its main properties mathematically proven. - - [ ] has been formally verified. -* [ ] The smart contracts: - - [ ] were thoroughly reviewed by at least two knights of The Stable Order. - - [ ] were deployed to: - - [ ] Ergo - - [ ] Cardano - - [ ] EVM Chains: - - [ ] Ethereum Classic - - [ ] Ethereum - - [ ] Polygon - - [ ] BSC - - [ ] Base -* [ ] The mobile app: - - [ ] has an _About_ page containing the Stability Nexus's logo and pointing to the social media accounts of the Stability Nexus. - - [ ] is available for download as a release in this repo. - - [ ] is available in the relevant app stores. -* [ ] The web frontend: - - [ ] has proper title and metadata. - - [ ] has proper open graph metadata, to ensure that it is shown well when shared in social media (Discord, Telegram, Twitter, LinkedIn). - - [ ] has a footer, containing the Stability Nexus's logo and pointing to the social media accounts of the Stability Nexus. - - [ ] is fully static and client-side. - - [ ] is deployed to Github Pages via a Github Workflow. - - [ ] is accessible through the https://TODO:PROJECT-NAME.stability.nexus domain. -* [ ] the project is listed in [https://stability.nexus/protocols](https://stability.nexus/protocols). +## 🚀 Key Features + +- **Next.js 16 & React 19:** Utilizing the latest Server Components, Client Actions, and async routing paradigms. +- **Tailwind CSS v4:** Modern utility-first styling with native CSS variables and streamlined postcss integrations. +- **Dual Theme System:** Flash-free light, dark, and system preferred themes using `next-themes` and Tailwind CSS v4 custom variants. +- **Robust i18n & l10n:** Deeply integrated multi-language support: + - Automatic locale detection based on browser preferences. + - Subpath routing (e.g., `/en`, `/hi`) with clean `as-needed` URL prefixing. + - Sleek, interactive language switcher client component. + - Zero-bundle-size footprint for static translations using Server Components & Client `useTranslations`. +- **Developer Experience:** Strict TypeScript compilation and ES Lint setup. +- **Application Control Compatibility:** Configured with manual Webpack & Turbopack alias resolution to bypass restrictive execution environments blocking native binary compiles. +- **Open-Source Governance & CI/CD:** Integrated GitHub Actions workflows (`ci.yml`, `nextjs.yml`, `label-merge-conflicts.yml`), `.coderabbit.yml`, and `DCO.md` legal documentation. +- **AI Agent Pairing Ready:** Includes `AGENTS.md` and `CLAUDE.md` to guide AI development agents. --- -## Tech Stack +## 📂 Project Structure + +Here is a breakdown of the key i18n directories and files: + +```text +├── .github/ +│ └── workflows/ # GitHub Actions (CI, GitHub Pages deployment, merge conflict checks) +├── brand/ +│ ├── logo.svg # Vector logo +│ ├── favicon.ico # Browser tab icon +│ └── Brand.md # Official AOSSIE brand guidelines document +├── next.config.ts # Alias-wrapped Next configuration +├── public/ # Static assets, robots.txt, assetlinks.json, llms.txt +├── src/ +│ ├── config/ +│ │ └── languages.ts # Central registry of supported languages & locales +│ ├── i18n/ +│ │ ├── routing.ts # Core i18n routing parameters (locales, defaults) +│ │ ├── request.ts # Server-side translation dictionary loading configuration +│ │ └── navigation.ts # Type-safe navigation helpers (Link, useRouter, etc.) +│ ├── messages/ +│ │ ├── en.json # English translation dictionary +│ │ └── hi.json # Hindi translation dictionary +│ ├── app/ +│ │ ├── sitemap.ts # Dynamically generated localized sitemaps +│ │ └── [locale]/ # Localized route group +│ │ ├── layout.tsx # Multi-lingual layout injecting client context & translations +│ │ ├── page.tsx # Localized Landing Page ("use client") +│ │ ├── globals.css # Global styles for the app segment +│ │ ├── error.tsx # Localized Error Boundary page fallback +│ │ └── not-found.tsx # Localized 404 page fallback +│ ├── components/ +│ │ ├── LanguageSwitcher.tsx # Dropdown element to switch interface locales interactively +│ │ ├── ThemeToggle.tsx # Multi-state theme switch with micro-animations +│ │ └── providers/ +│ │ ├── theme-provider.tsx # Next-themes client wrapper component +│ │ └── lenis-provider.tsx # Lenis smooth scrolling provider wrapper +│ └── proxy.ts # Next.js 16 Proxy Middleware for route and locale redirection +├── .coderabbit.yml # Automated AI Code Review configuration +├── COPYRIGHT.md # Copyright terms +├── Contributors.md # Project contributors list +└── DCO.md # Developer Certificate of Origin +``` -TODO: +--- -### Frontend +## 🛠️ Usage Guide -TODO: +### 1. Adding a New Language -- Next.js 14+ (React) -- TypeScript -- TailwindCSS -- shadcn/ui +To add support for a new language (e.g., French - `fr`): -### Blockchain +1. **Register the language:** Open [`src/config/languages.ts`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/src/config/languages.ts) and add your new language to the `languages` array: + ```typescript + export const languages: Language[] = [ + { code: 'en', name: 'English', localName: 'English' }, + { code: 'hi', name: 'Hindi', localName: 'हिन्दी' }, + { code: 'fr', name: 'French', localName: 'Français' } // Add this line + ]; + ``` -TODO: +2. **Create the translation catalog:** Under `messages/`, create a new file named `fr.json`: + ```json + { + "Home": { + "heading": "Bienvenue sur AOSSIE Webpage Starter" + } + } + ``` -- Wagmi -- Solidity Smart Contracts -- Ethers.js +3. That's it! Next.js and `next-intl` will automatically register the locale, add it to the routing tables, and handle redirection for visitors matching `fr` browser preferences. --- -## Getting Started +### 2. Translating Text in Pages and Components -### Prerequisites +#### Server Components (Recommended for Static Content) +By default, server components can load translations statically without shipping translation JSONs to the client bundle: -TODO +```tsx +import { useTranslations } from 'next-intl'; -- Node.js 18+ -- npm/yarn/pnpm -- MetaMask or any other web3 wallet browser extension +export default function Section() { + const t = useTranslations('Home'); + return

{t('title')}

; +} +``` -### Installation +#### Client Components +If your component uses React hooks (e.g., `useState`), define it with `"use client"` and import from `next-intl`: -TODO +```tsx +"use client"; -#### 1. Clone the Repository +import { useTranslations } from 'next-intl'; -```bash -git clone https://github.com/StabilityNexus/TODO.git -cd TODO +export default function InteractiveButton() { + const t = useTranslations('Home'); + return ; +} ``` -#### 2. Install Dependencies +--- + +### 3. Navigation Helpers + +When navigating between routes, always use the locale-aware navigation helpers imported from [`src/i18n/navigation.ts`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/src/i18n/navigation.ts) instead of standard `next/link` or `next/navigation`: + +```tsx +import { Link } from '../../i18n/navigation'; -Using your preferred package manager: +// Will automatically resolve to /en/about or /hi/about based on active locale +About Us +``` + +For programmatic router navigation: +```typescript +import { useRouter, usePathname } from '../../i18n/navigation'; + +const router = useRouter(); +const pathname = usePathname(); + +// Switch active locale on current page +router.replace(pathname, { locale: 'hi' }); +``` + +--- + +### 4. Theme Configuration & Dual Theme Support + +The starter kit uses `next-themes` combined with Tailwind CSS v4's class-based custom variants to provide a responsive and flash-free theme experience. + +#### Customizing Colors +Tailwind v4 is configured via CSS custom properties in [`src/app/[locale]/globals.css`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/src/app/[locale]/globals.css). To adjust the default light and dark theme background or text colors, edit the root variables: + +```css +:root { + --background: #ffffff; /* Light theme background */ + --foreground: #171717; /* Light theme text */ +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; /* Dark theme background */ + --foreground: #ededed; /* Dark theme text */ + } +} +``` + +#### Using Theme Classes +To create element styles that adapt automatically to the user's selected theme, use the `dark:` utility modifier: + +```tsx +
+ This card automatically transitions colors. +
+``` +--- + +### 5. Smooth Scrolling (Lenis) + +The starter repository integrates the `lenis` library to provide smooth, high-performance inertial scrolling across all browsers. + +#### Customizing Lenis Options +To configure scroll parameters (e.g., dampening velocity, custom scroll durations, or scroll directions), update the parameters passed to the `ReactLenis` component in [`lenis-provider.tsx`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/src/components/providers/lenis-provider.tsx): + +```tsx + + {children} + +``` + +To access the active Lenis instance or bind custom scroll animations programmatically in your page components, use the `useLenis` hook: + +```typescript +import { useLenis } from 'lenis/react'; + +const lenis = useLenis(({ scroll, limit, velocity, direction }) => { + // Bind your scroll logic or animation timelines here +}); +``` + +--- + +## ⚡ Development and Deployment + +### Getting Started + +Install the project dependencies: ```bash npm install -# or -yarn install -# or -pnpm install ``` -#### 3. Run the Development Server +Start the development server: +```bash +npm run dev +``` + +Open [http://localhost:3000](http://localhost:3000) to view it. The application will automatically detect your browser's language preferences and route you to `/en` or `/hi` (or fall back to the default language, English). -Start the app locally: +### Building for Production +Compile and optimize the project: ```bash -npm run dev -# or -yarn dev -# or -pnpm dev +npm run build ``` -#### 4. Open your Browser +This compiles optimized static pages under the `/[locale]` path and checks all TypeScript configurations. -Navigate to [http://localhost:3000](http://localhost:3000) to see the application. +### Running in Production + +Start the optimized server: +```bash +npm run start +``` --- -## Contributing +## ⚙️ Initial Project Setup Checklist + +When bootstrapping a new project from this starter repository, update the following configurations to align with your project's branding, package naming, and hosting domains: + +### 1. Domain Names & Sitemap URL +- **Sitemap Generator ([`src/app/sitemap.ts`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/src/app/sitemap.ts))**: Replace the default fallback domain `https://project.aossie.org` with your project's production domain, or set the `NEXT_PUBLIC_SITE_URL` environment variable in your production hosting panel. +- **Search Crawler Rules ([`public/robots.txt`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/public/robots.txt))**: Replace the sitemap URL domain `https://project.aossie.org/sitemap.xml` with your production URL. + +### 2. Branding Guidelines & Assets +- **Logo & Favicons ([`brand/`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/brand/))**: Replace `logo.svg` and `favicon.ico` with your organization's custom logos. Copy these updated assets to the [`public/assets/icons/`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/public/assets/icons/) directory as well (`public/assets/icons/aossie_logo.svg` and `public/assets/icons/favicon.ico`). +- **Brand Documentation ([`brand/Brand.md`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/brand/Brand.md))**: Document your custom color hex codes, typography selections, and asset paths here to guide future developers and AI coding agents. + +### 3. SEO Structured Data +- **Schema.org JSON-LD ([`src/app/[locale]/page.tsx`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/src/app/[locale]/page.tsx))**: Locate the `jsonLd` object inside the `Home` component. Replace the default publisher URLs and name fields with your specific project metadata. + +### 4. Mobile & AI Platform Configurations +- **Android App Links ([`public/.well-known/assetlinks.json`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/public/.well-known/assetlinks.json))**: Change the package name `org.aossie.starter` and insert your Android application certificate SHA-256 fingerprint to handle incoming domain links on mobile. +- **AI Agent Plugins ([`public/.well-known/ai-plugin.json`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/public/.well-known/ai-plugin.json))**: Update the host URLs, contact emails, and description text to describe your final website's features to AI agents. +- **LLM Crawler Rules ([`public/llms.txt`](file:///x:/Work/Dev/AOSSIE/Template-Repo-NextJS/public/llms.txt))**: Serves the root crawlers policy indicating allowing LLM bot indexing. Update if you wish to block specific AI search engines. + +--- + +## 🤝 Contributing We welcome contributions of all kinds! To contribute: 1. Fork the repository and create your feature branch (`git checkout -b feature/AmazingFeature`). 2. Commit your changes (`git commit -m 'Add some AmazingFeature'`). -3. Run the development workflow commands to ensure code quality: - - `npm run format:write` - - `npm run lint:fix` - - `npm run typecheck` +3. Ensure code quality: + - `npm run lint` + - `npm run build` 4. Push your branch (`git push origin feature/AmazingFeature`). 5. Open a Pull Request for review. -If you encounter bugs, need help, or have feature requests: - -- Please open an issue in this repository providing detailed information. -- Describe the problem clearly and include any relevant logs or screenshots. - -We appreciate your feedback and contributions! - -© 2025 The Stable Order. +© 2025 AOSSIE. Released under the Apache 2.0 / Open Source License. diff --git a/app/favicon.ico b/app/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/app/globals.css b/app/globals.css deleted file mode 100644 index a2dc41e..0000000 --- a/app/globals.css +++ /dev/null @@ -1,26 +0,0 @@ -@import "tailwindcss"; - -:root { - --background: #ffffff; - --foreground: #171717; -} - -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; -} diff --git a/app/layout.tsx b/app/layout.tsx deleted file mode 100644 index f7fa87e..0000000 --- a/app/layout.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; - -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - {children} - - - ); -} diff --git a/app/page.tsx b/app/page.tsx deleted file mode 100644 index 295f8fd..0000000 --- a/app/page.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import Image from "next/image"; - -export default function Home() { - return ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -

-
- -
-
- ); -} diff --git a/brand/Brand.md b/brand/Brand.md new file mode 100644 index 0000000..be99cb2 --- /dev/null +++ b/brand/Brand.md @@ -0,0 +1,39 @@ +# AOSSIE Brand Guidelines + +This document details the visual identity guidelines for **AOSSIE** (Australian Open Source Software Innovation and Education). + +--- + +## 🎨 Color Palette + +The AOSSIE color scheme is inspired by Australia's national colors and reflects the organization's roots. + +| Color Name | Color Sample | HEX Code | RGB Code | Role | +| :--- | :--- | :--- | :--- | :--- | +| **Golden Wallet** | 🟡 | `#FFCD00` | `rgb(255, 205, 0)` | Primary Brand Color | +| **Baggy Green** | 🟢 | `#00843D` | `rgb(0, 132, 61)` | Secondary Brand Color | +| **Neutral Dark** | ⬛ | `#121212` | `rgb(18, 18, 18)` | Dark Layouts & Text | +| **Neutral Light** | ⬜ | `#FFFFFF` | `rgb(255, 255, 255)` | Light Layouts & Text | +| **Neutral Muted** | 🔘 | `#7A7A7A` | `rgb(122, 122, 122)` | Borders & Muted Text | + +--- + +## 👁️ Visual Assets + +### 1. Brand Logo +The official vector logo is stored in the repository in **SVG** format: +- **Project Folder:** [logo.svg](file:///x:/Work/Dev/AOSSIE/webpage-starter/brand/logo.svg) +- **Web App Asset:** [aossie_logo.svg](file:///x:/Work/Dev/AOSSIE/webpage-starter/public/assets/icons/aossie_logo.svg) + +### 2. Favicons & Icons +The standard web browser tab icon is stored as a multi-resolution ICO file: +- **Project Folder:** [favicon.ico](file:///x:/Work/Dev/AOSSIE/webpage-starter/brand/favicon.ico) +- **Web App Asset:** [favicon.ico](file:///x:/Work/Dev/AOSSIE/webpage-starter/public/assets/icons/favicon.ico) + +--- + +## ✍️ Typography + +- **Default Font Family:** **Inter** +- **Fallback Stack:** `ui-sans-serif, system-ui, sans-serif` +- **Configuration:** Set globally via Tailwind CSS v4 custom theme bindings inside [`globals.css`](file:///x:/Work/Dev/AOSSIE/webpage-starter/src/app/[locale]/globals.css) and loaded asynchronously in the root layout via Next.js Google Font optimizer. diff --git a/brand/favicon.ico b/brand/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a56c0adc8ecbb7bf557f3e80966cbce59e43909 GIT binary patch literal 16166 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 \ No newline at end of file diff --git a/next.config.ts b/next.config.ts index e9ffa30..97700d8 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,19 @@ import type { NextConfig } from "next"; +import path from "path"; const nextConfig: NextConfig = { - /* config options here */ + webpack: (config) => { + config.resolve.alias["next-intl/config"] = path.resolve( + process.cwd(), + "./src/i18n/request.ts" + ); + return config; + }, + turbopack: { + resolveAlias: { + "next-intl/config": "./src/i18n/request.ts", + }, + }, }; export default nextConfig; diff --git a/package-lock.json b/package-lock.json index c6d1e67..26be925 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,19 @@ { - "name": "windmill-frontend", + "name": "webpage-starter", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "windmill-frontend", + "name": "webpage-starter", "version": "0.1.0", "dependencies": { - "next": "16.1.6", - "react": "19.2.3", - "react-dom": "19.2.3" + "lenis": "^1.3.25", + "next": "16.2.11", + "next-intl": "^4.13.4", + "next-themes": "^0.4.6", + "react": "19.2.4", + "react-dom": "19.2.4" }, "devDependencies": { "@tailwindcss/postcss": "^4", @@ -18,7 +21,7 @@ "@types/react": "^19", "@types/react-dom": "^19", "eslint": "^9", - "eslint-config-next": "16.1.6", + "eslint-config-next": "16.2.11", "tailwindcss": "^4", "typescript": "^5" } @@ -453,6 +456,36 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@formatjs/fast-memoize": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.7.tgz", + "integrity": "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==", + "license": "MIT" + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.15.tgz", + "integrity": "sha512-5o4grXKotAB3JqQuisLApHG43g17N+paoRTa92Jiz35Zvfemq0cVf4EDvuxyHAzmsJji7igaEowicLO/VmfJ8Q==", + "license": "MIT", + "dependencies": { + "@formatjs/icu-skeleton-parser": "2.1.11" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.11.tgz", + "integrity": "sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==", + "license": "MIT" + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.13.tgz", + "integrity": "sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "3.1.7" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1035,15 +1068,15 @@ } }, "node_modules/@next/env": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.6.tgz", - "integrity": "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.11.tgz", + "integrity": "sha512-0do5A3BJ2gxWr0ZCMcD6BhW+e595jyxdTl3rXTS6lOtD8ektMiW6CO+EPwt1Eca1DBnm90r/7GdiKWBKxH++DA==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.1.6.tgz", - "integrity": "sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.11.tgz", + "integrity": "sha512-vMEf/aXOpzFFdtIvFYOnIDPKb0xBbrXONsz83CcKdRrekfxNdL8PNkq5qHqAHSXVlIifnX68LOMaxr3z5PkeLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1051,9 +1084,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.6.tgz", - "integrity": "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.11.tgz", + "integrity": "sha512-wryL4pjKmDwGv2ox6+GZDFxvmtSRLqApBR8kL1j4+vhB7Z5vJC/zAnXpiR9Xkfzl0AS8WLMnsuGV/UKI67/rrw==", "cpu": [ "arm64" ], @@ -1067,9 +1100,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz", - "integrity": "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.11.tgz", + "integrity": "sha512-aZl2j4f/fLyjQvOhv0Oe9UaMAQHolYpKhctsoYzplSumKJKPUmgjcf6545aBtysLTcu994TREd0+pSgNE4ohmg==", "cpu": [ "x64" ], @@ -1083,12 +1116,15 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz", - "integrity": "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.11.tgz", + "integrity": "sha512-5jEriyEnH/LWFy27L2ZG0XaLlyEJIjhsImEsiS9P563PKEVp2BVups/xfOucIrsvVntp11oNcZwjHvaDPYVB5g==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1099,12 +1135,15 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz", - "integrity": "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.11.tgz", + "integrity": "sha512-eIjcpx2fnnFSSkZDbTxy74KnokUXDjfoLClpWelfgHLf621aTqswhwXQ7GkD5K5rplrS6LZ/Bj+mVuvzluBOEg==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1115,12 +1154,15 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz", - "integrity": "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.11.tgz", + "integrity": "sha512-8WgzpaWMs46qJT9kiV47cje86L0x/Mu9t8/Gwj+pnbgW3rETVfCnaScPjlYUwNScpOozdcIMHWmAvuZJUonR2w==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1131,12 +1173,15 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz", - "integrity": "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.11.tgz", + "integrity": "sha512-I3UgPds7G4ZYnTb/H+5GBGuUT2DhAk6j0mL6A4s63RjFs74wB2hOWP0vaxsK+3NJraExt3eYEPQ/UtT0x/64Nw==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1147,9 +1192,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz", - "integrity": "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.11.tgz", + "integrity": "sha512-n89CjtcThnjrwgJMAiI5xbqwLY51zvwC9tSlArmVndAJLYVl9T9UAdlkXTmZvE++idoXe8KdglQlhNRdUp1c6g==", "cpu": [ "arm64" ], @@ -1163,9 +1208,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz", - "integrity": "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.11.tgz", + "integrity": "sha512-md8CLNggS1Dx9pUgApzps5uAf+N8GN9xywzmNx9vHAWo94HtBwCCqkSnhIrdfQe83Dhz8Lfo/20Nb1Zxal092w==", "cpu": [ "x64" ], @@ -1226,6 +1271,310 @@ "node": ">=12.4.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1233,6 +1582,228 @@ "dev": true, "license": "MIT" }, + "node_modules/@schummar/icu-type-parser": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/@schummar/icu-type-parser/-/icu-type-parser-1.21.5.tgz", + "integrity": "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==", + "license": "MIT" + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.46.tgz", + "integrity": "sha512-IsISIT22EfktVJrlvIpnAxG2u/A9aob9l99HMlx80x72WlFmFPk1V3UhkEzx86eJP8hw049KTFv/RISho2cq2Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.46.tgz", + "integrity": "sha512-4Tj4ppVIPCmUMpmGFiGtyEriwLyJ+yi/US4WfBrP/ok8COGddDZXLEzQETnKyK46mjvr1v0jevrS23zjoff7vA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.46.tgz", + "integrity": "sha512-i8tUGnNjyOgMmfmgFSg4aeJLQoFyfpIHK5FjpQAwpRyQIqEUB2w1e8zIDQzY1WhOxx8NoS1S5iUL813Un4Sf5A==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.46.tgz", + "integrity": "sha512-c0OnhqzdhfOvv6qhNCcByepB+sNYOGZyhtr2Qa6ZCHvAWTYhSRw4j/u92Stue9PbZ/6q74b9nHzi76+kVzqQHQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.46.tgz", + "integrity": "sha512-imyRpNEcUzFQFV2LE4jL68ErvmKEuZCbvZru77iQREunJ+bR4i658cupTgtG1mLYM3F1Tzy3Sb9xYb02KghWTg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.46.tgz", + "integrity": "sha512-ctEfcl/HcUeomK33cbySiHZm98GEDIxTm1EkpBsYCiHxElYBzvTXVeuQT2YwbUXn9XCrjiw4ipyUNk33k26qRg==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.46.tgz", + "integrity": "sha512-DxlMdnt84TtRVTv7WL/thWyz9+QU8QZNNoAP9rrk0P68LziuhfePp8MjQ44zIprpTHTsEwyziIuGUUN5iSC1bQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.46.tgz", + "integrity": "sha512-SKxI7J6t90XPl8hRUqtJi9NfGdunN/E/vZMc7Bc0figeRdOPDBT+Tm8g7cx9xM0T0mewh2l+8dewa3Am27/P+A==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.46.tgz", + "integrity": "sha512-qj9T6B7bosI0VEsrWOVXZN1OXxS8Tp63ywyrLxNdOycnUtLdkgYcoBsN5y8ImnDDsnwrEWZOy1e+J4xSe7mA3Q==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.46.tgz", + "integrity": "sha512-8p7l4c3LU+eA5g9Et1JPhNeMC1oQwXTGU+uah8DPIBX7YXzqswvaBtyKVmXefVGi/DJU1x3YJsc3mbAp9aWzSQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.46.tgz", + "integrity": "sha512-tUEnfr3Bn9u6FOjUb3PN9p+09qZC2j+wNDLKHzXXZn22rqGcUqR/ohCRSS+nG9B9+X+U+3FewNEHJkTmdIvMjQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.46.tgz", + "integrity": "sha512-Vux7UDzBJYQggSuPfcl2w9iu+IJpgpRCxHzgCaVkELnAXAE4XZMOTX9HNcaNiwfeIDqdu2rkr69RuDm6wY8neA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1242,6 +1813,15 @@ "tslib": "^2.8.0" } }, + "node_modules/@swc/types": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.27.tgz", + "integrity": "sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@tailwindcss/node": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz", @@ -2787,7 +3367,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -3110,13 +3689,13 @@ } }, "node_modules/eslint-config-next": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.1.6.tgz", - "integrity": "sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.11.tgz", + "integrity": "sha512-FIpbK/dUyxUExchDB7eBg3k+VU8R2iR/Cx9/kqTBUTFv2bOIR9aRrpno4rvAQ9VhiPQAyFKNA2NlZwouGWtclA==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "16.1.6", + "@next/eslint-plugin-next": "16.2.11", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", @@ -3925,6 +4504,21 @@ "hermes-estree": "0.25.1" } }, + "node_modules/icu-minify": { + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.4.tgz", + "integrity": "sha512-yK6HyPLGlQjqm8fTKtnBpM77z7vl7JdDBN2EXLvmgAu/b7XaOHWZb73M3ISl9ahBTehBv7RYeqqWSHfk1v2YcA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/icu-messageformat-parser": "^3.4.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3977,6 +4571,16 @@ "node": ">= 0.4" } }, + "node_modules/intl-messageformat": { + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.12.tgz", + "integrity": "sha512-KW70Xxfcvy7vV3qODfvShWkFDPMqKDAa4N+hSyVBWGNtVhTUFYaqlD/l88DaYPKiVcPP4rPQ3qnH7i5K82Mg7g==", + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/fast-memoize": "3.1.7", + "@formatjs/icu-messageformat-parser": "3.5.15" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4139,7 +4743,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4185,7 +4788,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -4547,6 +5149,37 @@ "node": ">=0.10" } }, + "node_modules/lenis": { + "version": "1.3.25", + "resolved": "https://registry.npmjs.org/lenis/-/lenis-1.3.25.tgz", + "integrity": "sha512-mOKxayErlaONK8fm4LN3XNd99Qu4plTpn9h9qf8wxzjGrJDzuD84FYzZ81HCd6ZsWp++VWVwOzL286Pf2s2u4A==", + "license": "MIT", + "workspaces": [ + "packages/*", + "playground", + "playground/*" + ], + "funding": { + "type": "github", + "url": "https://github.com/sponsors/darkroomengineering" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0", + "react": ">=17.0.0", + "vue": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "react": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4983,15 +5616,24 @@ "dev": true, "license": "MIT" }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/next": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz", - "integrity": "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==", + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.11.tgz", + "integrity": "sha512-B339zaqbyK8cmxhoAvLrcwoabwCP1wz21zSzfqxqXAemTu2BXnH7tQnfcglKv1vnMUIDBc+Hth7XODQriTZiRQ==", "license": "MIT", "dependencies": { - "@next/env": "16.1.6", + "@next/env": "16.2.11", "@swc/helpers": "0.5.15", - "baseline-browser-mapping": "^2.8.3", + "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -5003,15 +5645,15 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.1.6", - "@next/swc-darwin-x64": "16.1.6", - "@next/swc-linux-arm64-gnu": "16.1.6", - "@next/swc-linux-arm64-musl": "16.1.6", - "@next/swc-linux-x64-gnu": "16.1.6", - "@next/swc-linux-x64-musl": "16.1.6", - "@next/swc-win32-arm64-msvc": "16.1.6", - "@next/swc-win32-x64-msvc": "16.1.6", - "sharp": "^0.34.4" + "@next/swc-darwin-arm64": "16.2.11", + "@next/swc-darwin-x64": "16.2.11", + "@next/swc-linux-arm64-gnu": "16.2.11", + "@next/swc-linux-arm64-musl": "16.2.11", + "@next/swc-linux-x64-gnu": "16.2.11", + "@next/swc-linux-x64-musl": "16.2.11", + "@next/swc-win32-arm64-msvc": "16.2.11", + "@next/swc-win32-x64-msvc": "16.2.11", + "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -5036,6 +5678,93 @@ } } }, + "node_modules/next-intl": { + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.13.4.tgz", + "integrity": "sha512-jhPAT0u0lahIK6E4gVdZAehugWCosBhLG8sV7xMzgSVoJpxHObP+Fiu+z2FfkEW0XPPtr7uEXoUlLEfhxhNMTg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/intl-localematcher": "^0.8.1", + "@parcel/watcher": "^2.4.1", + "@swc/core": "^1.15.2", + "icu-minify": "^4.13.4", + "negotiator": "^1.0.0", + "next-intl-swc-plugin-extractor": "^4.13.4", + "po-parser": "^2.1.1", + "use-intl": "^4.13.4" + }, + "peerDependencies": { + "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/next-intl-swc-plugin-extractor": { + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.13.4.tgz", + "integrity": "sha512-uN1+NMUYbG6YkO3q+rjc2bvAPX9nQ23owemvHJAyW0pRbQjVDwvNhmrV5qaak0oQc/9okbK17KLT49AoMGhVEQ==", + "license": "MIT" + }, + "node_modules/next-intl/node_modules/@swc/core": { + "version": "1.15.46", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.46.tgz", + "integrity": "sha512-Ri3em2mBpq3h2zSPliCYl63otDGqek8PPEfv2nWgRQEbZ/VBCNyypVTVQ6cEbTCXBhy+WE2T3fQb08moIyuYaw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.27" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.46", + "@swc/core-darwin-x64": "1.15.46", + "@swc/core-linux-arm-gnueabihf": "1.15.46", + "@swc/core-linux-arm64-gnu": "1.15.46", + "@swc/core-linux-arm64-musl": "1.15.46", + "@swc/core-linux-ppc64-gnu": "1.15.46", + "@swc/core-linux-s390x-gnu": "1.15.46", + "@swc/core-linux-x64-gnu": "1.15.46", + "@swc/core-linux-x64-musl": "1.15.46", + "@swc/core-win32-arm64-msvc": "1.15.46", + "@swc/core-win32-ia32-msvc": "1.15.46", + "@swc/core-win32-x64-msvc": "1.15.46" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -5064,6 +5793,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, "node_modules/node-exports-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", @@ -5328,9 +6063,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -5340,6 +6075,12 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/po-parser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/po-parser/-/po-parser-2.1.1.tgz", + "integrity": "sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==", + "license": "MIT" + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -5433,24 +6174,24 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.3" + "react": "^19.2.4" } }, "node_modules/react-is": { @@ -6430,6 +7171,27 @@ "punycode": "^2.1.0" } }, + "node_modules/use-intl": { + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.13.4.tgz", + "integrity": "sha512-wRhU5zyPNgu845++EJ8ckQsi89b22QUop7NlGxNXpsnKSwEJr7WErAkdAYeVQgFTmDWsa8e2NI1e14XbWz9Ecw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "^3.1.0", + "@schummar/icu-type-parser": "1.21.5", + "icu-minify": "^4.13.4", + "intl-messageformat": "^11.1.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index a3913ab..c21eb92 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "todo", + "name": "webpage-starter", "version": "0.1.0", "private": true, "scripts": { @@ -9,9 +9,12 @@ "lint": "eslint" }, "dependencies": { - "next": "16.1.6", - "react": "19.2.3", - "react-dom": "19.2.3" + "lenis": "^1.3.25", + "next": "16.2.11", + "next-intl": "^4.13.4", + "next-themes": "^0.4.6", + "react": "19.2.4", + "react-dom": "19.2.4" }, "devDependencies": { "@tailwindcss/postcss": "^4", @@ -19,7 +22,7 @@ "@types/react": "^19", "@types/react-dom": "^19", "eslint": "^9", - "eslint-config-next": "16.1.6", + "eslint-config-next": "16.2.11", "tailwindcss": "^4", "typescript": "^5" } diff --git a/public/.well-known/ai-plugin.json b/public/.well-known/ai-plugin.json new file mode 100644 index 0000000..fa93aef --- /dev/null +++ b/public/.well-known/ai-plugin.json @@ -0,0 +1,18 @@ +{ + "schema_version": "v1", + "name_for_human": "AOSSIE Webpage Starter", + "name_for_model": "aossie_webpage_starter", + "description_for_human": "Starter template for AOSSIE web portals showing internationalization and custom theme toggles.", + "description_for_model": "Retrieve settings, theme configuration, and supported locales from the AOSSIE webpage starter.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://aossie.org/openapi.yaml", + "is_user_authenticated": false + }, + "logo_url": "https://aossie.org/assets/icons/aossie_logo.svg", + "contact_email": "admin@aossie.org", + "legal_info_url": "https://aossie.org/legal" +} diff --git a/public/.well-known/assetlinks.json b/public/.well-known/assetlinks.json new file mode 100644 index 0000000..1cc9bc4 --- /dev/null +++ b/public/.well-known/assetlinks.json @@ -0,0 +1,12 @@ +[ + { + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "org.aossie.starter", + "sha256_cert_fingerprints": [ + "14:6D:E9:83:C5:E9:9D:03:7F:10:97:DF:A6:45:12:26:1F:EE:3A:84:14:6D:E9:83:C5:E9:9D:03:7F:10:97:00" + ] + } + } +] diff --git a/public/assets/icons/aossie_logo.svg b/public/assets/icons/aossie_logo.svg new file mode 100644 index 0000000..0fecb94 --- /dev/null +++ b/public/assets/icons/aossie_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/icons/favicon.ico b/public/assets/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a56c0adc8ecbb7bf557f3e80966cbce59e43909 GIT binary patch literal 16166 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 void; +}) { + useEffect(() => { + console.error(error); + }, [error]); + + const t = useTranslations("Error"); + + return ( +
+
+
+ + + +
+ +
+

+ {t("title")} +

+

+ {t("description")} +

+
+ + +
+
+ ); +} diff --git a/src/app/[locale]/globals.css b/src/app/[locale]/globals.css new file mode 100644 index 0000000..8edf523 --- /dev/null +++ b/src/app/[locale]/globals.css @@ -0,0 +1,84 @@ +@import "tailwindcss"; + +/* Configure class-based dark mode selector in Tailwind CSS v4 */ +@custom-variant dark (&:where(.dark, .dark *)); + +@theme { + /* Bind Tailwind v4 variables directly to semantic CSS variables */ + --color-background-primary: var(--background); + --color-background-secondary: var(--background-secondary); + --color-foreground-primary: var(--foreground); + --color-foreground-secondary: var(--foreground-secondary); + --color-foreground-muted: var(--foreground-muted); + --color-border-default: var(--border); + + --color-button-primary-bg: var(--button-primary-bg); + --color-button-primary-text: var(--button-primary-text); + --color-button-primary-border: var(--button-primary-border); + --color-button-primary-hover-bg: var(--button-primary-hover-bg); + --color-button-primary-hover-border: var(--button-primary-hover-border); + + --color-card-bg: var(--card-bg); + --color-card-border: var(--card-border); + --color-card-shadow: var(--card-shadow); + + --font-sans: var(--font-inter), ui-sans-serif, system-ui, sans-serif; +} + +/* --- LIGHT MODE (Default) --- */ +:root { + --background: #f5f5f5; + --background-secondary: #ffffff; + + --foreground: #1c1c1c; + --foreground-secondary: #121212; + --foreground-muted: #4d4d4d; + + --border: #e2e2e7; + + --button-primary-bg: #121212; + --button-primary-text: #ffffff; + --button-primary-border: #121212; + --button-primary-hover-bg: #2d2d2d; + --button-primary-hover-border: #2d2d2d; + + --card-bg: rgba(255, 255, 255, 0.85); + --card-border: #e2e2e7; + --card-shadow: 0 4px 12px rgba(0, 0, 0, 0.04); +} + +/* --- DARK MODE --- */ +.dark { + --background: #101010; + --background-secondary: #000000; + + --foreground: #d3d3d3; + --foreground-secondary: #b4b4b4; + --foreground-muted: #7f8188; + + --border: #1e1e24; + + --button-primary-bg: #ffffff; + --button-primary-text: #101010; + --button-primary-border: transparent; + --button-primary-hover-bg: #e4e4e7; + --button-primary-hover-border: #e4e4e7; + + --card-bg: rgba(22, 22, 22, 0.85); + --card-border: #1e1e24; + --card-shadow: 0 4px 12px rgba(0, 0, 0, 0.25); +} + +/* --- GLOBAL STYLES --- */ +html, +body { + max-width: 100%; + overflow-x: hidden; +} + +body { + background-color: var(--background); + color: var(--foreground); + font-family: var(--font-sans); + transition: background-color 200ms ease-in-out, color 200ms ease-in-out; +} diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..ca2744f --- /dev/null +++ b/src/app/[locale]/layout.tsx @@ -0,0 +1,59 @@ +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import { routing } from "../../i18n/routing"; +import { notFound } from "next/navigation"; +import { getMessages } from "next-intl/server"; +import { NextIntlClientProvider } from "next-intl"; +import { ThemeProvider } from "../../components/providers/theme-provider"; +import { LenisProvider } from "../../components/providers/lenis-provider"; +import "./globals.css"; + +const inter = Inter({ + variable: "--font-inter", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "Aossie Webpage Starter", + description: "A multi-lingual starter template for Aossie organizations.", + icons: { + icon: "/assets/icons/favicon.ico", + }, +}; + +export default async function RootLayout({ + children, + params, +}: Readonly<{ + children: React.ReactNode; + params: Promise<{ locale: string }>; +}>) { + // Await params since PageProps and LayoutProps are Promises in Next.js 15/16 + const { locale } = await params; + + // Validate that the incoming `locale` is supported + if (!routing.locales.includes(locale as (typeof routing.locales)[number])) { + notFound(); + } + + // Provide messages to Client Components + const messages = await getMessages(); + + return ( + + + + + + {children} + + + + + + ); +} diff --git a/src/app/[locale]/not-found.tsx b/src/app/[locale]/not-found.tsx new file mode 100644 index 0000000..78c843a --- /dev/null +++ b/src/app/[locale]/not-found.tsx @@ -0,0 +1,45 @@ +import { useTranslations } from "next-intl"; +import { Link } from "../../i18n/navigation"; + +export default function NotFound() { + const t = useTranslations("NotFound"); + + return ( +
+
+
+ + + +
+ +
+

+ {t("title")} +

+

+ {t("description")} +

+
+ + + {t("home")} + +
+
+ ); +} diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx new file mode 100644 index 0000000..693c613 --- /dev/null +++ b/src/app/[locale]/page.tsx @@ -0,0 +1,65 @@ +"use client"; + +import Image from "next/image"; +import Script from "next/script"; +import { useTranslations } from "next-intl"; +import { use } from "react"; +import LanguageSwitcher from "../../components/LanguageSwitcher"; +import ThemeToggle from "../../components/ThemeToggle"; + +export default function Home({ + params, +}: { + params: Promise<{ locale: string }>; +}) { + const { locale } = use(params); + const t = useTranslations("Home"); + + // Schema.org Structured Data + const jsonLd = { + "@context": "https://schema.org", + "@type": "WebPage", + "name": "AOSSIE Webpage Starter", + "description": "A multi-lingual starter template for AOSSIE organizations built with Next.js 16 and React 19.", + "publisher": { + "@type": "Organization", + "name": "AOSSIE", + "url": "https://aossie.org", + "logo": "https://aossie.org/assets/icons/aossie_logo.svg", + }, + "inLanguage": locale, + }; + + return ( +
+ {/* Schema.org JSON-LD Structured Data */} +