Jiseoup/showmycodePublic
EN|KO
  • Code
  • Commits
  • Pull Requests

Pull RequestsPage 4

  • Jiseoup
    Merged

    feat: add shared BrandLink for home/repo navigation

    #15

    feat/shared-brand-link → main

    ## Related Issue N/A ## Changes - Extract the duplicated GitHub logo + title markup from the home page and repository header into a shared `BrandLink` component linking to home. - Make the home page logo/title clickable to navigate home (previously static), matching the repository header behavior. - Wrap the logo and label in a single `<Link>` so they focus as one unit instead of two separate links. - Make the repository name clickable, linking back to the repo's code (root) page. - Use a solid base color with a subtle `hover:opacity-80` transition for brand and repo-name links (consistent, GitHub/Vercel-style hover). ## How to Verify 1. Run `npm run dev` and open the home page — click the logo or site name and confirm it stays on the home page (`/[lang]`). 2. Open a repository, then a sub-page (Commits / Pulls / a PR detail). 3. Click the owner/logo → returns to home; click the repository name → returns to the repo's code view. 4. Hover each link and confirm it dims slightly (opacity) without color shift. 5. Verify layout on mobile (≥ 320px) — header truncates without overflow. ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`)

    Jiseoup · Jun 5, 2026feat
  • Jiseoup
    Merged

    feat: add skeleton loading UI for all route segments

    #14

    feat/loading → main

    ## Related Issue N/A ## Changes - Add `loading.tsx` files with `animate-pulse` skeleton UI for all 6 data-fetching route segments - Home (repository listing) - Code viewer (sidebar + code area) - Commits list - Commit detail (header + files changed) - Pull requests list - PR detail (header + tabs + content) - Each skeleton matches the actual page layout to minimize CLS (Cumulative Layout Shift) - No i18n strings needed — skeletons are purely visual placeholder blocks ## How to Verify 1. `npm run dev` 2. Navigate to any page — skeleton should flash briefly before content loads 3. To simulate slow network: open DevTools → Network → throttle to "Slow 3G", then navigate between pages 4. Verify each skeleton matches the layout of its corresponding page ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`)

    Jiseoup · May 20, 2026feat
  • Jiseoup
    Merged

    fix: improve PR label contrast in light mode

    #13

    fix/pr-label-light-mode-contrast → main

    ## Related Issue N/A ## Changes - Fix PR labels being hard to read in light mode by adopting GitHub's two-tone treatment. - Add `labelStyle()` in [lib/utils.ts](lib/utils.ts) — computes WCAG luminance and exposes `--label` / `--label-fg` CSS variables. - Add `.gh-label` in [app/globals.css](app/globals.css): - Light: solid background + black/white text picked by luminance. - Dark: `color-mix` tinted background with the label color as text (keeps the existing look). - Replace the inline color logic in the PR list and PR detail pages with `labelStyle()` + `gh-label`. ## How to Verify 1. `npm run dev` 2. Open `/[lang]/repository/[owner]/[repo]/pulls` and a PR detail page. 3. Toggle light mode — labels render with a solid background and readable text. 4. Toggle dark mode — labels keep the tinted/translucent look. 5. Try both bright (e.g. yellow) and dark (e.g. navy) labels to confirm text contrast. ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`)

    Jiseoup · May 20, 2026fix
  • Jiseoup
    Merged

    feat: add changed-files tree sidebar to PR and commit detail

    #12

    feat/changed-files-tree-sidebar → main

    ## Related Issue N/A ## Changes - Add `FilesChangedWithTree`: sticky left-side directory tree of changed files with collapsible folders, used on the PR "Files changed" tab and the commit detail page. - Click a file in the tree to scroll the right pane to that file's diff (`scrollIntoView` against `id="file-${sha}"` anchors added to each `FilesChanged` card). - DFS the sorted tree to produce the ordered file list passed to `FilesChanged`, so tree order and diff order always match. - Reuse the existing folder-toggle icon (the one used on the code tab) for the tree's expand/collapse-all button — plus icon when all collapsed, minus when any expanded. - Align file rows with their parent folder using a chevron-width placeholder (no magic padding offset). - Widen the PR Files tab and commit detail pages to `max-w-6xl`; other PR tabs keep `max-w-4xl`. Sidebar is hidden below the `md` breakpoint. - Add `tree.title` / `tree.expandAll` / `tree.collapseAll` to `pulls` and `commits` slices in both `locales/en.json` and `locales/ko.json`. ## How to Verify 1. `npm run dev` and open a PR with files across multiple nested directories. Visit the **Files changed** tab. 2. Confirm the tree appears on the left and the diffs on the right, in matching order. 3. Toggle individual folders, and use the header icon button to expand/collapse all. 4. Click a file in the tree — the right pane should smoothly scroll to that file's diff. 5. Scroll the diff pane and confirm the tree stays pinned to the viewport. 6. Open the commit detail page (`/[lang]/repository/[owner]/[repo]/commits/[sha]`) and repeat steps 2–5. 7. Shrink the viewport below 768px — the tree should be hidden and the diff list should look unchanged from before. 8. Switch the locale to KO and confirm the tree header reads `변경된 파일`. 9. Toggle dark mode and confirm the tree and status dots remain readable. ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`) - [x] New/updated strings added to both `locales/ko.json` and `locales/en.json` (if applicable)

  • Jiseoup
    Merged

    fix: correct background bleed in code viewer and alignment in branch selector

    #11

    fix/code-viewer-and-branch-selector → main

    ## Related Issue N/A ## Changes - **`CodeViewer`** — Add `min-w-max` to the inner `<pre>` so the Shiki background extends to the full content width during horizontal scroll, removing the colored band on mobile. - **`BranchSelector`** — Add `[&>span]:min-w-0 flex-1 text-left` to `SelectTrigger` so the line-clamped span can shrink inside the flex container, eliminating leading whitespace before long truncated branch names. ## How to Verify - **Code viewer** — Open a file with long lines on a narrow viewport, scroll horizontally, and confirm no background band appears in either theme. - **Branch selector** — Select both a short and a long branch; both should start flush with the trigger's left padding (long names truncated with `…`). ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`)

    Jiseoup · May 11, 2026fix
  • Jiseoup
    Merged

    feat: toggle file tree expand/collapse with state-aware button

    #10

    feat/file-tree-expand-collapse-toggle → main

    ## Related Issue N/A ## Changes - File tree header button now toggles between **Expand All** (when all collapsed) and **Collapse All** (when any folder is open), with state-driven icon and aria-label. - Replaced the previous custom chevron icon with the VSCode `collapse-all` codicon for visual consistency. - Lifted folder open/close state from individual `TreeNodeItem` up to `FileTree` (`openPaths: Set<string>`) so the header button can drive bulk expand/collapse. - Added `expandAll` translation keys to `locales/ko.json` and `locales/en.json`; threaded `expandAllLabel` through `Sidebar` → `FileTree`. - Added `key` and explicit `fallback={null}` to the `<Suspense>` wrapping `BranchSelector` to satisfy React's child-key validation when the element is forwarded as a prop across the server/client boundary. ## How to Verify 1. `npm run dev` and open any repository page (`/[lang]/repository/[owner]/[repo]`). 2. Confirm the sidebar header shows a **+** icon when the tree is fully collapsed. 3. Click it — every directory expands and the icon switches to **−**. 4. Click again — every directory collapses and the icon returns to **+**. 5. Toggle a single folder manually and verify the header icon stays as **−** as long as at least one folder is open. 6. Hover the button in both states and confirm the tooltip / aria-label shows the localized "Expand All" / "Collapse All" (KO and EN). 7. Open DevTools console and verify there is no `Each child in a list should have a unique "key" prop` warning. ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`) - [x] New/updated strings added to both `locales/ko.json` and `locales/en.json` (if applicable)

    Jiseoup · May 8, 2026feat
  • Jiseoup
    Merged

    feat: make commits and pulls page size configurable via env vars

    #9

    feat/configurable-pagination → main

    ## Related Issue N/A — small operability improvement. ## Changes Make the items-per-page on the commits and pulls list configurable via env vars, so each deployment can tune list density without code changes (e.g. denser for power users, sparser for demo screens). - Add `COMMITS_PER_PAGE` (default 50) for `/[lang]/repository/[owner]/[repo]/commits`. - Add `PULLS_PER_PAGE` (default 30) for `/[lang]/repository/[owner]/[repo]/pulls`. - Follow the existing `FILE_TREE_DEPTH` pattern (`Number(process.env.X) || <default>`) — no new abstraction, no client-side clamp. - Document both vars in `.env.example`, including the GitHub API hard cap of 100. - Update the routing table in `CLAUDE.md` to note the defaults are configurable. > Note on the GitHub API cap: `per_page` is silently capped at 100 by GitHub. Setting a value above 100 will make the "next page" link disappear (because `hasNext = results.length === PER_PAGE` can never be true). The cap is documented in `.env.example` rather than enforced in code, matching the `FILE_TREE_DEPTH` precedent. ## How to Verify 1. `npm install` (no new deps). 2. `npm run format:check && npm run lint && npm run typecheck && npm run build` → all pass. 3. Default behavior (no override): ```bash npm run dev ``` - Visit /[lang]/repository/[owner]/[repo]/commits → 50 items per page, ?page=2 works. - Visit /[lang]/repository/[owner]/[repo]/pulls → up to 30 items per page. ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`)

    Jiseoup · May 4, 2026feat
  • Jiseoup
    Merged

    chore: introduce coding conventions and reformat codebase

    #8

    chore/coding-conventions → main

    ## Related Issue N/A — proactive tooling improvement. ## Changes Codify the project's code conventions through tooling, and expose npm scripts that CI/CD can call directly in a follow-up. - **Prettier** with `prettier-plugin-tailwindcss` for deterministic Tailwind class ordering. Config: `printWidth: 100`, double quotes, semicolons, LF line endings, `trailingComma: "all"`. - **commitlint** config (`@commitlint/config-conventional` with `i18n` type added) to validate PR titles. Workflow is not enabled in this PR — a follow-up PR will add it. - **`.editorconfig`** and **`.gitattributes`** for IDE/Git consistency across contributors (especially Windows). - **`.git-blame-ignore-revs`** so contributors can skip the bulk-format commit in `git blame`. The squash SHA will be appended in a follow-up PR (it cannot be known until this PR merges). - **New npm scripts** in `package.json`: `format`, `format:check`, `typecheck`, `lint:fix`, `commitlint`. - **CONTRIBUTING.md** — added "Code Conventions", "Local Verification", and "git blame hygiene" sections. Fixed `dictionaries/` → `locales/` path typo. - **PR template** — added checkboxes for `format:check`, `typecheck`, and Conventional Commits title. (This PR introduces the new template, so its checklist may differ from older PRs.) - **CLAUDE.md** — listed the new npm scripts and added a pointer to CONTRIBUTING.md. - **Bulk format pass** — applied `npm run format` to the whole codebase (31 files). Mostly Tailwind class reordering plus minor wrap/trailing-comma adjustments. No behavioral changes. Wiring CI is intentionally left out of this PR. Once merged, two steps in `.github/workflows/ci.yml` complete the gate: ```yaml - name: Format check run: npm run format:check - name: Type check run: npm run typecheck ``` ## How to Verify 1. npm install 2. npm run format:check → All matched files use Prettier code style! 3. npm run lint → passes with no warnings 4. npm run typecheck → passes (already strict: true) 5. npm run build → succeeds 6. Smoke-test commitlint: ```bash echo "feat: bogus" | npx commitlint # passes echo "weird: bogus" | npx commitlint # fails (type-enum) echo "i18n: add ja" | npx commitlint # passes (validates the override) ``` 7. Open any component (e.g. components/RepoCard.tsx) and confirm Tailwind classes are sorted by the plugin. ## Checklist - [x] `npm run format:check` passes - [x] `npm run lint` passes - [x] `npm run typecheck` passes - [x] `npm run build` passes - [x] PR title follows Conventional Commits (`feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `i18n:`)

  • Jiseoup
    Merged

    feat: add branch switcher for code and commits views

    #7

    feat/branch-switcher → main

    ## Related Issue N/A ## Changes - Add `getBranches()` to `lib/github.ts`; add `ref` param to `getTree()` and `getContents()`, `sha` param to `getCommits()` for branch-aware fetching - Add `BranchSelector` client component (`components/BranchSelector.tsx`) using shadcn/ui `Select` — always opens downward, styled to match project theme - Code tab: branch selector rendered in `Sidebar` header; file tree and code viewer reflect the selected branch - Commits tab: branch selector rendered next to page heading; commit list filtered to selected branch; pagination URLs preserve `?branch=` - Pulls tab: no branch selector — PR list is repo-wide and branch-agnostic - Branch state carried via `?branch=<name>` query param; invalid or missing value falls back to `default_branch` - Switching branch clears `?path` to prevent 404 on files absent from the new branch - Add `--popover`, `--popover-foreground`, `--input`, `--ring` CSS variables to `app/globals.css` required by shadcn/ui components ## How to Verify 1. Open a repository page — branch selector visible in the sidebar header 2. Switch to a feature branch → file tree updates, `?path` clears, URL shows `?branch=<name>` 3. Select a file on the new branch → code viewer shows the correct content for that branch 4. Navigate to Commits tab → branch selector visible next to heading; commits are filtered to the selected branch 5. Navigate to Pulls tab → no branch selector shown; all PRs listed regardless of branch 6. Access `?branch=nonexistent` → silently falls back to the default branch 7. Verify branch dropdown always opens downward and background is opaque in both light and dark mode ## Checklist - [x] `npm run build` passes - [x] `npm run lint` passes - [x] New/updated strings added to both `dictionaries/ko.json` and `dictionaries/en.json` (if applicable)

    Jiseoup · Apr 10, 2026feat
  • Jiseoup
    Merged

    feat: add mobile responsive layout with sidebar drawer

    #6

    feat/mobile-responsive → main

    ## Related Issue N/A ## Changes - Add `SidebarDrawer` client component that renders the file tree as a slide-in overlay drawer on mobile and a fixed sidebar column on desktop (`md:` breakpoint) - Remove hardcoded `w-64 shrink-0` from `Sidebar` — width is now owned by `SidebarDrawer` - Apply responsive padding (`px-3 md:px-6`) across repo layout, commits, pulls, and home pages - Truncate long branch ref strings in pulls list to prevent horizontal overflow - Add `flex-wrap` to pagination containers for narrow viewports ## How to Verify 1. Open the app in Chrome DevTools with a mobile viewport (e.g. iPhone 12 Pro, 390px) 2. Navigate to a repository — sidebar should be hidden, "Files" button visible at top of content area 3. Tap "Files" → drawer slides in with dark overlay 4. Tap the overlay → drawer closes 5. Select a file from the drawer → file content renders in the main area 6. Switch to desktop viewport (≥ 768px) — sidebar always visible, no toggle button shown 7. Check the pulls/commits pages — long branch names are truncated, pagination doesn't overflow ## Checklist - [x] `npm run build` passes - [x] `npm run lint` passes

    Jiseoup · Apr 10, 2026feat
← PrevPage 4Next →
Jiseoup · May 18, 2026
feat
Jiseoup · May 4, 2026chore