Skip to content

The person cards, the duplicates, and one file per person named after them - #208

Open
DZPM wants to merge 7 commits into
pr/10-github-handlesfrom
pr/11-people-feedback
Open

DZPM wants to merge 7 commits into
pr/10-github-handlesfrom
pr/11-people-feedback

Conversation

@DZPM

@DZPM DZPM commented Oct 8, 2026 •

Copy link
Copy Markdown
Member

Note

73 files, and 43 of them are a rename. The work is in seven:

File What to look for
themes/.../assets/scss/people.scss The grid, the modal header, and the three lists. The bulk of the diff
themes/.../partials/people_summary.html The card and the modal markup
themes/.../partials/person_appearances.html The Roles and Events lists
themes/.../partials/person_links.html The social rows
themes/.../partials/people-grid.html Where a card's role comes from
data/roles.yaml, data/role_emoji.yaml The two tables those read
content/pybcn_association/organizers.md appearances_title, and the ids after the rename

The other 66 are mechanical: 43 person files renamed after the person they hold, 2 duplicates merged with their photos, 9 event pages whose id lists follow the rename, and the rest a role corrected. The last commit, "Name every person file after the person", holds all of the rename and nothing else, so it can be read on its own or skipped.

This is the feedback round on the person cards and the modal, plus the duplicates and the file names that came out of reviewing them. It sits on top of #204.

The feedback came from Laura and Ruben after #199 went live, and from reading the result.

The grid

Every row of cards starts on the same left edge as the heading above it. Each row caps its width at the number of cards its section asks for and then centred that cap in the column, so a section of three sat in the middle of the page while a section of six filled it. Measured at 1440px on /pybcn_association/organizers/, the four rows started at 245, 150, 340, and 245; they all start at 150 now. On the PyDay BCN 2025 page the "Speakers" heading is at 450 and the first card was at 489; both are at 450.

The level heading leaves the row, so it keeps the width of the page: the four headings were centred at 625, 720, 530, and 625 with rules of 950, 1140, 760, and 950, and are now all centred at 720 with a 1140px rule.

The role under a name comes from the heading the card is under, through data/roles.yaml. A speaker holds no association position, so 118 of the 207 cards printed an empty line, and an organizer who also spoke printed their association role under the Speakers heading. Every card has a role now and none is empty.

The modal

One column instead of two, laid out as the header of the page per person this is on its way to becoming: the name and the role on the left, a round 160px photo on the right, then the sections at full width. The photo was a 300px square in a left column that nothing went under, so a modal with three short lines of header opened with a column of white down its left side, which is what Laura reported. The dialog narrows from 900px to 580px: at 900 a bio line ran 866px, 122 characters, about twice a comfortable measure.

Roles, Events, and Social Links are now built the same way: a marker, the subject in bold, and the thing it points at as the link. "Permanent Committee at PyBCN". "Speaker at PyDay BCN (2025)". "LinkedIn: /in/davidarcos". The marker of a role or an event is an emoji for the role, from the new data/role_emoji.yaml. The whole row answers the pointer and is the link.

The content

Toni Espadas carried "Treasurer" and Peter Krupa "Communications", and neither took the post: both bios are the candidacy they wrote for the 2026 board. That closes the "two person records claim the same board title" item of #190.

Daniel Mesejo and Alvaro Duran Barata each had two files, the same split Natalia Padilla had. Both are merged. A sweep of all 135 person files for a repeated name, GitHub account, LinkedIn profile, X account, personal site, or photo found no other pair.

43 of the files took the name of the person in them. Some were a first name alone, which is a name the directory cannot hold twice (david.md, jordi.md, alberto.md); some were a handle (lpmayos.md, ifosch.md, rberenguel.md); some used an underscore, or carried one surname of two. The id moved with the file name, because bin/check-content requires the two to match, and the 93 references to those ids across 11 pages moved with it. No alias is needed: config.toml has cascaded render = "never" over content/people since #201, so a person file builds no page and has no URL to break.

Verified

316 person cards are rendered across the site, every page lists the same people in the same order as before the rename, and no modal id holds an old id.

Measured at 1440, 1200, 992, 768, 576, and 360 on the organizers page, the PyLadies page, and PyDay BCN 2025: every row of every list is 24px tall except on a 360px screen, four social icons stay on one line on every card, and no page or modal gains a horizontal scrollbar. The modal itself used to scroll sideways at 576px and no longer does.

Each of the seven commits builds and passes both checks on its own.

DZPM added 7 commits October 7, 2026 18:09
Three changes to the grid, which are one change to how a row of cards
reads.

The rows start on the left. Each row caps its width at the number of cards
its section asks for and then centred that cap in the column, so a section
of three sat in the middle of the page while a section of six filled it,
and no two sections shared a left edge. Measured at 1440px on
/pybcn_association/organizers/, the four rows started at 245, 150, 340,
and 245, and the last row of the old board put its three cards at 441
because the remainder was centred too. They all start at 150 now. On the
PyDay BCN 2025 page the "Speakers" heading is at 450 and the first card
was at 489; both are at 450. The half gutter each card carries on its left
comes back off the row, so what lands on the line is the edge of the card
and not the edge of its gutter.

The level heading leaves the row. It is a title between two rules, centred,
and inside the row it took the row's cap: the four headings of the
organizers page were centred at 625, 720, 530, and 625 and their rules ran
950, 1140, 760, and 950. As a sibling of the row it takes the width of the
grid: all four are centred at 720, the centre of the window, with a 1140px
rule. It drops the col-md-12 class with the row, which it needed only as a
column.

The role under a name comes from the heading the card is under, through
data/roles.yaml, and falls back to the pybcn_position of the person file.
A speaker holds no association position, so 118 of the 207 cards of the
site printed an empty line, and an organizer who also spoke printed
"PyLadiesBCN Organizer" under the Speakers heading, which answers a
question nobody asked there. Every card has a role now and none is empty.
The heading is the level name when the level has one and the section title
when it does not, which is the rule appearances_index.html already indexes
the modal's appearance list by, so a card and a modal name the same role
for the same listing. An unmapped heading gives nothing and the card falls
through, which is why /organizers/ is unchanged: its four level names are
not roles, and "Collaborators" under a name is not one either.

The sponsor grid uses the same row and level classes and is untouched: the
rules are scoped to the people grid.
The modal is on its way to becoming a page per person with its own URL.
This lays it out as that page's header and body, and makes its three lists
one list in three flavours.

The header. One column, not two: the name and the role on the left and a
round 160px photo on the right, then Bio, Roles, Events, and Social Links
across the full width. The photo was a 300px square in a left column that
nothing went under, so a modal with three short lines of header opened
with a column of white down its left side, which is the feedback Laura
sent. 160px comes from the 400px file the card has already loaded, so the
modal still costs no request and needs no new variant; one source of the
130 is smaller, patricio-reyes-valenzuela.jpg at 120px square, and the
rule that never enlarges shows his at 120. The name goes from Bootstrap's
28px to 32px, which is the title of the header it is becoming, and on a
phone the photo comes down to 112px: a 360px screen gives the body 310px,
40 of it clears the close button and 20 is the gap, and at 160 the name
was left 90px and took three lines. The dialog narrows from 900px to
580px, which is the same sum the 900 was: without the photo column and its
gap, 548px of text and 32px of padding. At 900 a bio line ran 866px, 122
characters, about twice a comfortable measure.

The lists. Roles was a definition list laid out as a table of label and
value; Events and Social Links were bulleted. Every row of all three is
now built the same way: a marker, the subject in bold, and the thing it
points at as the link. "Permanent Committee at PyBCN". "Speaker at PyDay
BCN (2025)". "LinkedIn: /in/davidarcos". The markers all sit at 447px in
David Arcos's modal at 1440px, where the section headings are, and all
three texts at 485px; Social Links carried a disc as well as its icon and
started 20px further right.

The marker of a role row and of an event row is an emoji for the role,
from the new data/role_emoji.yaml. Close roles share a glyph and an
unknown role takes a neutral one, so a role added tomorrow shows up with a
mark rather than with a hole. The four level names of the organizers page
are in the file too: they are not roles, and without them 26 of the 32
role rows fell back to the silhouette. Every emoji in the file has emoji
presentation by default, so none needs U+FE0F and none is a ZWJ sequence:
either one is a glyph to one font and two to another, and the row width
would then depend on the reader's font. The glyphs are greyed, because a
colour emoji is a shaded picture and in grey it stays one; measured in
Chromium with Noto Color Emoji over a whole modal of them, grayscale alone
gives a mean luminance of 142 with 2% of the ink almost black.

The social rows name their network, because two of the four icons are a
brand mark a reader may not know and a bare path does not say which
network it belongs to: "DZPM" appeared twice under two glyphs. The GitHub
and X names take the at sign those networks write them with, added at
render time, because the front matter holds the URL and a second copy of a
handle would drift from it.

The whole row answers the pointer and is the link. The marker comes back
in colour, the subject turns the blue of a link, and the link takes an
underline; focus-within does the same for the keyboard. The link stretches
over the row with a pseudo element rather than by wrapping the row in an
anchor, which would put the marker and the role inside the link text. A
row with two links keeps its own link areas, through :only-of-type: no row
has two today, out of 135 role rows and every event row, but the template
allows it.

The social icons are grey at rest and blue under the pointer, on the card
as well as in the modal. They were solid black on a card and the link blue
in a modal, which are two answers to one question on one page. The grey is
#6c757d, 4.68:1 on white, above the 3:1 that WCAG 1.4.11 asks of a graphic
that carries meaning.

appearances_title, read by appearances_index.html, is the name a page goes
by in an appearance line. A page title says what a page is, which is not
the words a line of this list wants: /pyladies_bcn/organizers-and-speakers/
is titled "PyLadies BCN Organizers" and the line reads "Organizer at
PyLadies BCN". Nothing else reads the field.

Measured at 1440, 1200, 992, 768, 576, and 360 on the organizers page, the
PyLadies page, and PyDay BCN 2025: every row of every list is 24px tall
except on a 360px screen, where the long ones take two lines; four social
icons stay on one line on every card; and no page or modal gains a
horizontal scrollbar. The modal itself used to scroll sideways at 576px,
where a 300px photo sat beside a 222px text column, and no longer does.
Four corrections, all of them a role a card prints under a name.

Toni Espadas carried "Treasurer" and Peter Krupa "Communications", and
neither took the post: both bios are the candidacy they wrote for the 2026
board and both end by asking for the job. The field is gone from the two
files. That also ends two clashes with the people who do hold those posts,
Yago Tafalla and Mauricio Volcanes, which is one of the open items of
#190: a free-text position carries no term, so nothing stopped a second
person taking one.

The seven files that carried "PyLadiesBCN Organizer" carry "Organizer".
The role made the line "PyLadiesBCN Organizer at PyLadies BCN Organizers",
which says PyLadies BCN twice and Organizer twice. data/roles.yaml maps
the heading of that page to the short role, so the cards there read
Organizer as well.

/pybcn_association/information.md said "Board member of Comunication" and
"Board member of Events" where the 2026 board cards say Communications and
Events, and the first also spelled it with one m. PyBCN is a small
association and the post is the work, not the seat on the board.

On /pybcn_association/organizers/ 14 cards read Organizer where 11 did,
and the board posts are as they were.
An appearance line says where a role is held, which is not the same words
as the title of the page it links to. "Permanent Committee at Organizers"
names the page and repeats in its name the role the line already gives;
"Organizer at PyLadies BCN Organizers" repeats both halves.

The two pages set appearances_title, the field the index reads: PyBCN and
PyLadies BCN. The lines read "Permanent Committee at PyBCN" and "Organizer
at PyLadies BCN".

Both pages keep their titles, "Organizers" and "PyLadies BCN Organizers",
which are what the menu and their own headings say. No other page sets the
field, and nothing but the appearance list reads it.
Daniel Mesejo had two cards. daniel_mesejo was written for PyDay BCN 2020
and daniel-mesejo for the Management Board of 2026, so the organizers page
and the 2025 event showed one of them and the 2020 event the other, and
neither modal listed the appearances held by the other file. This is the
same split lpmayos and natalia had.

daniel-mesejo is the one that stays: it is the current card, it carries
the Secretary position, the LinkedIn profile, and a bio he wrote himself
in Catalan. PyDay BCN 2020 now lists that id.

Every field of the old file was checked before it was dropped. The GitHub
profile is the same account and was already there. The photo,
daniel-mesejo.jpg, is replaced by daniel-mesejo-leon.jpg, which the kept
file already uses, so the old image goes with it. The site field pointed
at https://stackoverflow.com/users/story/4001592, a Developer Story, a
StackOverflow feature that was withdrawn in 2022: the URL still answers
200 but the page it returns has an empty title and no story, so the link
is not carried over. Nothing else was left to merge: the old bio says in
English what the kept one says in Catalan.

The person count in bin/check-content falls from 137 to 136. Both checks
stay green and the build is clean.
The second duplicate found by a sweep of every person file for a repeated
name, GitHub account, LinkedIn profile, X account, personal site, or
photo. It is the only other one: 135 people, no other pair.

alvaro_duran was written for PyDay BCN 2020 and alvaro-duran-barata for
PyData BCN 2023, so the two events listed the same speaker under two ids
and neither modal held the appearances of the other.

alvaro-duran-barata is the one that stays: it is the later card, it
carries the LinkedIn profile and the GitHub account, and its bio is a
rewrite of the older one with the same sentence in it. PyDay BCN 2020 now
lists that id.

The name takes the accents the older file spelled it with, in the front
matter and in the bio: Alvaro Duran Barata is the same name with the
diacritics dropped.

The site field of the old file pointed at https://alvaroduran.com, which
answers 404 with the "Site not found" page of GitHub Pages, so it is not
carried over. The old photo goes with the file; the kept card already uses
alvaro-duran-barata.jpeg with a Top anchor.

The person count in bin/check-content falls from 136 to 135.
43 of the 135 person files were named after something other than the
person in them. Some were a first name alone, which is a name the site
cannot hold twice: david.md is David Arcos, jordi.md is Jordi Soucheiron,
alberto.md is Alberto Camara. Some were a handle: lpmayos.md is Laura
Perez Mayos, ifosch.md is Ignasi Fosch, rberenguel.md is Ruben Berenguel.
Some used an underscore where the rest of the directory uses a hyphen:
alvaro_duran, carles_barrobes, jose_haro, miroslav_sedivy, paula_szewach.
And some carried one surname of two.

Every file is now named after the name it holds: the name field, with the
diacritics dropped, lowercased, and the spaces turned into hyphens. The id
moves with it, because bin/check-content requires the id and the file name
to match, and the 93 references to those ids across 11 event and
association pages move with the id.

canary.md keeps its name. It is the fixture bin/check-rendered uses, its
name field is a markup payload, and a file named after it would be
unreadable.

No alias is needed and none is added. config.toml cascades
_build.render = "never" over content/people, so a person file has built no
page and no URL since #201: the file name reaches nothing a reader can
link to. It reaches the grids, which look a person up by id, and the modal
ids, which are built from it.

Verified against the build: 316 person cards are rendered across the site,
every page lists the same people in the same order as before, and no modal
id holds an old id. Both checks stay green.

The personal links are untouched, so a card can still carry a handle that
no longer matches its file name: Laura Perez Mayos links to
github.com/lpmayos. That is her account and it is right.
@DZPM
DZPM requested a review from a team as a code owner October 8, 2026 06:21
@DZPM DZPM self-assigned this Oct 8, 2026
@DZPM
DZPM requested review from ber2, mesejo and mrswats October 8, 2026 06:25
@DZPM

DZPM commented Oct 8, 2026

Copy link
Copy Markdown
Member Author

Before

As seen yesterday: #204 (comment)


After

Applied the feedback from @lpmayos, @rberenguel and @ber2. Screenshots for the first person per category:

image image image image image

Still open for feedback and future changes.

If you're missing a field in your profile, or want to update it, just edit your .md file at /content/people/:
https://github.com/pybcn/pybcn.github.io/tree/edition/content/people

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants