Repository navigation
Conversation
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.
Member
Author
BeforeAs seen yesterday: #204 (comment) AfterApplied the feedback from @lpmayos, @rberenguel and @ber2. Screenshots for the first person per category:
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 |
ber2
approved these changes
Oct 8, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.





Note
73 files, and 43 of them are a rename. The work is in seven:
themes/.../assets/scss/people.scssthemes/.../partials/people_summary.htmlthemes/.../partials/person_appearances.htmlthemes/.../partials/person_links.htmlthemes/.../partials/people-grid.htmldata/roles.yaml,data/role_emoji.yamlcontent/pybcn_association/organizers.mdappearances_title, and the ids after the renameThe 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. Theidmoved with the file name, becausebin/check-contentrequires the two to match, and the 93 references to those ids across 11 pages moved with it. No alias is needed:config.tomlhas cascadedrender = "never"overcontent/peoplesince #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.