Skip to content

refactor(portfolio): replace tech experience card grid with sortable table - #124

Merged
roschaefer merged 1 commit into
mainfrom
website-skills-table
Jul 28, 2026
Merged

refactor(portfolio): replace tech experience card grid with sortable table#124
roschaefer merged 1 commit into
mainfrom
website-skills-table

Conversation

@roschaefer

@roschaefer roschaefer commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Show technology experience as a sortable table so visitors can compare breadth, duration, project count, and recency without scanning repeated cards.

The table keeps the original static content readable without JavaScript, adds mobile-specific sorting controls only after enhancement, preserves hash targets when sort order changes, and avoids row transition animation for visitors who prefer reduced motion.

Verification: git diff --check; pnpm check:types.

@roschaefer
roschaefer force-pushed the website-skills-table branch from 0ddfbbf to a30fdc1 Compare July 27, 2026 22:49
@roschaefer
roschaefer marked this pull request as ready for review July 27, 2026 22:58

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a30fdc1f03

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/components/TechExperienceList.svelte
Comment thread src/lib/components/TechExperienceList.svelte Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3be8415149

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/components/TechExperienceList.svelte Outdated
Comment thread src/lib/utils/content.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 99a6739fbc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

const hiddenCount = $derived(sortedEntries.length - visibleCount);
const collapses = $derived(hiddenCount > 0);
const isExpanded = $derived(!enhanced || expanded || !collapses);
const visibleEntries = $derived(isExpanded ? sortedEntries : sortedEntries.slice(0, visibleCount));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Expand hash targets hidden by the active sort

After a desktop user changes the sort while the table is collapsed, this slice can hide an entry from the original featured partition (for example, sorting by name hides TypeScript). Following that technology's keyword link from a project then leaves the table collapsed because PortfolioPage.remainingSkillIds still reflects only the initial recency partition, so the target row is absent and the hash navigation cannot focus or scroll to it. The fresh evidence beyond the earlier default-order issue is that the new local sort dynamically changes the hidden partition without updating the parent's expansion decision.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 664585f016

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

>
{label}
{#if sortKey === key}
<span aria-hidden="true">{sortDir === "asc" ? "▲" : "▼"}</span>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Announce the mobile sort direction

At viewport widths below sm, screen-reader users only receive aria-pressed for the active sort key, while this direction indicator is hidden from the accessibility tree. Repeatedly activating a pill therefore toggles ascending/descending order without announcing which order is active; include the direction in the accessible name or expose an equivalent status.

AGENTS.md reference: AGENTS.md:L285-L287

Useful? React with 👍 / 👎.

@roschaefer
roschaefer force-pushed the website-skills-table branch from b3fe064 to 807f622 Compare July 28, 2026 14:07

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 807f622cf6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<col />
<col class="w-[22%]" />
</colgroup>
<thead class="max-sm:hidden">

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve column headers in the mobile accessibility tree

At viewport widths below sm, this hides the entire <thead> with display: none, removing every column header and its scope association from the accessibility tree. The data-label values added through CSS-generated ::before content are not semantic table headers, so mobile screen-reader table navigation encounters duration, project, and recency cells without associated column names; keep an accessible header row while hiding it only visually.

AGENTS.md reference: AGENTS.md:L282-L285

Useful? React with 👍 / 👎.

Comment on lines +171 to +174
<button
type="button"
class="w-full cursor-pointer text-left text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-[var(--color-brand-muted)] hover:text-[var(--color-brand-cyan)] focus-visible:text-[var(--color-brand-cyan)]"
onclick={() => toggleSort(key)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Hide sorting controls when JavaScript is unavailable

When JavaScript is disabled, the server-rendered table still exposes these sorting buttons even though their onclick handlers cannot run, leaving keyboard and no-JS users with controls that do nothing. The rows correctly remain fully readable in this mode, but the sorting enhancement should be rendered only after enhanced becomes true, as the expand/collapse control already is, or otherwise degrade to non-interactive headings.

AGENTS.md reference: AGENTS.md:L63-L65

Useful? React with 👍 / 👎.

@roschaefer roschaefer changed the title Website skills table fix(portfolio): keep table headers accessible and degrade sorting without JS Jul 28, 2026
@roschaefer roschaefer changed the title fix(portfolio): keep table headers accessible and degrade sorting without JS refactor(portfolio): replace tech experience card grid with sortable table Jul 28, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2b5f8b7796

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/components/TechExperienceList.svelte Outdated
@roschaefer
roschaefer force-pushed the website-skills-table branch 2 times, most recently from a963058 to 5f3e990 Compare July 28, 2026 21:43

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5f3e990aa8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/components/TechExperienceList.svelte Outdated
…table

Show technology experience as a sortable table so visitors can compare breadth, duration, project count, and recency without scanning repeated cards.

The table keeps the original static content readable without JavaScript, adds mobile-specific sorting controls only after enhancement, preserves hash targets when sort order changes, and avoids row transition animation for visitors who prefer reduced motion.

Verification: git diff --check; pnpm check:types.
@roschaefer
roschaefer force-pushed the website-skills-table branch from 5f3e990 to fcd5170 Compare July 28, 2026 22:11
@roschaefer
roschaefer merged commit 5f03ac3 into main Jul 28, 2026
1 check passed
@roschaefer
roschaefer deleted the website-skills-table branch July 28, 2026 22:19
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.

1 participant