Repository navigation
Add grid and compact list controls across article feeds - #81
Conversation
PR reader API performanceResult: INCONCLUSIVE 3 inconclusive · 5 within threshold. Zero request failures across all six runs. Base Three independent runs per revision, each on a fresh GitHub-hosted ARM64 runner. 16 users, 60 seconds/run, 1,000 synthetic articles, cache off, five PgBouncer slots. Latency comparisonAll latency values are in milliseconds; lower is better. Values are medians of three runs.
Additional latency and throughput metricsEach cell shows base → PR. Latencies are in milliseconds.
Individual runs
How to interpret this reportRegressed / Improved: a p95 regression needs >20% and >20 ms increase in the medians and at least two head samples versus the base median. Improvements use the inverse threshold. Within threshold means the change did not meet both thresholds. Inconclusive: a within-revision p95 range >35% of its median and >20 ms is too noisy for a confident latency verdict. Inconclusive latency comparisons are non-blocking: the check passes without claiming an improvement. Confirmed regressions and test/report errors fail the PR gate. Throughput is descriptive: paced users do not measure maximum capacity. This uncached public API test does not establish production health, browser performance or worker capacity. Separate runners can differ in hardware or host load; repetitions and noise checks reduce but cannot eliminate that uncertainty. Full HTML/CSV reports and logs · attempt 1 |
Code Review ✅ Approved🟡 Medium risk · Adds persisted layout selection across website and extension article feeds. Adds grid and compact list view controls across article feeds, allowing readers to switch layouts immediately without opening settings. Grid remains the default, account preferences are preserved, guest choices persist in browser storage, and both layouts share pagination and engagement data. No issues found. OptionsAuto-apply is off → Gitar will not commit updates to this branch. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
Backend unit coveragePASS · minimum combined coverage 67.60%. Tests: 3007 passed, 0 failed, 0 skipped. Source files: 273.
Unit coverage includes every backend workspace. PostgreSQL/Redis integration tests run separately. Commit: 06fee36 · HTML, JSON, XML reports and job logs · attempt 1 |
|



What changes and why?
Readers previously had to open account Feed settings to change article layouts, and guests could not choose a compact view. Grid/List icons now sit beside Filters and switch the shared article renderer immediately across My feed, Latest, content-type feeds and topic/source feeds. Read later and Trending expose the same control in their headings.
Grid remains the default and existing saved account choices are honored. Guest choices persist in browser storage; signed-in choices use the existing account feed preference without changing content or language selections. Failed account saves restore the previous layout and announce an error. Unavailable preferences offer a retry before any write, and late responses from another account cannot replace the current account's layout.
The existing compact table now has shorter rows, bounded titles and stable source/date/action columns. Narrow tables put source/date information beneath the title and retain a 44px bookmark target while hiding secondary engagement controls. Toolbar wrapping keeps Filters and the layout icons together on small screens. Both layouts share loaded articles, infinite pagination, generation pins, engagement data and preview navigation.
Trending uses shared reader content and gains an extension route adapter so the same control works in Chrome and Edge. The implementation uses the existing feed display schema; no new backend contract is introduced.
Validation
Updated against master after #80, preserving article-first rendering, options-error recovery, prompt coordination, touch-fixture isolation and backend coverage/security improvements.
apps/web/tests/browser; website and extension consumers share them. Application coverage exclusions are unchanged.CI required, all three CodeQL analyses, Sonar, dependency/secret/workflow checks, populated upgrades, real API/admin journeys, performance comparison and ARM64 image checks.Rollout notes
Guest layout storage is cosmetic and falls back to a working per-tab choice if browser storage is blocked. Signed-in readers use the existing authenticated/CSRF-protected feed-settings endpoint. No migration or configuration change is required.
This PR is isolated on
feat/reader-grid-list-view; the legacy-cleanup and other open tasks remain on their own branches. Website deployment and Chrome/Edge store publication require the normal release process and are not included here.Merge after #80 and before #82–#84, one at a time, after all current-head checks pass.
Ready for review