From c2ff1b00165d0706b7f00c44657313b661260d23 Mon Sep 17 00:00:00 2001 From: Ali Hammoud Date: Tue, 23 Jun 2026 17:59:57 +0300 Subject: [PATCH 1/2] refactor: restructure --- .vscode/settings.json | 4 +- eslint.config.ts | 1 + oxlint.config.ts | 7 ++ package.json | 5 +- pnpm-lock.yaml | 11 ++ .../{astro => discord}/DiscordCTA.astro | 0 .../DiscordCTA.astro.test.ts | 2 +- .../{astro => discord}/DiscordWidget.astro | 4 +- .../DiscordWidget.astro.test.ts | 0 src/components/{astro => footer}/Footer.astro | 2 +- src/components/{astro => header}/Header.astro | 10 +- .../{astro => header}/Header.astro.test.ts | 2 +- src/components/header/MobileNav.astro | 114 ++++++++++++++++++ .../{react => header}/MobileNav.test.tsx | 2 +- .../{react => header}/MobileNav.tsx | 2 +- .../{astro => icons}/ServerLogo.astro | 0 .../{astro => landing}/CommunityCallout.astro | 4 - .../CommunityCallout.astro.test.ts | 2 +- src/components/{astro => landing}/Hero.astro | 4 +- .../{astro => landing}/Hero.astro.test.ts | 2 +- .../{astro => landing}/ResourceCard.astro | 0 .../{astro => landing}/ValueCards.astro | 0 .../ValueCards.astro.test.ts | 2 +- .../ResourceSearch.test.tsx | 0 .../{react => resources}/ResourceSearch.tsx | 0 src/layouts/BaseLayout.astro | 8 +- src/lib/custom-elements.ts | 8 ++ src/pages/404.astro | 2 +- src/pages/code-of-conduct.astro | 2 +- src/pages/index.astro | 14 +-- src/pages/learning/index.astro | 8 +- tsconfig.json | 5 + 32 files changed, 186 insertions(+), 41 deletions(-) create mode 100644 oxlint.config.ts rename src/components/{astro => discord}/DiscordCTA.astro (100%) rename src/components/{astro => discord}/DiscordCTA.astro.test.ts (86%) rename src/components/{astro => discord}/DiscordWidget.astro (98%) rename src/components/{astro => discord}/DiscordWidget.astro.test.ts (100%) rename src/components/{astro => footer}/Footer.astro (94%) rename src/components/{astro => header}/Header.astro (78%) rename src/components/{astro => header}/Header.astro.test.ts (90%) create mode 100644 src/components/header/MobileNav.astro rename src/components/{react => header}/MobileNav.test.tsx (95%) rename src/components/{react => header}/MobileNav.tsx (98%) rename src/components/{astro => icons}/ServerLogo.astro (100%) rename src/components/{astro => landing}/CommunityCallout.astro (98%) rename src/components/{astro => landing}/CommunityCallout.astro.test.ts (87%) rename src/components/{astro => landing}/Hero.astro (93%) rename src/components/{astro => landing}/Hero.astro.test.ts (93%) rename src/components/{astro => landing}/ResourceCard.astro (100%) rename src/components/{astro => landing}/ValueCards.astro (100%) rename src/components/{astro => landing}/ValueCards.astro.test.ts (87%) rename src/components/{react => resources}/ResourceSearch.test.tsx (100%) rename src/components/{react => resources}/ResourceSearch.tsx (100%) create mode 100644 src/lib/custom-elements.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 5a63e01..6f8053b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,5 +9,7 @@ }, "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", - "oxc.enable": true + "oxc.enable": true, + "oxc.configPath": "oxlint.config.ts", + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/eslint.config.ts b/eslint.config.ts index 796e300..81f89b7 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -10,6 +10,7 @@ export default defineConfig([ js.configs.recommended, ...tseslint.configs.recommended, ...astro.configs.recommended, + ...oxlint.configs["flat/recommended"], prettierConfig, diff --git a/oxlint.config.ts b/oxlint.config.ts new file mode 100644 index 0000000..061d5d3 --- /dev/null +++ b/oxlint.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "oxlint"; + +export default defineConfig({ + rules: { + "no-unused-expressions": "off", + }, +}); diff --git a/package.json b/package.json index 1f67c2b..24cba2b 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "lint:eslint": "eslint . --fix", "lint:oxlint": "oxlint . --fix", "lint": "pnpm lint:eslint && pnpm lint:oxlint", - "test": "vitest", - "test:run": "vitest run", + "test": "vitest run", + "test:watch": "vitest", "typecheck": "astro check", "test:coverage": "vitest run --coverage", "format": "prettier . --write", @@ -29,6 +29,7 @@ "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "astro": "^6.4.4", + "gsap": "^3.15.0", "react": "^19.2.7", "react-dom": "^19.2.7", "tailwindcss": "^4.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index adec7ca..7b8c7e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,6 +28,9 @@ importers: astro: specifier: ^6.4.4 version: 6.4.4(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.61.1)(yaml@2.9.0) + gsap: + specifier: ^3.15.0 + version: 3.15.0 react: specifier: ^19.2.7 version: 19.2.7 @@ -3454,6 +3457,12 @@ packages: integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, } + gsap@3.15.0: + resolution: + { + integrity: sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==, + } + h3@1.15.11: resolution: { @@ -7934,6 +7943,8 @@ snapshots: graceful-fs@4.2.11: {} + gsap@3.15.0: {} + h3@1.15.11: dependencies: cookie-es: 1.2.3 diff --git a/src/components/astro/DiscordCTA.astro b/src/components/discord/DiscordCTA.astro similarity index 100% rename from src/components/astro/DiscordCTA.astro rename to src/components/discord/DiscordCTA.astro diff --git a/src/components/astro/DiscordCTA.astro.test.ts b/src/components/discord/DiscordCTA.astro.test.ts similarity index 86% rename from src/components/astro/DiscordCTA.astro.test.ts rename to src/components/discord/DiscordCTA.astro.test.ts index edbb567..a496d82 100644 --- a/src/components/astro/DiscordCTA.astro.test.ts +++ b/src/components/discord/DiscordCTA.astro.test.ts @@ -1,5 +1,5 @@ +import { createTestContainer } from "@test/createTestContainer"; import { describe, expect, it } from "vitest"; -import { createTestContainer } from "../../test/createTestContainer"; import DiscordCTA from "./DiscordCTA.astro"; describe("DiscordCTA", () => { diff --git a/src/components/astro/DiscordWidget.astro b/src/components/discord/DiscordWidget.astro similarity index 98% rename from src/components/astro/DiscordWidget.astro rename to src/components/discord/DiscordWidget.astro index b0d42e7..0aa3c1b 100644 --- a/src/components/astro/DiscordWidget.astro +++ b/src/components/discord/DiscordWidget.astro @@ -3,8 +3,8 @@ import { countMembersByStatus, formatPresenceCount, sortMembersByStatus, -} from "../../lib/discordWidget"; -import type { DiscordWidgetData } from "../../schemas/discordWidget"; +} from "@lib/discordWidget"; +import type { DiscordWidgetData } from "@schemas/discordWidget"; import DiscordCTA from "./DiscordCTA.astro"; interface Props { diff --git a/src/components/astro/DiscordWidget.astro.test.ts b/src/components/discord/DiscordWidget.astro.test.ts similarity index 100% rename from src/components/astro/DiscordWidget.astro.test.ts rename to src/components/discord/DiscordWidget.astro.test.ts diff --git a/src/components/astro/Footer.astro b/src/components/footer/Footer.astro similarity index 94% rename from src/components/astro/Footer.astro rename to src/components/footer/Footer.astro index c8ba908..784b8dc 100644 --- a/src/components/astro/Footer.astro +++ b/src/components/footer/Footer.astro @@ -1,5 +1,5 @@ --- -import DiscordCTA from "./DiscordCTA.astro"; +import DiscordCTA from "@components/discord/DiscordCTA.astro"; interface Props { siteName: string; diff --git a/src/components/astro/Header.astro b/src/components/header/Header.astro similarity index 78% rename from src/components/astro/Header.astro rename to src/components/header/Header.astro index 423c01e..b310ec5 100644 --- a/src/components/astro/Header.astro +++ b/src/components/header/Header.astro @@ -1,8 +1,8 @@ --- -import DiscordCTA from "./DiscordCTA.astro"; -import ServerLogo from "./ServerLogo.astro"; -import MobileNav from "../react/MobileNav"; -import { navLinks } from "../../lib/nav"; +import DiscordCTA from "@components/discord/DiscordCTA.astro"; +import ServerLogo from "@components/icons/ServerLogo.astro"; +import { navLinks } from "@lib/nav"; +import MobileNav from "./MobileNav.astro"; interface Props { siteName: string; @@ -44,6 +44,6 @@ const { siteName, discordUrl } = Astro.props; - + diff --git a/src/components/astro/Header.astro.test.ts b/src/components/header/Header.astro.test.ts similarity index 90% rename from src/components/astro/Header.astro.test.ts rename to src/components/header/Header.astro.test.ts index e0d3b2e..e684cf7 100644 --- a/src/components/astro/Header.astro.test.ts +++ b/src/components/header/Header.astro.test.ts @@ -1,5 +1,5 @@ +import { createTestContainer } from "@test/createTestContainer"; import { describe, expect, it } from "vitest"; -import { createTestContainer } from "../../test/createTestContainer"; import Header from "./Header.astro"; describe("Header", () => { diff --git a/src/components/header/MobileNav.astro b/src/components/header/MobileNav.astro new file mode 100644 index 0000000..aeca2a9 --- /dev/null +++ b/src/components/header/MobileNav.astro @@ -0,0 +1,114 @@ +--- +import type { NavLink } from "@lib/nav"; + +interface Props { + navLinks: NavLink[]; + discordUrl: string; +} + +const { navLinks, discordUrl } = Astro.props; +const menuId = "mobile-nav-menu"; +--- + + + + + + + + diff --git a/src/components/react/MobileNav.test.tsx b/src/components/header/MobileNav.test.tsx similarity index 95% rename from src/components/react/MobileNav.test.tsx rename to src/components/header/MobileNav.test.tsx index b1a7508..d07e5a7 100644 --- a/src/components/react/MobileNav.test.tsx +++ b/src/components/header/MobileNav.test.tsx @@ -1,7 +1,7 @@ // @vitest-environment jsdom +import { navLinks } from "@lib/nav"; import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; -import { navLinks } from "../../lib/nav"; import MobileNav from "./MobileNav"; describe("MobileNav", () => { diff --git a/src/components/react/MobileNav.tsx b/src/components/header/MobileNav.tsx similarity index 98% rename from src/components/react/MobileNav.tsx rename to src/components/header/MobileNav.tsx index fc664a2..c573cd6 100644 --- a/src/components/react/MobileNav.tsx +++ b/src/components/header/MobileNav.tsx @@ -1,5 +1,5 @@ +import type { NavLink } from "@lib/nav"; import { useEffect, useId, useRef, useState } from "react"; -import type { NavLink } from "../../lib/nav"; interface MobileNavProps { navLinks: NavLink[]; diff --git a/src/components/astro/ServerLogo.astro b/src/components/icons/ServerLogo.astro similarity index 100% rename from src/components/astro/ServerLogo.astro rename to src/components/icons/ServerLogo.astro diff --git a/src/components/astro/CommunityCallout.astro b/src/components/landing/CommunityCallout.astro similarity index 98% rename from src/components/astro/CommunityCallout.astro rename to src/components/landing/CommunityCallout.astro index f69d9bd..957ccfa 100644 --- a/src/components/astro/CommunityCallout.astro +++ b/src/components/landing/CommunityCallout.astro @@ -1,7 +1,3 @@ ---- - ---- -