People pages
The people list at /projects/people and a person's profile at /projects/people/<userId>. Both render the same features on a phone, a tablet and a desktop; what does not fit at a width moves into a popover, a bottom sheet or a menu (PT-1518).
- Source:
apps/project-tracker/src/components/people/, with the routes underapps/project-tracker/src/app/(app)/people/. - Data:
/api/peoplefor the list and/api/users/<id>/tasksfor a profile. The pages add no endpoint.
People list
One toolbar: Search people (name or email), a Filters popover and a View menu.
- Filters: member type (Internal, Guest), "With overdue tasks" and "Agents". On a phone the popover is a bottom sheet.
- View: group by none, member type or role; sort by name, active tasks or overdue tasks, ascending or descending; show or hide the Role, Type, Active and Overdue columns; reset.
- Layout: a table from the width the list actually has (not the viewport), with Person, Active and Overdue sortable from the header. Type folds into the Person cell below 700 px and Role below 600 px, and a column the grouping already states folds too, with the reason shown in the View menu. Below 560 px the list becomes rows, each row one link.
Person profile
A header with the person's name, email and key facts (overdue first, then tasks and projects), and one toolbar: Search tasks (title), a Filters popover (status, project, overdue) and a View menu (layout Automatic / Timeline / List, scale Day / Week / Month while the timeline shows, reset).
- List groups the tasks by project with their status, dates, an Overdue flag and progress. Automatic picks it below 640 px of measured width.
- Timeline keeps its label column and date header in place while it scrolls, draws a Today line and opens on today. On a touch screen every bar is a 44 px target. The window always holds today and reaches about six months either side of it at the Day scale, two years at Week and ten years at Month; a task further out keeps its row with its bar clipped at the window's edge. Switch to a wider scale to see it, or to the List, which shows every task.
- Completion uses the default workflow's
COMPLETEDstatus; reading each project's own status configuration is PT-1519.
What the URL carries, and what the browser keeps
Filters live in the URL, so a filtered view can be shared and walked back with the browser:
| Page | Parameters |
|---|---|
| List | q, type (INTERNAL, GUEST), overdue=1, agents=1 |
| Profile | q, status (comma-separated), project (comma-separated ids), overdue=1 |
The presentation (grouping, sort, columns, layout, scale) is a personal preference kept in the browser per organisation and user, never in the URL.
An older list link still works: search is read as q, status as the member type, and sort (name, tasks, overdue) is applied once to the saved view. The address is then rewritten to the current parameters.