--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/profile.yml:
--------------------------------------------------------------------------------
1 | name: "🆕 Add Profile "
2 | description: "Add a new profile on DevProfiles"
3 | title: "data: profile addition by "
4 | labels:
5 | - "new profile"
6 | - "good first issue"
7 | body:
8 | - type: textarea
9 | id: profile-add
10 | attributes:
11 | label: "profile"
12 | validations:
13 | required: true
14 | - type: checkboxes
15 | id: terms
16 | attributes:
17 | label: "Ready to Work?"
18 | options:
19 | - label: "I want to work on this issue"
20 | required: true
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature.yml:
--------------------------------------------------------------------------------
1 | name: "✨ Feature Request"
2 | description: "Suggest a feature request"
3 | title: "feat:"
4 | labels: ["enhancement"]
5 | body:
6 | - type: textarea
7 | id: what-feature
8 | attributes:
9 | label: "Description"
10 | description: "Describe your feature request"
11 | validations:
12 | required: true
13 | - type: textarea
14 | id: screenshots
15 | attributes:
16 | label: "Screenshots"
17 | description: "Please add screenshots if applicable"
18 | validations:
19 | - type: checkboxes
20 | id: work
21 | attributes:
22 | label: "Ready to Work?"
23 | options:
24 | - label: "I want to work on this issue"
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/other.yml:
--------------------------------------------------------------------------------
1 | name: "🔶 Other"
2 | description: "Use this for any other issues. Please do NOT create blank issues."
3 | labels: ["other"]
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: "# Other issue"
8 | - type: textarea
9 | id: issuedescription
10 | attributes:
11 | label: "What would you like to share?"
12 | description: "Provide a clear and concise explanation of your issue."
13 | validations:
14 | required: true
15 | - type: textarea
16 | id: extrainfo
17 | attributes:
18 | label: "Additional information"
19 | description: "Is there anything else we should know about this issue?"
20 | validations:
21 | required: false
22 |
--------------------------------------------------------------------------------
/.github/workflows/greetings.yml:
--------------------------------------------------------------------------------
1 | name: 'Greetings'
2 |
3 | on:
4 | fork:
5 | push:
6 | branches: [main]
7 | issues:
8 | types: [opened]
9 | pull_request_target:
10 | types: [opened]
11 |
12 | jobs:
13 | welcome:
14 | runs-on: ubuntu-latest
15 | steps:
16 | - uses: actions/checkout@v1
17 | - uses: EddieHubCommunity/gh-action-community/src/welcome@main
18 | with:
19 | github-token: ${{ secrets.GITHUB_TOKEN }}
20 | issue-message: 'Welcome, @${{ github.actor }}! Thanks for raising the issue!'
21 | pr-message: 'Great job, @${{ github.actor }}! Thanks for creating the pull request!'
22 | footer: 'Soon the maintainers/owner will review it and provide you with feedback/suggestions, Make sure to star this awesome repository'
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug.yml:
--------------------------------------------------------------------------------
1 | name: "👾 Bug Report"
2 | description: "File a Bug here to help improve the project."
3 | title: "Bug: "
4 | labels: ["bug"]
5 | body:
6 | - type: textarea
7 | id: description
8 | attributes:
9 | label: "Description"
10 | description: "Please provide a detailed description of the issue."
11 | validations:
12 | required: true
13 | - type: textarea
14 | id: screenshots
15 | attributes:
16 | label: "Screenshots"
17 | description: "Please add screenshots if applicable."
18 | - type: dropdown
19 | id: browsers
20 | attributes:
21 | label: "What browsers are you seeing the problem on?"
22 | multiple: true
23 | options:
24 | - "Brave"
25 | - "Chrome"
26 | - "Firefox"
27 | - "Microsoft Edge"
28 | - "Opera"
29 | - "Safari"
30 | - "Other"
31 | - type: checkboxes
32 | id: work
33 | attributes:
34 | label: "Ready to Work?"
35 | options:
36 | - label: "I want to work on this issue"
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | This is free and unencumbered software released into the public domain.
2 |
3 | Anyone is free to copy, modify, publish, use, compile, sell, or
4 | distribute this software, either in source code form or as a compiled
5 | binary, for any purpose, commercial or non-commercial, and by any
6 | means.
7 |
8 | In jurisdictions that recognize copyright laws, the author or authors
9 | of this software dedicate any and all copyright interest in the
10 | software to the public domain. We make this dedication for the benefit
11 | of the public at large and to the detriment of our heirs and
12 | successors. We intend this dedication to be an overt act of
13 | relinquishment in perpetuity of all present and future rights to this
14 | software under copyright law.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | For more information, please refer to
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
DevProfiles - List Your Developer Profile.
2 |
3 | [](https://devprofiles.is-an.app)
4 |
5 | ## ❗ About
6 |
7 | DevProfiles is a platform for developers to easily share their profiles, spotlight your skills, and connect with fellow developers in the community.
8 |
9 | ## 💻 Tech Stack
10 |
11 |
12 |
13 |
14 | ### Icons
15 |
16 | - [Font Awesome](https://fontawesome.com/icons)
17 |
18 | ## 👨💻 Contributing
19 | Contributions make the open source community such an amazing place to learn, inspire, and create.
20 | Please see the [CONTRIBUTING.md](https://github.com/oyepriyansh/DevProfiles/blob/main/CONTRIBUTING.md) file for more information.
21 |
22 |
23 |
24 | > **Any contributions you make are truly appreciated!**
25 |
26 | ## 🤝 Thank you, contributors!
27 |
28 | Contributors
29 |
34 |
35 |
36 | Thank you for your valuable contributions to my open source repository!
37 |
38 | ## 🆘 Need Help?
39 | Join our Discord server for any kind of help.
40 |
41 |
42 |
43 |
44 |
45 | ## 🙏 Support
46 | Don't forget to leave a star ⭐
47 |
48 |
49 | ## Star History
50 |
51 | [](https://star-history.com/#oyepriyansh/DevProfiles&Date)
52 | ## 💳 Author
53 | > Priyansh Prajapat (@oyepriyansh)
54 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to DevProfiles
2 |
3 | ### 1. Forking the Repository
4 | A fork is a local copy of the repository that is on your GitHub account, and you can make changes on that repository.
5 |
6 | [**Click here to fork the repository.**](https://github.com/oyepriyansh/DevProfiles/fork)
7 |
8 | ### 2. Make changes
9 | Now go to the file in which you wanna make changes
10 | > Below is the example of adding a profile
11 |
12 |
eg: Adding a Profile
13 |
14 |
15 | add following JSON code to `data.json` file
16 |
17 | ```json
18 | {
19 | "name": "YOUR_NAME",
20 | "image": "IMAGE_URL",
21 | "github": "YOUR GITHUB URL",
22 | "twitter": "YOUR X/TWITTER URL",
23 | "linkedin": "YOUR LINKEDIN URL",
24 | "skills": ["SKILL-1", "SKILL-2", "SKILL-3"]
25 | }
26 | ```
27 |
28 | ##### Fill Placeholder
29 | Change/Replace the placeholders with your image and profiles urls
30 | - [YOUR_NAME] with your name
31 | - [IMAGE-URL] with your image URL
32 | - [SKILL-1], [SKILL-2], [SKILL-3] with your skills
33 | - [YOUR GITHUB URL], [YOUR X/TWITTER URL] & [YOUR LINKEDIN URL] with your Github, X/Twitter & LinkedIn profile URL repectively.
34 |
35 |
36 | ### 3. Pull Request
37 | - You can now commit changes to the your forked repository. Once you've made the changes you want, [create a pull request](https://github.com/oyepriyansh/DevProfiles/pulls).
38 | - Once you have submitted your pull request, it will be reviewed and merged as soon as possible.
39 |
40 | > [!NOTE]
41 | > **Make sure to add a good PR title**
42 | > example: `data: profile addition by John Doe`
43 | > PS: This one example is only for profile addition
44 |
45 | > [!WARNING]
46 | > Do not spam the repository with unnecessary PRs. Make sure to follow the project's [Code of Conduct](https://github.com/oyepriyansh/DevProfiles/blob/main/CODE_OF_CONDUCT.md).
47 |
48 | > [!TIP]
49 | > If you are new to open source contributions, you can refer to [this](https://opensource.guide/how-to-contribute/) guide by GitHub.
--------------------------------------------------------------------------------
/scripts/404.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var e, t;
4 | new function(e) {
5 | const t = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-=+<>,./?[{()}]!@#$%^&*~`|".split(""),
6 | n = e.querySelector(".source"),
7 | o = e.querySelector(".target");
8 | let r, i, l, s = 0;
9 | this.start = function() {
10 | n.style.display = "none", o.style.display = "block",
11 | r = window.setInterval((() => {
12 | s <= n.innerText.length && (o.innerText = n.innerText.substring(0, s) + function(e) {
13 | let n = "";
14 | for (let o = 0; o < e; o++) n +=
15 | t[Math.floor(Math.random() * t.length)];
16 | return n
17 | }(n.innerText.length - s))
18 | }), 15), i = window.setTimeout((() => {
19 | l = window.setInterval((() => {
20 | s > n.innerText.length - 1 && this.stop(), s++
21 | }), 70)
22 | }), 350)
23 | }, this.stop = function() {
24 | n.style.display = "block", o.style.display = "none",
25 | o.innerText = "", s = 0, void 0 !== r && (window.clearInterval(r), r = void 0),
26 | void 0 !== l && (window.clearInterval(l), l = void 0),
27 | void 0 !== i && (window.clearInterval(i), i = void 0)
28 | }
29 | }(document.getElementById("error_text")).start(), "en" !== navigator.language.substring(0, 2).toLowerCase() && (e = document.createElement("script"), t = document.body, e.src = "", e.async = e.defer = !0, e.addEventListener("load", (() => t.removeChild(e))), t.appendChild(e));
30 |
31 | var style = document.createElement('style');
32 | style.type = 'text/css';
33 | style.innerHTML = `
34 | @import url("https://fonts.googleapis.com/css2?family=PT+Serif&family=Poppins:wght@200&display=swap");
35 |
36 | body,
37 | html {
38 | margin: 0;
39 | background-color: #222;
40 | color: #aaa;
41 | font-family: "Poppins", sans-serif;
42 | font-size: 0
43 | }
44 |
45 | .full-height {
46 | height: 100vh
47 | }
48 |
49 | .flex-center {
50 | align-items: center;
51 | display: flex;
52 | justify-content: center
53 | }
54 |
55 | #error_text {
56 | font-size: 32px
57 | }
58 |
59 | button {
60 | display: inline-block;
61 | padding: 10px 20px;
62 | background-color: #2b3031;
63 | border: none;
64 | color: #fff;
65 | border-radius: 4px;
66 | margin-top: 10px;
67 | font-size: 16px;
68 | cursor: pointer;
69 | transition: all .3s ease-in-out
70 | }
71 |
72 | button:hover {
73 | background-color: #555
74 | }
75 | `;
76 | document.head.appendChild(style);
77 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | DevProfiles - List Your Developer Profile
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
DevProfiles
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
41 |
42 |
43 | No Profile Found
44 |
45 |
46 |
47 |
77 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, religion, or sexual identity
10 | and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | * Demonstrating empathy and kindness toward other people
21 | * Being respectful of differing opinions, viewpoints, and experiences
22 | * Giving and gracefully accepting constructive feedback
23 | * Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | * Focusing on what is best not just for us as individuals, but for the
26 | overall community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | * The use of sexualized language or imagery, and sexual attention or
31 | advances of any kind
32 | * Trolling, insulting or derogatory comments, and personal or political attacks
33 | * Public or private harassment
34 | * Publishing others' private information, such as a physical or email
35 | address, without their explicit permission
36 | * Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official e-mail address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | oyepriyansh@duck.com.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series
86 | of actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or
93 | permanent ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within
113 | the community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.0, available at
119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120 |
121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
122 | enforcement ladder](https://github.com/mozilla/diversity).
123 |
124 | [homepage]: https://www.contributor-covenant.org
125 |
126 | For answers to common questions about this code of conduct, see the FAQ at
127 | https://www.contributor-covenant.org/faq. Translations are available at
128 | https://www.contributor-covenant.org/translations.
129 |
--------------------------------------------------------------------------------
/styles/style.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap");
2 |
3 | * {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 |
9 | body {
10 | background-color: #1e1e1e;
11 | color: #ddd;
12 | font-family: "Poppins", sans-serif;
13 | text-align: center;
14 | margin: 0;
15 | padding: 0;
16 | }
17 |
18 | ::-webkit-scrollbar {
19 | width: 9px;
20 | }
21 | ::-webkit-scrollbar-track {
22 | background-color: #121212;
23 | }
24 | ::-webkit-scrollbar-thumb {
25 | background-color: #333333;
26 | border-radius: 12px;
27 | }
28 |
29 | header {
30 | background-color: #292929;
31 | position: sticky;
32 | top: 0;
33 | z-index: 10;
34 | opacity: 0.9;
35 | display: flex;
36 | align-items: center;
37 | justify-content: center;
38 | }
39 |
40 | .logo {
41 | background: url(/assets/devprofilesicon.png) no-repeat;
42 | background-size: contain;
43 | width: 40px;
44 | height: 40px;
45 | display: inline-block;
46 | }
47 |
48 | h1 {
49 | color: #29f199;
50 | padding: 20px 20px 20px 5px;
51 | font-size: 36px;
52 | font-weight: 500;
53 | }
54 |
55 | .container {
56 | display: flex;
57 | flex-wrap: wrap;
58 | justify-content: center;
59 | max-width: 1200px;
60 | margin: 0 auto;
61 | padding: 5px;
62 | }
63 |
64 | .profile {
65 | background-color: #292929;
66 | border: none;
67 | border-radius: 10px;
68 | padding: 20px;
69 | margin: 20px;
70 | width: calc(33.33% - 40px);
71 | display: flex;
72 | flex-direction: column;
73 | justify-content: space-between;
74 | gap: 15px;
75 | }
76 | .profile:hover {
77 | background-color: #333333;
78 | border: 1px solid #a66efc;
79 | transition: 150ms;
80 | }
81 |
82 | .pfp img {
83 | width: 100px;
84 | height: 100px;
85 | border-radius: 50%;
86 | margin-bottom: 10px;
87 | }
88 |
89 | .name {
90 | font-weight: 400;
91 | font-size: 20px;
92 | }
93 |
94 | .skills {
95 | display: flex;
96 | flex-wrap: wrap;
97 | justify-content: center;
98 | gap: 7px;
99 | }
100 |
101 | .skill {
102 | background-color: #444444;
103 | padding: 5px 10px;
104 | border-radius: 5px;
105 | font-size: 14px;
106 | }
107 |
108 | .profile .bio {
109 | color: #999;
110 | text-align: center;
111 | line-height: 1.4em;
112 | padding: 0 10px;
113 | }
114 |
115 | .social {
116 | display: flex;
117 | justify-content: center;
118 | background-color: #444444;
119 | padding: 10px;
120 | border-radius: 20px;
121 | }
122 |
123 | .social a {
124 | color: #fff;
125 | margin: 0 10px;
126 | font-size: 24px;
127 | transition: color 0.3s, font-size 0.3s;
128 | }
129 | .social a:hover {
130 | color: #8d44fa;
131 | font-size: 28px;
132 | }
133 |
134 | button {
135 | color: #fff;
136 | background-color: #a66efc;
137 | border-radius: 5%;
138 | cursor: pointer;
139 | padding: 10px 20px;
140 | border: none;
141 | font-size: 16px;
142 | margin: 4px 2px;
143 | }
144 |
145 | .search {
146 | margin: 30px 0;
147 | }
148 |
149 | #searchInput {
150 | width: 80%;
151 | padding: 10px;
152 | border: none;
153 | border-radius: 5px;
154 | background-color: #1e1e1e;
155 | color: #fff;
156 | font-size: 16px;
157 | box-shadow: 0px 0px 5px rgba(226, 226, 226, 0.938);
158 | }
159 | #searchInput::placeholder {
160 | color: #777;
161 | }
162 | #searchInput:focus {
163 | outline: none;
164 | box-shadow: 0px 0px 5px rgba(255, 255, 255, 0.5);
165 | }
166 |
167 | footer {
168 | background-color: #1e1e1e;
169 | padding: 40px 0;
170 | display: flex;
171 | flex-direction: column;
172 | align-items: center;
173 | }
174 |
175 | .top-btn {
176 | width: 50px;
177 | height: 50px;
178 | padding: 10px;
179 | position: fixed;
180 | bottom: 0;
181 | right: 0;
182 | z-index: 10;
183 | margin-right: 10px;
184 | margin-bottom: 10px;
185 | display: none;
186 | border-radius: 10px;
187 | background-color: #a66efc;
188 | }
189 | .arrow-icon {
190 | animation: bounce 2s infinite ease-in-out;
191 | }
192 | .arrow-icon > path {
193 | fill: #fff;
194 | }
195 |
196 | @keyframes bounce {
197 | 0%,
198 | 100% {
199 | transform: translateY(0px);
200 | }
201 | 50% {
202 | transform: translateY(-20%);
203 | }
204 | }
205 |
206 | .no-profile {
207 | padding: 20px;
208 | display: none;
209 | }
210 |
211 | #Dev {
212 | color: #faaf3a;
213 | }
214 |
215 | @media screen and (max-width: 768px) {
216 | .container {
217 | justify-content: center;
218 | }
219 | .profile {
220 | width: 100%;
221 | }
222 | }
223 |
224 | .footer-content {
225 | display: flex;
226 | width: 80%;
227 | max-width: 1200px;
228 | flex-direction: column;
229 | align-items: center;
230 | }
231 | .about {
232 | margin-bottom: 20px;
233 | text-align: center;
234 | }
235 | .flinks {
236 | display: flex;
237 | flex-direction: column;
238 | align-items: center;
239 | }
240 | .flinks > div {
241 | margin: 10px 0;
242 | text-align: center;
243 | }
244 | .fbtn {
245 | margin-top: 20px;
246 | }
247 | .about p.logo {
248 | font-size: 24px;
249 | font-weight: bold;
250 | color: #fff;
251 | margin: 0;
252 | }
253 | .about p {
254 | margin: 10px 0;
255 | color: #aaa;
256 | }
257 | .ficons {
258 | margin-top: 20px;
259 | }
260 | .ficons a {
261 | color: #fff;
262 | padding: 10px;
263 | font-size: 24px;
264 | text-decoration: none;
265 | transition: color 0.3s;
266 | }
267 | .ficons a:hover {
268 | color: #a66efc;
269 | }
270 | .flinks p {
271 | margin-bottom: 20px;
272 | font-weight: bold;
273 | color: #fff;
274 | }
275 | .flinks a {
276 | display: block;
277 | color: #ddd;
278 | margin: 5px 0;
279 | text-decoration: none;
280 | }
281 | .flinks a:hover {
282 | color: #a66efc;
283 | }
284 | #star {
285 | background-color: #fff;
286 | color: #141111f1;
287 | border-radius: 5px;
288 | padding: 20px;
289 | margin-bottom: 10px;
290 | text-decoration: none;
291 | display: flex;
292 | align-items: center;
293 | font-weight: bold;
294 | justify-content: center;
295 | }
296 | #sponsor {
297 | background-color: #e62d7766;
298 | color: #fffffff1;
299 | border-radius: 5px;
300 | padding: 20px;
301 | text-decoration: none;
302 | display: flex;
303 | align-items: center;
304 | font-weight: bold;
305 | justify-content: center;
306 | }
307 | .copyright {
308 | margin: 20px;
309 | text-align: center;
310 | }
311 |
312 | @media (min-width: 768px) {
313 | .footer-content {
314 | flex-direction: row;
315 | justify-content: space-between;
316 | }
317 | .about, .flinks {
318 | flex: 1;
319 | }
320 | .about {
321 | text-align: left;
322 | }
323 | .flinks {
324 | flex-direction: row;
325 | align-items: flex-start;
326 | }
327 | .flinks > div {
328 | margin: 0 10px;
329 | text-align: left;
330 | }
331 | .fbtn {
332 | margin-top: 0;
333 | }
334 | }
335 |
--------------------------------------------------------------------------------
/scripts/app.js:
--------------------------------------------------------------------------------
1 | // Redirect if the URL contains an empty search query
2 | const urlParams = new URLSearchParams(window.location.search);
3 | if (urlParams.has('search') && urlParams.get('search').trim() === '') {
4 | window.location.href = '/'; // Redirect to the root URL if search parameter is empty
5 | }
6 |
7 | const container = document.querySelector('.container');
8 | const defaultImage = "https://oyepriyansh.pages.dev/i/5nf5fd.png";
9 | const searchInput = document.getElementById('searchInput'); // Assuming there's an input field for searching
10 | const noProfileMessage = document.querySelector('.no-profile'); // Message element
11 | const fabButton = document.getElementById("backToTopBtn");
12 |
13 | // Load profiles from JSON file
14 | const loadProfiles = async () => {
15 | try {
16 | const response = await fetch('/data.json');
17 | if (!response.ok) {
18 | throw new Error('Network response was not ok');
19 | }
20 | const profiles = await response.json();
21 | displayProfiles(shuffleArray(profiles));
22 | } catch (error) {
23 | console.error('Error fetching profiles:', error);
24 | noProfileMessage.textContent = 'Failed to load profiles. Please try again later.';
25 | noProfileMessage.style.display = 'block'; // Show error message
26 | }
27 | };
28 |
29 | // Display profiles on the page
30 | const displayProfiles = async (profiles) => {
31 | container.innerHTML = ''; // Clear existing profiles
32 | for (const profile of profiles) {
33 | const profileDiv = document.createElement('div');
34 | profileDiv.classList.add('profile');
35 |
36 | // Determine the image source
37 | let imageSrc = profile.image || await fetchGitHubImage(profile.github);
38 |
39 | // Skills
40 | const skills = profile.skills.map(skill => `${skill}`).join('');
41 |
42 | // Bio
43 | let bio = "";
44 |
45 | if (profile.bio && profile.bio.trim() !== "") {
46 | const maxLength = 60;
47 | const bioText = profile.bio.length > maxLength
48 | ? profile.bio.substring(0, maxLength) + "..."
49 | : profile.bio;
50 | bio = `