feat(web): English paths, and a portfolio that updates itself

/cartera, /explorar and /p/:key/proponer are /portfolio, /explore and
/p/:key/propose now, like every other path; the Spanish ones redirect,
so links already shared keep working. Settings sections go by
?section= with English names.

The portfolio reads itself again, quietly, when a ticket, sprint or
release of the projects shown changes, when my projects change, or when
the live connection comes back; «En directo» replaces the refresh
button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-15 22:15:32 +02:00
parent 9044690348
commit d0efaeba80
22 changed files with 150 additions and 66 deletions

View File

@@ -12,6 +12,8 @@ describe('appRoutes', () => {
const children = app?.children ?? [];
expect(children.map((route) => route.path)).toEqual([
'',
'portfolio',
'explore',
'cartera',
'explorar',
'p/:key',
@@ -19,7 +21,10 @@ describe('appRoutes', () => {
expect(children[0].canActivate).toContain(authGuard);
expect(children[1].canActivate).toContain(authGuard);
expect(children[2].canActivate).toBeUndefined();
expect(children[3].canActivate).toBeUndefined();
expect(children[5].canActivate).toBeUndefined();
// The Spanish paths of shared links lead to the English ones.
expect(children[3].redirectTo).toBe('portfolio');
expect(children[4].redirectTo).toBe('explore');
});
it('exposes every project section', () => {
@@ -28,8 +33,9 @@ describe('appRoutes', () => {
?.children?.find((route) => route.path === 'p/:key');
expect(project?.children?.map((route) => route.path)).toEqual([
'',
'board',
'proponer',
'board',
'propose',
'list',
'issues/:issueKey',
'backlog',