Skip to content

Commit 0d65c0f

Browse files
authored
feat(events): enhance UX/UI layout, optimize graphs, and redesign event cards (#206)
- Added an intro section with community metrics and quick shortcuts to charts/past events. - Created a dedicated 'evento-proximo' component to separate upcoming events, adding banner support and smart CTA routing (Registration/Meetup/LinkedIn). - Redesigned past event cards with optimized .webp covers, dynamic YouTube thumbnails, and meta-badges. - Fixed chart axis cropping, automated filter year expansion on search, and integrated upstream mobile navbar fixes.
1 parent 867b22c commit 0d65c0f

17 files changed

Lines changed: 837 additions & 232 deletions
64.3 KB
Loading
176 KB
Loading
85.3 KB
Loading
51.3 KB
Loading

objects/events/_2023.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@
9696
'track': 'EY',
9797
'date': date(2023, 7, 1),
9898
'city': 'Santiago',
99-
'challenges': 1
99+
'challenges': 1,
100+
'image': 'images/2023-07-hackaton-ey.webp'
100101
},
101102
{
102103
'type': 'Meetup',
@@ -122,7 +123,9 @@
122123
'track': 'Noviembre 2023',
123124
'date': date(2023, 11, 9),
124125
'talks': 1,
125-
'meetup': 297124086
126+
'meetup': 297124086,
127+
'image': 'images/meetup/2023-11-meetup.webp'
128+
126129
},
127130
{
128131
'type': 'PyCon Chile',

objects/events/_2025.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
'city': 'Copiapó',
3737
'viewers': 505,
3838
'talks': 23,
39+
'attendees': 90,
3940
},
4041
{
4142
'type': 'Meetup',
@@ -79,7 +80,8 @@
7980
'track': 'Noviembre 2025',
8081
'date': date(2025, 11, 11),
8182
'talks': 2,
82-
'meetup': 311855939
83+
'meetup': 311855939,
84+
'image': 'images/meetup/2025-11-meetup-checkr.webp'
8385
},
8486
{
8587
'type': 'Meetup',

objects/events/_2026.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,25 @@
3737
'track': 'Rancagua 2026',
3838
'city': 'Rancagua',
3939
'date': date(2026, 8, 19),
40-
'talks': 4
40+
'youtube': 'up60em_ycSQ',
41+
'viewers': 52,
42+
'talks': 4,
43+
'attendees': 121
4144
},
4245
{
4346
'type': 'Meetup',
4447
'track': 'Agosto 2026',
4548
'date': date(2026, 8, 26),
46-
'talks': 1
49+
'youtube': 'Bf2-ZQQiSF0',
50+
'viewers': 280,
51+
'talks': 1,
52+
'meetup': 316161132
4753
},
4854
{
4955
'type': 'PyCon Chile',
5056
'track': '2026 Santiago',
5157
'city': 'Santiago',
52-
'date': date(2026, 11, 7)
58+
'date': date(2026, 11, 7),
59+
'image': 'images/pycon2026/anuncio-pycon.webp'
5360
},
5461
]

objects/events/__init__.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,46 @@
1616
*EVENTS_2025,
1717
*EVENTS_2026
1818
]
19+
MONTHS = [
20+
'', 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
21+
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
22+
]
23+
24+
TYPE_SLUGS = {
25+
'Meetup': 'meetup',
26+
'PyCon Chile': 'pycon',
27+
'PyDay': 'pyday',
28+
'Hackaton': 'hackaton',
29+
}
30+
1931
for event in EVENTS:
2032
if 'city' not in event:
2133
event['city'] = 'Online'
34+
event_date = event['date']
35+
event['date_display'] = '{} de {} de {}'.format(
36+
event_date.day, MONTHS[event_date.month], event_date.year
37+
)
38+
event['type_slug'] = TYPE_SLUGS.get(event['type'], 'otro')
2239

2340
today = date.today()
24-
EVENTS_TYPES = list({event.get('type') for event in EVENTS})
25-
CITIES = list({event.get('city') for event in EVENTS})
26-
YEARS = list({event.get('date').year for event in EVENTS})
27-
UPCOMING_EVENTS = [event for event in EVENTS if event['date'] >= today]
41+
42+
# Orden preferido para los tipos de evento (de mayor a menor escala).
43+
# Los tipos no listados aqui se agregan al final en orden de aparicion.
44+
TYPE_ORDER = ['PyCon Chile', 'PyDay', 'Meetup', 'Hackaton']
45+
46+
EVENTS_TYPES = TYPE_ORDER + list({
47+
event.get('type') for event in EVENTS
48+
if event.get('type') and event.get('type') not in TYPE_ORDER
49+
})
50+
51+
CITIES = sorted(list({event.get('city') for event in EVENTS if event.get('city')}))
52+
53+
YEARS = sorted({event.get('date').year for event in EVENTS})
54+
55+
UPCOMING_EVENTS = sorted(
56+
[event for event in EVENTS if event['date'] >= today],
57+
key=lambda e: e['date']
58+
)
2859
PAST_EVENTS = {}
2960
for event in reversed(EVENTS):
3061
if event['date'] >= today:
@@ -60,3 +91,12 @@
6091
SESSIONS_COUNTS.append({'year': year, 'label': label, 'count': count})
6192
ATTENDEES_COUNTS = [{'year': year, 'label': 'asistentes', 'count': count} for year, count in attendees_counts.items()]
6293
CURRENT_YEAR = date.today().year
94+
95+
# Estadisticas de impacto (se calculan solas a partir de los eventos).
96+
STATS = {
97+
'eventos': len(EVENTS),
98+
'charlas': sum(e.get('talks', 0) for e in EVENTS),
99+
'talleres': sum(e.get('workshops', 0) for e in EVENTS),
100+
'viewers': sum(e.get('viewers', 0) for e in EVENTS),
101+
'ciudades': len({e.get('city') for e in EVENTS if e.get('city') and e['city'] != 'Online'}),
102+
}

pelicanconf.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
EVENTS_TYPES,
1414
EVENTS_COUNTS,
1515
SESSIONS_COUNTS,
16-
ATTENDEES_COUNTS
16+
ATTENDEES_COUNTS,
17+
STATS
1718
)
1819

1920
AUTHOR = "Python Chile"

0 commit comments

Comments
 (0)