diff --git a/README.md b/README.md index 70a7a99..dba5272 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# Astro Headless WordPress Tailwind Starter +# AndrewKepson.com \ No newline at end of file diff --git a/astro.config.mjs b/astro.config.mjs index 77e10a1..da43a91 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,10 +1,23 @@ import { defineConfig } from "astro/config"; import tailwind from "@astrojs/tailwind"; +import react from "@astrojs/react"; + export default defineConfig({ - integrations: [tailwind()], - trailingSlash: "never", - site: "https://site.com", - // prefetch: true, - compressHTML: true, -}); + integrations: [tailwind(), react()], + trailingSlash: "always", + site: "https://andrewkepson.com", + image: { + domains: ["headless.andrewkepson.com"] + }, + // prefetch: true, + compressHTML: true, + experimental: { + contentLayer: true, + }, + redirects: { + "/blog/create-headless-wordpress-source-gatsby-wordpress-api/": + "/blog/headless-wordpress/create-headless-wordpress-source-gatsby-wordpress-api/", + "/blog/how-and-why-nike-is-using-blockchain/": "/blog/blockchain/how-and-why-nike-is-using-blockchain/", + }, +}); \ No newline at end of file diff --git a/package.json b/package.json index a9ffdea..064645e 100644 --- a/package.json +++ b/package.json @@ -1,24 +1,54 @@ { - "name": "astro-headless-wordpress-tailwind-starter", - "type": "module", - "version": "0.0.1", - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "@astrojs/tailwind": "^5.1.0", - "astro": "^4.15.4", - "dotenv": "^16.4.5", - "prettier": "^3.3.3", - "prettier-plugin-astro": "^0.13.0", - "prettier-plugin-tailwindcss": "^0.5.14", - "tailwindcss": "^3.4.10" - }, - "devDependencies": { - "@tailwindcss/typography": "^0.5.15" - } -} \ No newline at end of file + "name": "andrew-kepson", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "100-italic.css": "link:@fontsource/work-sans/100-italic.css", + "100.css": "link:@fontsource/work-sans/100.css", + "200-italic.css": "link:@fontsource/work-sans/200-italic.css", + "200.css": "link:@fontsource/work-sans/200.css", + "300-italic.css": "link:@fontsource/work-sans/300-italic.css", + "300.css": "link:@fontsource/work-sans/300.css", + "400-italic.css": "link:@fontsource/work-sans/400-italic.css", + "400.css": "link:@fontsource/work-sans/400.css", + "500-italic.css": "link:@fontsource/work-sans/500-italic.css", + "500.css": "link:@fontsource/work-sans/500.css", + "600-italic.css": "link:@fontsource/work-sans/600-italic.css", + "600.css": "link:@fontsource/work-sans/600.css", + "700-italic.css": "link:@fontsource/work-sans/700-italic.css", + "700.css": "link:@fontsource/work-sans/700.css", + "800-italic.css": "link:@fontsource/work-sans/800-italic.css", + "800.css": "link:@fontsource/work-sans/800.css", + "900-italic.css": "link:@fontsource/work-sans/900-italic.css", + "900.css": "link:@fontsource/work-sans/900.css", + "@astrojs/react": "^3.6.2", + "@astrojs/tailwind": "^5.1.0", + "@fontsource/roboto": "^5.0.15", + "@fontsource/work-sans": "^5.0.20", + "@headlessui/react": "^2.1.6", + "@heroicons/react": "^2.1.5", + "@types/react": "^18.3.5", + "@types/react-dom": "^18.3.0", + "astro": "^4.15.4", + "dotenv": "^16.4.5", + "outline": "link:@heroicons/react/outline", + "prettier": "^3.3.3", + "prettier-plugin-astro": "^0.13.0", + "prettier-plugin-tailwindcss": "^0.5.14", + "prop-types": "^15.8.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-reveal": "^1.2.2", + "tailwindcss": "^3.4.10" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.15" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51721be..05c5048 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,15 +8,93 @@ importers: .: dependencies: + 100-italic.css: + specifier: link:@fontsource/work-sans/100-italic.css + version: link:@fontsource/work-sans/100-italic.css + 100.css: + specifier: link:@fontsource/work-sans/100.css + version: link:@fontsource/work-sans/100.css + 200-italic.css: + specifier: link:@fontsource/work-sans/200-italic.css + version: link:@fontsource/work-sans/200-italic.css + 200.css: + specifier: link:@fontsource/work-sans/200.css + version: link:@fontsource/work-sans/200.css + 300-italic.css: + specifier: link:@fontsource/work-sans/300-italic.css + version: link:@fontsource/work-sans/300-italic.css + 300.css: + specifier: link:@fontsource/work-sans/300.css + version: link:@fontsource/work-sans/300.css + 400-italic.css: + specifier: link:@fontsource/work-sans/400-italic.css + version: link:@fontsource/work-sans/400-italic.css + 400.css: + specifier: link:@fontsource/work-sans/400.css + version: link:@fontsource/work-sans/400.css + 500-italic.css: + specifier: link:@fontsource/work-sans/500-italic.css + version: link:@fontsource/work-sans/500-italic.css + 500.css: + specifier: link:@fontsource/work-sans/500.css + version: link:@fontsource/work-sans/500.css + 600-italic.css: + specifier: link:@fontsource/work-sans/600-italic.css + version: link:@fontsource/work-sans/600-italic.css + 600.css: + specifier: link:@fontsource/work-sans/600.css + version: link:@fontsource/work-sans/600.css + 700-italic.css: + specifier: link:@fontsource/work-sans/700-italic.css + version: link:@fontsource/work-sans/700-italic.css + 700.css: + specifier: link:@fontsource/work-sans/700.css + version: link:@fontsource/work-sans/700.css + 800-italic.css: + specifier: link:@fontsource/work-sans/800-italic.css + version: link:@fontsource/work-sans/800-italic.css + 800.css: + specifier: link:@fontsource/work-sans/800.css + version: link:@fontsource/work-sans/800.css + 900-italic.css: + specifier: link:@fontsource/work-sans/900-italic.css + version: link:@fontsource/work-sans/900-italic.css + 900.css: + specifier: link:@fontsource/work-sans/900.css + version: link:@fontsource/work-sans/900.css + '@astrojs/react': + specifier: ^3.6.2 + version: 3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.3) '@astrojs/tailwind': specifier: ^5.1.0 version: 5.1.0(astro@4.15.4(rollup@4.21.2)(typescript@5.5.4))(tailwindcss@3.4.10) + '@fontsource/roboto': + specifier: ^5.0.15 + version: 5.0.15 + '@fontsource/work-sans': + specifier: ^5.0.20 + version: 5.0.20 + '@headlessui/react': + specifier: ^2.1.6 + version: 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@heroicons/react': + specifier: ^2.1.5 + version: 2.1.5(react@18.3.1) + '@types/react': + specifier: ^18.3.5 + version: 18.3.5 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 astro: specifier: ^4.15.4 version: 4.15.4(rollup@4.21.2)(typescript@5.5.4) dotenv: specifier: ^16.4.5 version: 16.4.5 + outline: + specifier: link:@heroicons/react/outline + version: link:@heroicons/react/outline prettier: specifier: ^3.3.3 version: 3.3.3 @@ -26,6 +104,18 @@ importers: prettier-plugin-tailwindcss: specifier: ^0.5.14 version: 0.5.14(prettier-plugin-astro@0.13.0)(prettier@3.3.3) + prop-types: + specifier: ^15.8.1 + version: 15.8.1 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + react-reveal: + specifier: ^1.2.2 + version: 1.2.2(react@18.3.1) tailwindcss: specifier: ^3.4.10 version: 3.4.10 @@ -60,6 +150,15 @@ packages: resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} + '@astrojs/react@3.6.2': + resolution: {integrity: sha512-fK29lYI7zK/KG4ZBy956x4dmauZcZ18osFkuyGa8r3gmmCQa2NZ9XNu9WaVYEUm0j89f4Gii4tbxLoyM8nk2MA==} + engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} + peerDependencies: + '@types/react': ^17.0.50 || ^18.0.21 + '@types/react-dom': ^17.0.17 || ^18.0.6 + react: ^17.0.2 || ^18.0.0 || ^19.0.0-beta + react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0-beta + '@astrojs/tailwind@5.1.0': resolution: {integrity: sha512-BJoCDKuWhU9FT2qYg+fr6Nfb3qP4ShtyjXGHKA/4mHN94z7BGcmauQK23iy+YH5qWvTnhqkd6mQPQ1yTZTe9Ig==} peerDependencies: @@ -143,6 +242,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.24.7': + resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.24.7': + resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.25.2': resolution: {integrity: sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==} engines: {node: '>=6.9.0'} @@ -302,6 +413,45 @@ packages: cpu: [x64] os: [win32] + '@floating-ui/core@1.6.7': + resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==} + + '@floating-ui/dom@1.6.10': + resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==} + + '@floating-ui/react-dom@2.1.1': + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.23': + resolution: {integrity: sha512-9u3i62fV0CFF3nIegiWiRDwOs7OW/KhSUJDNx2MkQM3LbE5zQOY01sL3nelcVBXvX7Ovvo3A49I8ql+20Wg/Hw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.7': + resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} + + '@fontsource/roboto@5.0.15': + resolution: {integrity: sha512-352XiID9jfwmYaHpdmS3ocGJi3PA+vOm4HzJIRfSyPEyLP6dZN8iiEKUbdAfB5YXQO3YxO2KZpR+R28q2zMiYw==} + + '@fontsource/work-sans@5.0.20': + resolution: {integrity: sha512-y5iXosRufbJWj2W1SwupjFdHVVsICFkWPEKj0nE9G1wKdFCpZq0xoHEcaSgkIVjzC+xrVSMliaDv81T9E+i6RA==} + + '@headlessui/react@2.1.6': + resolution: {integrity: sha512-IkaSHxsMdrSdVZn5n3ClfvqQo5umHeqwjeZfbFUTczykeHoMH+3VOP0nn7zVsbebazjPmOsXh3x9gCy6e2PG5Q==} + engines: {node: '>=10'} + peerDependencies: + react: ^18 + react-dom: ^18 + + '@heroicons/react@2.1.5': + resolution: {integrity: sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA==} + peerDependencies: + react: '>= 16' + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -448,6 +598,37 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@react-aria/focus@3.18.2': + resolution: {integrity: sha512-Jc/IY+StjA3uqN73o6txKQ527RFU7gnG5crEl5Xy3V+gbYp2O5L3ezAo/E0Ipi2cyMbG6T5Iit1IDs7hcGu8aw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/interactions@3.22.2': + resolution: {integrity: sha512-xE/77fRVSlqHp2sfkrMeNLrqf2amF/RyuAS6T5oDJemRSgYM3UoxTbWjucPhfnoW7r32pFPHHgz4lbdX8xqD/g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/ssr@3.9.5': + resolution: {integrity: sha512-xEwGKoysu+oXulibNUSkXf8itW0npHHTa6c4AyYeZIJyRoegeteYuFpZUBPtIDE8RfHdNsSmE1ssOkxRnwbkuQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-aria/utils@3.25.2': + resolution: {integrity: sha512-GdIvG8GBJJZygB4L2QJP1Gabyn2mjFsha73I2wSe+o4DYeGWoJiMZRM06PyTIxLH4S7Sn7eVDtsSBfkc2VY/NA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-stately/utils@3.10.3': + resolution: {integrity: sha512-moClv7MlVSHpbYtQIkm0Cx+on8Pgt1XqtPx6fy9rQFb2DNc9u1G3AUVnqA17buOkH1vLxAtX4MedlxMWyRCYYA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + + '@react-types/shared@3.24.1': + resolution: {integrity: sha512-AUQeGYEm/zDTN6zLzdXolDxz3Jk5dDL7f506F07U8tBwxNNI3WRdhU84G0/AaFikOZzDXhOZDr3MhQMzyE7Ydw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -543,11 +724,23 @@ packages: '@shikijs/vscode-textmate@9.2.2': resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@tailwindcss/typography@0.5.15': resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' + '@tanstack/react-virtual@3.10.7': + resolution: {integrity: sha512-yeP+M0G8D+15ZFPivpuQ5hoM4Fa/PzERBx8P8EGcfEsXX3JOb9G9UUrqc47ZXAxvK+YqzM9T5qlJUYUFOwCZJw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@tanstack/virtual-core@3.10.7': + resolution: {integrity: sha512-ND5dfsU0n9F4gROzwNNDJmg6y8n9pI8YWxtgbfJ5UcNn7Hx+MxEXtXcQ189tS7sh8pmCObgz2qSiyRKTZxT4dg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -581,12 +774,27 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react@18.3.5': + resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vitejs/plugin-react@4.3.1': + resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + acorn@8.12.1: resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} @@ -783,6 +991,9 @@ packages: engines: {node: '>=4'} hasBin: true + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -1155,6 +1366,10 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1557,12 +1772,36 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-reveal@1.2.2: + resolution: {integrity: sha512-JCv3fAoU6Z+Lcd8U48bwzm4pMZ79qsedSXYwpwt6lJNtj/v5nKJYZZbw3yhaQPPgYePo3Y0NOCoYOq/jcsisuw==} + peerDependencies: + react: ^15.3.0 || ^16.0.0 + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -1639,6 +1878,9 @@ packages: sass-formatter@0.7.9: resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -1738,6 +1980,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tailwindcss@3.4.10: resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} engines: {node: '>=14.0.0'} @@ -1792,6 +2037,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + ultrahtml@1.5.3: + resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -1985,6 +2233,18 @@ snapshots: dependencies: prismjs: 1.29.0 + '@astrojs/react@3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.3)': + dependencies: + '@types/react': 18.3.5 + '@types/react-dom': 18.3.0 + '@vitejs/plugin-react': 4.3.1(vite@5.4.3) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + ultrahtml: 1.5.3 + transitivePeerDependencies: + - supports-color + - vite + '@astrojs/tailwind@5.1.0(astro@4.15.4(rollup@4.21.2)(typescript@5.5.4))(tailwindcss@3.4.10)': dependencies: astro: 4.15.4(rollup@4.21.2)(typescript@5.5.4) @@ -2106,6 +2366,16 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -2215,6 +2485,48 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@floating-ui/core@1.6.7': + dependencies: + '@floating-ui/utils': 0.2.7 + + '@floating-ui/dom@1.6.10': + dependencies: + '@floating-ui/core': 1.6.7 + '@floating-ui/utils': 0.2.7 + + '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.6.10 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/react@0.26.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.2.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tabbable: 6.2.0 + + '@floating-ui/utils@0.2.7': {} + + '@fontsource/roboto@5.0.15': {} + + '@fontsource/work-sans@5.0.20': {} + + '@headlessui/react@2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react': 0.26.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.18.2(react@18.3.1) + '@react-aria/interactions': 3.22.2(react@18.3.1) + '@tanstack/react-virtual': 3.10.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@heroicons/react@2.1.5(react@18.3.1)': + dependencies: + react: 18.3.1 + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -2333,6 +2645,46 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@react-aria/focus@3.18.2(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.22.2(react@18.3.1) + '@react-aria/utils': 3.25.2(react@18.3.1) + '@react-types/shared': 3.24.1(react@18.3.1) + '@swc/helpers': 0.5.13 + clsx: 2.1.1 + react: 18.3.1 + + '@react-aria/interactions@3.22.2(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.5(react@18.3.1) + '@react-aria/utils': 3.25.2(react@18.3.1) + '@react-types/shared': 3.24.1(react@18.3.1) + '@swc/helpers': 0.5.13 + react: 18.3.1 + + '@react-aria/ssr@3.9.5(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.13 + react: 18.3.1 + + '@react-aria/utils@3.25.2(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.5(react@18.3.1) + '@react-stately/utils': 3.10.3(react@18.3.1) + '@react-types/shared': 3.24.1(react@18.3.1) + '@swc/helpers': 0.5.13 + clsx: 2.1.1 + react: 18.3.1 + + '@react-stately/utils@3.10.3(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.13 + react: 18.3.1 + + '@react-types/shared@3.24.1(react@18.3.1)': + dependencies: + react: 18.3.1 + '@rollup/pluginutils@5.1.0(rollup@4.21.2)': dependencies: '@types/estree': 1.0.5 @@ -2398,6 +2750,10 @@ snapshots: '@shikijs/vscode-textmate@9.2.2': {} + '@swc/helpers@0.5.13': + dependencies: + tslib: 2.7.0 + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.10)': dependencies: lodash.castarray: 4.4.0 @@ -2406,6 +2762,14 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.10 + '@tanstack/react-virtual@3.10.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/virtual-core': 3.10.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@tanstack/virtual-core@3.10.7': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.25.6 @@ -2449,10 +2813,32 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/prop-types@15.7.12': {} + + '@types/react-dom@18.3.0': + dependencies: + '@types/react': 18.3.5 + + '@types/react@18.3.5': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + '@types/unist@3.0.3': {} '@ungap/structured-clone@1.2.0': {} + '@vitejs/plugin-react@4.3.1(vite@5.4.3)': + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.3 + transitivePeerDependencies: + - supports-color + acorn@8.12.1: {} ansi-align@3.0.1: @@ -2711,6 +3097,8 @@ snapshots: cssesc@3.0.0: {} + csstype@3.1.3: {} + debug@4.3.7: dependencies: ms: 2.1.3 @@ -3085,6 +3473,10 @@ snapshots: longest-streak@3.1.0: {} + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -3606,10 +3998,35 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + property-information@6.5.0: {} queue-microtask@1.2.3: {} + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-is@16.13.1: {} + + react-refresh@0.14.2: {} + + react-reveal@1.2.2(react@18.3.1): + dependencies: + prop-types: 15.8.1 + react: 18.3.1 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -3756,6 +4173,10 @@ snapshots: dependencies: suf-log: 2.5.3 + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -3876,6 +4297,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + tabbable@6.2.0: {} + tailwindcss@3.4.10: dependencies: '@alloc/quick-lru': 5.2.0 @@ -3929,13 +4352,14 @@ snapshots: optionalDependencies: typescript: 5.5.4 - tslib@2.7.0: - optional: true + tslib@2.7.0: {} type-fest@2.19.0: {} typescript@5.5.4: {} + ultrahtml@1.5.3: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 diff --git a/public/fonts/WorkSans-Italic-VariableFont_wght.ttf b/public/fonts/WorkSans-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..ad92373 Binary files /dev/null and b/public/fonts/WorkSans-Italic-VariableFont_wght.ttf differ diff --git a/public/fonts/WorkSans-VariableFont_wght.ttf b/public/fonts/WorkSans-VariableFont_wght.ttf new file mode 100644 index 0000000..9a82798 Binary files /dev/null and b/public/fonts/WorkSans-VariableFont_wght.ttf differ diff --git a/src/assets/images/andrew-kepson-2020-portrait.png b/src/assets/images/andrew-kepson-2020-portrait.png new file mode 100644 index 0000000..cb55546 Binary files /dev/null and b/src/assets/images/andrew-kepson-2020-portrait.png differ diff --git a/src/assets/images/stock/headless-wordpress-blogging-stock.jpg b/src/assets/images/stock/headless-wordpress-blogging-stock.jpg new file mode 100644 index 0000000..fe48419 Binary files /dev/null and b/src/assets/images/stock/headless-wordpress-blogging-stock.jpg differ diff --git a/src/assets/images/stock/headless-wordpress-developer-marketing-collaboration.jpg b/src/assets/images/stock/headless-wordpress-developer-marketing-collaboration.jpg new file mode 100644 index 0000000..446e74d Binary files /dev/null and b/src/assets/images/stock/headless-wordpress-developer-marketing-collaboration.jpg differ diff --git a/src/components/Footer.astro b/src/components/Footer.astro deleted file mode 100644 index fe604a3..0000000 --- a/src/components/Footer.astro +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/src/components/Header.astro b/src/components/Header.astro deleted file mode 100644 index 8aacfae..0000000 --- a/src/components/Header.astro +++ /dev/null @@ -1,5 +0,0 @@ -
- -
diff --git a/src/components/layouts/Footer/Footer.astro b/src/components/layouts/Footer/Footer.astro new file mode 100644 index 0000000..acf9ab9 --- /dev/null +++ b/src/components/layouts/Footer/Footer.astro @@ -0,0 +1,5 @@ +--- +import ReactFooter from "./Footer"; +--- + + diff --git a/src/components/layouts/Footer/Footer.jsx b/src/components/layouts/Footer/Footer.jsx new file mode 100644 index 0000000..aca5887 --- /dev/null +++ b/src/components/layouts/Footer/Footer.jsx @@ -0,0 +1,15 @@ +import React from "react"; + +import { Tagline } from "./Tagline"; +import { IconLinks } from "./IconLinks"; + +const Footer = () => ( + +); + +export default Footer; diff --git a/src/components/layouts/Footer/IconLinks.jsx b/src/components/layouts/Footer/IconLinks.jsx new file mode 100644 index 0000000..1e93a21 --- /dev/null +++ b/src/components/layouts/Footer/IconLinks.jsx @@ -0,0 +1,70 @@ +import React from "react"; + +const X = () => ( + + {" "} + {/* X Logo SVG */} + + + + +); + +const LinkedIn = () => ( + + {" "} + {/* LinkedIn Logo SVG */} + + + + +); + +const GitHub = () => ( + + {" "} + {/* Github Logo SVG */} + + + + +); + +export const IconLinks = () => ( +
+ + + +
+); diff --git a/src/components/layouts/Footer/Tagline.jsx b/src/components/layouts/Footer/Tagline.jsx new file mode 100644 index 0000000..2980c3b --- /dev/null +++ b/src/components/layouts/Footer/Tagline.jsx @@ -0,0 +1,18 @@ +import React from "react"; + +export const Tagline = () => { + return ( +
+
+
+

© {new Date().getFullYear()} by Andrew Kepson

+ + XML Sitemap + + + HTML Sitemap + +
+
+ ); +}; diff --git a/src/components/layouts/Header/Brand.jsx b/src/components/layouts/Header/Brand.jsx new file mode 100644 index 0000000..f5d1b39 --- /dev/null +++ b/src/components/layouts/Header/Brand.jsx @@ -0,0 +1,11 @@ +import React from "react"; + +export const Brand = () => ( + +
+
+

AK 

+
+
+
+); diff --git a/src/components/layouts/Header/Header.astro b/src/components/layouts/Header/Header.astro new file mode 100644 index 0000000..b7d9b0a --- /dev/null +++ b/src/components/layouts/Header/Header.astro @@ -0,0 +1,5 @@ +--- +import ReactHeader from "./Header.jsx"; +--- + + diff --git a/src/components/layouts/Header/Header.jsx b/src/components/layouts/Header/Header.jsx new file mode 100644 index 0000000..9f98b15 --- /dev/null +++ b/src/components/layouts/Header/Header.jsx @@ -0,0 +1,39 @@ +import React, { Fragment } from "react"; +import { Popover, Transition } from "@headlessui/react"; + +import { Nav } from "./Nav"; +import { MobileNav } from "./MobileNav"; + +const Header = () => ( +
+ + {({ open }) => ( + <> +
+
+ + + + + + + )} +
+
+); + +export default Header; diff --git a/src/components/layouts/Header/MobileNav.jsx b/src/components/layouts/Header/MobileNav.jsx new file mode 100644 index 0000000..cb56528 --- /dev/null +++ b/src/components/layouts/Header/MobileNav.jsx @@ -0,0 +1,41 @@ +import React from "react"; +import { Popover } from "@headlessui/react"; +import { XMarkIcon } from "@heroicons/react/24/outline"; + +import { Brand } from "./Brand"; + +const navigation = [ + // { name: 'Home', to: '/' }, + { name: "About", to: "/about" }, + { name: "Headless WordPress", to: "/headless-wordpress-developer" }, + { name: "Portfolio", to: "/portfolio" }, + { name: "Blog", to: "/blog" }, + { name: "Contact", to: "/contact" }, +]; + +export const MobileNav = () => ( +
+
+ +
+ + Close main menu + +
+
+
+ {navigation.map((item) => ( + + {item.name} + + ))} +
+
+); + +export default MobileNav; diff --git a/src/components/layouts/Header/Nav.jsx b/src/components/layouts/Header/Nav.jsx new file mode 100644 index 0000000..02025a0 --- /dev/null +++ b/src/components/layouts/Header/Nav.jsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Popover } from "@headlessui/react"; +import { Bars3Icon } from "@heroicons/react/24/outline"; + +import { Brand } from "./Brand"; + +const navigation = [ + { name: "About", to: "/about/" }, + { name: "Headless WordPress", to: "/headless-wordpress-developer/" }, + { name: "Portfolio", to: "/portfolio/" }, + { name: "Blog", to: "/blog/" }, + { name: "Contact", to: "/contact/" }, +]; + +export const Nav = () => ( + +); diff --git a/src/components/layouts/Layout.astro b/src/components/layouts/Layout.astro index ce97367..74239f7 100644 --- a/src/components/layouts/Layout.astro +++ b/src/components/layouts/Layout.astro @@ -9,8 +9,8 @@ interface Props { import { isProduction, siteUrl } from "@lib/store.js"; -import Header from "@components/Header.astro"; -import Footer from "@components/Footer.astro"; +import Header from "@components/layouts/Header/Header.astro"; +import Footer from "@components/layouts/Footer/Footer.astro"; const { title, description, canonical, ogImage, noIndex } = Astro.props; --- @@ -19,9 +19,9 @@ const { title, description, canonical, ogImage, noIndex } = Astro.props; - - - + + + @@ -39,10 +39,10 @@ const { title, description, canonical, ogImage, noIndex } = Astro.props; {title} - +
-
+