diff --git a/README.md b/README.md index c5fa514f6..0aed5353a 100644 --- a/README.md +++ b/README.md @@ -47,26 +47,10 @@ content collections to manage the content. The collections are configure inside ### Pages -Pages are stored in the `src/content/pages` directory. Each page is a mdx file +Pages are stored in the `src/content/pages` directory. Each page is a md file with frontmatter. ### Deadlines Meanwhile, our important deadlines ⏰ are located inside the `src/content/deadlines` directory. - -## Using Astro Image Component 🖼️ - -When adding images to the website, please make sure to use astro Image component -and to specify the width of the image. This will make sure we are optimizing the -images and not serving large images to the users. - -Here is an example: - -```jsx -import { Image } from "astro:assset"; - -import image from "./image.jpg"; - -; -``` diff --git a/astro.config.mjs b/astro.config.mjs index af075d900..7841b0367 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,7 +2,6 @@ import path from "path"; import { defineConfig } from "astro/config"; import mdx from "@astrojs/mdx"; import sitemap from "@astrojs/sitemap"; -import react from "@astrojs/react"; import tailwind from "@astrojs/tailwind"; import remarkToc from "remark-toc"; import rehypeSlug from "rehype-slug"; @@ -50,6 +49,7 @@ export default defineConfig({ "@layouts": path.resolve("./src/layouts"), "@ui": path.resolve("./src/components/ui"), "@assets": path.resolve("./src/assets"), + "@styles": path.resolve("./src/styles"), "@i18n": path.resolve("./src/i18n"), "@src": path.resolve("./src"), }, @@ -83,7 +83,6 @@ export default defineConfig({ preload(), mdx(), sitemap(), - react(), tailwind({ nesting: true, }), diff --git a/package.json b/package.json index c91bb8d7d..24b24792a 100644 --- a/package.json +++ b/package.json @@ -14,14 +14,11 @@ "@astro-community/astro-embed-youtube": "^0.5.6", "@astrojs/check": "^0.9.4", "@astrojs/mdx": "^4.2.6", - "@astrojs/react": "^4.2.7", "@astrojs/sitemap": "^3.3.1", "@astrojs/tailwind": "^5.1.5", "@fontsource-variable/inter": "^5.2.5", "@fortawesome/fontawesome-free": "^6.7.2", "@tailwindcss/typography": "^0.5.16", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.3", "astro": "^5.7.5", "astro-compress": "^2.3.8", "astro-delete-unused-images": "^1.0.3", @@ -35,8 +32,6 @@ "js-yaml": "^4.1.0", "marked": "^15.0.11", "pagefind": "^1.3.0", - "react": "^19.1.0", - "react-dom": "^19.1.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", "remark-toc": "^9.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3cc6b196..9bc549d0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,6 @@ importers: '@astrojs/mdx': specifier: ^4.2.6 version: 4.2.6(astro@5.7.10(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1)) - '@astrojs/react': - specifier: ^4.2.7 - version: 4.2.7(@types/node@22.13.14)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(jiti@2.4.2)(lightningcss@1.29.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) '@astrojs/sitemap': specifier: ^3.3.1 version: 3.3.1 @@ -35,12 +32,6 @@ importers: '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@3.4.17) - '@types/react': - specifier: ^19.1.2 - version: 19.1.2 - '@types/react-dom': - specifier: ^19.1.3 - version: 19.1.3(@types/react@19.1.2) astro: specifier: ^5.7.5 version: 5.7.10(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1) @@ -80,12 +71,6 @@ importers: pagefind: specifier: ^1.3.0 version: 1.3.0 - react: - specifier: ^19.1.0 - version: 19.1.0 - react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) rehype-autolink-headings: specifier: ^7.1.0 version: 7.1.0 @@ -127,10 +112,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@astro-community/astro-embed-youtube@0.5.6': resolution: {integrity: sha512-/mRfCl/eTBUz0kmjD1psOy0qoDDBorVp0QumUacjFcIkBullYtbeFQ2ZGZ+3N/tA6cR/OIyzr2QA4dQXlY6USg==} peerDependencies: @@ -173,15 +154,6 @@ packages: resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} - '@astrojs/react@4.2.7': - resolution: {integrity: sha512-/wM90noT/6QyJEOGdDmDbq2D9qZooKTJNG1M8olmsW5ns6bJ7uxG5fzkYxcpA3WUTD6Dj6NtpEqchvb5h8Fa+g==} - engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} - peerDependencies: - '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 - '@types/react-dom': ^17.0.17 || ^18.0.6 || ^19.0.0 - react: ^17.0.2 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0 - '@astrojs/sitemap@3.3.1': resolution: {integrity: sha512-GRnDUCTviBSNfXJ0Jmur+1/C+z3g36jy79VyYggfe1uNyEYSTcmAfTTCmbytrRvJRNyJJnSfB/77Gnm9PiXRRg==} @@ -202,40 +174,6 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.27.1': - resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.27.1': - resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.27.1': - resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.1': - resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.27.1': - resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -248,39 +186,11 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.27.1': - resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} - engines: {node: '>=6.9.0'} - '@babel/parser@7.27.1': resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.27.1': - resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.27.1': - resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.27.1': resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} engines: {node: '>=6.9.0'} @@ -915,18 +825,6 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} - '@types/css-tree@2.3.10': resolution: {integrity: sha512-WcaBazJ84RxABvRttQjjFWgTcHvZR9jGr0Y3hccPkHjFyk/a3N8EuxjKr+QfrwjoM5b1yI1Uj1i7EzOAAwBwag==} @@ -969,14 +867,6 @@ packages: '@types/node@22.13.14': resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} - '@types/react-dom@19.1.3': - resolution: {integrity: sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==} - peerDependencies: - '@types/react': ^19.0.0 - - '@types/react@19.1.2': - resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} - '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -995,12 +885,6 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitejs/plugin-react@4.4.1': - resolution: {integrity: sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@volar/kit@2.4.13': resolution: {integrity: sha512-x5b2JwVT+0YQcIR4uX0NaW9Ocf3ShQRvoA18OK9ZYoFyqIYnK/niuLc8uI7hcVaey2S3EPBe3QvLGD69DJ/t6Q==} peerDependencies: @@ -1326,9 +1210,6 @@ packages: common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} @@ -1383,9 +1264,6 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -1642,10 +1520,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1680,10 +1554,6 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - h3@1.15.3: resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} @@ -1856,22 +1726,12 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - jsonc-parser@2.3.1: resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} @@ -1981,9 +1841,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} @@ -2471,19 +2328,6 @@ packages: radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} - peerDependencies: - react: ^19.1.0 - - react-refresh@0.17.0: - resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} - engines: {node: '>=0.10.0'} - - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} - engines: {node: '>=0.10.0'} - read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -2625,13 +2469,6 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -3197,9 +3034,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml-language-server@1.15.0: resolution: {integrity: sha512-N47AqBDCMQmh6mBLmI6oqxryHRzi33aPFPsJhYy3VTUGCdLHYjGh4FZzpUjRlphaADBBkDmnkM/++KNIOHi5Rw==} hasBin: true @@ -3257,11 +3091,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - '@astro-community/astro-embed-youtube@0.5.6(astro@5.7.10(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1))': dependencies: astro: 5.7.10(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1) @@ -3357,29 +3186,6 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.2.7(@types/node@22.13.14)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(jiti@2.4.2)(lightningcss@1.29.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)': - dependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@vitejs/plugin-react': 4.4.1(vite@6.3.4(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - ultrahtml: 1.6.0 - vite: 6.3.4(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - '@astrojs/sitemap@3.3.1': dependencies: sitemap: 8.0.0 @@ -3418,113 +3224,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.27.1': {} - - '@babel/core@7.27.1': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/helper-compilation-targets': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) - '@babel/helpers': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 - convert-source-map: 2.0.0 - debug: 4.4.0 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.27.1': - dependencies: - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.27.1': - dependencies: - '@babel/compat-data': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': - dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.27.1': - dependencies: - '@babel/template': 7.27.1 - '@babel/types': 7.27.1 - '@babel/parser@7.27.1': dependencies: '@babel/types': 7.27.1 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.1)': - dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.1)': - dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/template@7.27.1': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 - - '@babel/traverse@7.27.1': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 - '@babel/types': 7.27.1 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/types@7.27.1': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -4031,27 +3740,6 @@ snapshots: '@trysound/sax@0.2.0': {} - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.27.1 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 - - '@types/babel__traverse@7.20.7': - dependencies: - '@babel/types': 7.27.1 - '@types/css-tree@2.3.10': {} '@types/csso@5.0.4': @@ -4094,14 +3782,6 @@ snapshots: dependencies: undici-types: 6.20.0 - '@types/react-dom@19.1.3(@types/react@19.1.2)': - dependencies: - '@types/react': 19.1.2 - - '@types/react@19.1.2': - dependencies: - csstype: 3.1.3 - '@types/sax@1.2.7': dependencies: '@types/node': 17.0.45 @@ -4119,17 +3799,6 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.4.1(vite@6.3.4(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': - dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 6.3.4(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) - transitivePeerDependencies: - - supports-color - '@volar/kit@2.4.13(typescript@5.8.3)': dependencies: '@volar/language-service': 2.4.13 @@ -4578,8 +4247,6 @@ snapshots: common-ancestor-path@1.0.1: {} - convert-source-map@2.0.0: {} - cookie-es@1.2.2: {} cookie@1.0.2: {} @@ -4640,8 +4307,6 @@ snapshots: dependencies: css-tree: 2.2.1 - csstype@3.1.3: {} - data-uri-to-buffer@6.0.2: {} date-fns-tz@3.2.0(date-fns@4.1.0): @@ -4915,8 +4580,6 @@ snapshots: function-bind@1.1.2: {} - gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} get-east-asian-width@1.3.0: {} @@ -4956,8 +4619,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - globals@11.12.0: {} - h3@1.15.3: dependencies: cookie-es: 1.2.2 @@ -5222,14 +4883,10 @@ snapshots: jsbn@1.1.0: {} - jsesc@3.1.0: {} - json-parse-even-better-errors@2.3.1: {} json-schema-traverse@1.0.0: {} - json5@2.2.3: {} - jsonc-parser@2.3.1: {} jsonc-parser@3.3.1: {} @@ -5305,10 +4962,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - lru-cache@7.18.3: {} magic-string@0.30.17: @@ -6089,15 +5742,6 @@ snapshots: radix3@1.1.2: {} - react-dom@19.1.0(react@19.1.0): - dependencies: - react: 19.1.0 - scheduler: 0.26.0 - - react-refresh@0.17.0: {} - - react@19.1.0: {} - read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -6338,10 +5982,6 @@ snapshots: sax@1.4.1: {} - scheduler@0.26.0: {} - - semver@6.3.1: {} - semver@7.7.1: {} sharp@0.33.5: @@ -6940,8 +6580,6 @@ snapshots: y18n@5.0.8: {} - yallist@3.1.1: {} - yaml-language-server@1.15.0: dependencies: ajv: 8.17.1 diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 4a8cd8a45..01187b937 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -12,7 +12,7 @@ const gitVersion = __GIT_VERSION__; { links.footer.map((section) => (
-

{section.name}

+

{section.name}

{section.items ? (
diff --git a/src/components/Header.astro b/src/components/Header.astro index 5d22d57b1..3fa55e0af 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -4,7 +4,7 @@ import HeaderActions from "@components/header/header-actions.astro"; import HeaderLogo from "@components/header/header-logo.astro"; import Search from "@components/Search.astro"; -import links from "../data/links.json"; +import links from "@data/links.json"; ---
diff --git a/src/components/Search.astro b/src/components/Search.astro index 512c8add0..f456dd5c3 100644 --- a/src/components/Search.astro +++ b/src/components/Search.astro @@ -10,6 +10,7 @@ import Modal from "@components/Modal.astro"; + {`${title} { - return ( - - ); -}; diff --git a/src/components/form/select.tsx b/src/components/form/select.tsx deleted file mode 100644 index 525f43b56..000000000 --- a/src/components/form/select.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import clsx from "clsx"; - -export const Select = ({ - children, - id, - name, - defaultValue, -}: { - children: React.ReactNode; - id: string; - name: string; - defaultValue?: string; -}) => { - return ( -
- - - - - -
- ); -}; diff --git a/src/components/header/header-actions.astro b/src/components/header/header-actions.astro index 4be7ecfb4..fbc20ec0f 100644 --- a/src/components/header/header-actions.astro +++ b/src/components/header/header-actions.astro @@ -31,14 +31,13 @@ const IS_LIVE = false; CtrlK - + {IS_LIVE && } : null } - -
- + + EuroPython logo diff --git a/src/components/hero-section/hero-with-cta.astro b/src/components/hero-section/hero-with-cta.astro deleted file mode 100644 index e06daffac..000000000 --- a/src/components/hero-section/hero-with-cta.astro +++ /dev/null @@ -1,7 +0,0 @@ -
-
- -
- -
-
diff --git a/src/components/hero-section/title-with-cta.astro b/src/components/hero-section/title-with-cta.astro deleted file mode 100644 index 491bb87fc..000000000 --- a/src/components/hero-section/title-with-cta.astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import Button from "@ui/Button.astro"; -import { Title } from "../typography/title"; - -interface Props { - title: string; - subtitle: string; - buttonText?: string; - buttonUrl?: string; -} - -const { title, subtitle, buttonText, buttonUrl } = Astro.props; ---- - -
- {title} -

{subtitle}

- - { - buttonText && buttonUrl && ( -
- -
- ) - } - - -
diff --git a/src/components/highlight-list/highlight-card.astro b/src/components/highlight-list/highlight-card.astro deleted file mode 100644 index e43014b98..000000000 --- a/src/components/highlight-list/highlight-card.astro +++ /dev/null @@ -1,5 +0,0 @@ -
-
    - -
-
diff --git a/src/components/highlight-list/highlight-item.astro b/src/components/highlight-list/highlight-item.astro deleted file mode 100644 index 4d20d596e..000000000 --- a/src/components/highlight-list/highlight-item.astro +++ /dev/null @@ -1,4 +0,0 @@ -
  • - 📌 - -
  • diff --git a/src/components/markdown/HighlightCard.astro b/src/components/markdown/HighlightCard.astro new file mode 100644 index 000000000..7ff6b8eea --- /dev/null +++ b/src/components/markdown/HighlightCard.astro @@ -0,0 +1,23 @@ +
    + +
    + + diff --git a/src/components/sections/hero/hero.astro b/src/components/sections/hero/hero.astro index 3bc454ee0..8b9c65e10 100644 --- a/src/components/sections/hero/hero.astro +++ b/src/components/sections/hero/hero.astro @@ -89,6 +89,7 @@ const action2 = "/sponsorship/sponsor/"; src="/logo.png" height="188" width="188" + alt="2025 EuroPython logo" />

    EuroPython 2025 Hero Image @@ -152,8 +153,8 @@ const action2 = "/sponsorship/sponsor/";
    -

    7

    -

    Days

    +

    7

    +

    Days

    @@ -163,8 +164,8 @@ const action2 = "/sponsorship/sponsor/";
    -

    1.3k+

    -

    Attendees

    +

    1.3k+

    +

    Attendees

    @@ -174,8 +175,8 @@ const action2 = "/sponsorship/sponsor/";
    -

    180+

    -

    Speakers

    +

    180+

    +

    Speakers

    diff --git a/src/components/keynoters/keynoter.astro b/src/components/sections/keynoters/keynoter.astro similarity index 75% rename from src/components/keynoters/keynoter.astro rename to src/components/sections/keynoters/keynoter.astro index 2de3f3aca..4f4635626 100644 --- a/src/components/keynoters/keynoter.astro +++ b/src/components/sections/keynoters/keynoter.astro @@ -2,11 +2,11 @@ import type { ImageMetadata } from "astro"; import { getCollection } from "astro:content"; import { Image } from "astro:assets"; -import Person1 from "../placeholders/person-1.astro"; -import Person2 from "../placeholders/person-2.astro"; -import Person3 from "../placeholders/person-3.astro"; -import Person4 from "../placeholders/person-4.astro"; -import Person5 from "../placeholders/person-5.astro"; +import Person1 from "./placeholders/person-1.astro"; +import Person2 from "./placeholders/person-2.astro"; +import Person3 from "./placeholders/person-3.astro"; +import Person4 from "./placeholders/person-4.astro"; +import Person5 from "./placeholders/person-5.astro"; export interface Props { name: string; @@ -62,19 +62,19 @@ const isSpeaker = entries.some((entry) => entry.id === slug); ) : ( <> {isSpeaker ? ( -

    +

    {name} -

    +

    ) : ( -

    {name}

    +

    {name}

    )} {tagline && ( -

    {tagline}

    +

    {tagline}

    )} ) diff --git a/src/components/keynoters/keynoters.astro b/src/components/sections/keynoters/keynoters.astro similarity index 90% rename from src/components/keynoters/keynoters.astro rename to src/components/sections/keynoters/keynoters.astro index 9c3ee4274..164b789f4 100644 --- a/src/components/keynoters/keynoters.astro +++ b/src/components/sections/keynoters/keynoters.astro @@ -47,10 +47,7 @@ const placeholders = Math.max(0, 5 - keynoters.length);
    -

    - # - See other sessions -

    +
    diff --git a/src/components/placeholders/person-1.astro b/src/components/sections/keynoters/placeholders/person-1.astro similarity index 100% rename from src/components/placeholders/person-1.astro rename to src/components/sections/keynoters/placeholders/person-1.astro diff --git a/src/components/placeholders/person-2.astro b/src/components/sections/keynoters/placeholders/person-2.astro similarity index 100% rename from src/components/placeholders/person-2.astro rename to src/components/sections/keynoters/placeholders/person-2.astro diff --git a/src/components/placeholders/person-3.astro b/src/components/sections/keynoters/placeholders/person-3.astro similarity index 100% rename from src/components/placeholders/person-3.astro rename to src/components/sections/keynoters/placeholders/person-3.astro diff --git a/src/components/placeholders/person-4.astro b/src/components/sections/keynoters/placeholders/person-4.astro similarity index 100% rename from src/components/placeholders/person-4.astro rename to src/components/sections/keynoters/placeholders/person-4.astro diff --git a/src/components/placeholders/person-5.astro b/src/components/sections/keynoters/placeholders/person-5.astro similarity index 100% rename from src/components/placeholders/person-5.astro rename to src/components/sections/keynoters/placeholders/person-5.astro diff --git a/src/components/sections/subscribe.astro b/src/components/sections/subscribe.astro index 8cb5e5de3..11668a0a4 100644 --- a/src/components/sections/subscribe.astro +++ b/src/components/sections/subscribe.astro @@ -2,12 +2,12 @@ import Button from "@ui/Button.astro"; import Section from "@ui/Section.astro" const socialLinks = [ - { href: "https://linkedin.com/sponsor/europython/", icon: "linkedin" }, - { href: "https://instagram.com/europython/", icon: "instagram" }, - { href: "https://youtube.com/channel/UC98CzaYuFNAA_gOINFB0e4Q", icon: "youtube" }, - { href: "https://fosstodon.org/@europython", icon: "mastodon" }, - { href: "https://bsky.app/profile/europython.eu", icon: "bluesky" }, - { href: "https://x.com/europython", icon: "x" }, + { href: "https://linkedin.com/sponsor/europython/", icon: "linkedin", label: "LinkedIn" }, + { href: "https://instagram.com/europython/", icon: "instagram", label: "Instagram" }, + { href: "https://youtube.com/channel/UC98CzaYuFNAA_gOINFB0e4Q", icon: "youtube", label: "YouTube" }, + { href: "https://fosstodon.org/@europython", icon: "mastodon", label: "Mastodon" }, + { href: "https://bsky.app/profile/europython.eu", icon: "bluesky", label: "Bluesky" }, + { href: "https://x.com/europython", icon: "x", label: "X (formerly Twitter)" }, ]; --- @@ -19,12 +19,13 @@ const socialLinks = [

    - {socialLinks.map(({ href, icon }) => ( + {socialLinks.map(({ href, icon, label }) => ( @@ -40,6 +41,7 @@ const socialLinks = [ id="subscribeForm" class="flex flex-col sm:flex-row justify-center items-center gap-4" > + -
    -
    - -

    {title}

    -
    +

    {title}

    diff --git a/src/components/deadline-card.astro b/src/components/sections/updates/deadline-card.astro similarity index 92% rename from src/components/deadline-card.astro rename to src/components/sections/updates/deadline-card.astro index ba28b6405..b1b5a9506 100644 --- a/src/components/deadline-card.astro +++ b/src/components/sections/updates/deadline-card.astro @@ -1,6 +1,6 @@ --- import { getEntry } from "astro:content"; -import Card from "./card/card.astro"; +import Card from "./card.astro"; export interface Props { id: string; diff --git a/src/components/sections/updates.astro b/src/components/sections/updates/updates.astro similarity index 89% rename from src/components/sections/updates.astro rename to src/components/sections/updates/updates.astro index 123abb9e9..7ad3e4065 100644 --- a/src/components/sections/updates.astro +++ b/src/components/sections/updates/updates.astro @@ -1,5 +1,5 @@ --- -import DeadlineCard from "@components/deadline-card.astro"; +import DeadlineCard from "./deadline-card.astro"; import Headline from "@ui/Headline.astro"; import { getCollection } from "astro:content"; import Section from "@ui/Section.astro"; diff --git a/src/components/sessions/filter.astro b/src/components/sessions/filter.astro index f756cb928..f84944b54 100644 --- a/src/components/sessions/filter.astro +++ b/src/components/sessions/filter.astro @@ -6,8 +6,8 @@ interface FilterSessionsProps { } const { allTracks = [], allTypes = [], allLevels = [] }: FilterSessionsProps = Astro.props; -import { Label } from "../form/label"; -import { Select } from "../form/select"; +import Label from "@ui/Label.astro"; +import Select from "@ui/Select.astro"; ---
    diff --git a/src/components/sessions/list-sessions.astro b/src/components/sessions/list-sessions.astro index bd95f18e9..8d09444a7 100644 --- a/src/components/sessions/list-sessions.astro +++ b/src/components/sessions/list-sessions.astro @@ -1,8 +1,8 @@ --- const { sessions } = Astro.props; -import Prose from "../prose/prose.astro"; -import { Tag } from "../tag/tag"; -import SessionSpeakers from "../session-speakers.astro"; +import Prose from "@ui/Prose.astro"; +import Tag from "@ui/Tag.astro"; +import SessionSpeakers from "./session-speakers.astro"; type Session = { data: { diff --git a/src/components/session-speakers.astro b/src/components/sessions/session-speakers.astro similarity index 100% rename from src/components/session-speakers.astro rename to src/components/sessions/session-speakers.astro diff --git a/src/components/sponsor-tiers/sponsor-tiers.astro b/src/components/sponsor-tiers/sponsor-tiers.astro index f78f2b3b4..1e24852b1 100644 --- a/src/components/sponsor-tiers/sponsor-tiers.astro +++ b/src/components/sponsor-tiers/sponsor-tiers.astro @@ -1,5 +1,5 @@ --- -import { Title } from "../typography/title"; +import Headline from "@ui/Headline.astro"; import Ribbon from "./ribbon.astro"; import Button from "@ui/Button.astro"; @@ -207,9 +207,7 @@ const formatPrice = (price: number | string) => { className={`absolute -right-6 -top-8 ${getRibbonClass(tier.title)}`} style={{ zIndex: "-1", top: "-55px" }} /> - - {tier.title} - +
    {formatPrice(tier.price)}
    {tier.slotsLeft ? ( @@ -263,9 +261,7 @@ const formatPrice = (price: number | string) => { className={`absolute -right-6 -top-8 ${getRibbonClass(tier.title)}`} style={{ zIndex: "-1", top: "-55px" }} /> - - {tier.title} - +
    {formatPrice(tier.price)}
    {tier.slotsLeft === "Exclusive" ? ( @@ -321,9 +317,7 @@ const formatPrice = (price: number | string) => { className={`absolute -right-6 -top-8 ${getRibbonClass(tier.title)}`} style={{ zIndex: "-1", top: "-55px" }} /> - - {tier.title} - +
    {formatPrice(tier.price)}
    {tier.slotsLeft ? ( diff --git a/src/components/sponsors/sponsor-tier.astro b/src/components/sponsors/sponsor-tier.astro index fb379229b..fef6d7f5c 100644 --- a/src/components/sponsors/sponsor-tier.astro +++ b/src/components/sponsors/sponsor-tier.astro @@ -1,7 +1,6 @@ --- import { getCollection } from "astro:content"; import SponsorLogo from "@components/SponsorLogo.astro"; -import { Image } from "astro:assets"; type Sponsor = Awaited>>[0]; @@ -14,20 +13,17 @@ export interface Props { top?: boolean; } - -import { sponsorLogos } from "@data/sponsorLogos"; - const { tier, top } = Astro.props; ---
    -

    +

    {tier.name} -

    +
    { tier.sponsors.map((sponsor) => ( -
    - - -
    )) }
    diff --git a/src/components/sponsors/sponsors.astro b/src/components/sponsors/sponsors.astro index 2c4ff45b7..068628fb1 100644 --- a/src/components/sponsors/sponsors.astro +++ b/src/components/sponsors/sponsors.astro @@ -1,9 +1,8 @@ --- import { getCollection } from "astro:content"; import Separator from "@ui/Separator.astro"; -import { Fragment } from "react"; -import Headline from "@ui/Headline.astro"; -import Section from "@ui/Section.astro"; +import Headline from "@ui/Headline.astro" +import Section from "@ui/Section.astro" import Button from "@ui/Button.astro"; @@ -20,7 +19,7 @@ const tiers = [ "Patron", "Financial Aid", "Supporters", - "Partners", + "Partners" ] as const; const sponsors = await getCollection("sponsors"); diff --git a/src/components/tag/tag.tsx b/src/components/tag/tag.tsx deleted file mode 100644 index 7e705dcb2..000000000 --- a/src/components/tag/tag.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import clsx from "clsx"; - -interface TagProps { - children: React.ReactNode; - className?: string; - href?: string; -} - -export const Tag = ({ children, className, href }: TagProps) => { - const TagElement = href ? "a" : "span"; - return ( - - {children} - - ); -}; diff --git a/src/components/ticket-tiers/ticket-tiers.astro b/src/components/ticket-tiers/ticket-tiers.astro index 820319d81..5ff960ba3 100644 --- a/src/components/ticket-tiers/ticket-tiers.astro +++ b/src/components/ticket-tiers/ticket-tiers.astro @@ -1,5 +1,5 @@ --- -import { Title } from "../typography/title"; +import Headline from "@ui/Headline.astro"; interface Props { ticketShopLink: string; @@ -139,9 +139,7 @@ const formatPrice = (price: number | string) => { tiers.map((tier) => (
    - - {tier.title} - +
    diff --git a/src/components/typography/title.tsx b/src/components/typography/title.tsx deleted file mode 100644 index d1ccfceb9..000000000 --- a/src/components/typography/title.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import clsx from "clsx"; -import type { JSX } from "react/jsx-runtime"; - -export const Title = ({ - children, - highlighted = false, - level = 1, - className, - ...props -}: { - children: React.ReactNode; - highlighted?: boolean; - level?: 1 | 2 | 3 | 4 | 5 | 6; - className?: string; -}) => { - const Tag = `h${level}` as keyof JSX.IntrinsicElements; - - return ( - a]:border-0 [&>a]:text-inherit text-pretty", - { - "text-4xl md:text-7xl": level === 1, - "text-3xl md:text-5xl": level === 2, - "text-2xl md:text-4xl": level === 3, - "text-xl md:text-3xl": level === 4, - "text-lg md:text-2xl": level === 5, - "text-lg md:text-xl": level === 6, - }, - className - )} - {...props} - > - {highlighted ? ( - - ) : null} - - {children} - - ); -}; diff --git a/src/components/accordion/accordion.astro b/src/components/ui/Accordion.astro similarity index 100% rename from src/components/accordion/accordion.astro rename to src/components/ui/Accordion.astro diff --git a/src/components/ui/Button.astro b/src/components/ui/Button.astro index 270f1b99e..e5d32a98c 100644 --- a/src/components/ui/Button.astro +++ b/src/components/ui/Button.astro @@ -23,10 +23,10 @@ const { const resolvedIsExternal = isExternal ?? url?.startsWith("http"); -const baseClasses = "button-link font-bold text-lg px-4 py-4 rounded-lg inline-flex items-center justify-center leading-4 transition-colors duration-200 not-prose border hover:text-black"; +const baseClasses = "button-link font-bold text-lg px-4 py-4 rounded-lg inline-flex items-center justify-center leading-4 transition-colors duration-200 not-prose border text-text"; const primaryClasses = "bg-button text-text-inverted hover:bg-button-hover border-transparent"; const secondaryClasses = "bg-primary text-white hover:bg-primary-hover border-transparent"; -const clearClasses = "bg-transparent text-primary hover:bg-transparent hover:text-primary-active border-transparent"; +const clearClasses = "bg-transparent text-primary hover:bg-transparent hover:text-text-inverted border-transparent"; const outlineClasses = "border-gray-500 text-gray-700 hover:bg-gray-100 hover:bg-button-hover"; const disabledClasses = "opacity-50 pointer-events-none"; const iconClasses = "mx-2 "; diff --git a/src/components/ui/Headline.astro b/src/components/ui/Headline.astro index 2f3ba4ecb..12f0f887f 100644 --- a/src/components/ui/Headline.astro +++ b/src/components/ui/Headline.astro @@ -9,11 +9,13 @@ const isCenter = center ? "text-center" : ""; --- - {isAnchor && ( + {isAnchor ? ( {Title} - )} + ): + <>{Title} + } {isLink && {Title} } diff --git a/src/components/ui/Label.astro b/src/components/ui/Label.astro new file mode 100644 index 000000000..2b2d77184 --- /dev/null +++ b/src/components/ui/Label.astro @@ -0,0 +1,15 @@ + +--- +interface Props { + htmlFor: string; +} + +const { htmlFor } = Astro.props; +--- + + diff --git a/src/components/prose/prose.astro b/src/components/ui/Prose.astro similarity index 100% rename from src/components/prose/prose.astro rename to src/components/ui/Prose.astro diff --git a/src/components/ui/Select.astro b/src/components/ui/Select.astro new file mode 100644 index 000000000..471a458b1 --- /dev/null +++ b/src/components/ui/Select.astro @@ -0,0 +1,40 @@ +--- +interface Props { + id: string; + name: string; + defaultValue?: string; +} + +const { id, name, defaultValue } = Astro.props; + +const selectClasses = [ + "block w-full bg-transparent text-lg h-16 py-2 pr-16 pl-4 border-[3px] border-primary appearance-none", + "focus:outline-none focus:border-black focus-visible:bg-white" +].join(" "); + +const svgClasses = [ + "absolute top-1/2 -translate-y-1/2 w-6 h-6 pointer-events-none text-primary right-4" +].join(" "); +--- + +
    + + + + +
    diff --git a/src/components/ui/Tag.astro b/src/components/ui/Tag.astro new file mode 100644 index 000000000..a99009993 --- /dev/null +++ b/src/components/ui/Tag.astro @@ -0,0 +1,26 @@ +--- +interface Props { + className?: string; + href?: string; +} + +const { className = "", href } = Astro.props; + +const baseClasses = [ + "inline-block bg-secondary-light text-white px-4 py-2 rounded-xl font-bold", + "hover:bg-secondary hover:text-white transition-colors", + "duration-200 ease-in-out cursor-pointer" +]; + +const combinedClasses = [...baseClasses, className].join(" "); +--- + +{href ? ( + + + +) : ( + + + +)} diff --git a/src/content/days/.gitkeep b/src/content/days/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/content/deadlines/05_call_for_venues.md b/src/content/deadlines/05_call_for_venues.md index d67679ed0..f30381a7a 100644 --- a/src/content/deadlines/05_call_for_venues.md +++ b/src/content/deadlines/05_call_for_venues.md @@ -1,6 +1,6 @@ --- title: Call for 2026 Venues -subtitle: Read More +subtitle: Propose a Venue url: https://europython-society.org/call-for-europython-2026-host-venues image: "./venue.jpg" --- diff --git a/src/content/pages/sponsorship/sponsor.mdx b/src/content/pages/sponsorship/sponsor.mdx index 5d7bc2043..3e465bbe6 100644 --- a/src/content/pages/sponsorship/sponsor.mdx +++ b/src/content/pages/sponsorship/sponsor.mdx @@ -10,14 +10,15 @@ toc: false # Why Sponsor EuroPython? Stand out in the heart of Europe’s Python ecosystem and connect with ~1,500 Python professionals - **~1,500** participants from **~50** countries - **24th** edition – the world’s **longest-running** Python conference - **190+** speakers across diverse Python topics - **40K+** social media followers - **34K** YouTube subscribers and **4M+** YouTube views - **25%** of participants from underrepresented groups in tech +- **~1,500** participants from **~50** countries +- **24th** edition – the world’s **longest-running** Python conference +- **190+** speakers across diverse Python topics +- **40K+** social media followers +- **34K** YouTube subscribers and **4M+** YouTube views +- **25%** of participants from underrepresented groups in tech + Join **EuroPython 2025 from 14 – 20 July** at the Prague Congress Centre (PCC) to connect, showcase your company, and shape the future of Python! diff --git a/src/layouts/MarkdownLayout.astro b/src/layouts/MarkdownLayout.astro index 0fa455a58..88beeb2e3 100644 --- a/src/layouts/MarkdownLayout.astro +++ b/src/layouts/MarkdownLayout.astro @@ -3,7 +3,7 @@ import Layout from "@layouts/Layout.astro"; import Section from "@ui/Section.astro"; import TwoCols from "@components/TwoCols.astro"; -import "../styles/markdown.css"; +import "@styles/markdown.css"; const { title, description, toc=false } = Astro.props; diff --git a/src/layouts/SectionLayout.astro b/src/layouts/SectionLayout.astro index 1a8d69a47..06d4d2af6 100644 --- a/src/layouts/SectionLayout.astro +++ b/src/layouts/SectionLayout.astro @@ -1,8 +1,7 @@ --- import Layout from "@layouts/Layout.astro"; import Section from "@ui/Section.astro"; - -import "../styles/markdown.css"; +import "@styles/markdown.css"; const { title, description } = Astro.props; --- diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro index 08de2244c..4257ea540 100644 --- a/src/pages/[...slug].astro +++ b/src/pages/[...slug].astro @@ -5,18 +5,17 @@ import Layout from "@layouts/MarkdownLayout.astro"; import Separator from "@ui/Separator.astro"; import Map from "@components/Map.astro"; import YouTube from "@ui/YouTube.astro"; -import HighlightCard from "@components/highlight-list/highlight-card.astro"; -import HighlightItem from "@components/highlight-list/highlight-item.astro"; +import HighlightCard from "@components/markdown/HighlightCard.astro"; import Note from "@ui/Note.astro"; import SponsorTiers from "@components/sponsor-tiers/sponsor-tiers.astro"; -import Accordion from "@components/accordion/accordion.astro"; +import Accordion from "@components/ui/Accordion.astro"; import Button from "@ui/Button.astro"; import Icon from "@ui/Icon.astro"; import IconLabel from "@components/markdown/IconLabel.astro"; import Center from "@components/markdown/Center.astro"; import EPSLogo from "@components/markdown/EPSLogo.astro"; -import Prose from "@components/prose/prose.astro"; +import Prose from "@ui/Prose.astro"; export async function getStaticPaths() { const pages = await getCollection("pages"); @@ -61,7 +60,6 @@ const description = post.data.subtitle; Map, YouTube, HighlightCard, - HighlightItem, Note, SponsorTiers, hr: Separator, diff --git a/src/pages/api/buffer_posts.ts b/src/pages/api/buffer_posts.ts index 6e1ff6d2a..a74bf593d 100644 --- a/src/pages/api/buffer_posts.ts +++ b/src/pages/api/buffer_posts.ts @@ -16,12 +16,6 @@ function getBlueskyUsername(url: string): string | undefined { } // Get Bluesky profile link from username -function getBlueskyProfileLink(username: string): string { - // Remove any leading @ if present - const cleanUsername = username.replace(/^@/, ""); - return `https://bsky.app/profile/${cleanUsername}`; -} - // Get @username@instance.tld from Mastodon URL function getMastodonUsername(url: string): string | undefined { if (!url) return undefined; @@ -42,7 +36,7 @@ function getLinkedInUsernameHandler(url: string): string | undefined { return undefined; } -export const GET: APIRoute = async ({ params, request }) => { +export const GET: APIRoute = async () => { const limit = Infinity; const speakers = await getCollection("speakers"); const exclude = [ @@ -64,7 +58,7 @@ export const GET: APIRoute = async ({ params, request }) => { // Tailor message templates for each platform using appropriate handle formats const message_template = { - instagram: ({ name, talkTitle, talkUrl }) => + instagram: ({ name, talkTitle }) => `Join ${name} at EuroPython for "${talkTitle}".`, x: ({ name, handle, talkTitle, talkUrl }) => @@ -72,7 +66,7 @@ export const GET: APIRoute = async ({ params, request }) => { ? `Join ${name} (${handle}) at EuroPython for "${talkTitle}". Talk: ${talkUrl}` : `Join ${name} at EuroPython for "${talkTitle}". Talk: ${talkUrl}`, - linkedin: ({ name, handle, talkTitle, talkUrl }) => + linkedin: ({ name, talkTitle }) => `Join ${name} at EuroPython for "${talkTitle}".`, bsky: ({ name, handle, talkTitle, talkUrl }) => diff --git a/src/pages/index.astro b/src/pages/index.astro index 94ff32dd4..383529d2c 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,8 +1,8 @@ --- import Layout from "@layouts/Layout.astro"; import Hero from "@sections/hero/hero.astro"; -import Updates from "@sections/updates.astro"; -import Keynoters from "@components/keynoters/keynoters.astro"; +import Updates from "@sections/updates/updates.astro"; +import Keynoters from "@sections/keynoters/keynoters.astro"; import Speakers from "@sections/speakers.astro"; import Prague from "@sections/prague.astro"; import Sponsors from "@components/sponsors/sponsors.astro"; diff --git a/src/pages/media/social_media.csv.ts b/src/pages/media/social_media.csv.ts index 553668b6d..3448c9002 100644 --- a/src/pages/media/social_media.csv.ts +++ b/src/pages/media/social_media.csv.ts @@ -1,5 +1,5 @@ import { getCollection, getEntry } from "astro:content"; -export async function GET({ params, request }) { +export async function GET() { const speakers = await getCollection("speakers"); const header = [ diff --git a/src/pages/session/[slug].astro b/src/pages/session/[slug].astro index 733a8cb3f..d7f851105 100644 --- a/src/pages/session/[slug].astro +++ b/src/pages/session/[slug].astro @@ -1,7 +1,7 @@ --- import { getCollection, getEntries } from "astro:content"; import Layout from "@layouts/Layout.astro"; -import Prose from "@components/prose/prose.astro"; +import Prose from "@ui/Prose.astro"; import Separator from "@ui/Separator.astro"; import { formatInTimeZone } from "date-fns-tz"; import { YouTube } from "@astro-community/astro-embed-youtube"; diff --git a/src/pages/sessions.astro b/src/pages/sessions.astro index e15b8f05c..5a98906af 100644 --- a/src/pages/sessions.astro +++ b/src/pages/sessions.astro @@ -1,10 +1,10 @@ --- import { getCollection } from "astro:content"; -import Layout from "../layouts/Layout.astro"; -import Prose from "../components/prose/prose.astro"; +import Layout from "@layouts/Layout.astro"; +import Prose from "@ui/Prose.astro"; import Headline from "@ui/Headline.astro" -import Filter from "../components/sessions/filter.astro"; -import ListSessions from "../components/sessions/list-sessions.astro"; +import Filter from "@components/sessions/filter.astro"; +import ListSessions from "@components/sessions/list-sessions.astro"; import Section from "@ui/Section.astro"; const sessions = await getCollection("sessions"); diff --git a/src/pages/speaker/[slug].astro b/src/pages/speaker/[slug].astro index a11fef7aa..9f9639c82 100644 --- a/src/pages/speaker/[slug].astro +++ b/src/pages/speaker/[slug].astro @@ -1,7 +1,7 @@ --- import { getCollection, getEntries } from "astro:content"; -import Layout from "../../layouts/Layout.astro"; -import Prose from "../../components/prose/prose.astro"; +import Layout from "@layouts/Layout.astro"; +import Prose from "@ui/Prose.astro"; import { Image } from "astro:assets"; import Markdown from "@ui/Markdown.astro"; import Headline from "@ui/Headline.astro"; diff --git a/src/styles/global.css b/src/styles/global.css index 4d3806342..4d0e155f4 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -2,14 +2,20 @@ --color-primary: #151f38; --color-primary-hover: #7a7ebd; --color-primary-active: #7a7ebd; - --color-button: #ee714b; - --color-button-hover: #fabc1b; + + --color-button: #6b5ca5; /* Darker orange-brown */ + --color-button-hover: #8572c6; /* Lighter than base, but still accessible */ + --color-button-active: #514689; /* Darker for pressed state */ + --color-button-focus: #9c4222; /* Same as base with a visible outline */ + --color-button-disabled: #b7b2c7; /* Desaturated, lighter version */ + --color-button-text: #fdfdfd; /* White text on all states */ + --color-secondary: #151f38; --color-secondary-dark: #f5e5d6; --color-secondary-darkest: white; --color-secondary-light: #7a7ebd; --color-text: #151f38; - --color-text-inverted: white; + --color-text-inverted: #fdfdfd; --color-body-background: #f5e5d6; --color-hero-primary: #151f38; --color-hero-secondary: #fabc1b; diff --git a/tsconfig.json b/tsconfig.json index ca0c62214..b8d54e624 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,6 @@ "compilerOptions": { "strictNullChecks": true, "noImplicitAny": false, - "jsx": "react-jsx", - "jsxImportSource": "react", "paths": { "@utils/*": ["./src/utils/*"], "@data/*": ["./src/data/*"], @@ -13,6 +11,7 @@ "@ui/*": ["./src/components/ui/*"], "@layouts/*": ["./src/layouts/*"], "@assets/*": ["./src/assets/*"], + "@styles/*": ["./src/styles/*"], "@i18n/*": ["./src/i18n/*"], "@src/*": ["./src/*"] }