Skip to content

Commit 62a83ef

Browse files
committed
feat: formatting
1 parent ef7a1d4 commit 62a83ef

5 files changed

Lines changed: 32 additions & 25 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: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
import { jobsTexts } from '../i18n/jobs'
3+
import { menuTexts } from '../i18n/menu'
34
45
interface Props {
56
lang: string
@@ -20,6 +21,7 @@ interface JobFrontmatter {
2021
2122
const { lang } = Astro.props
2223
const t = jobsTexts[(lang || 'es') as keyof typeof jobsTexts]
24+
const menuT = menuTexts[(lang || 'es') as keyof typeof menuTexts]
2325
2426
const esJobs = Object.values(import.meta.glob('../data/jobs/es/*.md', { eager: true })) as { frontmatter: JobFrontmatter }[]
2527
const enJobs = Object.values(import.meta.glob('../data/jobs/en/*.md', { eager: true })) as { frontmatter: JobFrontmatter }[]
@@ -58,19 +60,18 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
5860
jobs.length === 0 ? (
5961
<p class="text-pycon-gray-25 text-lg">{t.no_jobs}</p>
6062
) : (
61-
<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>
63+
<ul class="grid md:grid-cols-2 gap-8 list-none m-0 p-0">
6364
{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'}`}>
65-
<header class="flex items-start justify-between mb-3">
65+
<li 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'}`}>
66+
<div class="flex items-start justify-between mb-3">
6667
<div>
6768
<h2 class="text-xl font-bold text-white mb-1">{job.title}</h2>
6869
<p class="text-pycon-orange text-lg font-medium">{job.company}</p>
6970
</div>
7071
{isFeatured(job.tier) && (
7172
<span class="px-3 py-1 bg-pycon-orange/20 text-pycon-orange text-xs font-bold rounded-full uppercase">{t.featured}</span>
7273
)}
73-
</header>
74+
</div>
7475

7576
<div class="h-20 mb-3">
7677
<p class="text-pycon-gray-25 text-base leading-relaxed line-clamp-3">{job.description}</p>
@@ -79,15 +80,15 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
7980
{job.skills && job.skills.length > 0 && (
8081
<div class="mb-3">
8182
<p class="text-sm text-pycon-gray-50 mb-2 uppercase tracking-wide">{t.skills}</p>
82-
<div class="flex flex-wrap gap-2">
83+
<ul class="flex flex-wrap gap-2 list-none m-0 p-0" aria-label={t.skills}>
8384
{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>
85+
<li><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></li>
8586
))}
86-
</div>
87+
</ul>
8788
</div>
8889
)}
8990

90-
<footer class="mt-auto">
91+
<div class="mt-auto">
9192
<div class="flex flex-wrap items-center gap-x-4 gap-y-2 text-base text-pycon-gray-50 mb-4">
9293
<div class="flex items-center gap-2">
9394
<svg class="w-4 h-4 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
@@ -100,16 +101,16 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'
100101
{job.salary && <span class="text-pycon-yellow">{job.salary}</span>}
101102
</div>
102103

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">
104+
<a href={job.apply_url} target="_blank" rel="noopener noreferrer" aria-label={`${job.title} en ${job.company} ${t.apply} ${t.location}: ${job.location} ${menuT.new_tab}`} 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">
104105
{t.apply}
105106
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
106107
<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" />
107108
</svg>
108109
</a>
109-
</footer>
110-
</article>
110+
</div>
111+
</li>
111112
))}
112-
</section>
113+
</ul>
113114
)
114115
}
115116
</div>

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+
---

src/pages/[lang]/jobs.astro

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,17 @@ const titles = {
1515
ca: 'Ofertes de treball | PyConES 2026',
1616
}
1717
18+
const descriptions = {
19+
es: 'Explora las ofertas de trabajo de los patrocinadores de PyConES 2026. Encuentra oportunidades como Python Developer, DevOps Engineer y más.',
20+
en: 'Explore job offers from PyConES 2026 sponsors. Find opportunities like Python Developer, DevOps Engineer and more.',
21+
ca: 'Explora les ofertes de treball dels patrocinadors de PyConES 2026. Troba oportunitats com Python Developer, DevOps Engineer i més.',
22+
}
23+
1824
const title = titles[(lang || 'es') as keyof typeof titles]
25+
const description = descriptions[(lang || 'es') as keyof typeof descriptions]
1926
---
2027

21-
<Layout title={title}>
28+
<Layout title={title} description={description}>
2229
<div class="grow w-full pt-24">
2330
<div class="container mx-auto px-4 md:px-8">
2431
<JobsPage lang={lang || 'es'} />

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)