Skip to content

Commit d4b2f1a

Browse files
committed
feat: formatting
1 parent ef7a1d4 commit d4b2f1a

4 files changed

Lines changed: 64 additions & 24 deletions

File tree

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,3 @@ Deployment is manual and triggered from GitHub Actions:
9696
3. Click **Run workflow**
9797

9898
The site is deployed to GitHub Pages at `https://2026.es.pycon.org/`.
99-

src/components/JobsPage.astro

Lines changed: 54 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,15 @@ interface JobFrontmatter {
2121
const { lang } = Astro.props
2222
const t = jobsTexts[(lang || 'es') as keyof typeof jobsTexts]
2323
24-
const esJobs = Object.values(import.meta.glob('../data/jobs/es/*.md', { eager: true })) as { frontmatter: JobFrontmatter }[]
25-
const enJobs = Object.values(import.meta.glob('../data/jobs/en/*.md', { eager: true })) as { frontmatter: JobFrontmatter }[]
26-
const caJobs = Object.values(import.meta.glob('../data/jobs/ca/*.md', { eager: true })) as { frontmatter: JobFrontmatter }[]
24+
const esJobs = Object.values(import.meta.glob('../data/jobs/es/*.md', { eager: true })) as {
25+
frontmatter: JobFrontmatter
26+
}[]
27+
const enJobs = Object.values(import.meta.glob('../data/jobs/en/*.md', { eager: true })) as {
28+
frontmatter: JobFrontmatter
29+
}[]
30+
const caJobs = Object.values(import.meta.glob('../data/jobs/ca/*.md', { eager: true })) as {
31+
frontmatter: JobFrontmatter
32+
}[]
2733
2834
const allJobsMap: Record<string, { frontmatter: JobFrontmatter }[]> = {
2935
es: esJobs,
@@ -59,16 +65,22 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
5965
<p class="text-pycon-gray-25 text-lg">{t.no_jobs}</p>
6066
) : (
6167
<section aria-labelledby="jobs-list-heading" class="grid md:grid-cols-2 gap-8">
62-
<h2 id="jobs-list-heading" class="sr-only">{t.hero}</h2>
68+
<h2 id="jobs-list-heading" class="sr-only">
69+
{t.hero}
70+
</h2>
6371
{jobs.map(({ frontmatter: job }) => (
64-
<article class={`flex flex-col bg-pycon-black/40 p-6 rounded-2xl border transition-all motion-safe:hover:-translate-y-2 ${isFeatured(job.tier) ? 'border-pycon-orange/50 hover:border-pycon-orange' : 'border-white/5 hover:border-white/20'}`}>
72+
<article
73+
class={`flex flex-col bg-pycon-black/40 p-6 rounded-2xl border transition-all motion-safe:hover:-translate-y-2 ${isFeatured(job.tier) ? 'border-pycon-orange/50 hover:border-pycon-orange' : 'border-white/5 hover:border-white/20'}`}
74+
>
6575
<header class="flex items-start justify-between mb-3">
6676
<div>
6777
<h2 class="text-xl font-bold text-white mb-1">{job.title}</h2>
6878
<p class="text-pycon-orange text-lg font-medium">{job.company}</p>
6979
</div>
7080
{isFeatured(job.tier) && (
71-
<span class="px-3 py-1 bg-pycon-orange/20 text-pycon-orange text-xs font-bold rounded-full uppercase">{t.featured}</span>
81+
<span class="px-3 py-1 bg-pycon-orange/20 text-pycon-orange text-xs font-bold rounded-full uppercase">
82+
{t.featured}
83+
</span>
7284
)}
7385
</header>
7486

@@ -81,7 +93,9 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
8193
<p class="text-sm text-pycon-gray-50 mb-2 uppercase tracking-wide">{t.skills}</p>
8294
<div class="flex flex-wrap gap-2">
8395
{job.skills.map((skill) => (
84-
<span class="px-3 py-1.5 bg-gradient-to-r from-pycon-orange/30 to-pycon-yellow/20 text-white text-sm rounded-full border border-pycon-orange/30">{skill}</span>
96+
<span class="px-3 py-1.5 bg-gradient-to-r from-pycon-orange/30 to-pycon-yellow/20 text-white text-sm rounded-full border border-pycon-orange/30">
97+
{skill}
98+
</span>
8599
))}
86100
</div>
87101
</div>
@@ -90,20 +104,47 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
90104
<footer class="mt-auto">
91105
<div class="flex flex-wrap items-center gap-x-4 gap-y-2 text-base text-pycon-gray-50 mb-4">
92106
<div class="flex items-center gap-2">
93-
<svg class="w-4 h-4 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
94-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
95-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
107+
<svg
108+
class="w-4 h-4 shrink-0"
109+
fill="none"
110+
stroke="currentColor"
111+
viewBox="0 0 24 24"
112+
aria-hidden="true"
113+
>
114+
<path
115+
stroke-linecap="round"
116+
stroke-linejoin="round"
117+
stroke-width="2"
118+
d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"
119+
/>
120+
<path
121+
stroke-linecap="round"
122+
stroke-linejoin="round"
123+
stroke-width="2"
124+
d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"
125+
/>
96126
</svg>
97127
<span>{job.location}</span>
98128
</div>
99129
<span class="px-2 py-0.5 bg-white/5 rounded text-xs">{job.type}</span>
100130
{job.salary && <span class="text-pycon-yellow">{job.salary}</span>}
101131
</div>
102132

103-
<a href={job.apply_url} target="_blank" rel="noopener noreferrer" aria-label={`${job.title} en ${job.company} ${t.apply} ${t.location}: ${job.location}`} class="inline-flex items-center gap-2 px-4 py-2 bg-pycon-orange text-white font-bold rounded-lg hover:bg-white hover:text-pycon-orange transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-pycon-orange">
133+
<a
134+
href={job.apply_url}
135+
target="_blank"
136+
rel="noopener noreferrer"
137+
aria-label={`${job.title} en ${job.company} ${t.apply} ${t.location}: ${job.location}`}
138+
class="inline-flex items-center gap-2 px-4 py-2 bg-pycon-orange text-white font-bold rounded-lg hover:bg-white hover:text-pycon-orange transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-pycon-orange"
139+
>
104140
{t.apply}
105141
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
106-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" />
142+
<path
143+
stroke-linecap="round"
144+
stroke-linejoin="round"
145+
stroke-width="2"
146+
d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
147+
/>
107148
</svg>
108149
</a>
109150
</footer>
@@ -142,4 +183,4 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
142183
animation: none;
143184
}
144185
}
145-
</style>
186+
</style>

src/data/jobs/_plantilla-oferta.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
2-
title: "Nombre del puesto"
3-
company: "Nombre de la empresa"
4-
location: "Remoto / Madrid / Barcelona"
5-
type: "Full-time"
6-
description: "Descripción breve del puesto. Explica qué harás, el equipo, el proyecto, etc."
2+
title: 'Nombre del puesto'
3+
company: 'Nombre de la empresa'
4+
location: 'Remoto / Madrid / Barcelona'
5+
type: 'Full-time'
6+
description: 'Descripción breve del puesto. Explica qué harás, el equipo, el proyecto, etc.'
77
skills: [Python, Django, PostgreSQL]
8-
salary: "35k-50k"
9-
apply_url: "https://ejemplo.com/careers"
10-
tier: "gold"
8+
salary: '35k-50k'
9+
apply_url: 'https://ejemplo.com/careers'
10+
tier: 'gold'
1111
draft: true
12-
---
12+
---

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"extends": "astro/tsconfigs/base",
3-
"include": ["src/**/*"],
3+
"include": ["src/**/*"],
44
"compilerOptions": {
55
"baseUrl": ".",
66
"paths": {

0 commit comments

Comments
 (0)