49 Commits
Author SHA1 Message Date
Thomas DurieuxandClaude Opus 5.5 c044b83541 feat(ui): one consistent design across author, reviewer and admin screens
The UI was uneven: the home page looked finished, but app pages used three
different display typefaces, the anonymize flow changed frame between steps,
and the dashboard, explorer and admin screens each had their own controls,
status colours and edge-case handling.

Make every screen follow one system: shared page header, grid, buttons,
filters and status colours; a repository picker and step trail on anonymize;
a "What reviewers will see" preview of the actual reviewer page; consistent
file headers and viewers for every file type; truthful admin charts and
tables. Fold the accumulated override blocks back into style.css (22%
smaller, no visual change).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 02:22:45 +00:00
Thomas DurieuxandClaude Opus 5.5 2600bfa2f6 fix(ui): go-to-line popover, selection overlap, copy icon, date and checkout layout
- Go to line: themed popover under the file toolbar (line or line:column,
  range check) instead of Ace's unthemed prompt
- Code selection: no per-box outline, so multi-line selections no longer
  overlap at the joins; single-line matches keep an inset outline
- My work: copy-link is an icon button (URL in the tooltip); phone cards
  drop the URL row and truncate long names
- Date fields: drop WebKit's native button styling so they fit their column
- Submit bar: the checkout note gets its own line under the button

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 10:33:06 +00:00
Thomas DurieuxandClaude Opus 5.5 9ba9af2b44 fix(ui): admin errors filters, overview views, phone menu, ended projects
- Admin errors: filters stack on phones (tabs, search, Sort and Group,
  refresh) instead of squeezing into one row
- Admin overview: Summary / Performance / Cache views, kept in the URL
  hash; charts take the full width on phones
- Phone menu: aligned rows with icons, neutral fill for the current page,
  account links inline, no duplicate Sign in
- My work: removed and expired projects get a labelled badge, a muted
  "Link offline" in place of the copy link, and an inline Enable/Extend

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 09:18:25 +00:00
Thomas DurieuxandClaude Opus 5.5 579ce970c7 feat(ui): redesign the viewer, landing, author and admin screens
Viewer: full-height app bar with a Help menu, search + ZIP sidebar, one
toolbar for README and code, reading mode with a scroll-tracking outline,
docked find for Markdown and code, and redaction slots (a blank stone slot
holding the term number) in prose, headings, code, the tree and the path.

Landing and FAQ: live redaction demo, serif display headings, teal accent.

Author screens: My work table with copy/open/edit actions, a usage meter,
a single-container New anonymization flow with a sticky submit bar, themed
form controls, and consistent GitHub connection cards.

Admin: underline tabs, severity-first errors chart and list, error tiles
that filter (older pages load until matches appear), queue and overview
health states, and shared toolbar heights and borders.

Fixes: guarded localStorage access, failed README images render a
placeholder, phone hover states no longer stick, and UI tests updated for
the new copy and markup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 10:52:10 +00:00
Thomas Durieux 6434337923 perf: bound request work and resource usage (#866)
* perf: bound request work and resource usage

* fix: address performance review regressions

* fix: guard content expiration and dashboard state

* fix: tolerate cache outages and retire derived paths

* fix: revalidate expiration claims and status pagination

* fix: retry interrupted repository metadata cleanup

* fix: retire obsolete content cache storage

* fix: activate tree metadata and recheck expiration claims

* fix: fence cache publication across expiration

* fix: recover staged trees and enforce cache lifecycle cleanup

* fix: prune expired transforms during database outages

* fix: finish conference removals and reload expiration candidates
2026-10-08 03:38:19 +01:00
Thomas Durieux 282efdc16e fix: make dashboard UI consistent and compact on mobile 2026-10-07 14:54:49 +00:00
tdurieux bcc7abc975 style: clarify GitHub connections and account navigation 2026-09-10 16:04:44 +02:00
Thomas Durieux a60ad6a921 feat: add read-only GitHub App access alongside OAuth 2026-09-09 22:08:12 +02:00
tdurieux 4a18f94631 refactor: migrate the frontend from AngularJS to Vue 3 2026-09-09 13:19:53 +02:00
tdurieuxandClaude Fable 5.1 8e9b5b9a45 feat: make the dashboard readable at a glance
The dashboard showed the anonymize date under "Expired", a dash in the
Expires column for 54 of 60 rows, raw status codes such as
branch_not_found, and a chip reading "REMOVED" that actually meant
"removed items are hidden". Muted text sat at 3.5:1 contrast, keyboard
focus was invisible, numbers were left-aligned, and a legacy record
without an identifier rendered as an empty link to /pr/undefined/.

This rewrites the dashboard template and controller and tightens the
theme tokens:

- Status sub-line is labelled ("anonymized on Sep 6, 2026"); Expires
  shows Never, the date, or "Expired on <date>".
- Conference folded into the name cell as a tag; Views right-aligned;
  every column header is a keyboard-sortable button with aria-sort.
- Sort/Status buttons show their state; chips read "Hiding Removed";
  result count and Clear filters; empty state with a way out.
- Status filter covers Ready, In progress, Error, Expired, Removed.
  Stuck downloads say so; codes map to sentences; statuses to labels.
- Lists load in parallel and merge once behind a skeleton; broken
  records are flagged instead of linking nowhere.
- Actions menu: View, View page, Edit, Force update, divider, Remove,
  all as buttons rather than href="#" anchors.
- Theme: warm dark canvas, muted text >= 4.5:1 in both modes, semantic
  status tokens, 11/13/14/16px type scale, mono only for identifiers,
  6px/10px/pill radii, :focus-visible ring, quota bars in ink until a
  limit is near, unlimited shown as such.
- Mobile: no 9px text, filter row wraps in two lines, meta on one line.

Adds scripts/dev-mock.js to serve the dashboard with fixture data and
test/dashboard-ui.test.js covering the filters, template invariants and
token contrast.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 20:20:17 +02:00
Archit Rastogi 420fa9e450 fix: clip overflowing conference link in dashboard table (#790)
The Conference cell is a grid item with the default min-width:auto,
so a long unbroken URL forces the grid track wider than its
minmax(140px, 1fr) size and bleeds visually into the Status column.
Clip it with overflow:hidden/ellipsis and expose the full value via
a title attribute.
2026-08-26 21:47:23 +02:00
Thomas DurieuxandClaude Opus 4.8 5ef10dee9e fix: dashboard menu clickability + expiration date UX (#753)
* fix: dashboard menu clickability + expiration date UX

Dashboard actions menu:
- Inactive (expired/removed) rows dimmed via their cells instead of the
  row, so `opacity` no longer creates a stacking context that trapped the
  actions dropdown beneath later rows and made its items unclickable.
- Add an "Extend 6 months" menu item for expired repos/PRs/gists.

Expiration form (anonymize):
- Fix the "After , the content will be removed." blank date: guard the
  helper text and add min/max validation feedback so an invalid pick no
  longer nulls the model into a broken sentence.
- Add a `min` (today) so past dates can no longer be selected, and
  compute min/max from local date parts (not UTC) to avoid a timezone
  off-by-one in the native picker.
- Default expiration is now 6 months (single source of truth, removing a
  latent double-offset bug); max stays at 1 year.
- Block submitting a missing/out-of-range expiration date.

Backend:
- New POST /:id/extend endpoint for repos, PRs and gists that pushes the
  expiration +6 months and re-anonymizes so expired items come back
  online, mirroring the refresh flow. Shared extendExpirationDate helper.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix: add frontend translation for invalid_status error code

The new /extend endpoints throw an "invalid_status" AnonymousError, which
the error-code coverage test requires to have a locale entry.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 14:10:38 +02:00
tdurieux b37a814f3a improve queue 2026-05-07 14:58:36 +03:00
tdurieux 27d6b56da7 fix mulitple bugs 2026-05-05 12:34:03 +03:00
tdurieux f0bc53f093 feat: gist & co-authors 2026-05-04 13:10:44 +02:00
tdurieux 5793e2dbb5 fix: allow removing expired and errored repositories from dashboard
The Remove action in the dashboard dropdown was gated on
status == 'ready', so expired repos showed no way to be removed and
stuck on the front page. The backend DELETE route already accepts any
non-'removed' status, so widen the ng-show to include 'expired' and
'error'.

Fixes #463.
2026-05-03 19:29:08 +02:00
tdurieux a5f66d6844 multiple fixes 2026-05-03 15:30:54 +02:00
tdurieux 88f826aab4 update design 2026-04-24 14:55:18 +02:00
Thomas Durieux 261eaa8d79 Polish website UX: unify dashboards, clean up layout, modernize styling (#668) 2026-04-15 09:30:19 +02:00
Thomas Durieux 1d97c76e7e Improve mobile layout and redesign admin interface (#665) 2026-04-15 06:04:43 +02:00
tdurieux 3c18884de2 fix: fix filter remove button in dashboard 2023-02-22 09:28:27 +01:00
tdurieux f897b5ba5b feat: improve dashboard search layout 2023-02-06 12:55:32 +01:00
Thomas Durieux 73e46f926f feat: add support for pull requests (#156) 2023-01-22 12:54:14 +01:00
tdurieux 2cdd417056 feat: improve repository status UI 2021-09-09 13:16:01 +02:00
tdurieux 6464e1c547 fix: fix tooltip repo size 2021-09-08 16:12:06 +02:00
tdurieux e036a80167 fix: fix quota UI 2021-09-08 16:08:24 +02:00
tdurieux a6bbfdd6fc chore: improve status badge 2021-09-08 15:58:59 +02:00
tdurieux fe7c953b15 chore: higlight error message in repository list 2021-09-08 15:56:03 +02:00
Thomas Durieux 20e8d533f4 feat: measure and display user quota (#72) 2021-09-06 14:53:42 +02:00
tdurieux 6b6fbe9263 feat: display message when repository list is empty 2021-09-06 13:01:05 +02:00
Thomas Durieux 49da267d5f feat: Add conference manager (#71) 2021-09-06 09:34:39 +02:00
tdurieux 1506de0367 add: create toast notifications in the dashboard 2021-08-24 12:32:49 +02:00
tdurieux b03e43eb9a update link to original repository 2021-08-24 09:06:33 +02:00
tdurieux 6b568905d3 add: new version of the dashboard 2021-08-20 16:10:39 +02:00
tdurieux caeff49ab0 migrate JavaScript to TypeScript 2021-08-13 08:26:23 +02:00
tdurieux f58e46fc56 add dark mode 2021-04-26 14:37:48 +02:00
tdurieux fbc7952d62 fix repo update 2021-04-21 22:58:18 +02:00
tdurieux a6baf39970 improve mobile view 2021-04-21 13:22:00 +02:00
tdurieux 2e761ca295 improve mobile view 2021-04-21 11:20:14 +02:00
tdurieux 0e5dc0a0bf fix link to anonymized repository and page 2021-04-19 10:33:25 +02:00
tdurieux 7ce61a5502 improve style 2021-04-19 09:59:52 +02:00
tdurieux e716b28494 improve dashboard page 2021-04-07 14:12:58 +02:00
tdurieux c0eeb86a9c improve dashboard page 2021-04-07 13:07:49 +02:00
tdurieux 19bd0702df add expiration date 2021-04-06 18:09:04 +02:00
tdurieux cf17e1c456 fix typos 2021-04-06 17:45:36 +02:00
tdurieux 83dd070843 improve dashboard 2021-03-23 08:39:28 +01:00
tdurieux 72715dfcd9 Display error messages 2021-03-19 13:26:29 +01:00
tdurieux 351a0902b2 improve page design 2021-03-19 10:23:46 +01:00
tdurieux a2d0f0b212 v2 wip 2021-03-16 11:23:16 +01:00