diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..30bc16279 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/node_modules \ No newline at end of file diff --git a/About_me_pic.jpg b/About_me_pic.jpg new file mode 100644 index 000000000..da5b93161 Binary files /dev/null and b/About_me_pic.jpg differ diff --git a/blog.html b/blog.html new file mode 100644 index 000000000..a04a58032 --- /dev/null +++ b/blog.html @@ -0,0 +1,30 @@ + + + + + + Blog | Personal Website + + + + +
+

Blog

+
+
+ + + + + diff --git a/blogs/my-goat-groot.html b/blogs/my-goat-groot.html new file mode 100644 index 000000000..50945c375 --- /dev/null +++ b/blogs/my-goat-groot.html @@ -0,0 +1,34 @@ + + + + + + Blog Detail | Personal Website + + + + +
+
+

The Goat Groot

+

2024-10-18

+ MY GOAT +

Here is my favorite marvel Character

+
+
+ + + + + diff --git a/blogs/typescript-understanding.html b/blogs/typescript-understanding.html new file mode 100644 index 000000000..bb02c8ba3 --- /dev/null +++ b/blogs/typescript-understanding.html @@ -0,0 +1,34 @@ + + + + + + Blog Detail | Personal Website + + + + +
+
+

Understanding TypeScript

+

2024-10-20

+ groot.jpg +

Learning about TypeScript and its power T-T

+
+
+ + + + + diff --git a/bootcamp-milestone-2/.gitignore b/bootcamp-milestone-2/.gitignore new file mode 100644 index 000000000..8d313311b --- /dev/null +++ b/bootcamp-milestone-2/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# env files +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/bootcamp-milestone-2/README.md b/bootcamp-milestone-2/README.md new file mode 100644 index 000000000..e215bc4cc --- /dev/null +++ b/bootcamp-milestone-2/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/bootcamp-milestone-2/global.d.ts b/bootcamp-milestone-2/global.d.ts new file mode 100644 index 000000000..cd547cdbd --- /dev/null +++ b/bootcamp-milestone-2/global.d.ts @@ -0,0 +1,9 @@ +// global.d.ts +import mongoose from "mongoose"; + +declare global { + var mongoose: { + conn: typeof mongoose | null; + promise: Promise | null; + }; +} diff --git a/bootcamp-milestone-2/next.config.ts b/bootcamp-milestone-2/next.config.ts new file mode 100644 index 000000000..e9ffa3083 --- /dev/null +++ b/bootcamp-milestone-2/next.config.ts @@ -0,0 +1,7 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default nextConfig; diff --git a/bootcamp-milestone-2/package-lock.json b/bootcamp-milestone-2/package-lock.json new file mode 100644 index 000000000..29cf399d9 --- /dev/null +++ b/bootcamp-milestone-2/package-lock.json @@ -0,0 +1,1189 @@ +{ + "name": "bootcamp-milestone-2", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bootcamp-milestone-2", + "version": "0.1.0", + "dependencies": { + "mongoose": "^8.9.2", + "next": "15.0.3", + "react": "19.0.0-rc-66855b96-20241106", + "react-dom": "19.0.0-rc-66855b96-20241106", + "react-icons": "^5.4.0" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "typescript": "^5" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@next/env": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==", + "license": "MIT" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/node": { + "version": "20.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", + "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/bson": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.1.tgz", + "integrity": "sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001686", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", + "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "node_modules/mongodb": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.12.0.tgz", + "integrity": "sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.1", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.2.tgz", + "integrity": "sha512-mLWynmZS1v8HTeMxyLhskQncS1SkrjW1eLNuFDYGQMQ/5QrFrxTLNwWXeCRZeKT2lXyaxW8bnJC9AKPT9jYMkw==", + "license": "MIT", + "dependencies": { + "bson": "^6.10.1", + "kareem": "2.6.3", + "mongodb": "~6.12.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "license": "MIT", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "license": "MIT", + "dependencies": { + "@next/env": "15.0.3", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.13", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", + "sharp": "^0.33.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.0.0-rc-66855b96-20241106", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-66855b96-20241106.tgz", + "integrity": "sha512-klH7xkT71SxRCx4hb1hly5FJB21Hz0ACyxbXYAECEqssUjtJeFUAaI2U1DgJAzkGEnvEm3DkxuBchMC/9K4ipg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.0.0-rc-66855b96-20241106", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-66855b96-20241106.tgz", + "integrity": "sha512-D25vdaytZ1wFIRiwNU98NPQ/upS2P8Co4/oNoa02PzHbh8deWdepjm5qwZM/46OdSiGv4WSWwxP55RO9obqJEQ==", + "license": "MIT", + "dependencies": { + "scheduler": "0.25.0-rc-66855b96-20241106" + }, + "peerDependencies": { + "react": "19.0.0-rc-66855b96-20241106" + } + }, + "node_modules/react-icons": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.4.0.tgz", + "integrity": "sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/scheduler": { + "version": "0.25.0-rc-66855b96-20241106", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-66855b96-20241106.tgz", + "integrity": "sha512-HQXp/Mnp/MMRSXMQF7urNFla+gmtXW/Gr1KliuR0iboTit4KvZRY8KYaq5ccCTAOJiUqQh2rE2F3wgUekmgdlA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", + "license": "MIT" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + } + } +} diff --git a/bootcamp-milestone-2/package.json b/bootcamp-milestone-2/package.json new file mode 100644 index 000000000..6770f75b9 --- /dev/null +++ b/bootcamp-milestone-2/package.json @@ -0,0 +1,24 @@ +{ + "name": "bootcamp-milestone-2", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "mongoose": "^8.9.2", + "next": "15.0.3", + "react": "19.0.0-rc-66855b96-20241106", + "react-dom": "19.0.0-rc-66855b96-20241106", + "react-icons": "^5.4.0" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "typescript": "^5" + } +} diff --git a/bootcamp-milestone-2/public/About_me_pic.jpg b/bootcamp-milestone-2/public/About_me_pic.jpg new file mode 100644 index 000000000..da5b93161 Binary files /dev/null and b/bootcamp-milestone-2/public/About_me_pic.jpg differ diff --git a/bootcamp-milestone-2/public/H4I.jpg b/bootcamp-milestone-2/public/H4I.jpg new file mode 100644 index 000000000..58e1ed182 Binary files /dev/null and b/bootcamp-milestone-2/public/H4I.jpg differ diff --git a/bootcamp-milestone-2/public/goat.jpg b/bootcamp-milestone-2/public/goat.jpg new file mode 100644 index 000000000..aac8e7a7c Binary files /dev/null and b/bootcamp-milestone-2/public/goat.jpg differ diff --git a/bootcamp-milestone-2/public/groot.jpg b/bootcamp-milestone-2/public/groot.jpg new file mode 100644 index 000000000..ba5a4bb9a Binary files /dev/null and b/bootcamp-milestone-2/public/groot.jpg differ diff --git a/bootcamp-milestone-2/src/app/api/Blogs/[slug]/route.ts b/bootcamp-milestone-2/src/app/api/Blogs/[slug]/route.ts new file mode 100644 index 000000000..e0e237f5a --- /dev/null +++ b/bootcamp-milestone-2/src/app/api/Blogs/[slug]/route.ts @@ -0,0 +1,22 @@ +import { NextRequest, NextResponse } from "next/server"; +import connectDB from "@/database/db"; +import blogSchema from "@/database/blogSchema"; + +type IParams = { + params: { + slug: string; + }; +}; + +// If { params } looks confusing, check the note below this code block +export async function GET(req: NextRequest, { params }: IParams) { + await connectDB(); // function from db.ts before + const { slug } = params; // another destructure + + try { + const blog = await blogSchema.findOne({ slug }).orFail(); + return NextResponse.json(blog); + } catch (err) { + return NextResponse.json("Blog not found.", { status: 404 }); + } +} diff --git a/bootcamp-milestone-2/src/app/api/Blogs/nothing b/bootcamp-milestone-2/src/app/api/Blogs/nothing new file mode 100644 index 000000000..e69de29bb diff --git a/bootcamp-milestone-2/src/app/api/Projects/route.ts b/bootcamp-milestone-2/src/app/api/Projects/route.ts new file mode 100644 index 000000000..bc6b4352c --- /dev/null +++ b/bootcamp-milestone-2/src/app/api/Projects/route.ts @@ -0,0 +1,27 @@ +// app/api/Projects/route.ts +import { NextResponse } from "next/server"; +import connectDB from "@/database/db"; +import ProjectModel from "@/database/projectSchema"; + +export async function GET() { + try { + await connectDB(); + + const projects = await ProjectModel.find({}); + + if (!projects) { + return NextResponse.json( + { message: "No projects found" }, + { status: 404 } + ); + } + + return NextResponse.json(projects); + } catch (error) { + console.error("Error fetching projects:", error); + return NextResponse.json( + { message: "Internal Server Error" }, + { status: 500 } + ); + } +} diff --git a/bootcamp-milestone-2/src/app/blogData.ts b/bootcamp-milestone-2/src/app/blogData.ts new file mode 100644 index 000000000..ec9886d42 --- /dev/null +++ b/bootcamp-milestone-2/src/app/blogData.ts @@ -0,0 +1,43 @@ +import connectDB from "../database/db"; +import BlogModel from "../database/blogSchema"; + +export type Blog = { + title: string; + date: string; + description: string; + image: string; + imageAlt: string; + slug: string; +}; + +export const blogs: Blog[] = [ + { + title: "Understanding TypeScript", + date: "2024-10-20", + description: "Learning about TypeScript and its power T-T", + image: "/groot.jpg", + imageAlt: "My goat Groot", + slug: "typescript-understanding", + }, + { + title: "the-goat-groot", + date: "2024-10-18", + description: "my favoriite marvel character", + image: "/goat.jpg", + imageAlt: "another goated pic of groot", + slug: "my-goat-groot", + }, +]; + +export async function getBlogs() { + await connectDB(); + + try { + + const blogs = await BlogModel.find().sort({ date: -1 }).lean(); + return blogs; + } catch (err) { + console.error("Error fetching blogs:", err); + return null; + } +} diff --git a/bootcamp-milestone-2/src/app/components/BlogPreview.module.css b/bootcamp-milestone-2/src/app/components/BlogPreview.module.css new file mode 100644 index 000000000..a5d6eaff6 --- /dev/null +++ b/bootcamp-milestone-2/src/app/components/BlogPreview.module.css @@ -0,0 +1,57 @@ +.blogPost { + border: 1px solid #ccc; + padding: 16px; + margin-bottom: 20px; + border-radius: 8px; + background-color: rgba(249, 249, 249, 0.95); + transition: transform 0.2s ease; +} + +.blogPost:hover { + transform: translateY(-2px); +} + +.postTitle { + font-size: 1.5em; + margin-bottom: 10px; +} + +.postTitle a { + color: inherit; + text-decoration: none; +} + +.postTitle a:hover { + text-decoration: underline; +} + +.postDate { + color: #888; + font-size: 0.9em; + margin-bottom: 10px; +} + +.postImage { + max-width: 100%; + height: auto; + margin-bottom: 10px; + border-radius: 4px; +} + +.postDescription { + font-size: 1.1em; + margin-bottom: 15px; + line-height: 1.5; +} + +.readMore { + color: #007BFF; + text-decoration: none; + font-weight: bold; + transition: color 0.3s ease; +} + +.readMore:hover { + color: #0056b3; + text-decoration: underline; +} \ No newline at end of file diff --git a/bootcamp-milestone-2/src/app/components/BlogPreview.tsx b/bootcamp-milestone-2/src/app/components/BlogPreview.tsx new file mode 100644 index 000000000..a1bc16d71 --- /dev/null +++ b/bootcamp-milestone-2/src/app/components/BlogPreview.tsx @@ -0,0 +1,23 @@ +import Link from "next/link"; +import styles from "./BlogPreview.module.css"; +import { Blog } from "../blogData"; + +interface BlogPreviewProps { + blog: Blog; +} + +export default function BlogPreview({ blog }: BlogPreviewProps) { + return ( +
+

+ {blog.title} +

+

{blog.date}

+ {blog.imageAlt} +

{blog.description}

+ + Read more + +
+ ); +} diff --git a/bootcamp-milestone-2/src/app/components/navbar.module.css b/bootcamp-milestone-2/src/app/components/navbar.module.css new file mode 100644 index 000000000..b9b0a4012 --- /dev/null +++ b/bootcamp-milestone-2/src/app/components/navbar.module.css @@ -0,0 +1,56 @@ +.navbar { + position: sticky; + top: 0; + width: 100%; + height: 7%; + z-index: 10; + display: flex; + justify-content: space-between; + align-items: center; + text-align: center; + background-color: rgb(18, 30, 30); + color: rgb(255, 255, 255); + padding: 0; +} + +.navList { + display: flex; + flex-direction: row; + position: relative; + right: 30px; + list-style: none; +} + +.link { + color: rgb(255, 255, 255); + font-weight: bold; + margin: 0 12px; + text-decoration: none; + letter-spacing: 2px; + font-family: monospace; + transition: color 0.3s, background-color 0.3s; +} + +.link:hover { + color: rgb(16, 16, 28); + text-decoration: underline; +} + +.link:active { + color: rgb(16, 16, 28); +} + +.logo { + font-family: Georgia; +} + +.logo:hover { + text-decoration: none; +} + +@media (max-width: 768px) { + .navList { + flex-direction: column; + align-items: center; + } +} \ No newline at end of file diff --git a/bootcamp-milestone-2/src/app/components/navbar.tsx b/bootcamp-milestone-2/src/app/components/navbar.tsx new file mode 100644 index 000000000..b26aedb68 --- /dev/null +++ b/bootcamp-milestone-2/src/app/components/navbar.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import style from "./navbar.module.css"; +import Link from "next/link"; + +export default function Navbar() { + return ( +
+
+

Anthony's Personal Website

+
+ +
+ ); +} diff --git a/bootcamp-milestone-2/src/app/contact/contact.module.css b/bootcamp-milestone-2/src/app/contact/contact.module.css new file mode 100644 index 000000000..7dac2cfb4 --- /dev/null +++ b/bootcamp-milestone-2/src/app/contact/contact.module.css @@ -0,0 +1,70 @@ +/* src/app/contact/contact.module.css */ +.container { + padding: 2rem; + min-height: 100vh; + width: 100%; +} + +.pageTitle { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + font-size: 36px; + font-family: Georgia; + color: var(--cg-white); + margin-top: 20px; + padding-bottom: 20px; + border-bottom: 1px solid var(--cg-white); +} + +.contactForm { + max-width: 500px; + margin: 2rem auto; + padding: 50px; + background-color: #efe7e7; + border-radius: 10px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); +} + +@media (max-width: 768px) { + .contactForm { + width: 90%; + max-width: none; + } +} + +.contactForm label { + display: block; + margin-bottom: 10px; + font-family: Georgia, serif; + font-weight: bold; + font-size: 18px; +} + +.contactForm input[type="text"], +.contactForm input[type="email"], +.contactForm textarea { + width: 100%; + padding: 12px; + margin-bottom: 20px; + border: 2px solid #aca8a8; + border-radius: 5px; + font-size: 16px; + background-color: #939191; +} + +.contactForm input[type="submit"] { + background-color: var(--cg-black); + color: #050505; + border: none; + padding: 12px 20px; + font-size: 16px; + border-radius: 6px; + cursor: pointer; + transition: background-color 0.3s ease; +} + +.contactForm input[type="submit"]:hover { + background-color: var(--cg-blue); +} \ No newline at end of file diff --git a/bootcamp-milestone-2/src/app/contact/page.tsx b/bootcamp-milestone-2/src/app/contact/page.tsx new file mode 100644 index 000000000..ad3b770ad --- /dev/null +++ b/bootcamp-milestone-2/src/app/contact/page.tsx @@ -0,0 +1,27 @@ +// src/app/contact/page.tsx +import React from "react"; +import styles from "./contact.module.css"; + +export default function ContactPage() { + return ( +
+

Contact

+
+ + + + + + + + + + +
+
+ ); +} diff --git a/bootcamp-milestone-2/src/app/globals.css b/bootcamp-milestone-2/src/app/globals.css new file mode 100644 index 000000000..ed986cec5 --- /dev/null +++ b/bootcamp-milestone-2/src/app/globals.css @@ -0,0 +1,25 @@ +:root { + --black: rgb(18, 30, 30); + --blue: rgb(16, 16, 28); + --grey: rgb(57, 52, 52); + --white: rgb(255, 255, 255); +} + +html { + height: 100%; + scroll-behavior: smooth; +} + +* { + box-sizing: border-box; +} + +body { + display: flex; + flex-direction: column; + min-height: 100vh; + background: var(--grey); + padding: 0; + margin: 0; + font-family: monospace; +} diff --git a/bootcamp-milestone-2/src/app/layout.tsx b/bootcamp-milestone-2/src/app/layout.tsx new file mode 100644 index 000000000..bed4fc012 --- /dev/null +++ b/bootcamp-milestone-2/src/app/layout.tsx @@ -0,0 +1,21 @@ +import React from "react"; +import Navbar from "./components/navbar"; +import { Inter } from "next/font/google"; +import "./globals.css"; + +const inter = Inter({ subsets: ["latin"] }); + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + {children} + + + ); +} diff --git a/bootcamp-milestone-2/src/app/page.module.css b/bootcamp-milestone-2/src/app/page.module.css new file mode 100644 index 000000000..48a68514c --- /dev/null +++ b/bootcamp-milestone-2/src/app/page.module.css @@ -0,0 +1,111 @@ +.main { + position: relative; + z-index: 1; + flex: 1; + padding: 0 20px 40px 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.about { + position: relative; + z-index: 1; + background-color: rgba(248, 248, 248, 0.95); + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px; + background-color: #f8f8f8; + border: 1px solid #ccc; + border-radius: 5px; + flex-direction: row-reverse; + max-width: 1200px; + width: 100%; +} + +.aboutImage img { + display: block; + margin: 20px auto; + max-width: 350px; + height: auto; + border-radius: 5px; +} + +.aboutText { + flex: 1; + margin-right: 20px; + font-size: 16px; + line-height: 1.5; +} + +.aboutText p { + margin-bottom: 20px; +} + +.pageTitle { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + font-size: 36px; + font-family: Georgia; + color: var(--white); + margin-top: 20px; + padding-bottom: 20px; + border-bottom: 1px solid var(--white); +} + +.socialIcons { + margin-top: 20px; + z-index: 2; + text-align: center; +} + +.socialIcons a { + margin: 0 10px; + font-size: 24px; + color: rgb(18, 30, 30); + text-decoration: none; + display: inline-block; + transition: color 0.3s; +} + +.socialIcons a:hover { + color: rgb(16, 16, 28); +} + +@media (max-width: 768px) { + .about { + flex-direction: column; + text-align: center; + } + + .aboutText { + margin-right: 0; + margin-bottom: 20px; + } +} + +.blogSection { + width: 100%; + max-width: 1200px; + margin: 2rem auto; +} + +.blogSection h2 { + color: var(--white); + font-size: 2rem; + margin-bottom: 1.5rem; + text-align: center; +} + +.blogGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; + padding: 1rem; +} \ No newline at end of file diff --git a/bootcamp-milestone-2/src/app/page.tsx b/bootcamp-milestone-2/src/app/page.tsx new file mode 100644 index 000000000..65da1cd7b --- /dev/null +++ b/bootcamp-milestone-2/src/app/page.tsx @@ -0,0 +1,67 @@ +import BlogPreview from "./components/BlogPreview"; +import { blogs } from "./blogData"; +import { FaEnvelope, FaLinkedin, FaGithub } from "react-icons/fa"; +import styles from "./page.module.css"; + +export default function HomePage() { + return ( +
+

About Me

+
+
+ Anthony Mendoza profile image +
+
+

+ I'm Anthony Mendoza, a passionate Computer Science major at + California Polytechnic State University, San Luis Obispo, set to + graduate in June 2026. With hands-on experience in software + development through personal projects, I enjoy tackling complex + problems, whether it's developing efficient algorithms or building + innovative systems. I have a strong foundation in Python, and web + development, and I'm always eager to learn new technologies. My goal + is to continue growing as a developer while contributing to + impactful projects that improve user experiences and solve + real-world challenges. +

+ + +
+
+ +
+

Latest Blog Posts

+
+ {blogs.map((blog) => ( + + ))} +
+
+
+ ); +} diff --git a/bootcamp-milestone-2/src/app/portfolio/page.tsx b/bootcamp-milestone-2/src/app/portfolio/page.tsx new file mode 100644 index 000000000..3e3e4085a --- /dev/null +++ b/bootcamp-milestone-2/src/app/portfolio/page.tsx @@ -0,0 +1,89 @@ +"use client"; +import { ProjectType } from "@/database/projectSchema"; +import React, { useEffect, useState } from "react"; +import Image from "next/image" + +interface Project { + title: string; + description: string; + image: string; + liveDemo?: string; + repository?: string; +} + + + +export default function PortfolioPage() { + const [projects, setProjects] = useState([]); + + useEffect(() => { + async function fetchProjects() { + try { + const res = await fetch("/api/Projects"); + if (!res.ok) { + throw new Error("Could not fetch projects"); + } + const data = await res.json(); + setProjects(data); + } catch (err) { + console.log(err); + } + } + + fetchProjects(); + }, []); + + if (!projects || projects.length === 0) { + return ( +
+

Portfolio

+

No projects found. Please check back later!

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

My Portfolio

+
+ {projects.map((project: Project) => ( +
+

{project.title}

+ {project.title} +

{project.description}

+
+ {project.liveDemo && ( + + Live Demo + + )} + {project.repository && ( + + Code Repository + + )} +
+
+ ))} +
+
+ ); +} diff --git a/bootcamp-milestone-2/src/app/portfolio/portfolio.module.css b/bootcamp-milestone-2/src/app/portfolio/portfolio.module.css new file mode 100644 index 000000000..1f739ac56 --- /dev/null +++ b/bootcamp-milestone-2/src/app/portfolio/portfolio.module.css @@ -0,0 +1,39 @@ +.container { + padding: 20px; + text-align: center; +} + +.grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 20px; + margin-top: 20px; +} + +.card { + border: 1px solid #ddd; + border-radius: 8px; + padding: 16px; + text-align: left; + background-color: #d6d1d1; + transition: box-shadow 0.3s ease; +} + +.card:hover { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); +} + +.links { + margin-top: 10px; +} + +.links a { + margin-right: 10px; + color: #0070f3; + text-decoration: none; + font-weight: bold; +} + +.links a:hover { + text-decoration: underline; +} diff --git a/bootcamp-milestone-2/src/app/resume/page.module.css b/bootcamp-milestone-2/src/app/resume/page.module.css new file mode 100644 index 000000000..d7a76bcf9 --- /dev/null +++ b/bootcamp-milestone-2/src/app/resume/page.module.css @@ -0,0 +1,88 @@ +.pageTitle { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + font-size: 36px; + font-family: Georgia; + color: var(--white); + margin-top: 20px; + padding-bottom: 20px; + border-bottom: 1px solid var(--white); +} + +.pageTitle h1 { + margin-bottom: 10px; +} + +.pageTitle p { + font-size: 18px; + font-family: monospace; + margin-top: 0; +} + +.pageTitle a { + color: var(--white); + text-decoration: none; +} + +.pageTitle a:hover { + text-decoration: underline; +} + +.resume { + width: 80%; + margin: 0 auto; + color: var(--white); + font-family: monospace; + line-height: 1.6; +} + +.section { + margin-bottom: 30px; +} + +.sectionTitle { + font-size: 28px; + margin-bottom: 10px; + color: var(--white); + font-family: Georgia; + padding-bottom: 5px; + position: relative; +} + +.sectionTitle::after { + content: ""; + display: block; + width: 100%; + height: 2px; + background-color: var(--white); + position: absolute; + left: 0; + bottom: -5px; +} + +.resume p { + margin-bottom: 15px; +} + +.resume ul { + margin: 0; + padding-left: 20px; + list-style: disc; +} + +.resume ul ul { + list-style: circle; +} + +.resume li { + margin-bottom: 10px; +} + + +@media (max-width: 768px) { + .resume { + width: 90%; + } +} \ No newline at end of file diff --git a/bootcamp-milestone-2/src/app/resume/page.tsx b/bootcamp-milestone-2/src/app/resume/page.tsx new file mode 100644 index 000000000..ba5552cc0 --- /dev/null +++ b/bootcamp-milestone-2/src/app/resume/page.tsx @@ -0,0 +1,149 @@ +import styles from "./page.module.css"; + +export default function ResumePage() { + return ( + <> +
+
+

Anthony Mendoza

+

+ | (510)660-2461 |{" "} + + anthonymendoza321123@gmail.com + {" "} + |{" "} + + LinkedIn + {" "} + |{" "} + + GitHub + {" "} + | +

+
+ +
+
+

Education

+

+ California Polytechnic State University – San + Luis Obispo, CA +
+ Bachelor of Arts in Computer Science, June 2026 +

+
+ +
+

Experience

+

+ Mobile Technologies Inc. – Richmond, CA +
+ June 2024 – Present +

+
    +
  • + Provided technical support and troubleshooting, ensuring high + availability and reliability of MTI's products and services, + leading to improved service delivery and customer satisfaction. +
  • +
+
+ +
+

Projects

+
    +
  • + Inter-Process Communication and Echo Server | + Vim, C, UNIX, SSH, Git – March 2024 +
      +
    • + Developed a Unix-based application utilizing pipes and child + processes for inter-process communication (IPC) between + client and server. +
    • +
    • + Gained experience with system calls, low-level programming, + and resource management in the UNIX environment. +
    • +
    +
  • +
  • + Java Virtual Model Modding | Java, JUnit, + PImage – September 2023 +
      +
    • + Developed an efficient A* pathfinding algorithm to enhance + the movement and navigation of in-game entities. +
    • +
    • + Designed and introduced new characters, objects, and + environments to enrich gameplay. +
    • +
    +
  • +
  • + Weather Monitoring System | Python, Zapier, + Adafruit IO – June 2024 +
      +
    • + Integrated with Zapier to automate daily weather + notifications, using sensor data for personalized forecasts. +
    • +
    • + Leveraged Adafruit IO and weather APIs for real-time + environmental monitoring and data reporting. +
    • +
    +
  • +
+
+ +
+

Involvement

+
    +
  • + + Society of Hispanic Professional Engineers (SHPE Member) + + – Focused on leadership, outreach, and community engagement. +
  • +
  • + ColorCoded by ColorStack (Member) – Provided + mentorship and networking opportunities for underrepresented + students in tech. +
  • +
  • + HyperSpeed (Software Developer Team Member) – + Programmed a drone using ArduPilot to enhance sensor control and + mobility. +
  • +
+
+ +
+

Technical Skills

+

+ Languages: Java, Python, C, HTML/CSS, Assembly +

+

+ Frameworks: ArduPilot, Unity, React, Pytest, + JUnit +

+

+ Developer Tools: Git, VS Code, PyCharm, IntelliJ +

+
+
+
+ + ); +} diff --git a/bootcamp-milestone-2/src/database/blogSchema.ts b/bootcamp-milestone-2/src/database/blogSchema.ts new file mode 100644 index 000000000..92fbfeab8 --- /dev/null +++ b/bootcamp-milestone-2/src/database/blogSchema.ts @@ -0,0 +1,23 @@ +import mongoose, { Schema, Model } from "mongoose"; + +export type Blog = { + title: string; + date: string; + description: string; + image: string; + imageAlt: string; + slug: string; +} + +const BlogSchema = new Schema({ + title: { type: String, required: true }, + date: { type: String, required: true }, + description: { type: String, required: true }, + image: { type: String, required: true }, + imageAlt: { type: String, required: true }, + slug: { type: String, required: true, unique: true }, +}); + +const Blog = mongoose.models['blogs'] || mongoose.model("blogs", BlogSchema); + +export default Blog; diff --git a/bootcamp-milestone-2/src/database/db.ts b/bootcamp-milestone-2/src/database/db.ts new file mode 100644 index 000000000..bef79752e --- /dev/null +++ b/bootcamp-milestone-2/src/database/db.ts @@ -0,0 +1,19 @@ +// db.ts +import mongoose from "mongoose"; + +const url: string = process.env.MONGO_URI as string; +let connection: typeof mongoose; + +/** + * Makes a connection to a MongoDB database. If a connection already exists, does nothing + * Call this function at the start of api routes and data fetches + * @returns {Promise} + */ +const connectDB = async () => { + if (!connection) { + connection = await mongoose.connect(url); + return connection; + } +}; + +export default connectDB; diff --git a/bootcamp-milestone-2/src/database/projectSchema.ts b/bootcamp-milestone-2/src/database/projectSchema.ts new file mode 100644 index 000000000..09e9aad16 --- /dev/null +++ b/bootcamp-milestone-2/src/database/projectSchema.ts @@ -0,0 +1,20 @@ +import mongoose, { Schema, Model } from "mongoose"; + +export type ProjectType = { + title: string; + description: string; + image: string; + repository?: string; +}; + +const projectSchema = new Schema({ + title: { type: String, required: true }, + description: { type: String, required: true }, + image: { type: String, required: true }, + repository: { type: String }, +}); + +const ProjectModel = + mongoose.models["Projects"] || mongoose.model("Projects", projectSchema); + +export default ProjectModel; diff --git a/bootcamp-milestone-2/tsconfig.json b/bootcamp-milestone-2/tsconfig.json new file mode 100644 index 000000000..c1334095f --- /dev/null +++ b/bootcamp-milestone-2/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/contact.html b/contact.html new file mode 100644 index 000000000..da01ed90e --- /dev/null +++ b/contact.html @@ -0,0 +1,119 @@ + + + + + + Personal Website | Contact + + + +
+ +
+

Contact

+

Feel free to get in touch using the form below:

+ + +
+ + + + + + + + + + +
+
+ +
+ © 2024 My Personal Website | All Rights Reserved | +
+ + + + + + diff --git a/goat.jpg b/goat.jpg new file mode 100644 index 000000000..aac8e7a7c Binary files /dev/null and b/goat.jpg differ diff --git a/groot.jpg b/groot.jpg new file mode 100644 index 000000000..ba5a4bb9a Binary files /dev/null and b/groot.jpg differ diff --git a/index.html b/index.html new file mode 100644 index 000000000..c1757b176 --- /dev/null +++ b/index.html @@ -0,0 +1,142 @@ + + + + + + Personal Website + + + + + +
+ +
+

About Me

+
+
+ Anthony Mendoza profile image +
+
+

+ I’m Anthony Mendoza, a passionate Computer Science major at + California Polytechnic State University, San Luis Obispo, set to + graduate in June 2026. With hands-on experience in software + development through personal projects, I enjoy tackling complex + problems, whether it's developing efficient algorithms or building + innovative systems. I have a strong foundation in Python, and web + development, and I'm always eager to learn new technologies. My goal + is to continue growing as a developer while contributing to + impactful projects that improve user experiences and solve + real-world challenges. +

+ + + +
+
+
+
+ © 2024 My Personal Website | All Rights Reserved | +
+ + + + diff --git a/portfolio.html b/portfolio.html new file mode 100644 index 000000000..a7bae02e3 --- /dev/null +++ b/portfolio.html @@ -0,0 +1,76 @@ + + + Portfolio | Personal Website + + + + + +
+
+

Portfolio

+
+ +
+
+ +
+ + +
+

Portfolio Under Construction...

+

Come back Another time!

+
+
+ +
+ © 2024 My Personal Website | All Rights Reserved | +
+ + + + + diff --git a/resume.html b/resume.html new file mode 100644 index 000000000..6dcdae90b --- /dev/null +++ b/resume.html @@ -0,0 +1,216 @@ + + + Anthony Mendoza | Resume + + + +
+ + +
+
+

Anthony Mendoza

+

+ | (510)660-2461 | + anthonymendoza321123@gmail.com + | + LinkedIn + | + GitHub +

+
+ +
+
+

Education

+

+ California Polytechnic State University – San Luis + Obispo, CA
Bachelor of Arts in Computer Science, June 2026 +

+
+ +
+

Experience

+

+ Mobile Technologies Inc. – Richmond, CA
June + 2024 – Present +

+
    +
  • + Provided technical support and troubleshooting, ensuring high + availability and reliability of MTI's products and services, + leading to improved service delivery and customer satisfaction. +
  • +
+
+ +
+

Projects

+
    +
  • + Inter-Process Communication and Echo Server | + Vim, C, UNIX, SSH, Git – March 2024 +
  • +
      +
    • + Developed a Unix-based application utilizing pipes and child + processes for inter-process communication (IPC) between client + and server. +
    • +
    • + Gained experience with system calls, low-level programming, and + resource management in the UNIX environment. +
    • +
    +
  • + Java Virtual Model Modding | Java, JUnit, PImage + – September 2023 +
  • +
      +
    • + Developed an efficient A* pathfinding algorithm to enhance the + movement and navigation of in-game entities. +
    • +
    • + Designed and introduced new characters, objects, and + environments to enrich gameplay. +
    • +
    +
  • + Weather Monitoring System | Python, Zapier, + Adafruit IO – June 2024 +
  • +
      +
    • + Integrated with Zapier to automate daily weather notifications, + using sensor data for personalized forecasts. +
    • +
    • + Leveraged Adafruit IO and weather APIs for real-time + environmental monitoring and data reporting. +
    • +
    +
+
+ +
+

Involvement

+
    +
  • + Society of Hispanic Professional Engineers (SHPE + Member) + – Focused on leadership, outreach, and community engagement. +
  • +
  • + ColorCoded by ColorStack (Member) – Provided + mentorship and networking opportunities for underrepresented + students in tech. +
  • +
  • + HyperSpeed (Software Developer Team Member) – + Programmed a drone using ArduPilot to enhance sensor control and + mobility. +
  • +
+
+ +
+

Technical Skills

+

Languages: Java, Python, C, HTML/CSS, Assembly

+

+ Frameworks: ArduPilot, Unity, React, Pytest, JUnit +

+

+ Developer Tools: Git, VS Code, PyCharm, IntelliJ +

+
+
+
+ +
© 2024 Anthony Mendoza | All Rights Reserved
+ + + + diff --git a/src/blog.js b/src/blog.js new file mode 100644 index 000000000..3bccbfd7b --- /dev/null +++ b/src/blog.js @@ -0,0 +1,33 @@ +// Example blog data +var blogs = [ + { + title: "Understanding TypeScript", + date: "2024-10-20", + description: "Learning about TypeScript and its power T-T", + image: "groot.jpg", + imageAlt: "My goat Groot", + slug: "typescript-understanding", + }, + { + title: "the-goat-groot", + date: "2024-10-18", + description: "my favoriite marvel character", + image: "goat.jpg", + imageAlt: "another goated pic of groot", + slug: "my-goat-groot", + }, +]; +function displayBlogs(blogPosts) { + var blogContainer = document.getElementById("blog-posts-container"); + if (!blogContainer) { + console.error("Blog container not found."); + return; + } + blogPosts.forEach(function (blog) { + var blogElement = document.createElement("article"); + blogElement.classList.add("blog-post"); + blogElement.innerHTML = "\n

").concat(blog.title, "

\n

").concat(blog.date, "

\n \"").concat(blog.imageAlt,\n

").concat(blog.description, "

\n
Read more\n "); + blogContainer.appendChild(blogElement); + }); +} +displayBlogs(blogs); diff --git a/src/blog.ts b/src/blog.ts new file mode 100644 index 000000000..5393f6289 --- /dev/null +++ b/src/blog.ts @@ -0,0 +1,55 @@ +// Blog type definition +type Blog = { + title: string; + date: string; + description: string; + image: string; + imageAlt: string; + slug: string; +}; + +// Example blog data +const blogs: Blog[] = [ + { + title: "Understanding TypeScript", + date: "2024-10-20", + description: "Learning about TypeScript and its power T-T", + image: "groot.jpg", + imageAlt: "My goat Groot", + slug: "typescript-understanding", + }, + { + title: "the-goat-groot", + date: "2024-10-18", + description: "my favoriite marvel character", + image: "goat.jpg", + imageAlt: "another goated pic of groot", + slug: "my-goat-groot", + }, +]; + +function displayBlogs(blogPosts: Blog[]) { + const blogContainer = document.getElementById("blog-posts-container"); + + if (!blogContainer) { + console.error("Blog container not found."); + return; + } + + blogPosts.forEach((blog) => { + const blogElement = document.createElement("article"); + blogElement.classList.add("blog-post"); + + blogElement.innerHTML = ` +

${blog.title}

+ + ${blog.imageAlt} +

${blog.description}

+
Read more + `; + + blogContainer.appendChild(blogElement); + }); +} + +displayBlogs(blogs); diff --git a/styles.css b/styles.css new file mode 100644 index 000000000..dc7faaae0 --- /dev/null +++ b/styles.css @@ -0,0 +1,406 @@ +:root { + /* variables */ + --cg-black: rgb(18, 30, 30); + --cg-blue: rgb(16, 16, 28); + --cg-grey: rgb(99, 97, 97); + --cg-white: rgb(255, 255, 255); +} + +html { + height: 100%; + scroll-behavior: smooth; +} + +* { + box-sizing: border-box; /* Added for better layout handling */ +} + +body { + display: flex; + flex-direction: column; + min-height: 100vh; /* Ensures body takes full viewport height */ + background: var(--cg-grey); + padding: 0; + margin: 0; + font-family: monospace; +} + +main { + flex: 1; /* Makes the main content grow and push the footer down if necessary */ + padding: 0 20px 40px 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +/* CSS for the 'About Me' section */ +.about { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px; + background-color: #f8f8f8; + border: 1px solid #ccc; + border-radius: 5px; + flex-direction: row-reverse; /* Keeps the image on the right */ +} + +.about-image img { + display: block; + margin: 20px auto; + max-width: 350px; /* Make the image smaller */ + height: auto; + border-radius: 5px; +} + +.about-text { + flex: 1; + margin-right: 20px; + font-size: 16px; + line-height: 1.5; +} +.about-text p { + margin-bottom: 20px; /* Ensure enough space below the paragraph */ +} + +.social-icons { + margin-top: 20px; + z-index: 2; /* Ensures icons are above background elements */ + text-align: center; /* Centers the icons horizontally */ +} + +.social-icons a { + margin: 0 10px; + font-size: 24px; + color: var(--cg-black); /* Icon color */ + text-decoration: none; + display: inline-block; /* Ensures icons are displayed properly */ + transition: color 0.3s; +} + +.social-icons a:hover { + color: var(--cg-blue); /* Change color on hover */ +} + +@media (max-width: 768px) { + .about { + flex-direction: column; /* Stack text and image vertically on smaller screens */ + text-align: center; + } + .about-text { + margin-right: 0; + margin-bottom: 20px; /* Add space below text */ + } +} + +/* CSS for navigation */ +.navbar { + position: sticky; + top: 0; + width: 100%; + height: 7%; + z-index: 10; + display: flex; + justify-content: space-between; + align-items: center; + text-align: center; + background-color: var(--cg-black); + color: var(--cg-white); + padding: 0; +} + +.nav-list { + display: flex; + flex-direction: row; + position: relative; + right: 30px; + list-style: none; +} + +@media (max-width: 768px) { + .nav-list { + flex-direction: column; /* Stack nav items vertically on smaller screens */ + align-items: center; + } +} + +.navbar a { + color: var(--cg-white); + font-weight: bold; + margin: 0 12px; + text-decoration: none; + letter-spacing: 2px; + font-family: monospace; + transition: color 0.3s, background-color 0.3s; /* Added smooth transition */ +} + +.navbar a:hover { + color: var(--cg-blue); + text-decoration: underline; +} + +.navbar a:active { + color: var(--cg-blue); +} + +.logo a { + font-family: Georgia; +} + +.logo a:hover { + text-decoration: none; +} + +/* Centering title and moving contact info below */ +.page-title { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + font-size: 36px; + font-family: Georgia; + color: var(--cg-white); + margin-top: 20px; + padding-bottom: 20px; + border-bottom: 1px solid var(--cg-white); +} + +.page-title h1 { + margin-bottom: 10px; +} + +.page-title p { + font-size: 18px; + font-family: monospace; + margin-top: 0; +} + +.page-title a { + color: var(--cg-blue); + text-decoration: none; +} + +.page-title a:hover { + text-decoration: underline; +} + +/* Resume Container */ +.resume { + width: 80%; + margin: 0 auto; + color: var(--cg-white); + font-family: monospace; + line-height: 1.6; +} + +/* Section Titles with lines */ +.resume .section-title { + font-size: 28px; + margin-bottom: 10px; + color: var(--cg-white); + font-family: Georgia; + padding-bottom: 5px; + position: relative; +} + +.resume .section-title::after { + content: ""; + display: block; + width: 100%; + height: 2px; + background-color: var(--cg-white); + position: absolute; + left: 0; + bottom: -5px; /* Space between title and line */ +} + +.resume p { + margin-bottom: 15px; +} + +.resume ul { + margin: 0; + padding-left: 20px; + list-style: disc; +} + +.resume ul ul { + list-style: circle; +} + +.resume li { + margin-bottom: 10px; +} + +/* CSS for button */ +.button { + background-color: var(--cg-black); + border: none; + color: var(--cg-white); + font-family: monospace; + padding: 5px 7px; + text-align: center; + border-radius: 2px; + transition: background-color 0.3s ease; /* Added transition */ +} + +.button:hover { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + background-color: var(--cg-blue); +} + +/* CONTACT Form Styling */ +#contact-form { + max-width: 500px; + margin: 0 auto; /* Center form horizontally */ + padding: 50px; /* Add padding for inner space */ + background-color: #efe7e7; + border-radius: 10px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); /* Add some shadow for depth */ +} + +@media (max-width: 768px) { + #contact-form { + width: 90%; /* The form takes 90% of the viewport width on small screens */ + max-width: none; /* Remove max-width to let it adjust naturally */ + } +} + +/* Adjust labels and inputs */ +#contact-form label { + display: block; + margin-bottom: 10px; + font-family: Georgia, serif; + font-weight: bold; + font-size: 18px; +} + +#contact-form input[type="text"], +#contact-form input[type="email"], +#contact-form textarea { + width: 100%; + padding: 12px; + margin-bottom: 20px; /* Increase margin for spacing between fields */ + border: 2px solid #ccc; + border-radius: 5px; + font-size: 16px; + background-color: #f0f0f0; /* Light background for input fields */ +} + +/* Submit Button Styling */ +#contact-form input[type="submit"] { + background-color: var(--cg-black); + color: #ffffff; + border: none; + padding: 12px 20px; + font-size: 16px; + border-radius: 6px; + cursor: pointer; + transition: background-color 0.3s ease; +} + +#contact-form input[type="submit"]:hover { + background-color: var(--cg-blue); /* Hover effect for button */ +} + +/* CSS for Particles.js background */ +#particles-js { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: -1; /* Make sure particles stay behind the content */ + background-color: #2b2b2b; /* Fallback background color */ +} + +/* Cube container styling */ +.cube-container { + display: flex; + justify-content: center; + align-items: center; + height: 400px; /* Adjust height as needed */ + margin-top: 20px; +} + +/* Ensures the Three.js canvas is sized properly */ +#cube-canvas canvas { + width: 300px; /* Set width for the cube rendering */ + height: 300px; /* Set height for the cube rendering */ +} + +/* Under construction message styling */ +.construction-message { + text-align: center; + margin-top: 20px; +} + +.construction-message h2 { + font-size: 24px; + color: var(--cg-white); + margin-bottom: 10px; +} + +.construction-message p { + font-size: 18px; + color: #ffffff; +} +/*blog post styling :) */ +.blog-post { + border: 1px solid #ccc; + padding: 16px; + margin-bottom: 20px; + border-radius: 8px; + background-color: #f9f9f9; +} + +.post-title { + font-size: 1.5em; + margin-bottom: 10px; +} + +.post-date { + color: #888; + font-size: 0.9em; +} + +.post-image { + max-width: 100%; + height: auto; + margin-bottom: 10px; +} + +.post-description { + font-size: 1.1em; + margin-bottom: 15px; +} + +.read-more { + color: #007BFF; + text-decoration: none; + font-weight: bold; +} + + +/* CSS for footer */ +.footer { + display: flex; + justify-content: center; + align-items: center; + background-color: var(--cg-black); + color: var(--cg-white); + padding: 10px 0; + width: 100%; + height: 50px; + position: relative; + font-family: monospace; +} + +@media (max-width: 768px) { + .footer { + flex-direction: column; /* Stack footer content vertically */ + text-align: center; + height: auto; /* Allow the footer to adjust its height */ + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..56a8ab810 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,110 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}