Skip to content

Conversation

@AbhiramTadepalli
Copy link
Contributor

@AbhiramTadepalli AbhiramTadepalli commented Dec 22, 2025

Implemented this design by @Isoscelestial: https://www.figma.com/design/snmEoRUgfjAZYSc6hqySkY/Wireframes-for-Jupiter?node-id=1356-3146&p=f&t=BIcwF2agOk5VNxpI-0

  • Created a Left column of details, contact info, and officers
  • Center-right column has an expandable description & upcoming events
  • Modified event card to look better on hover
  • Added hover transitions for lots of elements
  • Expandable Officer List
  • Moved tags to the Title area
  • Banner has no overlayed title text anymore
  • Added error states / info unavailable states
  • Details can show last event, last update to the club, founding date, and # members
  • Modified getDirectoryInfo in src/server/api/routers/club.ts and src/server/api/routers/admin.ts files to also return the number of members in the club

@AbhiramTadepalli AbhiramTadepalli linked an issue Dec 22, 2025 that may be closed by this pull request
@vercel
Copy link

vercel bot commented Dec 22, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
clubs Ready Ready Preview, Comment Dec 22, 2025 1:52pm

@AbhiramTadepalli
Copy link
Contributor Author

Need to do the same for events

Copy link
Member

@TyHil TyHil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking super nice!

<>
<Header />
<main className="mb-5 flex flex-col space-y-4 p-4">
<main className="mb-5 flex flex-col space-y-4 p-4 px-[10vw]">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other pages have been using max-w-6xl. If that still works it would be more consistent.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would probably be better on mobile too

});
const upcomingEvents = events.filter((e) => e.endTime >= now);
const lastEventDate =
events.filter((e) => e.startTime <= now).reverse()[0]?.endTime ?? null;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be more clean to put lastEventDate in getDirectoryInfo and still use currentTime: now for filtering.

return (
<section
id="club-body"
className="w-full rounded-lg grid grid-cols-1 md:grid-cols-5 gap-5 items-start mt-8"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to wrap sooner. I can get this on the right sized screen

Image


export default function ClubContactCard({ club }: ClubContactCardProps) {
return (
<BaseCard className="flex flex-col bg-neutral-50 border-slate-200 shadow-sm p-5 gap-2">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove border-slate-200

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same with the other cards

target="_blank"
className="inline-block w-full"
>
<IconButton
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use a MUI Button with startIcon

{club.tags && (
<div className="flex flex-wrap gap-1 mt-2">
{club.tags.map((tag) => (
<Chip
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Love this chip design, should we standardize it to a component and use it in the rest of the code base?

export default function OfficerList({
officers,
}: {
officers: NonNullable<RouterOutputs['club']['getDirectoryInfo']>['officers'];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SelectOfficer again if that works


const contentRef = useRef<HTMLDivElement>(null);

useLayoutEffect(() => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This works great on desktop but on mobile it defaults to showing a lot of officers.

{needsTruncation && (
<div className="mt-2 pt-2 border-t border-slate-300 z-10">
<button
onClick={() => setIsExpanded(!isExpanded)}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this have the same styling as the ExpandableMarkdownText Show more button or vice versa? Just in terms of underline/hover color

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we move these changes to a separate PR and do the same to the ClubCard there?

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.

Club Page Redesign

3 participants