diff --git a/CHANGELOG.md b/CHANGELOG.md index cdf9690cd90..739966ee45f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,45 +1,45 @@ -## [1.143.4](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.3...v1.143.4) (2023-06-18) +## [1.144.1](https://github.com/EddieHubCommunity/LinkFree/compare/v1.144.0...v1.144.1) (2023-06-21) ### Bug Fixes -* remove alert animation ([#7662](https://github.com/EddieHubCommunity/LinkFree/issues/7662)) ([e39065b](https://github.com/EddieHubCommunity/LinkFree/commit/e39065b940edccd08f13bad54bfc5614954d6289)) +* help button over social links ([#7702](https://github.com/EddieHubCommunity/LinkFree/issues/7702)) ([d889cbd](https://github.com/EddieHubCommunity/LinkFree/commit/d889cbd9df97ffaf825ae92a38024da24aa4a8b4)) -## [1.143.3](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.2...v1.143.3) (2023-06-18) +# [1.144.0](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.4...v1.144.0) (2023-06-20) -### Bug Fixes +### Features -* remove animate pulse from alert ([#7639](https://github.com/EddieHubCommunity/LinkFree/issues/7639)) ([abdf3ea](https://github.com/EddieHubCommunity/LinkFree/commit/abdf3ea3f8fd2767021f2e82f6c641a69f498c9f)) +* map clustering ([#7653](https://github.com/EddieHubCommunity/LinkFree/issues/7653)) ([6c0d957](https://github.com/EddieHubCommunity/LinkFree/commit/6c0d957adbb6e5b2b145e2e1d90af8180db9981e)) -## [1.143.2](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.1...v1.143.2) (2023-06-18) +## [1.143.4](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.3...v1.143.4) (2023-06-18) ### Bug Fixes -* statistics and playground base url ([#7640](https://github.com/EddieHubCommunity/LinkFree/issues/7640)) ([8854b4e](https://github.com/EddieHubCommunity/LinkFree/commit/8854b4e491ec70010b2a4517af857abb4cc10b28)) +* remove alert animation ([#7662](https://github.com/EddieHubCommunity/LinkFree/issues/7662)) ([e39065b](https://github.com/EddieHubCommunity/LinkFree/commit/e39065b940edccd08f13bad54bfc5614954d6289)) -## [1.143.1](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.0...v1.143.1) (2023-06-18) +## [1.143.3](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.2...v1.143.3) (2023-06-18) ### Bug Fixes -* update the LinkFree CLI version ([#7638](https://github.com/EddieHubCommunity/LinkFree/issues/7638)) ([bef374c](https://github.com/EddieHubCommunity/LinkFree/commit/bef374c6dbe8c7ae24b46546aead73ee1faa3ae1)) +* remove animate pulse from alert ([#7639](https://github.com/EddieHubCommunity/LinkFree/issues/7639)) ([abdf3ea](https://github.com/EddieHubCommunity/LinkFree/commit/abdf3ea3f8fd2767021f2e82f6c641a69f498c9f)) -# [1.143.0](https://github.com/EddieHubCommunity/LinkFree/compare/v1.142.6...v1.143.0) (2023-06-16) +## [1.143.2](https://github.com/EddieHubCommunity/LinkFree/compare/v1.143.1...v1.143.2) (2023-06-18) -### Features +### Bug Fixes -* search by location ([#7535](https://github.com/EddieHubCommunity/LinkFree/issues/7535)) ([4949dc3](https://github.com/EddieHubCommunity/LinkFree/commit/4949dc395d9c15ce18e67c0310012fee4a17304c)) +* statistics and playground base url ([#7640](https://github.com/EddieHubCommunity/LinkFree/issues/7640)) ([8854b4e](https://github.com/EddieHubCommunity/LinkFree/commit/8854b4e491ec70010b2a4517af857abb4cc10b28)) diff --git a/components/Footer.js b/components/Footer.js index 18c060bcc1f..ac5cc2e6dbe 100644 --- a/components/Footer.js +++ b/components/Footer.js @@ -88,7 +88,7 @@ export default function Footer() { -
+
{ + const size = + count < 25 ? 'small' : + count < 100 ? 'medium' : 'large'; + if (!icons[count]) { + icons[count] = L.divIcon({ + html: `
${count}
`, + className: `${styles['marker-cluster']} ${styles[size]}`, + iconSize: L.point(40, 40) + }); + } + return icons[count]; + }; + + return ( + <> + {clusters.map(cluster => { + // every cluster point has coordinates + const [longitude, latitude] = cluster.geometry.coordinates; + // the point may be either a cluster or user + const { + cluster: isCluster, + point_count: pointCount, + username + } = cluster.properties; + + // we have a cluster to render + if (isCluster) { + return ( + { + const expansionZoom = Math.min( + supercluster.getClusterExpansionZoom(cluster.id), + 18 + ); + map.setView([latitude, longitude], expansionZoom, { + animate: true + }); + } + }} + /> + ); + } + + // we have a single point to render + return ( + + ); + })} + + ) +} diff --git a/components/map/Clusters.module.css b/components/map/Clusters.module.css new file mode 100644 index 00000000000..164e1763b83 --- /dev/null +++ b/components/map/Clusters.module.css @@ -0,0 +1,39 @@ +.small { + background-color: rgba(181, 226, 140, 0.6); +} +.small div { + background-color: rgba(110, 204, 57, 0.6); +} + +.medium { + background-color: rgba(241, 211, 87, 0.6); +} +.medium div { + background-color: rgba(240, 194, 12, 0.6); +} + +.large { + background-color: rgba(253, 156, 115, 0.6); +} +.large div { + background-color: rgba(241, 128, 23, 0.6); +} + +.marker-cluster { + background-clip: padding-box; + border-radius: 20px; + z-index: 100; +} +.marker-cluster div { + width: 30px; + height: 30px; + margin-left: 5px; + margin-top: 5px; + + text-align: center; + border-radius: 15px; + font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; +} +.marker-cluster span { + line-height: 30px; +} diff --git a/components/map/Map.js b/components/map/Map.js index bce423b1a14..af1564ab7c3 100644 --- a/components/map/Map.js +++ b/components/map/Map.js @@ -1,9 +1,7 @@ -import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; -import { ReactMarkdown } from "react-markdown/lib/react-markdown"; -import "leaflet/dist/leaflet.css"; - +import { MapContainer, TileLayer } from "react-leaflet"; import Link from "@components/Link"; -import MarkerCluster from "@components/map/MarkerCluster"; +import Clusters from "./Clusters"; +import "leaflet/dist/leaflet.css"; export default function Map({ users }) { const boundsMap = [ @@ -12,55 +10,21 @@ export default function Map({ users }) { ]; return ( - <> - - - - {users.map((user) => ( -
- - -
-

- - {user.name} - -

- {user.location.provided} - - - {user.bio} - -
-
-
-
- ))} -
-
- + + + + ); } diff --git a/components/map/MarkerCluster.js b/components/map/MarkerCluster.js deleted file mode 100644 index 6121d1d5d79..00000000000 --- a/components/map/MarkerCluster.js +++ /dev/null @@ -1,33 +0,0 @@ -import L from "leaflet"; -import { createPathComponent } from "@react-leaflet/core"; -import "leaflet.markercluster/dist/MarkerCluster.Default.css"; -import "leaflet/dist/leaflet.css"; -import "leaflet.markercluster"; - -function createMarkerCluster({ children: _c, ...props }, context) { - const clusterProps = {chunkedLoading: true}; - const clusterEvents = {}; - - Object.entries(props).forEach(([propName, prop]) => - propName.startsWith("on") - ? (clusterEvents[propName] = prop) - : (clusterProps[propName] = prop) - ); - const instance = new L.MarkerClusterGroup(clusterProps); - - Object.entries(clusterEvents).forEach(([eventAsProp, callback]) => { - const clusterEvent = `cluster${eventAsProp.substring(2).toLowerCase()}`; - instance.on(clusterEvent, callback); - }); - return { - instance, - context: { - ...context, - layerContainer: instance, - }, - }; -} - -const MarkerCluster = createPathComponent(createMarkerCluster); - -export default MarkerCluster; diff --git a/components/map/UserMarker.js b/components/map/UserMarker.js new file mode 100644 index 00000000000..1c92ad0e344 --- /dev/null +++ b/components/map/UserMarker.js @@ -0,0 +1,41 @@ +import { Marker, Popup } from "react-leaflet"; +import { ReactMarkdown } from "react-markdown/lib/react-markdown"; +import Link from "@components/Link"; + +export default function UserMarker({user}) { + // Custom component for rendering links within ReactMarkdown + const LinkRenderer = ({ href, children }) => ( + + {children} + + ); + + return ( + + +
+

+ + {user.properties.name} + +

+ {user.properties.location} + + {user.properties.bio} + +
+
+
+ ) +} \ No newline at end of file diff --git a/config/app.json b/config/app.json index bce14b5b1a5..e4b9002e20f 100644 --- a/config/app.json +++ b/config/app.json @@ -1,5 +1,5 @@ { - "version": "1.143.4", + "version": "1.144.1", "alerts": [], "isr": { "homepage": { diff --git a/data/Ashish-simpleCoder.json b/data/Ashish-simpleCoder.json new file mode 100644 index 00000000000..6645e3c5298 --- /dev/null +++ b/data/Ashish-simpleCoder.json @@ -0,0 +1,17 @@ +{ + "name": "Ashish Prajapati", + "bio": "Web Developer in JavaScript | ReactJS | Typescript-React", + "tags": ["Typescript", "Javascript", "ReactJS", "Open Source"], + "links": [ + { + "name": "Connect on LinkedIn", + "url": "https://www.linkedin.com/in/ashish-prajapati-002154193/", + "icon": "FaLinkedin" + }, + { + "name": "Follow me on Github", + "url": "https://github.com/Ashish-simpleCoder", + "icon": "FaGit" + } + ] +} diff --git a/data/BDFL669.json b/data/BDFL669.json index 71e6b956204..ed08a233014 100644 --- a/data/BDFL669.json +++ b/data/BDFL669.json @@ -1,21 +1,60 @@ { "name": "Nigel Lowa", "bio": "A software protoge with a penchant for developing impressional applications", + "tags": ["Open Source", "JavaScript", "React"], + "socials": [ + { + "icon": "FaTwitter", + "url": "https://twitter.com/botyliciouss" + }, + { + "icon": "FaGithub", + "url": "https://github.com/BDFL669" + }, + { + "icon": "FaLinkedin", + "url": "https://www.linkedin.com/in/nigel-okoth-104609206/" + } + ], + "testimonials": [], "links": [ { - "name": "Follow me on Twitter", + "name": "Twitter: Follow me", + "group": "Socials Primary", "url": "https://twitter.com/botyliciouss", - "icon": "FaTwitter" + "icon": "FaTwitter", + "color": "#00ACEE" }, { - "name": "Follow me on GitHub", - "url": "https://github.com/lowaCase", - "icon": "FaGithub" + "group": "Socials Primary", + "name": "GitHub: Collaborate on Open Source", + "url": "https://github.com/BDFL669", + "icon": "FaGitHub" }, { - "name": "Connect with me on LinkedIn", - "url": "https://www.linkedin.com/in/nigel-okoth/", + "group": "Socials Primary", + "name": "LinkedIn: Let's connect", + "url": "https://www.linkedin.com/in/nigel-okoth-104609206/", "icon": "FaLinkedin" } + ], + "milestones": [ + { + "title": "Started Blogging on Dev.to", + "date": "Feb 2022", + "icon": "SiHashnode", + "color": "Blue", + "description": "Started Blogging on Dev.to", + "url": "https://dev.to/anvilicious" + }, + { + "name": "Follow me on Twitter", + "url": "https://twitter.com/botyliciouss", + "icon": "FaTwitter", + "title": "Started Open Source Contribution", + "date": "June 2022", + "color": "red", + "description": "Learning while contributing | Contributions List" + } ] } diff --git a/data/Chandra-Sekhar-Bala.json b/data/Chandra-Sekhar-Bala.json new file mode 100644 index 00000000000..fb1357e06fb --- /dev/null +++ b/data/Chandra-Sekhar-Bala.json @@ -0,0 +1,69 @@ +{ + "name": "Chandra Sekhar Bala", + "bio": "Android SDE intern @ GoGlobally | MCA student | open source contributor", + "tags": [ + "Android", + "Kotlin", + "Open source", + "Community", + "Developer", + "Designer" + ], + + "socials": [ + { + "icon": "FaTwitter", + "url": "https://twitter.com/chandrastwt" + }, + { + "icon": "FaGithub", + "url": "https://github.com/Chandra-Sekhar-Bala" + }, + { + "icon": "FaInstagram", + "url": "https://www.instagram.com/im_chandra100" + }, + { + "icon": "FaLink", + "url": "https://chandra-sekhar-bala.github.io/Portfolio" + } + ], + + "links": [ + { + "name": "Connect on Linkedin", + "url": "https://www.linkedin.com/in/chandra-sekhar-bala/", + "icon": "FaLinkedin" + }, + { + "name": "Connect with me on Twitter", + "url": "https://twitter.com/chandrastwt", + "icon": "FaTwitter" + }, + { + "name": "Follow me on GitHub", + "url": "https://github.com/Chandra-Sekhar-Bala", + "icon": "FaGithub" + }, + { + "name": "Portfolio website", + "url": "https://chandra-sekhar-bala.github.io/Portfolio", + "icon": "FaLink" + }, + { + "name": "Follow my personal blog", + "url": "https://chandrasekhar.codes", + "icon": "SiHashnode" + }, + { + "name": "Leetcode - DSA", + "url": "https://leetcode.com/Chandra-Sekhar-Bala", + "icon": "SiLeetcode" + }, + { + "name": "Follow me on Instagram", + "url": "https://www.instagram.com/im_chandra100", + "icon": "FaInstagram" + } + ] +} diff --git a/data/Luwore.json b/data/Luwore.json new file mode 100644 index 00000000000..c0de48570fa --- /dev/null +++ b/data/Luwore.json @@ -0,0 +1,26 @@ +{ + "name": "Lukas Reith", + "bio": "ComputerScience Student | Open Source & CyberSecurity Enthusiast", + "links": [ + { + "name": "LinkedIn", + "url": "https://linkedin.com/in/lukas-reith-830b97170", + "icon": "FaLinkedin" + }, + { + "name": "GitHub", + "url": "https://github.com/Luwore", + "icon": "FaGithub" + }, + { + "name": "Mastrodon", + "url": "https://infosec.exchange/@luwore", + "icon": "FaMastodon" + }, + { + "name": "Personal Website", + "url": "https://lukasreith.de", + "icon": "FaExternalLinkAlt" + } + ] +} diff --git a/data/Not-Sarthak.json b/data/Not-Sarthak.json new file mode 100644 index 00000000000..cd737462d59 --- /dev/null +++ b/data/Not-Sarthak.json @@ -0,0 +1,21 @@ +{ + "name": "Sarthak Shah", + "bio": "I believe in Dream, Build, Ship", + "links": [ + { + "name": "Follow me on Twitter", + "url": "https://twitter.com/0xSarthak13", + "icon": "FaTwitter" + }, + { + "name": "Do visit and follow my Github", + "url": "https://github.com/Not-Sarthak", + "icon": "FaGithub" + }, + { + "name": "Connect with me on Linkedin", + "url": "https://www.linkedin.com/in/sarthak-shah-49267b224/", + "icon": "FaLinkedin" + } + ] +} diff --git a/data/Petsamuel.json b/data/Petsamuel.json index 86149a8d254..b37aeb9933e 100644 --- a/data/Petsamuel.json +++ b/data/Petsamuel.json @@ -46,5 +46,19 @@ "url": "https://www.linkedin.com/in/bieefilled", "icon": "FaLinkedIn" } + ], + "milestones": [ + { + "title": "Started Open Source", + "date": "October 2022", + "icon": "FaGithub", + "description": " Collaborate with teams to develop open-source projects" + }, + { + "title": "Joined EddieHub Community", + "date": "May 2023", + "icon": "FaGithub", + "description": "Engage with the open-source community through Contribution, forums, discussions, and conferences." + } ] } diff --git a/data/PritamSaha7.json b/data/PritamSaha7.json deleted file mode 100644 index 47e39ddd211..00000000000 --- a/data/PritamSaha7.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "PRITAM SAHA", - "bio": "I am Pritam Saha, Computer Science graduate from Adamas University", - "links": [ - { - "name": "Follow me on GitHub", - "url": "https://github.com/Saha-7", - "icon": "FaGithub" - }, - { - "name": "Follow me on Twitter", - "url": "https://twitter.com/saha7pritam", - "icon": "FaTwitter" - } - ] -} diff --git a/data/RohanSasne.json b/data/RohanSasne.json index 02dae5191c5..8d4096c1894 100644 --- a/data/RohanSasne.json +++ b/data/RohanSasne.json @@ -15,7 +15,11 @@ }, { "icon": "SiHashnode", - "url": "https://hashnode.com/@rohansasne30" + "url": "https://blog.rohansasne.tech/" + }, + { + "icon": "FaGlobe", + "url": "https://www.rohansasne.tech/" } ], "links": [ @@ -29,9 +33,14 @@ "url": "https://github.com/RohanSasne", "icon": "FaGithub" }, + { + "name": "Website: Checkout My Profile!", + "url": "https://www.rohansasne.tech/", + "icon": "FaGlobe" + }, { "name": "I Write Technical Blogs", - "url": "https://rohansasne30.hashnode.dev/", + "url": "https://blog.rohansasne.tech/", "icon": "SiHashnode" }, { diff --git a/data/Saha-7.json b/data/Saha-7.json index 7a8d218fc91..5c2d5d1b809 100644 --- a/data/Saha-7.json +++ b/data/Saha-7.json @@ -1,16 +1,100 @@ { "name": "Pritam Saha", - "bio": "Hi there, I am Pritam Saha, Computer Science graduate & DevOps enthuasist & Open Source lover", + "bio": "Open Source | Cloud Native | DevOps", + "tags": [ + "Open Source", + "Cloud Native", + "DevOps", + "WASM", + "Kubernetes", + "Docker", + "Golang" + ], + "socials": [ + { + "icon": "FaTwitter", + "url": "https://twitter.com/saha7pritam" + }, + { + "icon": "FaGithub", + "url": "https://github.com/Saha-7" + }, + { + "icon": "FaLinkedin", + "url": "https://www.linkedin.com/in/pritam-saha-269704212/" + } + ], + "testimonials": [], "links": [ { - "name": "Follow me on GitHub", + "group": "Socials Primary", + "name": "Twitter: Follow me", + "url": "https://twitter.com/saha7pritam", + "icon": "FaTwitter", + "color": "#00ACEE" + }, + { + "group": "Socials Primary", + "name": "GitHub: Collaborate on Open Source", "url": "https://github.com/Saha-7", + "icon": "FaGitHub" + }, + { + "group": "Socials Primary", + "name": "LinkedIn: Let's connect", + "url": "https://www.linkedin.com/in/pritam-saha-269704212/", + "icon": "FaLinkedin" + }, + { + "group": "Socials Primary", + "name": "Mastodon: Connect me on mastodon", + "url": "https://mastodon.social/@saha7pritam", + "icon": "FaMastodon" + }, + { + "group": "Content", + "name": "Tech Blogs", + "url": "https://saha7pritam.hashnode.dev/", + "icon": "SiHashnode" + }, + { + "group": "Content", + "name": "Open Source Contributions", + "url": "https://github.com/Saha-7/My-Open-Source-Contributions", "icon": "FaGithub" + } + ], + "milestones": [ + { + "title": "Started Blogging", + "date": "Nov 2022", + "icon": "SiHashnode", + "color": "Blue", + "description": "Started my own Tech Blogs", + "url": "https://saha7pritam.hashnode.dev/" }, { - "name": "Follow me on Twitter", - "url": "https://twitter.com/saha7pritam", - "icon": "FaTwitter" + "title": "Started Open Source Contribution", + "date": "Sep 2022", + "icon": "FaGithub", + "color": "red", + "description": "Learning while contributing | Contributions List", + "url": "https://github.com/Saha-7/My-Open-Source-Contributions" + }, + { + "title": "Achievements | Certifications | Badges", + "icon": "FaLink", + "color": "Yellow", + "description": "View my Verified Achievements", + "url": "https://www.credly.com/users/pritam-saha.1d50666d/badges" + }, + { + "title": "NAPPTIVE Hackathon", + "date": "April 2023", + "icon": "FaLink", + "color": "green", + "description": "Successfully completed the hackathon with the team Organized by NAPPTIVE x WeMakeDevs", + "url": "https://playground.napptive.dev/app/default/metabase-app" } ] } diff --git a/data/SandipPalit.json b/data/SandipPalit.json index 07cd5d65d36..67846d9b72a 100644 --- a/data/SandipPalit.json +++ b/data/SandipPalit.json @@ -1,11 +1,11 @@ { "name": "Sandip Palit", - "bio": " **Data Engineer** | Data Science Explorer | Microsoft Certified | Kaggle Expert | Speaker | Loading.. ", + "bio": " **Data Engineer** | Data Science Explorer | Microsoft Certified | Kaggle Expert | Organizer | Speaker | Loading.. ", "tags": [ "Python", "SQL", "Big Data", - "Databricks", + "Apache Spark", "Microsoft Azure", "Data Science" ], @@ -24,6 +24,12 @@ } ], "links": [ + { + "group": "Achievements & Recognitions", + "name": "Welcome to 'Postman Community - Kolkata'", + "url": "https://www.linkedin.com/company/postman-community-kolkata/", + "icon": "SiPostman" + }, { "group": "Achievements & Recognitions", "name": "Research Article on 'Real Time Sentiment Analysis' published by IGI Global", @@ -80,6 +86,14 @@ } ], "milestones": [ + { + "title": "Started my own Community", + "date": "June 2023", + "icon": "SiPostman", + "color": "blue", + "description": "Postman Community - Kolkata is a API focessed community in the City Of Joy.", + "url": "https://www.linkedin.com/company/postman-community-kolkata/" + }, { "title": "Started Public Speaking", "date": "August 2022", diff --git a/data/avinashji1302.json b/data/avinashji1302.json new file mode 100644 index 00000000000..4a025ec1faf --- /dev/null +++ b/data/avinashji1302.json @@ -0,0 +1,17 @@ +{ + "name": "Avinash Gupta", + "bio": "Full Stack Intern at ShipGig Venture and open source contributor ", + "links": [ + { + "name": "Follow me on Github", + "url": "https://github.com/avinashji1302", + "icon": "FaGithub" + }, + + { + "name": "Follow me on LinkedIn", + "url": "https://www.linkedin.com/in/avinash-gupta-ab24231b6/", + "icon": "FaLinkedin" + } + ] +} diff --git a/data/bharathkalyans.json b/data/bharathkalyans.json new file mode 100644 index 00000000000..c0c39d93e6a --- /dev/null +++ b/data/bharathkalyans.json @@ -0,0 +1,28 @@ +{ + "name": "Bharath Kalyan S", + "bio": "Full Stack Developer, Open Source Contributor, Technical Content Writer", + "tags": [ + "Open Source", + "Java", + "Javascript", + "React JS", + "Node JS", + "Typescript", + "Python", + "MongoDB", + "PostgreSQL", + "Kotlin" + ], + "links": [ + { + "name": "GitHub", + "url": "https://github.com/bharathkalyans", + "icon": "FaGithub" + }, + { + "name": "Twitter", + "url": "https://twitter.com/bharathkalyans", + "icon": "FaTwitter" + } + ] +} diff --git a/data/foss2cyber.json b/data/foss2cyber.json index 286ad8d40d2..a5ca7e75f06 100644 --- a/data/foss2cyber.json +++ b/data/foss2cyber.json @@ -1,31 +1,156 @@ { "name": "Ishan Velle", - "bio": "Front-end Web Developer | Freelancer | Designer | Blogger", + "bio": "Front-end Developer | Freelancer | Designer | Blogger", + "tags": [ + "Open Source", + "Markdown", + "JavaScript", + "Node.js", + "React", + "NextJS", + "Gatsby", + "Astro", + "TailwindCSS", + "DevOps", + "Python", + "Bash", + "Linux", + "Docker", + "Network Security", + "Homelab", + "Self-hosting", + "Cybersecurity", + "OSINT" + ], + "socials": [ + { + "icon": "FaLink", + "url": "https://www.yourishanvelle.dev/" + }, + { + "icon": "FaTwitter", + "url": "https://twitter.com/thefoss_m" + }, + { + "icon": "FaGithubAlt", + "url": "https://github.com/foss2cyber" + }, + { + "icon": "FaCodepen", + "url": "https://codepen.io/mfosscoder" + }, + { + "icon": "FaLinkedin", + "url": "https://linkedin.com/in/ishan-velle-fossie8" + }, + { + "icon": "SiHashnode", + "url": "https://psibr-oh.hashnode.dev/" + } + ], "links": [ { - "name": "Follow me on Twitter", + "group": "Freelancing", + "name": "Freelance Web Development and Logo Designing", + "url": "https://www.yourishanvelle.dev/#work", + "icon": "SiFreelancer" + }, + { + "group": "Socials", + "name": "Twitter - Follow me for the latest updates Web Development, Cybersecurity/Infosec/OSINT/DFIR, DevOps and more!", "url": "https://twitter.com/thefoss_m", "icon": "FaTwitter" }, { - "name": "Here's my Github profile", + "group": "Socials", + "name": "GitHub - Checkout my profile for FOSS projects and collaboration", "url": "https://github.com/foss2cyber", - "icon": "FaGithubAlt" - }, - { - "name": "My Codepen Projects", - "url": "https://codepen.io/mfosscoder", - "icon": "FaCodepen" + "icon": "FaGithub" }, { - "name": "Let's Connect!", + "group": "Socials", + "name": "LinkedIn - Let's connect", "url": "https://linkedin.com/in/ishan-velle-fossie8", "icon": "FaLinkedin" }, { - "name": "My Blog", + "group": "Socials", + "name": "Checkout my blog where I write about Cybersecurity/Infosec/OSINT/DFIR, open source, Web Development, & DevOps", "url": "https://psibr-oh.hashnode.dev/", "icon": "SiHashnode" + }, + { + "group": "Open Source Projects", + "name": "Google Homepage Clone", + "url": "https://github.com/foss2cyber/google-clone", + "icon": "FaGithub" + }, + { + "group": "Open Source Projects", + "name": "Luxury Resort Landing Page - Built with React & TailwindCSS", + "url": "https://github.com/foss2cyber/react-tailwind-site", + "icon": "FaGithub" + }, + { + "group": "Open Source Projects", + "name": "Reactive Ticket App - Track Network Metrics with ease", + "url": "https://github.com/foss2cyber/reactive-ticket-app", + "icon": "FaGithub" + } + ], + "milestones": [ + { + "title": "Embarked on Freelancing Journey", + "date": "July 2022", + "icon": "SiFreelancer", + "color": "purple", + "description": "Successfully launched my freelancing career, offering my services to clients and building a diverse portfolio.", + "url": "https://www.yourishanvelle.dev/#work" + }, + { + "title": "Developed Reactive Ticket App during GitHub + DEV 2023 Hackathon", + "date": "June 2023", + "icon": "FaCode", + "color": "blue", + "description": "Created the Reactive Ticket App, a React-based tool developed as part of the GitHub + DEV 2023 Hackathon. The app generates virtual tickets and provides network metrics, including IP address, network status code, and user agent. Leveraged React, Axios, and Tailwind CSS for frontend development. Integrated CI/CD pipeline using GitHub Actions for automated build, test, and deployment. The app was successfully deployed on Vercel, ensuring optimal performance.", + "url": "https://dev.to/near5davy/reactive-ticket-app-seamlessly-track-network-metrics-57nl" + }, + { + "isGoal": true, + "title": "Land DevOps Engineer role", + "date": "December 2023", + "icon": "FaCogs", + "color": "green", + "description": "My goal is to secure a DevOps Engineer's role by the end of the year 2023. I will actively pursue opportunities, enhance my skills, and showcase my expertise in DevOps practices, automation, and cloud technologies.", + "url": "https://yourishanvelle.dev/cv" + }, + { + "isGoal": true, + "title": "Make impactful open-source contributions", + "date": "Throughout 2023", + "icon": "FaCodeBranch", + "color": "lavender", + "description": "I aim to contribute to impactful open-source projects throughout 2023 to enhance my portfolio and skills. By collaborating with the open-source community, I will contribute valuable code, documentation, and insights while expanding my knowledge and establishing myself as a trusted contributor.", + "url": "https://github.com/foss2cyber" + } + ], + "events": [ + { + "isVirtual": false, + "isInPerson": true, + "userStatus": "attending", + "color": "#4183f3", + "name": "Google Cloud Community Day 2023", + "description": "I attended Google Cloud Community Day 2023 in New Delhi, engaging with like-minded individuals, participating in discussions, and expanding my knowledge of cloud technologies. It provided valuable networking opportunities within the community.", + "date": { + "start": "2023-05-20T09:00:00+05:30", + "end": "2023-05-20T17:00:00+05:30" + }, + "location": { + "city": "New Delhi", + "country": "India" + }, + "url": "https://www.commudle.com/communities/gdgcloudnd/events/google-cloud-community-day-2023" } ] } diff --git a/data/joelchully.json b/data/joelchully.json new file mode 100644 index 00000000000..2682c028b7e --- /dev/null +++ b/data/joelchully.json @@ -0,0 +1,21 @@ +{ + "name": "Joel Chully Godly", + "bio": "Software Developer passionate about Web Development", + "links": [ + { + "name": "GitHub", + "url": "https://github.com/joelchully", + "icon": "FaGithub" + }, + { + "name": "LinkedIn", + "url": "https://www.linkedin.com/in/joel-chully-godly-43432260/", + "icon": "FaLinkedin" + }, + { + "name": "Twitter", + "url": "https://twitter.com/JoelChullyGodly", + "icon": "FaTwitter" + } + ] +} diff --git a/data/krushnarout.json b/data/krushnarout.json new file mode 100644 index 00000000000..5bdc3d5ba2e --- /dev/null +++ b/data/krushnarout.json @@ -0,0 +1,57 @@ +{ + "name": "Krushna Kanta Rout", + "bio": "Passionate full-stack developer 🚀 | HTML, CSS, JavaScript | Open source enthusiast 💻 | Self-taught", + "tags": ["Full-stack developer", "Javascript", "HTML", "CSS", "Open Source"], + "socials": [ + { + "icon": "FaTwitter", + "url": "https://twitter.com/Krushna_rout90" + }, + { + "icon": "FaGithub", + "url": "https://github.com/krushnarout" + }, + { + "icon": "FaLinkedin", + "url": "https://www.linkedin.com/in/krushnakantarout/" + } + ], + "links": [ + { + "group": "Socials", + "name": "Follow My Coding Journey", + "url": "https://twitter.com/Krushna_rout90", + "icon": "FaTwitter" + }, + { + "group": "Socials", + "name": "Let's Connect on Linkedin", + "url": "https://www.linkedin.com/in/krushnakantarout/", + "icon": "FaLinkedin" + }, + { + "group": "Socials", + "name": "Let's Connect on Github", + "url": "https://github.com/krushnarout", + "icon": "FaGithub" + }, + { + "group": "Coding Challenges", + "name": "Codewars", + "icon": "SiCodewars", + "url": "https://www.codewars.com/users/krushnarout" + }, + { + "group": "Coding Challenges", + "name": "Leetcode", + "icon": "SiLeetcode", + "url": "https://leetcode.com/krushnarout90/" + }, + { + "group": "Coding Challenges", + "name": "Hackerrank", + "icon": "SiHackerrank", + "url": "https://www.hackerrank.com/krushnakantarou2?hr_r=1" + } + ] +} diff --git a/data/panwar8279.json b/data/panwar8279.json new file mode 100644 index 00000000000..2e95a065004 --- /dev/null +++ b/data/panwar8279.json @@ -0,0 +1,21 @@ +{ + "name": "Pratigya Panwar", + "bio": "Software Developer ", + "links": [ + { + "name": "Follow on Github", + "url": "https://github.com/panwar8279", + "icon": "FaGithub" + }, + { + "name": "Follow on Linkedin", + "url": "https://in.linkedin.com/in/pratigya-panwar-37768b199", + "icon": "FaLinkedin" + }, + { + "name": "Follow on Twitter", + "url": "https://twitter.com/pratigyapanwar", + "icon": "FaTwitter" + } + ] +} diff --git a/data/shubhamku044.json b/data/shubhamku044.json new file mode 100644 index 00000000000..e02afc1888e --- /dev/null +++ b/data/shubhamku044.json @@ -0,0 +1,34 @@ +{ + "name": "Shubham Kumar", + "bio": "Open Source | Full stack developer", + "tags": [ + "Open Source", + "Javascript", + "Typescript", + "NextJS", + "ReactJS", + "TailwindCSS" + ], + "socials": [ + { + "icon": "FaTwitter", + "url": "https://twitter.com/shubhamku044" + }, + { + "icon": "FaGithub", + "url": "https://github.com/shubhamku044" + }, + { + "icon": "FaYoutube", + "url": "https://www.youtube.com/@shubhamku044" + }, + { + "url": "https://www.linkedin.com/in/shubhamku044/", + "icon": "FaLinkedin" + }, + { + "url": "https://dev.to/shubhamku044", + "icon": "FaDev" + } + ] +} diff --git a/data/yassineatik.json b/data/yassineatik.json new file mode 100644 index 00000000000..696e6a3caaf --- /dev/null +++ b/data/yassineatik.json @@ -0,0 +1,42 @@ +{ + "name": "Yassine Atik", + "bio": "Fullstack Web Developer : PHP | LARAVEL , REACT | NEXT.JS", + "links": [ + { + "name": "Follow me on Twitter", + "url": "https://twitter.com/IamYassineAtik", + "icon": "FaTwitter" + }, + { + "name": "Let's Connect", + "url": "https://www.linkedin.com/in/yassineatik/", + "icon": "FaLinkedin" + }, + { + "name": "Check my GitHub", + "url": "https://github.com/yassineatik/", + "icon": "FaGithub" + }, + { + "name": "Check me on Instagram", + "url": "https://instagram.com/yassine_atikk", + "icon": "FaInstagram" + } + ], + "tags": [ + "Open Source", + "FullStack", + "Javascript", + "Typescript", + "NextJS", + "React", + "Laravel", + "PHP" + ], + "socials": [ + { "icon": "FaTwitter", "url": "https://twitter.com/IamYassineAtik" }, + { "icon": "FaGithub", "url": "https://github.com/yassineatik" }, + { "icon": "FaLinkedin", "url": "https://www.linkedin.com/in/yassineatik/" }, + { "icon": "SiGmail", "url": "mailto:atikyassine4@gmail.com" } + ] +} diff --git a/package-lock.json b/package-lock.json index ee11eab636a..993d5e3ffc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "linkfree", - "version": "1.143.4", + "version": "1.144.1", "lockfileVersion": 3, "requires": true, "packages": { @@ -23,7 +23,6 @@ "dotenv": "^16.0.3", "file-saver": "^2.0.5", "leaflet": "^1.9.4", - "leaflet.markercluster": "^1.5.3", "mongoose": "^7.2.0", "next": "^13.4.3", "next-auth": "^4.22.1", @@ -45,7 +44,9 @@ "request-ip": "^3.3.0", "shx": "^0.3.4", "strip-markdown": "^5.0.1", + "supercluster": "^8.0.1", "tailwindcss": "^3.3.2", + "use-supercluster": "^0.4.0", "zod": "^3.21.4" }, "devDependencies": { @@ -14034,6 +14035,11 @@ "node": ">=12.0.0" } }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -14095,14 +14101,6 @@ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" }, - "node_modules/leaflet.markercluster": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", - "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", - "peerDependencies": { - "leaflet": "^1.3.1" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -20020,6 +20018,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "dependencies": { + "kdbush": "^4.0.2" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -21240,6 +21246,22 @@ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true }, + "node_modules/use-deep-compare-effect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", + "integrity": "sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "dequal": "^2.0.2" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13" + } + }, "node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -21253,6 +21275,19 @@ "react-dom": "16.8.0 - 18" } }, + "node_modules/use-supercluster": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/use-supercluster/-/use-supercluster-0.4.0.tgz", + "integrity": "sha512-GdZj1iAksSAkI3pWH/6hRyqIFGQaEQo576GN06JRFYDlmqqUG0iA9N36OABZb/wPjkyz73JBlZNj/fVx9FPU2A==", + "dependencies": { + "dequal": "^2.0.2", + "use-deep-compare-effect": "^1.8.1" + }, + "peerDependencies": { + "react": ">=16", + "supercluster": ">=6" + } + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", diff --git a/package.json b/package.json index 959116000f6..ac028fcc7b8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linkfree", - "version": "1.143.4", + "version": "1.144.1", "private": false, "homepage": "https://linkfree.io", "engines": { @@ -20,7 +20,6 @@ "dotenv": "^16.0.3", "file-saver": "^2.0.5", "leaflet": "^1.9.4", - "leaflet.markercluster": "^1.5.3", "mongoose": "^7.2.0", "next": "^13.4.3", "next-auth": "^4.22.1", @@ -42,7 +41,9 @@ "request-ip": "^3.3.0", "shx": "^0.3.4", "strip-markdown": "^5.0.1", + "supercluster": "^8.0.1", "tailwindcss": "^3.3.2", + "use-supercluster": "^0.4.0", "zod": "^3.21.4" }, "scripts": { diff --git a/pages/map.js b/pages/map.js index 84c5a5e09e9..70618bcd019 100644 --- a/pages/map.js +++ b/pages/map.js @@ -37,6 +37,48 @@ export async function getStaticProps() { user.location.provided.toLowerCase() !== "remote" ); + // Apply offset equally to 4 quadrants arround point + const adjustCoords = (coords, offset, offset2, index) => { + switch (index % 4 ) { + case 0: + return [coords[0] + offset, coords[1] + offset2]; + case 1: + return [coords[0] - offset, coords[1] + offset2]; + case 2: + return [coords[0] - offset, coords[1] - offset2]; + default: + return [coords[0] + offset, coords[1] - offset2]; + } + } + + data.users = data.users.map((user, index) => { + const offset = Math.random() * 0.02; // ~2.2km + const offset2 = Math.random() * 0.02; // ~2.2km + return { + type: "Feature", + properties: { + cluster: false, + tags: user.tags || [], + username: user.username, + name: user.name, + location: user.location.provided, + bio: user.bio || '' + }, + geometry: { + type: "Point", + coordinates:adjustCoords( + [ + parseFloat(user.location.lon), + parseFloat(user.location.lat) + ], + offset, + offset2, + index + ) + } + } + }); + try { data.tags = await getTags(true); } catch (e) { @@ -74,11 +116,11 @@ export default function Map({ data }) { const terms = [...updateSelectedTagsFilter(value)]; results = users.filter((user) => { - if (user.name.toLowerCase().includes(valueLower)) { + if (user.properties.name.toLowerCase().includes(valueLower)) { return true; } - let userTags = user.tags?.map((tag) => tag.toLowerCase()); + let userTags = user.properties.tags?.map((tag) => tag.toLowerCase()); if (terms.every((keyword) => userTags?.includes(keyword.toLowerCase()))) { return true;