Skip to content

Optimize views#6

Open
BirgitPohl wants to merge 19 commits into
mainfrom
optimize-views
Open

Optimize views#6
BirgitPohl wants to merge 19 commits into
mainfrom
optimize-views

Conversation

@BirgitPohl

Copy link
Copy Markdown
Owner

No description provided.

BirgitPohl and others added 19 commits June 15, 2026 14:54
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>
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