Skip to content

Commit 01f8728

Browse files
committed
Jobs Board Section
1 parent a801534 commit 01f8728

File tree

8 files changed

+3601
-4917
lines changed

8 files changed

+3601
-4917
lines changed

package-lock.json

Lines changed: 3299 additions & 4914 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,8 @@
2020
"postcss": "^8.2.9",
2121
"postcss-import": "^14.0.0",
2222
"tailwindcss": "^2.0.4"
23+
},
24+
"dependencies": {
25+
"axios": "^1.10.0"
2326
}
2427
}

src/_data/jobData.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const axios = require('axios');
2+
3+
async function fetchJobData() {
4+
const SPREADSHEET_ID = "1oyMFGGKmR6u5JVpd691iYD_6TuDi3pbvyaajAZfGkGw";
5+
const URL = `https://docs.google.com/spreadsheets/d/${SPREADSHEET_ID}/gviz/tq?tqx=out:json`;
6+
7+
try {
8+
const response = await axios.get(URL);
9+
const text = response.data;
10+
11+
const json = JSON.parse(text.substring(47).slice(0, -2));
12+
const rows = json.table.rows;
13+
14+
const jobPostings = rows.map((row) => ({
15+
title : row.c[1] && row.c[1].v ? row.c[1].v : "No title",
16+
company : row.c[2] && row.c[2].v ? row.c[2].v : "Unknown",
17+
companyWebsite : row.c[3] && row.c[3].v ? row.c[3].v : "#",
18+
jobType : row.c[4] && row.c[4].v ? row.c[4].v : "N/A",
19+
location : row.c[5] && row.c[5].v ? row.c[5].v : "Unknown",
20+
description : row.c[6] && row.c[6].v ? row.c[6].v : "No description available",
21+
linkToApply : row.c[7] && row.c[7].v ? row.c[7].v : "#"
22+
}));
23+
24+
return jobPostings;
25+
} catch (error) {
26+
console.error("Error fetching job data:", error);
27+
return [];
28+
}
29+
}
30+
31+
module.exports = async () => {
32+
return await fetchJobData();
33+
};

src/_includes/components/button.njk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
{% set bg_class = "bg-pycon-lime hover:bg-pycon-lime/90" %}
44
{% set text_class = "text-black" %}
55
{% else %}
6-
{% set bg_class = "bg-transparent border-pycon-lime" %}
7-
{% set text_class = "text-pycon-lime" %}
6+
{% set bg_class = "bg-pycon-purple hover:bg-pycon-purple/90" %}
7+
{% set text_class = "text-black" %}
88
{% endif %}
99

1010
<a

src/_includes/navbar.njk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"name": "About",
1212
"hasSubmenu": true,
1313
"submenu": [
14-
{"name": "FAQ's", "link": "about/faqs"}
14+
{"name": "FAQ's", "link": "about/faqs"},
15+
{"name": "Jobs Board", "link": "about/job/"}
1516
]
1617
},
1718
{

src/about/job/guidelines.njk

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
title: Job Board - Rules and Guildelines
3+
description: PyCon India 2025 Job Board
4+
layout: base.njk
5+
---
6+
7+
<div class="w-full h-auto bg-pycon-blue -mb-24 px-[6%] flex flex-col md:flex-row">
8+
<div class="pt-32 pb-8 md:pb-32 w-full lg:w-[70%]">
9+
<div class="black-han-sans-regular font-normal text-3xl md:text-5xl md:text-center text-[#FFFFFF] text-center lg:text-left">
10+
Job Board - Rules and Guidelines
11+
</div>
12+
</div>
13+
<div class="lg:w-[30%] w-[80%] lg:mt-60 flex items-center justify-center mx-auto">
14+
<img src="{{ env.baseUrl }}img/assets/notepad.svg" alt="Guide" class="w-[40%] lg:w-[60%] transition-transform duration-100" style="animation: floating 2s ease-in-out infinite;">
15+
<img src="{{ env.baseUrl }}img/assets/book-stars.svg" alt="Guide" class="w-[40%] lg:w-[60%] transition-transform duration-100" style="animation: floating 2s ease-in-out infinite;">
16+
</div>
17+
</div>
18+
19+
20+
<div class="main-container pt-16 md:pt-48 bg-lavender w-full h-auto px-[6%]">
21+
<div class="pb-40 md:pb-60 lg:pb-[20%] w-full text-justify lg:w-[70%]">
22+
<div class="text-md lg:text-xl font-light">
23+
<div class="pt-8">
24+
<p class="text-2xl font-bold flex items-center"><span><img src="{{ env.baseUrl }}img/assets/square-lime.svg" alt="Bullet Icon" class="w-5 mr-2"></span>Job Submission & Approval:</p>
25+
<ul class="list-none pt-4 space-y-4">
26+
<li class="flex">
27+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
28+
<span>We do not impose any restrictions on the industry/technology of the submitted jobs. Any jobs that are helpful to the community are welcome.</span>
29+
</li>
30+
<li class="flex">
31+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
32+
<span>After successful job submission, each job will undergo a verification process by the PyCon India 2025 team to ensure there are no spam postings.</span>
33+
</li>
34+
<li class="flex">
35+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
36+
<span>The approval process may take approximately 2-3 hours.</span>
37+
</li>
38+
<li class="flex">
39+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
40+
<span>Approved jobs will be made visible on the job board once they pass the verification process.</span>
41+
</li>
42+
<li class="flex">
43+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-1">
44+
<span>Submissions that do not meet the guidelines may be rejected.</span>
45+
</li>
46+
</ul>
47+
</div>
48+
49+
<div class="pt-8">
50+
<p class="text-2xl font-bold flex items-center"><span><img src="{{ env.baseUrl }}img/assets/square-lime.svg" alt="Bullet Icon" class="w-5 mr-2"></span>Job Posts Order:</p>
51+
<ul class="list-none pt-4 space-y-4">
52+
<li class="flex">
53+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
54+
<span>Job posts are sorted based on the timestamp they are submitted. The first job submitted will be visible first, followed by subsequent submissions in chronological order.</span>
55+
</li>
56+
</ul>
57+
</div>
58+
59+
<div class="pt-8">
60+
<p class="text-2xl font-bold flex items-center"><span><img src="{{ env.baseUrl }}img/assets/square-lime.svg" alt="Bullet Icon" class="w-5 mr-2"></span>Transparency:</p>
61+
<ul class="list-none pt-4 space-y-4">
62+
<li class="flex">
63+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
64+
<span>After successful job submission, each job will undergo a verification process by the PyCon India 2025 team to ensure there are no spam postings.</span>
65+
</li>
66+
<li class="flex">
67+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
68+
<span>Job seekers and companies are encouraged to communicate directly with each other for job-related inquiries, applications, and hiring decisions.</span>
69+
</li>
70+
</ul>
71+
</div>
72+
73+
<div class="pt-8">
74+
<p class="text-2xl font-bold flex items-center"><span><img src="{{ env.baseUrl }}img/assets/square-lime.svg" alt="Bullet Icon" class="w-5 mr-2"></span>Content Moderation:</p>
75+
<ul class="list-none pt-4 space-y-4">
76+
<li class="flex">
77+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
78+
<span>PyCon India 2025 reserves the right to moderate and remove job posts that violate submission guidelines or community standards.</span>
79+
</li>
80+
<li class="flex">
81+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
82+
<span>Users are encouraged to report any inappropriate content or issues with job posts for review to our team at <a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="underline">[email protected]</a>.</span>
83+
</li>
84+
</ul>
85+
</div>
86+
87+
<div class="pt-8">
88+
<p class="text-2xl font-bold flex items-center"><span><img src="{{ env.baseUrl }}img/assets/square-lime.svg" alt="Bullet Icon" class="w-5 mr-2"></span>Respect and Inclusivity:</p>
89+
<ul class="list-none pt-4 space-y-4">
90+
<li class="flex">
91+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
92+
<span>Users are expected to maintain a respectful and inclusive environment when interacting with job listings or other users on the platform.</span>
93+
</li>
94+
<li class="flex">
95+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
96+
<span>Any kind of disrespectful, discriminatory, or offensive behavior against any party will not be tolerated.</span>
97+
</li>
98+
<li class="flex">
99+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
100+
<span>Please make sure to follow PyCon India's <a href="{{ env.baseUrl }}coc/guidelines" class="underline text-pycon-blue">Code of Conduct</a>.</span>
101+
</li>
102+
<li class="flex">
103+
<img src="{{ env.baseUrl }}img/assets/circle-purple.svg" alt="Bullet Icon" class="w-4 h-4 mr-2 mt-2">
104+
<span>If you feel unsafe during any of the interactions, or feel like someone is violating the rules, please <a href="{{ env.baseUrl }}coc/reporting" class="underline text-pycon-blue">report the incident to the CoC Workgroup</a>.</span>
105+
</li>
106+
</ul>
107+
</div>
108+
</div>
109+
</div>
110+
</div>

src/about/job/job.njk

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
---
2+
title: Job Board - Pycon India 2025
3+
description: PyCon India 2025 Job Board
4+
layout: base.njk
5+
---
6+
7+
{% from "components/flat-card.njk" import flatCard %}
8+
{% from "components/button.njk" import button %}
9+
{% set job_postings = jobData %}
10+
11+
<div class="w-full h-auto bg-pycon-blue px-[6%] pb-32 flex flex-col md:flex-row">
12+
<div class="pt-32 pb-8 md:pb-32 w-full lg:w-[70%]">
13+
<div class="black-han-sans-regular font-normal text-4xl md:text-5xl md:text-center text-[#FFFFFF] text-center lg:text-left">
14+
Job Board
15+
</div>
16+
<div class="pt-10 font-light text-lg md:text-2xl md:text-center text-white text-center lg:text-left">
17+
<p class="mb-0">Submit your job posting <a href="https://docs.google.com/forms/d/e/1FAIpQLSce8d2wOm976llzPUlF3NXzfx4K7zPamnxHSGWup1HDKMA-3g/viewform?usp=dialog" target="_blank" rel="noopener noreferrer" class="underline">here</a></p>
18+
<p>Check out the <a href="{{ env.baseUrl }}about/job/guidelines/" class="underline">rules and guidelines</a> </p>
19+
</div>
20+
</div>
21+
<div class="lg:w-[30%] w-[80%] lg:mt-40 flex items-center justify-center mx-auto">
22+
<img src="/img/assets/abstract-obj.svg" alt="Guide" class="w-[40%] lg:w-[60%] transition-transform duration-100" style="animation: floating 2s ease-in-out infinite;">
23+
<img src="/img/assets/star-lime-vector.svg" alt="Guide" class="w-[10%] lg:w-[10%] transition-transform duration-100" style="animation: floating 2s ease-in-out infinite;">
24+
</div>
25+
</div>
26+
27+
28+
<div class="job-container bg-lavender w-full h-auto -pt-20 px-[6%] pb-72 md:pb-40 relative">
29+
<div class="flex flex-wrap -mt-24 -mx-4">
30+
<!-- Column 1 -->
31+
<div class="w-full lg:w-1/3 px-4 flex flex-col gap-8">
32+
{% for job_post in job_postings %}
33+
{% if loop.index0 % 3 == 0 %}
34+
{% set bg_color = 'purple' if loop.index0 // 3 % 2 == 0 else 'lime' %}
35+
{% call flatCard(bg=bg_color) -%}
36+
<div class="p-4">
37+
<div class="text-3xl font-semibold">{{ job_post.title }}</div>
38+
<div class="pt-4">
39+
<span class="text-2xl">
40+
<a href="{{ job_post.company_website }}" class="underline">
41+
{{ job_post.company }}
42+
</a>
43+
</span>
44+
<p class="pt-8 flex items-center gap-x-2 mb-0">
45+
<i class="fa-solid fa-briefcase text-xl text-[#475569]"></i>
46+
<span>{{ job_post.job_type }}</span>
47+
<i class="fa-solid fa-location-dot text-xl text-[#475569]"></i>
48+
<span>{{ job_post.location }}</span>
49+
</p>
50+
</div>
51+
<div class="pt-2 text-gray-700">
52+
<p class="text-justify">
53+
{{ job_post.description }}
54+
</p>
55+
</div>
56+
<div class="pt-4">
57+
{{ button(text="Apply", url=job_post.link_to_apply, lime_bg=(bg_color == "purple"), env=env) }}
58+
</div>
59+
</div>
60+
{%- endcall %}
61+
{% endif %}
62+
{% endfor %}
63+
</div>
64+
65+
<!-- Column 2 -->
66+
<div class="w-full pt-8 lg:pt-16 lg:w-1/3 px-4 flex flex-col gap-8">
67+
{% for job_post in job_postings %}
68+
{% if loop.index0 % 3 == 1 %}
69+
{% set bg_color = 'purple' if loop.index0 // 3 % 2 == 1 else 'lime' %}
70+
{% call flatCard(bg=bg_color) -%}
71+
<div class="p-4">
72+
<div class="text-3xl font-semibold">{{ job_post.title }}</div>
73+
<div class="pt-4">
74+
<span class="text-2xl">
75+
<a href="{{ job_post.company_website }}" class="underline">
76+
{{ job_post.company }}
77+
</a>
78+
</span>
79+
<p class="pt-8 flex items-center gap-x-2 mb-0">
80+
<i class="fa-solid fa-briefcase text-xl text-[#475569]"></i>
81+
<span>{{ job_post.job_type }}</span>
82+
<i class="fa-solid fa-location-dot text-xl text-[#475569]"></i>
83+
<span>{{ job_post.location }}</span>
84+
</p>
85+
</div>
86+
<div class="pt-2 text-gray-700">
87+
<p class="text-justify">
88+
{{ job_post.description }}
89+
</p>
90+
</div>
91+
<div class="pt-4">
92+
{{ button(text="Apply", url=job_post.link_to_apply, lime_bg=(bg_color == "purple"), env=env) }}
93+
</div>
94+
</div>
95+
{%- endcall %}
96+
{% endif %}
97+
{% endfor %}
98+
</div>
99+
100+
<!-- Column 3 -->
101+
<div class="w-full pt-8 lg:pt-0 lg:w-1/3 px-4 flex flex-col gap-8">
102+
{% for job_post in job_postings %}
103+
{% if loop.index0 % 3 == 2 %}
104+
{% set bg_color = 'purple' if loop.index0 // 3 % 2 == 0 else 'lime' %}
105+
{% call flatCard(bg=bg_color) -%}
106+
<div class="p-4">
107+
<div class="text-3xl font-semibold">{{ job_post.title }}</div>
108+
<div class="pt-4">
109+
<span class="text-2xl">
110+
<a href="{{ job_post.company_website }}" class="underline">
111+
{{ job_post.company }}
112+
</a>
113+
</span>
114+
<p class="pt-8 flex items-center gap-x-2 mb-0">
115+
<i class="fa-solid fa-briefcase text-xl text-[#475569]"></i>
116+
<span>{{ job_post.job_type }}</span>
117+
<i class="fa-solid fa-location-dot text-xl text-[#475569]"></i>
118+
<span>{{ job_post.location }}</span>
119+
</p>
120+
</div>
121+
<div class="pt-2 text-gray-700">
122+
<p class="text-justify">
123+
{{ job_post.description }}
124+
</p>
125+
</div>
126+
<div class="pt-4">
127+
{{ button(text="Apply", url=job_post.link_to_apply, lime_bg=(bg_color == "purple"), env=env) }}
128+
</div>
129+
</div>
130+
{%- endcall %}
131+
{% endif %}
132+
{% endfor %}
133+
</div>
134+
</div>
135+
</div>
136+
137+
<script></script>
Lines changed: 15 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)