Optimize views#6
Open
BirgitPohl wants to merge 19 commits into
Open
Conversation
Expose githubOwner via public runtime config and use it for the navigation heading, page titles, and the projects empty-state CTA. Fallback is now "GitHub" so any org can brand the dashboard via GITHUB_OWNER without the Oracommit name leaking through. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a single Pinia resource cache (persisted to localStorage) plus a generic useResource composable that every page consumes with the same shape. data is never cleared during a refresh, so pages keep the last result mounted while a new fetch runs — fixing the blank-screen flash on Project Views and Project Board Details, and surviving hard reloads via persisted state. PageLayout derives the skeleton/refresh-indicator from data + isRefreshing in one place. The two pages that were gating content on `pending` now show an inline RefreshIndicator over the stale data instead. The legacy useCachedFetch composable is removed; @pinia/nuxt and pinia-plugin-persistedstate are wired into nuxt.config. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deletes both pages, their server API routes, the GraphQL and REST GitHub utilities that only supported them, the view filtering/grouping/sorting composables, every project- and view-specific feature component (board, roadmap, table, kanban column, swimlane, item card, project card, filters, progress graph, items table, view renderer), the breadcrumb and tabs atoms that were only used here, the Project type definitions, and the two navigation links. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a serverLog helper that mirrors console.log onto an EventEmitter, an SSE endpoint at /api/log-stream that fans out to connected browsers, and a useLogStream composable + LogTicker component mounted once in the default layout. Existing server-side progress logs in github.ts and the workflows/repositories/pull-requests handlers now flow through serverLog so the user sees a one-line pill in the bottom right whenever the server is fetching, replaced by each subsequent log and hidden 2s after the last line. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Removes the "Updating..." pill from PageLayout, deletes the RefreshIndicator component and the dead useLoadingState composable, and strips the now-unused lastUpdated plumbing from the workflow, repositories, and pull-requests pages. The bottom-right LogTicker already surfaces refresh activity. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a tiny headerStats Pinia store that pages write to; the Navigation renders the entries in a monospace row below the menu (Game-Boy-panel friendly). Drops the large StatsCard blocks from Repositories and Pull Requests, removes the now-dead StatsCard and SkeletonStats components, and trims the showStats / stats-slot plumbing from PageLayout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Extends design-tokens.css with a semantic layer (primary / secondary / tertiary identity roles plus success / warning / error / info status roles, each with -bright, -dark, and -on- variants) on top of the existing scale tokens. Card-config composables, LogTicker, Navigation stat strip, LabelBadge, Tag, and UserAvatar now reference these semantic names instead of raw hex / rgba — no color literals remain in component code, so retheming means editing one block in the token file. Also rewrites the README to drop references to the removed Project Boards / Project Views, the deleted /api/projects endpoint, the no-longer-needed read:project scope, and the GraphQL utilities, and updates the framework version. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a useBrandThemeCss composable that reads a JSON object from the
BRAND_COLORS runtime config, validates each entry against an allowlist
of 21 semantic role names (capped at 10 applied overrides) and a hex
regex, and returns a :root { ... } block. app.vue feeds the result
into useHead so the override ships in the SSR <head>, taking effect on
first paint with no flash. Unset, unknown, or malformed entries fall
back to the design-token defaults. README documents the env shape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rewrites RepositoryCard as a one-line clickable row with a category- colored left border and switches the page from a card grid to a single-column list. Fixes the mobile nav hiding the first page items by measuring the rendered nav height with a ResizeObserver and exposing it as --nav-actual-height, so the layout offset adapts to stacking and to the stats strip. Moves Repositories to the third spot in the nav. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a headerActions Pinia store that pages register icon buttons with; the Navigation renders them on the right end of the stats substrip, in the same row as "N Repos". Mirrors the existing headerStats pattern — pages declare actions on mount and clear on unmount, so they don't leak across routes. Replaces the page-level 🔍 toggle on Pull Requests with a nav-hosted action that drives the same filtersOpen state and surfaces a primary-colored dot when filters are non-default. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The nav now collapses to a hamburger under 768px, with the three links
sliding down as a full-width vertical menu that auto-closes on route
change. Active and hover nav links drop the background tint and switch
to --color-primary on the label text instead.
Splits headerActions into serializable metadata (in Pinia state) and a
module-level handler Map keyed by action id, so the SSR payload no
longer trips devalue with a "Cannot stringify a function" error. The
page-level API is unchanged — pages still pass { id, icon, label,
active, dot, onClick } to set(); the store strips onClick into the map
and exposes invoke(id) for the Nav button.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a route-name → label map and a compact cluster (Text + burger) that appears at <= 768px so the mobile header reads "Oracommit · Pull Requests ☰" instead of just the org name. The cluster also gains a 12px gap between the title and the burger to keep them from cuddling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Repaints the semantic layer with a 10-color harmonized palette (Ink Black, Dark Teal, Dark Cyan, Pearl Aqua, Wheat, Golden Orange, Burnt Caramel, Rusty Spice, Oxidized Iron, Brown Red), splits grey out of secondary into its own --color-neutral* role, and introduces explicit --color-on-* contrast tokens so light backgrounds (Pearl Aqua success, Golden Orange warning) get dark text instead of unreadable white. Compresses Workflows and Pull Requests into single-column lists of saturated, status-colored rows that share the row pattern with Repositories. The PR row color now derives from review + check status: draft → neutral-dark, merged → tertiary, checks failed → error, change requested → warning, checks ✓ + approved → success, otherwise primary. Row dividers use color-mix(currentColor 15%, transparent) so they stay visible on both light and dark rows. Migrates every atom (Button, Tag, Link, Input, Select, MultiSelect, Icon, Text, LoadingSpinner) and the relevant molecules (ErrorBox, BaseCard, BranchIndicator) plus the Navigation stats and the Pull Requests filter label from raw scale tokens (--color-primary-600, --color-gray-700, etc.) to the semantic layer, so every surface repaints in lock-step when the palette is tuned. The Link "blue" and Button "danger" variants — which referenced --color-blue-600 and --color-danger-600 that never existed in the token file — are now real semantic references that actually paint. Drops the page-layout top padding (32 → 12 desktop, 16 → 8 mobile) so the list content sits close to the nav. Extends the BRAND_COLORS env-var allowlist with neutral / neutralBright / neutralDark and documents them in the README. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…g sort Bumps the root font-size to 26px so every rem-based token (text and spacing) scales together for a wall-mounted dashboard read from across the room. Switches the four raw-px font-sizes (LogTicker, LabelBadge xs, nav stat label + value) to rem tokens so they participate in the scale. Tightens the page-layout padding (0 / spacing-2 / spacing-2 desktop; 0 / spacing-1 / spacing-1 mobile) and halves the navigation's vertical padding from spacing-4 to spacing-2 so lists reclaim screen space. Moves the burger breakpoint up to 1100px so the wider scaled labels collapse into the dropdown before they break the nav row. Fixes hover and active nav-link colors: the selector was targeting :deep(span) but the Text atom renders a <p>, so neither state actually applied. Selector now matches :deep(.text) regardless of the underlying tag. Sorts running workflows (status containing in_progress or queued) to the top of the Workflows page, falling back to newest-first within each group. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Installs @nuxt/icon (Iconify-backed, lazy SVG) and wires it as <NuxtIcon> so it doesn't collide with the existing <Icon> atom. The atom is now a thin wrapper that delegates to <NuxtIcon> while keeping its size and color variant API intact — every existing call site continues to work. Workflow status configs, repository categories, and PR state / check / review helpers now return lucide:* names instead of emoji glyphs. The three row components (Workflow, PR, Repository) render the icons via the atom rather than as text spans, including the private-repo lock, the star / git-fork / circle-dot stat cluster, and the message-circle comment indicator. The nav substrip's filter action button is the same pattern: pages register an action with a lucide name and the Navigation renders it through the atom. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Differentiates the two message bubbles in the PR row signals — review status of "commented" now renders message-square-quote (clearly review feedback) while the unresolved/total comment cluster keeps the round message-circle, with the count placed before the bubble so it reads "N/M 💬". Also makes .pr-row__comments an inline-flex container so the icon and the count baseline-align with the sibling signal icons. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The first signal bubble fires from review_status === 'commented'. When every reviewer remark has been resolved the bubble adds no information, so it's now suppressed in that case via a showReviewIcon computed. Other review verdicts (approved / changes_requested / pending) always show. The N/M comment count cluster is unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Each list page (Workflows, Pull Requests, Repositories) now declares its column tracks at the container level and every row inherits them through grid-template-columns: subgrid + grid-column: 1 / -1. Columns line up vertically across all rows even when content lengths vary, giving a calmer scan over the dashboard. Splits the PR row signal cluster into individual columns — check status, review status, and comments each occupy a dedicated grid column so their icons align in their own vertical tracks across rows. Empty cells preserve the column width via subgrid. The comments column keeps its right-flush alignment via justify-self: end. Wraps the conditional private-repo lock into a repo-row__name-cell so the column count stays constant regardless of repo visibility. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
No description provided.