Skip to content

feat(projects): content-sized project cards and a working collection search - #207

Merged
BIA3IA merged 7 commits into
feat/home-visual-refinementfrom
feat/projects-visual-refinement
Nov 2, 2026
Merged

BIA3IA merged 7 commits into
feat/home-visual-refinementfrom
feat/projects-visual-refinement

Conversation

@viganogabriele

Copy link
Copy Markdown
Contributor

Stacked on #206 (/contact). The stack is #199 → #200 → #201 → #202 → #203 → #204 → #205 → #206 → this PR, so this diff only shows /projects and /projects/[id].

Figma: desktop 317:521, mobile 1948:4657. The detail page has no Figma frame.

What changes

One project card for the three lists (ProjectCard)

  • Placeholder icons removed. The crop icon on "Le novità" and the upload icon on the other lists were Figma's placeholder icons, and they said nothing about the project. The project's own logo now replaces them when it exists; otherwise the card has no icon.
  • Footer. Figma puts a "Label" pill in the bottom-right corner. The card now uses that corner to say what the project page offers, derived from the project's real link: "Codice sorgente" (GitHub/GitLab) or "Web". A → arrow marks the card as a link.
    • Projects without a link show only the arrow.
    • No action is promised that the project page doesn't have.
  • Title. Title-large (22 px) instead of headline-medium (28 px), which wrapped to 3 lines in a 300 px card and collided with the icon. The gradient is drawn per line, so a two-line title no longer fades into a paler second line.
  • Height and hover.
    • The description is clamped to 4 lines and the height follows the content, instead of the fixed 312 × 264 box with 40–60 % empty space.
    • The card is a link, so it keeps the hover background, plus a keyboard focus ring.

One list (ProjectList)

  • Grid. The grid uses repeat(auto-fill, minmax(min(100%, 16rem), 1fr)) inside the shared container. Cards stay between 256 and about 370 px, and the column count follows the available space: 2 at 768, 3 at 1024, 4 from about 1312. Before, the layout jumped between fixed 2 and 4 columns, with cards centred in their cells.
  • Mobile. A carousel where the next card peeks in, as on the homepage.
  • "Mostra di più" becomes "Mostra tutti (n)", so the count is visible.

The search box now works

  • The collection's "Search by name" input had no handler: it was a fake control.
  • It now filters by name and description. The match ignores case and accents ("universita" finds "Università").
  • It shows an explicit "Nessun progetto corrisponde a …" state.
  • The placeholder is in Italian, like the rest of the page.

Empty states

  • Each empty list shows a dashed placeholder block instead of a stray centred sentence.
  • The novelties and collection placeholders link to #proponi, the "Hai un'idea?" section on the same page.
  • Locally (backend unreachable) the page now reads as intentional, not broken; see the last screenshot.

"Hai un'idea?"

  • The text and the two reference cards sit side by side within 1024 px, as in Figma's narrow centred block.
  • The lead is 20 px, where the text used to be 14 px.
  • The email is a real mailto: link.
  • "Proponila qui!" uses blue-secondary instead of blue-primary, which was below AA on the light background.
  • The two cards are not links, so they have no hover.

Layout

Detail page (/projects/[id], kept, not redesigned)

  • It uses the shared container and rhythm.
  • The header panel keeps its glass but loses the gradient fill.
  • "Scopri gli altri progetti" closes on the background, as the other pages do, instead of in a gradient panel.

Shared changes

None. CardCaption, Card and the carousel are used as they are. The new ProjectCard, ProjectList and section.ts live in components/projects/.

Screenshots

These use a local fixture. The backend isn't reachable locally, so before and after were both captured with a temporary fixture of 18 projects (4 news, 11 general, 3 deprecated), with mixed description lengths and link types. The fixture was not committed. The last screenshot shows the real empty state.

Desktop 1440
1440

Tablet 1024 and 768
1024
768

Mobile 390
390

Detail page 1440
detail

Card hover
hover

Empty state (no backend)
empty

Verification

  • pnpm check: clean.
  • pnpm build: passes.
  • pnpm typecheck: clean after the build.
  • node --test tests/*.test.mjs: 2/2 pass.
  • /projects, /projects/1 and /projects/12 were checked at 320, 390, 768, 1024, 1279, 1280, 1440, 1728 and 1920 px, with no horizontal overflow.
  • Search, "Mostra tutti" and hover were checked in the browser with Playwright:
    • 8 → 11 cards when expanded;
    • "campus" → 2 results;
    • a nonsense query → the no-match state;
    • no console errors.

Trade-offs

  • Orphan cards. With auto-fill, 4 news cards at 1024 px land as 3 + 1. The column count is data-independent, so a short list can end on a lone card. It's preferable to fixed columns squeezing cards to 200 px.
  • Deprecated projects look like active ones apart from their section heading, as in Figma. The audit suggested a muted variant. It's a designer call, so it's left out.
  • The mobile collection is still a carousel, as in Figma. With many projects the dots get numerous; a list would scale better, which is a design decision.

Deliberately left out

  • Telegram handles in the "Contatti" card. Figma lists two personal Telegram handles there; adding them is a content decision.
  • Per-platform downloads on the detail page. They wait for the backend field, already noted in resources.ts.
  • The "Projects" title in English. Copy is unchanged.

Housekeeping

The screenshots live on pr-assets/projects-visual-refinement, which can be deleted after review.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4d140013-722a-4781-abac-e5e6ff422044

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@viganogabriele
viganogabriele marked this pull request as ready for review October 31, 2026 17:54
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from 6f4b83f to a216c84 Compare November 2, 2026 13:53
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch 2 times, most recently from 20dfd22 to dfc533d Compare November 2, 2026 14:20
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from a216c84 to c7fb4d8 Compare November 2, 2026 14:20
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch from dfc533d to 7e4026d Compare November 2, 2026 14:32
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from c7fb4d8 to 342273c Compare November 2, 2026 14:32
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch from 7e4026d to 3601c7e Compare November 2, 2026 14:35
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from 342273c to 30bd5ec Compare November 2, 2026 14:35
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch from 3601c7e to 99d3f26 Compare November 2, 2026 14:56
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch 2 times, most recently from 014b639 to 3c64c05 Compare November 2, 2026 15:00
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch from 99d3f26 to 0d4cc72 Compare November 2, 2026 15:00
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from 3c64c05 to 4937b0e Compare November 2, 2026 15:02
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch from 0d4cc72 to 52b7d19 Compare November 2, 2026 15:02
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from 4937b0e to d6de145 Compare November 2, 2026 15:14
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch 2 times, most recently from f6e1972 to c88e866 Compare November 2, 2026 15:18
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from d6de145 to 54900b4 Compare November 2, 2026 15:19
viganogabriele and others added 3 commits November 2, 2026 15:25
…rd grid

- Page uses the shared container, title/lead styles and vertical rhythm of
  the other redesigned pages instead of ad-hoc paddings and a 1616px
  breakpoint.
- Email cards: four in a row from xl as in Figma, 2×2 below, one column on
  phones, so a card is never left alone on a row; cards size to content
  instead of the fixed 264×312 box.
- "Trova il tuo gruppo" had no action: it now links to /groups, like the
  inline link in the same paragraph.
- Group photo keeps Figma's crop next to the text from xl and is capped
  when stacked; text is left-aligned at every width.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The group photo is 512x246: it was declared 721x342 and stretched up to
  768px wide. It now shows at its real size at most.
- "Candidature" linked to /join with the label "Struttura"; the label now
  matches the page it opens.
- The inline links use INLINE_LINK, with a visible focus ring.
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch from c88e866 to bd6a39e Compare November 2, 2026 15:26
@BIA3IA
BIA3IA force-pushed the feat/contact-visual-refinement branch from cab415e to 7dccd60 Compare November 2, 2026 15:26
BIA3IA and others added 3 commits November 2, 2026 15:28
…search

- One ProjectCard for the three lists: the project's logo replaces Figma's
  placeholder icons (crop / upload), the title gets a per-line gradient, and
  the footer says what the project page offers (web app or source code).
- One ProjectList: cards in a min/max-bounded auto-fill grid instead of
  fixed 312x264 boxes at fixed breakpoints; on phones a carousel with the
  next card peeking in.
- The collection search box now filters by name and description (it had no
  handler), with an explicit "no match" state.
- Empty lists render a dashed placeholder that points to "Hai un'idea?".
- "Hai un'idea?" sits as text + two reference cards side by side, with a
  readable lead and a real mailto link.
- /projects and /projects/[id] use the shared container, titles and
  rhythm; the detail page drops its gradient panels and closes on the
  background like the other pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ProjectCard is now a CardCaption with a logo, a clamped caption and
  a footer, instead of a second copy of its link, hover, focus and
  footer logic. CardCaption gains `image`, `titleClassName` and
  `captionClassName` for it.
- The search looks through every project on the page, novelties and
  deprecated ones included, matches each word separately and announces
  the number of results.
- PeekCarousel replaces the two copies of the phone carousel (homepage
  and project lists).
- SECTION_STACK moves to layout/page and also serves /about.
- t.me links are labelled Telegram, not Web.
- The project page shows no placeholder icon when there is no logo, and
  "Hai un'idea?" sits on the container's left edge like the other
  sections.
- Long search queries wrap inside the empty state.
…with any project

CardCaption draws its title gradient per line, as ProjectCard did before
it moved onto CardCaption: a wrapped title no longer fades on its second
line. The search box shows whenever the page has projects to search,
not only when the collection itself has some.
@BIA3IA
BIA3IA force-pushed the feat/projects-visual-refinement branch from bd6a39e to 25427b1 Compare November 2, 2026 15:28
Base automatically changed from feat/contact-visual-refinement to feat/home-visual-refinement November 2, 2026 15:30
@BIA3IA
BIA3IA merged commit 3dd3cfb into feat/home-visual-refinement Nov 2, 2026
3 checks passed
@BIA3IA
BIA3IA deleted the feat/projects-visual-refinement branch November 2, 2026 15:33
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