diff --git a/package-lock.json b/package-lock.json index b5a1c009..42b1f247 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,14 +15,14 @@ "@fortawesome/free-brands-svg-icons": "^6.2.1", "@fortawesome/free-regular-svg-icons": "^6.2.1", "@fortawesome/free-solid-svg-icons": "^6.2.1", - "@fortawesome/react-fontawesome": "^0.2.0", + "@fortawesome/react-fontawesome": "^3.1.1", "@headlessui/react": "^1.7.2", "@mapbox/rehype-prism": "^0.8.0", "@mdx-js/loader": "^2.3.0", "@mdx-js/react": "^2.3.0", "@mui/icons-material": "^6.4.1", "@mui/material": "^6.4.1", - "@next/mdx": "^13.5.6", + "@next/mdx": "^14.1.3", "@tailwindcss/typography": "^0.5.4", "@types/mdx": "^2.0.11", "autoprefixer": "^10.4.12", @@ -31,12 +31,13 @@ "fast-glob": "^3.2.11", "feed": "^4.2.2", "focus-visible": "^5.2.0", - "framer-motion": "^12.0.6", + "framer-motion": "^12.30.0", "next": "^14.1.3", "postcss-focus-visible": "^6.0.4", "react": "^18.2.0", "react-chartjs-2": "^5.3.0", "react-dom": "^18.2.0", + "react-markdown": "^8.0.7", "remark-gfm": "^3.0.1", "tailwindcss": "^3.2.1" }, @@ -431,15 +432,16 @@ } }, "node_modules/@fortawesome/react-fontawesome": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", - "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", - "dependencies": { - "prop-types": "^15.8.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.1.1.tgz", + "integrity": "sha512-EDllr9hpodc21odmUywHS1alXNiCd4E8sp5GJ5s7wYINz8vSmMiNWpALTiuYODb865YyQ/NlyiN4mbXp7HCNqg==", + "license": "MIT", + "engines": { + "node": ">=20" }, "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "react": ">=16.3" + "@fortawesome/fontawesome-svg-core": "~6 || ~7", + "react": "^18.0.0 || ^19.0.0" } }, "node_modules/@headlessui/react": { @@ -1060,9 +1062,10 @@ } }, "node_modules/@next/mdx": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-13.5.6.tgz", - "integrity": "sha512-2AMyCrz1SxSWNUpADyLz3RbPbq0GHrchbO7Msvg7IsH8MrTw3VYaZSI1KNa6JzZIoykwtNVSEL+uBmPZi106Jw==", + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-14.1.3.tgz", + "integrity": "sha512-KrfpZ1Iz9SCIW8Qu3uWCIkVUGgIjiPRlxKksr8IgKKlMUEV9D88JNkS1MUfgSdbVgKLED3mPnLoO0gzoQz1yDw==", + "license": "MIT", "dependencies": { "source-map": "^0.7.0" }, @@ -2444,9 +2447,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "version": "1.0.30001767", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz", + "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==", "funding": [ { "type": "opencollective", @@ -4225,13 +4228,13 @@ } }, "node_modules/framer-motion": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.0.6.tgz", - "integrity": "sha512-LmrXbXF6Vv5WCNmb+O/zn891VPZrH7XbsZgRLBROw6kFiP+iTK49gxTv2Ur3F0Tbw6+sy9BVtSqnWfMUpH+6nA==", + "version": "12.30.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.30.0.tgz", + "integrity": "sha512-S7t3UjvghrFiJzFJ30ncX6keUipexw9f7DRpauhW9bXPNxg0dMxoPbNIDpLuxK1NvxF2wswFEMEm7WiNAcdELg==", "license": "MIT", "dependencies": { - "motion-dom": "^12.0.0", - "motion-utils": "^12.0.0", + "motion-dom": "^12.30.0", + "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { @@ -6312,9 +6315,10 @@ } }, "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6349,10 +6353,12 @@ } }, "node_modules/mdast-util-find-and-replace": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", - "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", + "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", + "license": "MIT", "dependencies": { + "@types/mdast": "^3.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.0.0" @@ -6366,6 +6372,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -6397,9 +6404,10 @@ } }, "node_modules/mdast-util-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", - "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", + "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", + "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^1.0.0", "mdast-util-gfm-autolink-literal": "^1.0.0", @@ -6415,9 +6423,10 @@ } }, "node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", - "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "ccount": "^2.0.0", @@ -6430,9 +6439,10 @@ } }, "node_modules/mdast-util-gfm-footnote": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", - "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", + "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-markdown": "^1.3.0", @@ -6444,9 +6454,10 @@ } }, "node_modules/mdast-util-gfm-strikethrough": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.2.tgz", - "integrity": "sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", + "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-markdown": "^1.3.0" @@ -6457,9 +6468,10 @@ } }, "node_modules/mdast-util-gfm-table": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz", - "integrity": "sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", + "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "markdown-table": "^3.0.0", @@ -6472,9 +6484,10 @@ } }, "node_modules/mdast-util-gfm-task-list-item": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", - "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", + "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-markdown": "^1.3.0" @@ -6799,9 +6812,10 @@ } }, "node_modules/micromark-extension-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", - "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", + "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", + "license": "MIT", "dependencies": { "micromark-extension-gfm-autolink-literal": "^1.0.0", "micromark-extension-gfm-footnote": "^1.0.0", @@ -6818,15 +6832,15 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", + "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", + "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-sanitize-uri": "^1.0.0", "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", @@ -6834,9 +6848,10 @@ } }, "node_modules/micromark-extension-gfm-footnote": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", - "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", + "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", + "license": "MIT", "dependencies": { "micromark-core-commonmark": "^1.0.0", "micromark-factory-space": "^1.0.0", @@ -6853,9 +6868,10 @@ } }, "node_modules/micromark-extension-gfm-strikethrough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", - "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", + "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", + "license": "MIT", "dependencies": { "micromark-util-chunked": "^1.0.0", "micromark-util-classify-character": "^1.0.0", @@ -6870,9 +6886,10 @@ } }, "node_modules/micromark-extension-gfm-table": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", - "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", + "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", + "license": "MIT", "dependencies": { "micromark-factory-space": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -6886,9 +6903,10 @@ } }, "node_modules/micromark-extension-gfm-tagfilter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", - "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", + "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", + "license": "MIT", "dependencies": { "micromark-util-types": "^1.0.0" }, @@ -6898,9 +6916,10 @@ } }, "node_modules/micromark-extension-gfm-task-list-item": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", - "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", + "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", + "license": "MIT", "dependencies": { "micromark-factory-space": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -7497,18 +7516,18 @@ } }, "node_modules/motion-dom": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.0.0.tgz", - "integrity": "sha512-CvYd15OeIR6kHgMdonCc1ihsaUG4MYh/wrkz8gZ3hBX/uamyZCXN9S9qJoYF03GqfTt7thTV/dxnHYX4+55vDg==", + "version": "12.30.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.30.0.tgz", + "integrity": "sha512-p6Mp+lxm+mK4O86YVyL6KAlFDVCIqpmcBt+uMVapMBqltPXpwZ5Wj2crnN2VE7lwsas0ONCPIW9YVpMigu4F5g==", "license": "MIT", "dependencies": { - "motion-utils": "^12.0.0" + "motion-utils": "^12.29.2" } }, "node_modules/motion-utils": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.0.0.tgz", - "integrity": "sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA==", + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", + "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", "license": "MIT" }, "node_modules/mri": { @@ -8623,6 +8642,58 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-markdown": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", + "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/prop-types": "^15.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "prop-types": "^15.0.0", + "property-information": "^6.0.0", + "react-is": "^18.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/react-markdown/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-markdown/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -8763,6 +8834,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-gfm": "^2.0.0", diff --git a/package.json b/package.json index 95f375b5..f1199c0a 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "disable-telemetry": "npx next telemetry disable" }, "author": "AOSSIE", "license": "ISC", @@ -18,14 +19,14 @@ "@fortawesome/free-brands-svg-icons": "^6.2.1", "@fortawesome/free-regular-svg-icons": "^6.2.1", "@fortawesome/free-solid-svg-icons": "^6.2.1", - "@fortawesome/react-fontawesome": "^0.2.0", + "@fortawesome/react-fontawesome": "^3.1.1", "@headlessui/react": "^1.7.2", "@mapbox/rehype-prism": "^0.8.0", "@mdx-js/loader": "^2.3.0", "@mdx-js/react": "^2.3.0", "@mui/icons-material": "^6.4.1", "@mui/material": "^6.4.1", - "@next/mdx": "^13.5.6", + "@next/mdx": "^14.1.3", "@tailwindcss/typography": "^0.5.4", "@types/mdx": "^2.0.11", "autoprefixer": "^10.4.12", @@ -34,12 +35,13 @@ "fast-glob": "^3.2.11", "feed": "^4.2.2", "focus-visible": "^5.2.0", - "framer-motion": "^12.0.6", + "framer-motion": "^12.30.0", "next": "^14.1.3", "postcss-focus-visible": "^6.0.4", "react": "^18.2.0", "react-chartjs-2": "^5.3.0", "react-dom": "^18.2.0", + "react-markdown": "^8.0.7", "remark-gfm": "^3.0.1", "tailwindcss": "^3.2.1" }, diff --git a/src/app/about/page.jsx b/src/app/about/page.jsx new file mode 100644 index 00000000..b1991bcd --- /dev/null +++ b/src/app/about/page.jsx @@ -0,0 +1,186 @@ +'use client' + +import { useState, useEffect } from 'react'; +import Image from 'next/image'; +import { Container } from '@/components/shared/Container'; +import { Banner } from '@/components/shared/Banner'; +import { Timeline } from '@/components/about/Timeline'; +import { Team } from '@/components/about/Team'; +import React from 'react'; +import { Line } from 'react-chartjs-2'; +import { Chart as ChartJS, LineElement, CategoryScale, LinearScale, PointElement } from 'chart.js'; +import { motion } from 'framer-motion'; + +ChartJS.register(LineElement, CategoryScale, LinearScale, PointElement); + +export default function About() { + const [stats, setStats] = useState({ + years: 8, + projects: 80, + contributors: 70, + graphData: { + labels: ['2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024'], + data: [4, 8, 12, 9, 9, 11, 8, 6, 18] + } + }); + + // Detect dark mode preference on page load and fetch stats + useEffect(() => { + const fetchStats = async () => { + try { + const res = await fetch('/api/stats'); + const data = await res.json(); + if (!data.error) { + setStats(data); + } + } catch (error) { + console.error('Failed to fetch stats:', error); + } + }; + + fetchStats(); + }, []); + + const data = { + labels: stats.graphData.labels, // Include '0' on the x-axis + datasets: [ + { + label: 'Number of Repositories', + data: stats.graphData.data, // Start data points from '2017', leave '0' as null + fill: false, + borderColor: '#32a852', + tension: 0.4, + }, + ], + }; + + const options = { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + display: false, + }, + }, + scales: { + x: { + type: 'category', + grid: { + display: true, + color: '#FFCC00', + }, + ticks: { + callback: (value, index) => data.labels[index], // Match x-axis labels + }, + }, + y: { + beginAtZero: true, // Start y-axis from 0 + ticks: { + stepSize: 5, // Increment y-axis labels by 5 + }, + grid: { + display: true, + color: '#FFCC00', + }, + }, + }, + }; + + return ( + <> + +
+
+ + ABOUT US + + + AOSSIE (Australian Open + Source Software Innovation and Education) is a not-for-profit + umbrella organization for open-source projects. We believe the + open-source philosophy provides a resource-efficient channel to + transfer knowledge and achieve innovation and education. + +
+ +
+ + + + + + {/* Stats Cards */} + {[ + { value: stats.years, label: 'years completed' }, + { value: stats.projects, label: 'projects completed' }, + { value: `${stats.contributors}+`, label: 'contributors' } + ].map((item, index) => ( + +
{item.value}
+
{item.label}
+
+ ))} +
+
+
+ + + + + + + + +
+ + ); +} diff --git a/src/app/api/stats/route.js b/src/app/api/stats/route.js new file mode 100644 index 00000000..a0fd1693 --- /dev/null +++ b/src/app/api/stats/route.js @@ -0,0 +1,94 @@ +import { NextResponse } from 'next/server'; +import projects from '@/helper/projects'; + +export async function GET() { + try { + const startYear = 2016; + const currentYear = new Date().getFullYear(); + const yearsOfAossie = currentYear - startYear; + + // Count projects from the helper file as requested + const completedProjectsCount = projects.length; + + // Fetch GitHub Data + // Note: Unauthenticated requests are limited to 60 per hour per IP. + const org = 'AOSSIE-Org'; + const headers = { + 'Accept': 'application/vnd.github.v3+json', + // Add 'Authorization': `token ${process.env.GITHUB_TOKEN}` if you have one + }; + + // 1. Fetch Repositories + const reposRes = await fetch(`https://api.github.com/orgs/${org}/repos?per_page=100&type=public`, { headers, next: { revalidate: 3600 } }); + + if (!reposRes.ok) { + throw new Error(`GitHub API Error: ${reposRes.statusText}`); + } + + const repos = await reposRes.json(); + + // 2. Process for Graph (Repos per year) + // The user wants "Number of repos in (green) over the past years". + // We will group by 'created_at'. + const repoCountsByYear = {}; + const yearsSet = new Set(); + + // Initialize years from startYear to currentYear to ensure continuous axis + for (let y = startYear; y <= currentYear; y++) { + repoCountsByYear[y] = 0; + yearsSet.add(y); + } + + repos.forEach(repo => { + const year = new Date(repo.created_at).getFullYear(); + if (year >= startYear) { + repoCountsByYear[year] = (repoCountsByYear[year] || 0) + 1; + } + }); + + const labels = Object.keys(repoCountsByYear).sort((a, b) => parseInt(a) - parseInt(b)); + const data = labels.map(year => repoCountsByYear[year]); + + + // 3. Count Contributors + // Fetching contributors for ALL repos consumes too much rate limit (N requests). + // We will proactively fetch contributors for the top 6 most starred/popular repos to get a good estimate. + // Sorting repos by stargazers_count + const topRepos = repos.sort((a, b) => b.stargazers_count - a.stargazers_count).slice(0, 6); + + const contributorIds = new Set(); + + const contributorPromises = topRepos.map(async (repo) => { + try { + const contribRes = await fetch(repo.contributors_url + '?per_page=100', { headers, next: { revalidate: 3600 } }); + if (contribRes.ok) { + const contributors = await contribRes.json(); + if (Array.isArray(contributors)) { + contributors.forEach(c => contributorIds.add(c.id)); + } + } + } catch (e) { + console.error(`Failed to fetch contributors for ${repo.name}`, e); + } + }); + + await Promise.all(contributorPromises); + + // Fallback if APIs fail or return 0 (which is unlikely for top repos) + const contributorCount = contributorIds.size > 0 ? contributorIds.size : 70; + + return NextResponse.json({ + years: yearsOfAossie, + projects: completedProjectsCount, + contributors: contributorCount, + graphData: { + labels, + data + } + }); + + } catch (error) { + console.error('API Error:', error); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/src/app/apply/page.jsx b/src/app/apply/page.jsx new file mode 100644 index 00000000..f7cd4fb2 --- /dev/null +++ b/src/app/apply/page.jsx @@ -0,0 +1,56 @@ +import Image from 'next/image' +import Link from 'next/link' + +import { Container } from '@/components/shared/Container' +import { TimelineElement } from '@/components/about/TimelineElement' +import { ApplyHeader } from '@/components/apply/ApplyHeader' +import GSoC from '@/images/logo.svg' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { faDiscord, faGitlab } from '@fortawesome/free-brands-svg-icons' +import { faLightbulb, faComments, faPaperPlane } from '@fortawesome/free-solid-svg-icons' + +export const metadata = { + title: 'Application Timeline', + description: 'How to apply for GSOC', +} + +export default function Apply() { + return ( + <> + +
    + + + + + +
+
+ + ) +} diff --git a/src/pages/ideas/2022/agora-blockchain.mdx b/src/app/ideas/2022/agora-blockchain/page.mdx similarity index 93% rename from src/pages/ideas/2022/agora-blockchain.mdx rename to src/app/ideas/2022/agora-blockchain/page.mdx index a5b20d9e..9a941c1e 100644 --- a/src/pages/ideas/2022/agora-blockchain.mdx +++ b/src/app/ideas/2022/agora-blockchain/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Blockchain', @@ -6,7 +6,7 @@ export const meta = { 'First version of Blockchain based Agora web application, with basic features like user registration, election creation, voting and result calculation.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2022/agora-vote-android.mdx b/src/app/ideas/2022/agora-vote-android/page.mdx similarity index 86% rename from src/pages/ideas/2022/agora-vote-android.mdx rename to src/app/ideas/2022/agora-vote-android/page.mdx index 1eeb54d7..a821c06f 100644 --- a/src/pages/ideas/2022/agora-vote-android.mdx +++ b/src/app/ideas/2022/agora-vote-android/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Vote Android', @@ -6,7 +6,7 @@ export const meta = { 'Agora Vote App is an Android application that lets user create elections, invite voters, vote and view results ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2022/agora-vote-ios.mdx b/src/app/ideas/2022/agora-vote-ios/page.mdx similarity index 84% rename from src/pages/ideas/2022/agora-vote-ios.mdx rename to src/app/ideas/2022/agora-vote-ios/page.mdx index a714e108..455ae093 100644 --- a/src/pages/ideas/2022/agora-vote-ios.mdx +++ b/src/app/ideas/2022/agora-vote-ios/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Vote IOS', @@ -6,7 +6,7 @@ export const meta = { 'Agora Vote App is an IOS application that lets user create elections, invite voters, vote and view results ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2022/aossie-scholar.mdx b/src/app/ideas/2022/aossie-scholar/page.mdx similarity index 89% rename from src/pages/ideas/2022/aossie-scholar.mdx rename to src/app/ideas/2022/aossie-scholar/page.mdx index 090ca1bd..f15d4558 100644 --- a/src/pages/ideas/2022/aossie-scholar.mdx +++ b/src/app/ideas/2022/aossie-scholar/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Aossie Scholar', @@ -6,7 +6,7 @@ export const meta = { 'AOSSIE Scholar is a Chrome extension that calculates performance-based metrics for researchers from Google Scholar profiles ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2022/monumento.mdx b/src/app/ideas/2022/monumento/page.mdx similarity index 84% rename from src/pages/ideas/2022/monumento.mdx rename to src/app/ideas/2022/monumento/page.mdx index 4b2c831d..58eb4e36 100644 --- a/src/pages/ideas/2022/monumento.mdx +++ b/src/app/ideas/2022/monumento/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Monumento', @@ -6,7 +6,7 @@ export const meta = { 'Monumento is a social media for sharing landmarks, visited places and visualizing their 3D models right from a mobile device ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2022/p2p-messaging-flutter.mdx b/src/app/ideas/2022/p2p-messaging-flutter/page.mdx similarity index 92% rename from src/pages/ideas/2022/p2p-messaging-flutter.mdx rename to src/app/ideas/2022/p2p-messaging-flutter/page.mdx index 249ed2aa..3038d235 100644 --- a/src/pages/ideas/2022/p2p-messaging-flutter.mdx +++ b/src/app/ideas/2022/p2p-messaging-flutter/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'P2P Messaging- Flutter', @@ -6,7 +6,7 @@ export const meta = { 'Chat application for Android and IOS in flutter/dart which sends messages Using Bluetooth & wifi-direct ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2022/social-street-smart-large.mdx b/src/app/ideas/2022/social-street-smart-large/page.mdx similarity index 90% rename from src/pages/ideas/2022/social-street-smart-large.mdx rename to src/app/ideas/2022/social-street-smart-large/page.mdx index 628b325d..5cf8512b 100644 --- a/src/pages/ideas/2022/social-street-smart-large.mdx +++ b/src/app/ideas/2022/social-street-smart-large/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Social Street Smart: Large', @@ -6,7 +6,7 @@ export const meta = { 'With the adevent of Internet, the problems faced by the people have also grown. These include abusive languages.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2022/social-street-smart-medium.mdx b/src/app/ideas/2022/social-street-smart-medium/page.mdx similarity index 90% rename from src/pages/ideas/2022/social-street-smart-medium.mdx rename to src/app/ideas/2022/social-street-smart-medium/page.mdx index f6a8e9f4..7247f691 100644 --- a/src/pages/ideas/2022/social-street-smart-medium.mdx +++ b/src/app/ideas/2022/social-street-smart-medium/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Social Street Smart: Medium', @@ -6,7 +6,7 @@ export const meta = { 'With the adevent of Internet, the problems faced by the people have also grown. These include abusive languages.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/agora-blockchain.mdx b/src/app/ideas/2023/agora-blockchain/page.mdx similarity index 76% rename from src/pages/ideas/2024/agora-blockchain.mdx rename to src/app/ideas/2023/agora-blockchain/page.mdx index 7265a082..df179a40 100644 --- a/src/pages/ideas/2024/agora-blockchain.mdx +++ b/src/app/ideas/2023/agora-blockchain/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Blockchain', @@ -6,7 +6,7 @@ export const meta = { 'First version of Blockchain based Agora web application, with basic features like user registration, election creation, voting and result calculation.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/agora-vote-android.mdx b/src/app/ideas/2023/agora-vote-android/page.mdx similarity index 86% rename from src/pages/ideas/2024/agora-vote-android.mdx rename to src/app/ideas/2023/agora-vote-android/page.mdx index 1aea92ac..5a691451 100644 --- a/src/pages/ideas/2024/agora-vote-android.mdx +++ b/src/app/ideas/2023/agora-vote-android/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Vote Android', @@ -6,7 +6,7 @@ export const meta = { 'This application uses Agora Web API as backend application. It allows for elections to be held by using multiple algorithms such as Oklahoma, RangeVoting, RankedPairs, Satisfaction Approval Voting.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2023/agora-vote-ios.mdx b/src/app/ideas/2023/agora-vote-ios/page.mdx similarity index 81% rename from src/pages/ideas/2023/agora-vote-ios.mdx rename to src/app/ideas/2023/agora-vote-ios/page.mdx index ff23032e..1311179a 100644 --- a/src/pages/ideas/2023/agora-vote-ios.mdx +++ b/src/app/ideas/2023/agora-vote-ios/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Vote IOS', @@ -6,7 +6,7 @@ export const meta = { 'Agora Vote App is an IOS application that lets user create elections, invite voters, vote and view results ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2023/eduAid.mdx b/src/app/ideas/2023/eduAid/page.mdx similarity index 82% rename from src/pages/ideas/2023/eduAid.mdx rename to src/app/ideas/2023/eduAid/page.mdx index fea4b46f..216eadde 100644 --- a/src/pages/ideas/2023/eduAid.mdx +++ b/src/app/ideas/2023/eduAid/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'EduAid', @@ -6,7 +6,7 @@ export const meta = { 'A tool that can auto-generate short quizzes on the basis of the content provided.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2023/monumento-iPad.mdx b/src/app/ideas/2023/monumento-iPad/page.mdx similarity index 73% rename from src/pages/ideas/2023/monumento-iPad.mdx rename to src/app/ideas/2023/monumento-iPad/page.mdx index 1693445a..be4b2b58 100644 --- a/src/pages/ideas/2023/monumento-iPad.mdx +++ b/src/app/ideas/2023/monumento-iPad/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Monumento-iPad', @@ -6,7 +6,7 @@ export const meta = { 'Monumento is a social media for sharing landmarks, visited places and visualizing their 3D models right from a mobile device ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/monumento.mdx b/src/app/ideas/2023/monumento/page.mdx similarity index 81% rename from src/pages/ideas/2024/monumento.mdx rename to src/app/ideas/2023/monumento/page.mdx index 7e1d9249..65c4958a 100644 --- a/src/pages/ideas/2024/monumento.mdx +++ b/src/app/ideas/2023/monumento/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Monumento', @@ -6,7 +6,7 @@ export const meta = { 'Monumento is a social media for sharing landmarks, visited places and visualizing their 3D models right from a mobile device ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2023/openChat.mdx b/src/app/ideas/2023/openChat/page.mdx similarity index 70% rename from src/pages/ideas/2023/openChat.mdx rename to src/app/ideas/2023/openChat/page.mdx index 3309b9ac..bd8d76b6 100644 --- a/src/pages/ideas/2023/openChat.mdx +++ b/src/app/ideas/2023/openChat/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'OpenChat', @@ -6,7 +6,7 @@ export const meta = { 'a decentralised platform for secure and private messaging and file sharing built on top of blockchain', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2023/p2p-messaging-flutter.mdx b/src/app/ideas/2023/p2p-messaging-flutter/page.mdx similarity index 92% rename from src/pages/ideas/2023/p2p-messaging-flutter.mdx rename to src/app/ideas/2023/p2p-messaging-flutter/page.mdx index 7705f604..cedd50a5 100644 --- a/src/pages/ideas/2023/p2p-messaging-flutter.mdx +++ b/src/app/ideas/2023/p2p-messaging-flutter/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'P2P Messaging- Flutter', @@ -6,7 +6,7 @@ export const meta = { 'Chat application for Android and IOS in flutter/dart which sends messages Using Bluetooth & wifi-direct ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2023/resonate.mdx b/src/app/ideas/2023/resonate/page.mdx similarity index 76% rename from src/pages/ideas/2023/resonate.mdx rename to src/app/ideas/2023/resonate/page.mdx index c9e2f3f4..39f20f98 100644 --- a/src/pages/ideas/2023/resonate.mdx +++ b/src/app/ideas/2023/resonate/page.mdx @@ -1,11 +1,11 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Resonate', description: 'a social voice platform', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2023/social-street-smart-large.mdx b/src/app/ideas/2023/social-street-smart-large/page.mdx similarity index 91% rename from src/pages/ideas/2023/social-street-smart-large.mdx rename to src/app/ideas/2023/social-street-smart-large/page.mdx index 9fbe271e..a32b71fc 100644 --- a/src/pages/ideas/2023/social-street-smart-large.mdx +++ b/src/app/ideas/2023/social-street-smart-large/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Social Street Smart: Large', @@ -6,7 +6,7 @@ export const meta = { 'With the adevent of Internet, the problems faced by the people have also grown. These include abusive languages.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2023/social-street-smart-medium.mdx b/src/app/ideas/2023/social-street-smart-medium/page.mdx similarity index 90% rename from src/pages/ideas/2023/social-street-smart-medium.mdx rename to src/app/ideas/2023/social-street-smart-medium/page.mdx index f09877ba..06e8911f 100644 --- a/src/pages/ideas/2023/social-street-smart-medium.mdx +++ b/src/app/ideas/2023/social-street-smart-medium/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Social Street Smart: Medium', @@ -6,7 +6,7 @@ export const meta = { 'With the adevent of Internet, the problems faced by the people have also grown. These include abusive languages.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/Pictopy.mdx b/src/app/ideas/2024/Pictopy/page.mdx similarity index 89% rename from src/pages/ideas/2024/Pictopy.mdx rename to src/app/ideas/2024/Pictopy/page.mdx index d323613b..bb77dec8 100644 --- a/src/pages/ideas/2024/Pictopy.mdx +++ b/src/app/ideas/2024/Pictopy/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'PictoPy', @@ -6,7 +6,7 @@ export const meta = { 'PictoPy is a privacy focused desktop app designed to transform the handling of digital photos', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2024/agora-api.mdx b/src/app/ideas/2024/agora-api/page.mdx similarity index 88% rename from src/pages/ideas/2024/agora-api.mdx rename to src/app/ideas/2024/agora-api/page.mdx index 42ae20c2..76fc19bf 100644 --- a/src/pages/ideas/2024/agora-api.mdx +++ b/src/app/ideas/2024/agora-api/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Vote API V2', @@ -6,7 +6,7 @@ export const meta = { 'Agora API is a vote counting API written using Scala 2 and Play Framework.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2023/agora-blockchain.mdx b/src/app/ideas/2024/agora-blockchain/page.mdx similarity index 76% rename from src/pages/ideas/2023/agora-blockchain.mdx rename to src/app/ideas/2024/agora-blockchain/page.mdx index 7265a082..df179a40 100644 --- a/src/pages/ideas/2023/agora-blockchain.mdx +++ b/src/app/ideas/2024/agora-blockchain/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Blockchain', @@ -6,7 +6,7 @@ export const meta = { 'First version of Blockchain based Agora web application, with basic features like user registration, election creation, voting and result calculation.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/agora-library.mdx b/src/app/ideas/2024/agora-library/page.mdx similarity index 89% rename from src/pages/ideas/2024/agora-library.mdx rename to src/app/ideas/2024/agora-library/page.mdx index 61ed3050..7d1e5d63 100644 --- a/src/pages/ideas/2024/agora-library.mdx +++ b/src/app/ideas/2024/agora-library/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Library', @@ -6,7 +6,7 @@ export const meta = { 'Agora is a high performance vote counting library written in Scala.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2023/agora-vote-android.mdx b/src/app/ideas/2024/agora-vote-android/page.mdx similarity index 86% rename from src/pages/ideas/2023/agora-vote-android.mdx rename to src/app/ideas/2024/agora-vote-android/page.mdx index 1aea92ac..5a691451 100644 --- a/src/pages/ideas/2023/agora-vote-android.mdx +++ b/src/app/ideas/2024/agora-vote-android/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Vote Android', @@ -6,7 +6,7 @@ export const meta = { 'This application uses Agora Web API as backend application. It allows for elections to be held by using multiple algorithms such as Oklahoma, RangeVoting, RankedPairs, Satisfaction Approval Voting.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/agora-vote-ios.mdx b/src/app/ideas/2024/agora-vote-ios/page.mdx similarity index 81% rename from src/pages/ideas/2024/agora-vote-ios.mdx rename to src/app/ideas/2024/agora-vote-ios/page.mdx index ff23032e..1311179a 100644 --- a/src/pages/ideas/2024/agora-vote-ios.mdx +++ b/src/app/ideas/2024/agora-vote-ios/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Vote IOS', @@ -6,7 +6,7 @@ export const meta = { 'Agora Vote App is an IOS application that lets user create elections, invite voters, vote and view results ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2024/djed.mdx b/src/app/ideas/2024/djed/page.mdx similarity index 86% rename from src/pages/ideas/2024/djed.mdx rename to src/app/ideas/2024/djed/page.mdx index 49172bbd..37e0ea94 100644 --- a/src/pages/ideas/2024/djed.mdx +++ b/src/app/ideas/2024/djed/page.mdx @@ -1,11 +1,11 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Djed for EVM Blockchains', description: 'A Formally Verified Crypto-Backed Stablecoin', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2024/eduAid.mdx b/src/app/ideas/2024/eduAid/page.mdx similarity index 86% rename from src/pages/ideas/2024/eduAid.mdx rename to src/app/ideas/2024/eduAid/page.mdx index 0eed514f..26eb6ebd 100644 --- a/src/pages/ideas/2024/eduAid.mdx +++ b/src/app/ideas/2024/eduAid/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'EduAid', @@ -6,7 +6,7 @@ export const meta = { 'A tool that can auto-generate short quizzes on the basis of the content provided.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2024/monumento-iPad.mdx b/src/app/ideas/2024/monumento-iPad/page.mdx similarity index 80% rename from src/pages/ideas/2024/monumento-iPad.mdx rename to src/app/ideas/2024/monumento-iPad/page.mdx index 33779d64..892921c5 100644 --- a/src/pages/ideas/2024/monumento-iPad.mdx +++ b/src/app/ideas/2024/monumento-iPad/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Monumento-iPad', @@ -6,7 +6,7 @@ export const meta = { 'Monumento is a social media for sharing landmarks, visited places and visualizing their 3D models right from a mobile device ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2023/monumento.mdx b/src/app/ideas/2024/monumento/page.mdx similarity index 81% rename from src/pages/ideas/2023/monumento.mdx rename to src/app/ideas/2024/monumento/page.mdx index 7e1d9249..65c4958a 100644 --- a/src/pages/ideas/2023/monumento.mdx +++ b/src/app/ideas/2024/monumento/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Monumento', @@ -6,7 +6,7 @@ export const meta = { 'Monumento is a social media for sharing landmarks, visited places and visualizing their 3D models right from a mobile device ...', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/resonate-ios.mdx b/src/app/ideas/2024/resonate-ios/page.mdx similarity index 84% rename from src/pages/ideas/2024/resonate-ios.mdx rename to src/app/ideas/2024/resonate-ios/page.mdx index e828fc49..74ac49f0 100644 --- a/src/pages/ideas/2024/resonate-ios.mdx +++ b/src/app/ideas/2024/resonate-ios/page.mdx @@ -1,11 +1,11 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Resonate iOS', description: 'An open source social voice platform', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 90 hrs diff --git a/src/pages/ideas/2024/resonate-ui.mdx b/src/app/ideas/2024/resonate-ui/page.mdx similarity index 84% rename from src/pages/ideas/2024/resonate-ui.mdx rename to src/app/ideas/2024/resonate-ui/page.mdx index 9cb0f8bf..bd26dbb2 100644 --- a/src/pages/ideas/2024/resonate-ui.mdx +++ b/src/app/ideas/2024/resonate-ui/page.mdx @@ -1,11 +1,11 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Resonate UI', description: 'An open source social voice platform', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/resonate.mdx b/src/app/ideas/2024/resonate/page.mdx similarity index 84% rename from src/pages/ideas/2024/resonate.mdx rename to src/app/ideas/2024/resonate/page.mdx index 17039f1e..1369bb3c 100644 --- a/src/pages/ideas/2024/resonate.mdx +++ b/src/app/ideas/2024/resonate/page.mdx @@ -1,11 +1,11 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Resonate App', description: 'An open source social voice platform', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2024/slagora.mdx b/src/app/ideas/2024/slagora/page.mdx similarity index 88% rename from src/pages/ideas/2024/slagora.mdx rename to src/app/ideas/2024/slagora/page.mdx index 3ef81f86..063902d9 100644 --- a/src/pages/ideas/2024/slagora.mdx +++ b/src/app/ideas/2024/slagora/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Slagora', @@ -6,7 +6,7 @@ export const meta = { 'Slagora is a Slack based voting application powered by Agora. It enables organizations within Slack to carry out Polls and Elections.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 175 hrs diff --git a/src/pages/ideas/2024/social-street-smart.mdx b/src/app/ideas/2024/social-street-smart/page.mdx similarity index 91% rename from src/pages/ideas/2024/social-street-smart.mdx rename to src/app/ideas/2024/social-street-smart/page.mdx index 3302f085..8f406858 100644 --- a/src/pages/ideas/2024/social-street-smart.mdx +++ b/src/app/ideas/2024/social-street-smart/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Social Street Smart', @@ -6,7 +6,7 @@ export const meta = { 'With the adevent of Internet, the problems faced by the people have also grown. These include abusive languages.', } -export default (props) => +export default ({ children }) => {children} ### Project Duration: 350 hrs diff --git a/src/pages/ideas/2025/agora-blockchain.mdx b/src/app/ideas/2025/agora-blockchain/page.mdx similarity index 93% rename from src/pages/ideas/2025/agora-blockchain.mdx rename to src/app/ideas/2025/agora-blockchain/page.mdx index c8007404..ff95c147 100644 --- a/src/pages/ideas/2025/agora-blockchain.mdx +++ b/src/app/ideas/2025/agora-blockchain/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Agora Blockchain', @@ -6,7 +6,7 @@ export const meta = { 'A decentralized voting platform enabling fair, transparent, and efficient elections using blockchain technology.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Medium diff --git a/src/pages/ideas/2025/babynest.mdx b/src/app/ideas/2025/babynest/page.mdx similarity index 92% rename from src/pages/ideas/2025/babynest.mdx rename to src/app/ideas/2025/babynest/page.mdx index 5d30fce2..5a472806 100644 --- a/src/pages/ideas/2025/babynest.mdx +++ b/src/app/ideas/2025/babynest/page.mdx @@ -1,11 +1,11 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'BabyNest', description: 'An AI-Powered Open-Source Pregnancy Care Assistant designed to help expecting parents stay informed, organized, and stress-free by tracking essential medical appointments and tests.' } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/debate-ai.mdx b/src/app/ideas/2025/debate-ai/page.mdx similarity index 92% rename from src/pages/ideas/2025/debate-ai.mdx rename to src/app/ideas/2025/debate-ai/page.mdx index 830fea3b..8adad2a9 100644 --- a/src/pages/ideas/2025/debate-ai.mdx +++ b/src/app/ideas/2025/debate-ai/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'DebateAI', @@ -6,7 +6,7 @@ export const meta = { 'An AI-enhanced debate platform that helps users improve communication skills through real-time debates.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/devr-ai.mdx b/src/app/ideas/2025/devr-ai/page.mdx similarity index 91% rename from src/pages/ideas/2025/devr-ai.mdx rename to src/app/ideas/2025/devr-ai/page.mdx index 7073d27f..1cb01102 100644 --- a/src/pages/ideas/2025/devr-ai.mdx +++ b/src/app/ideas/2025/devr-ai/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Devr.AI', @@ -6,7 +6,7 @@ export const meta = { 'An AI-powered DevRel assistant that enhances community engagement, simplifies contributor onboarding, and automates common DevRel tasks.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/docPilot.mdx b/src/app/ideas/2025/docPilot/page.mdx similarity index 91% rename from src/pages/ideas/2025/docPilot.mdx rename to src/app/ideas/2025/docPilot/page.mdx index 6530e99d..f0b76cff 100644 --- a/src/pages/ideas/2025/docPilot.mdx +++ b/src/app/ideas/2025/docPilot/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'DocPilot', @@ -6,7 +6,7 @@ export const meta = { 'A new age EMR application using conversational AI at its best.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/eduaid.mdx b/src/app/ideas/2025/eduaid/page.mdx similarity index 91% rename from src/pages/ideas/2025/eduaid.mdx rename to src/app/ideas/2025/eduaid/page.mdx index 1c075fdf..b1411002 100644 --- a/src/pages/ideas/2025/eduaid.mdx +++ b/src/app/ideas/2025/eduaid/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'EduAid', @@ -6,7 +6,7 @@ export const meta = { 'EduAid is an AI-driven tool designed to enhance online learning by generating quizzes from educational content, helping students improve retention and engagement.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Medium diff --git a/src/pages/ideas/2025/ell-ena.mdx b/src/app/ideas/2025/ell-ena/page.mdx similarity index 90% rename from src/pages/ideas/2025/ell-ena.mdx rename to src/app/ideas/2025/ell-ena/page.mdx index a3c1e0bc..4e1c3ffa 100644 --- a/src/pages/ideas/2025/ell-ena.mdx +++ b/src/app/ideas/2025/ell-ena/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Ell-ena', @@ -6,7 +6,7 @@ export const meta = { 'An AI-powered product manager that creates tasks, transcribes meetings, and maintains work context.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/inpact.mdx b/src/app/ideas/2025/inpact/page.mdx similarity index 92% rename from src/pages/ideas/2025/inpact.mdx rename to src/app/ideas/2025/inpact/page.mdx index 06e944f5..4e8b7a98 100644 --- a/src/pages/ideas/2025/inpact.mdx +++ b/src/app/ideas/2025/inpact/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Inpact', @@ -6,7 +6,7 @@ export const meta = { 'An open-source AI platform for creator collaboration and matchmaking sponsorships.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/monumento.mdx b/src/app/ideas/2025/monumento/page.mdx similarity index 92% rename from src/pages/ideas/2025/monumento.mdx rename to src/app/ideas/2025/monumento/page.mdx index dc8c55f0..44010dd1 100644 --- a/src/pages/ideas/2025/monumento.mdx +++ b/src/app/ideas/2025/monumento/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Monumento', @@ -6,7 +6,7 @@ export const meta = { 'An AR-integrated social app that transforms how you connect with the world\'s most iconic landmarks', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/neurotrack.mdx b/src/app/ideas/2025/neurotrack/page.mdx similarity index 91% rename from src/pages/ideas/2025/neurotrack.mdx rename to src/app/ideas/2025/neurotrack/page.mdx index 89d88248..27f0a619 100644 --- a/src/pages/ideas/2025/neurotrack.mdx +++ b/src/app/ideas/2025/neurotrack/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Neurotrack', @@ -6,7 +6,7 @@ export const meta = { 'An AI-powered platform for detecting, assessing, and managing neurodevelopmental conditions like Autism and ADHD in schools and therapy centers.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Medium diff --git a/src/pages/ideas/2025/perspective.mdx b/src/app/ideas/2025/perspective/page.mdx similarity index 94% rename from src/pages/ideas/2025/perspective.mdx rename to src/app/ideas/2025/perspective/page.mdx index 4e30ff04..a00cd6d4 100644 --- a/src/pages/ideas/2025/perspective.mdx +++ b/src/app/ideas/2025/perspective/page.mdx @@ -1,11 +1,11 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Perspective', description: 'An GenAI-Powered Open-Source Opposing Perspective companion which breaks the confirmation bias and today\'s news echo chamber where any wrong perspective can spread like fire.' } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/pictopy.mdx b/src/app/ideas/2025/pictopy/page.mdx similarity index 93% rename from src/pages/ideas/2025/pictopy.mdx rename to src/app/ideas/2025/pictopy/page.mdx index 5e45a20e..1ccfced5 100644 --- a/src/pages/ideas/2025/pictopy.mdx +++ b/src/app/ideas/2025/pictopy/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Pictopy', @@ -6,7 +6,7 @@ export const meta = { 'Reworking the frontend and enhancing the backend of Pictopy for better performance and ease of contribution.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Large diff --git a/src/pages/ideas/2025/resoante.mdx b/src/app/ideas/2025/resoante/page.mdx similarity index 92% rename from src/pages/ideas/2025/resoante.mdx rename to src/app/ideas/2025/resoante/page.mdx index c46e9190..0b484454 100644 --- a/src/pages/ideas/2025/resoante.mdx +++ b/src/app/ideas/2025/resoante/page.mdx @@ -1,4 +1,4 @@ -import { IdeaLayout } from '@/components/IdeaLayout' +import { IdeaLayout } from '@/components/ideas/IdeaLayout' export const meta = { title: 'Resonate', @@ -6,7 +6,7 @@ export const meta = { 'An open-source social voice platform for immersive stories, live discussions, and real-time audio communication.', } -export default (props) => +export default ({ children }) => {children} ### Project Type: Medium diff --git a/src/app/ideas/[year]/page.jsx b/src/app/ideas/[year]/page.jsx new file mode 100644 index 00000000..64dcef60 --- /dev/null +++ b/src/app/ideas/[year]/page.jsx @@ -0,0 +1,50 @@ +import { getIdeas } from '@/lib/ideas' +import { IdeasList } from '@/components/ideas/IdeasList' +import { Container } from '@/components/shared/Container' + +export async function generateMetadata({ params }) { + return { + title: `Idea List ${params.year}`, + description: `Idea List for GSOC ${params.year}`, + } +} + +export async function generateStaticParams() { + // Define the years we support + return [ + { year: '2022' }, + { year: '2023' }, + { year: '2024' }, + { year: '2025' }, + ] +} + +export default async function YearIdeasPage({ params }) { + const { year } = params + const articles = await getIdeas(year) + + if (!articles) { + return ( + +

Ideas not found for {year}

+
+ ) + } + + return ( + +
+

+ AOSSIE's{' '} + Idea List for{' '} + Google Summer of Code {year} +

+
+ +
+ +
+
+
+ ) +} diff --git a/src/app/ideas/page.jsx b/src/app/ideas/page.jsx new file mode 100644 index 00000000..cec71881 --- /dev/null +++ b/src/app/ideas/page.jsx @@ -0,0 +1,38 @@ +import { getIdeas } from '@/lib/ideas' +import { IdeasDisplay } from '@/components/ideas/IdeasDisplay' +import { IdeasHeader } from '@/components/ideas/IdeasHeader' +import Link from 'next/link' +import path from 'path' +import fs from 'fs' + +export const metadata = { + title: 'Idea List', + description: 'Idea List for GSOC', +} + +export default async function IdeasPage() { + const ideasDir = path.join(process.cwd(), 'src/app/ideas') + + // Get all year directories + const years = fs.readdirSync(ideasDir) + .filter(file => /^\d{4}$/.test(file) && fs.statSync(path.join(ideasDir, file)).isDirectory()) + // Sort descending (2025, 2024, ...) + .sort((a, b) => b.localeCompare(a)) + + // Fetch ideas for all years + const ideasQueries = years.map(async (year) => { + const articles = await getIdeas(year) + return { year, articles } + }) + + const ideasData = await Promise.all(ideasQueries) + + // Filter out years that might be empty + const validIdeasData = ideasData.filter(data => data.articles.length > 0) + + return ( + + + + ) +} diff --git a/src/pages/_document.jsx b/src/app/layout.jsx similarity index 62% rename from src/pages/_document.jsx rename to src/app/layout.jsx index 754c67ef..fb8211f3 100644 --- a/src/pages/_document.jsx +++ b/src/app/layout.jsx @@ -1,4 +1,7 @@ -import { Head, Html, Main, NextScript } from 'next/document' +import '@/style/tailwind.css' +import 'focus-visible' +import { Header } from '@/components/shared/Header' +import { Footer } from '@/components/shared/Footer' const modeScript = ` let darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)') @@ -35,10 +38,15 @@ const modeScript = ` } ` -export default function Document() { +export const metadata = { + title: 'AOSSIE', + description: 'AOSSIE Website', +} + +export default function RootLayout({ children }) { return ( - - + +