diff --git a/LocalMind-Frontend/package-lock.json b/LocalMind-Frontend/package-lock.json index 8ed7bd2..796c87c 100644 --- a/LocalMind-Frontend/package-lock.json +++ b/LocalMind-Frontend/package-lock.json @@ -62,6 +62,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1205,6 +1206,7 @@ "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1215,6 +1217,7 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1274,6 +1277,7 @@ "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.51.0", "@typescript-eslint/types": "8.51.0", @@ -1525,6 +1529,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1639,6 +1644,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1853,6 +1859,7 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -2173,7 +2180,8 @@ "version": "3.14.2", "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.14.2.tgz", "integrity": "sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==", - "license": "Standard 'no charge' license: https://gsap.com/standard-license." + "license": "Standard 'no charge' license: https://gsap.com/standard-license.", + "peer": true }, "node_modules/has-flag": { "version": "4.0.0", @@ -2789,6 +2797,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -2849,6 +2858,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -2858,6 +2868,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3116,6 +3127,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3202,6 +3214,7 @@ "resolved": "https://registry.npmjs.org/rolldown-vite/-/rolldown-vite-7.1.14.tgz", "integrity": "sha512-eSiiRJmovt8qDJkGyZuLnbxAOAdie6NCmmd0NkTC0RJI9duiSBTfr8X2mBYJOUFzxQa2USaHmL99J9uMxkjCyw==", "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/runtime": "0.92.0", "fdir": "^6.5.0", diff --git a/LocalMind-Frontend/src/app/routes/AppRoutes.tsx b/LocalMind-Frontend/src/app/routes/AppRoutes.tsx index af480f1..ac51dbd 100644 --- a/LocalMind-Frontend/src/app/routes/AppRoutes.tsx +++ b/LocalMind-Frontend/src/app/routes/AppRoutes.tsx @@ -1,26 +1,29 @@ import React from 'react' import { Route, Routes } from 'react-router-dom' + import HomePage from '../../features/Dashboard/V1/Component/Pages/HomePage' -import LoginPage from '../../shared/component/v1/LoginPage' +import LoginPage from '../../shared/component/V1/LoginPage' +import ContributorsPage from '../../features/Dashboard/contributors/ContributorsPage' const AppRoutes: React.FC = () => { return ( - {/* Homepage */} + {/* Home Page */} } /> - {/* Sign Up / Login Page */} + {/* Contributors Page */} + } /> + + {/* Login Page */} } /> - {/* Register Page - TODO: Create dedicated RegisterPage component */} + {/* Register Page (temporary using LoginPage) */} } /> - {/* Forgot Password Page - TODO: Create ForgotPasswordPage component */} + {/* Forgot Password Page (temporary using LoginPage) */} } /> - - {/* Chat Page */} ) } -export default AppRoutes +export default AppRoutes \ No newline at end of file diff --git a/LocalMind-Frontend/src/features/Dashboard/contributors/ContributorsPage.tsx b/LocalMind-Frontend/src/features/Dashboard/contributors/ContributorsPage.tsx new file mode 100644 index 0000000..7d59d46 --- /dev/null +++ b/LocalMind-Frontend/src/features/Dashboard/contributors/ContributorsPage.tsx @@ -0,0 +1,196 @@ +import React, { useState } from "react"; + +type Contributor = { + name: string; + github: string; + linkedin: string; + role: string; +}; + +const ContributorsPage = () => { + const [contributors, setContributors] = useState([]); + const [form, setForm] = useState({ + name: "", + github: "", + linkedin: "", + role: "", + }); + + const handleChange = (e: React.ChangeEvent) => { + setForm({ ...form, [e.target.name]: e.target.value }); + }; + + const addContributor = () => { + if (!form.name || !form.github) { + alert("Name and GitHub are required"); + return; + } + setContributors([...contributors, form]); + setForm({ name: "", github: "", linkedin: "", role: "" }); + }; + + return ( +
+ {/* HERO */} +
+

Contributors 💙

+

+ Built by people like you. Every contribution — big or small — matters. +

+
+ + {/* ADD CONTRIBUTOR FORM */} +
+

Add Yourself

+ + + + + + + + + + +
+ + {/* CONTRIBUTORS LIST */} +

Our Contributors

+ +
+ {contributors.map((c, index) => ( +
+

{c.name}

+ +
+ + GitHub + + {c.linkedin && ( + + LinkedIn + + )} +
+ + {c.role && {c.role}} +
+ ))} +
+ + {/* HOW TO CONTRIBUTE */} +
+

How to Become a Contributor

+
    +
  1. Fork the repository
  2. +
  3. Pick an issue or improve a feature
  4. +
  5. Create a new branch
  6. +
  7. Make your changes
  8. +
  9. Submit a Pull Request 🎉
  10. +
+
+
+ ); +}; + +/* ---------- STYLES ---------- */ + +const inputStyle: React.CSSProperties = { + display: "block", + width: "100%", + padding: "0.6rem", + marginTop: "0.75rem", + borderRadius: "8px", + border: "1px solid #d1d5db", +}; + +const buttonStyle: React.CSSProperties = { + marginTop: "1.2rem", + background: "#2563eb", + color: "#fff", + padding: "0.6rem 1.4rem", + border: "none", + borderRadius: "10px", + cursor: "pointer", + fontWeight: 600, +}; + +const cardStyle: React.CSSProperties = { + background: "#fff", + padding: "1.5rem", + borderRadius: "14px", + boxShadow: "0 10px 25px rgba(0,0,0,0.08)", +}; + +const link: React.CSSProperties = { + marginRight: "12px", + color: "#2563eb", + textDecoration: "none", + fontWeight: 500, +}; + +const tag: React.CSSProperties = { + display: "inline-block", + marginTop: "0.8rem", + background: "#eef2ff", + color: "#4338ca", + padding: "0.25rem 0.7rem", + borderRadius: "999px", + fontSize: "0.75rem", +}; + +export default ContributorsPage;