project-detail-todo
Project Detail — Task list (interactive)
This file lists small, prioritized fixes for the Project detail page UI (see screenshot). Each item is self-contained: files to edit, acceptance criteria, quick test commands, and an estimated effort. Mark an item as done by changing [ ] to [x] and committing the change.
How to use
- Edit this file to mark a task done (replace
[ ]with[x]). - After applying a change locally, run the checks listed under “Quick check” for that task.
- Commit with a clear message, e.g.
git add -A && git commit -m "fix(project): tidy project detail - hide empty fields".
Tasks
-1) Consolidate empty-state placeholders (high)
- Status: [x]
- Motivation: The page shows many repeated “Not set” badges and placeholders. Replace these with a single, muted empty-state per logical block (Dates, Team, External Links, Schedule).
- Files to edit:
src/pages/ProjectDetail.vue(primary),src/components/ProjectRow.vue(if duplicated) - Change summary: Add small computed flags (e.g.
hasDates,hasTeam) andv-if/v-elsebranches that show either the data or a single muted line like— Not set —orNo schedule available. - Acceptance criteria: When a project has no start/end/team/links, the page shows a single muted line for each block instead of multiple “Not set” badges.
- Quick check:
- Estimated effort: 15–30 minutes
-2) Promote project title + move status badge into header (high)
- Status: [x]
- Motivation: The title should be prominent and the status badge near it for immediate context.
- Files to edit:
src/pages/ProjectDetail.vue - Change summary: Render project name as
h1(oris-size-4Bulma) and placeStatusBadge(or inline badge) top-right of the card header; customer links can be a subtitle under the title. - Acceptance criteria: Title is visually primary; status badge appears to the right of the title and has accessible text (not color-only).
- Quick check: visually inspect dev server or run tests; run typecheck.
- Estimated effort: 20–40 minutes
-3) Fix label spacing and punctuation (low)
- Status: [x]
- Motivation: There are nodes like
Dates:Not setthat lack spacing. - Files to edit:
src/pages/ProjectDetail.vue(search forDates:and similar strings) - Change summary: Add a space after colons or render labels and values as separate DOM nodes so CSS controls spacing.
- Acceptance criteria: All label:value pairs render with a space between label and value.
- Quick check:
npx tsc --noEmitand manual glance in browser. - Estimated effort: 5–10 minutes
-4) Disable/hide links when no data (medium)
- Status: [x]
- Motivation: The “Schedule” link appears even though there is no schedule; this is confusing.
- Files to edit:
src/pages/ProjectDetail.vue - Change summary: Replace anchor with a muted
spanorbuttondisabled state when the target resource is not present (v-if/v-else). Ensure keyboard focus respects the disabled state. - Acceptance criteria: No clickable links that go nowhere; links appear only when data exists.
- Quick check: manual click test +
npm test. - Estimated effort: 10–20 minutes
-5) Accessible progress bar (high)
- Status: [x]
- Motivation: Progress should expose ARIA attributes and should not show ambiguous “Not set” overlays.
- Files to edit:
src/pages/ProjectDetail.vueorsrc/components/ProgressBar.vueif present - Change summary: If
progressis a number, render adivwithrole="progressbar",aria-valuenow,aria-valuemin="0",aria-valuemax="100"and visible percent text. If progress missing, show mutedProgress: — Not set —text instead of a gray bar. - Acceptance criteria: Screen readers announce progress; no empty visual bar for missing data.
- Quick check:
npx tsc --noEmit+npm test+ manual inspection. - Estimated effort: 20–30 minutes
-6) Conditional mini-timeline (medium)
- Status: [x]
- Motivation: Show mini-timeline only when
start_dateis present; otherwise show a short CTA or hint. - Files to edit:
src/pages/ProjectDetail.vue,src/components/charts/EChart.vue(if option handling needed) - Change summary: Wrap timeline component in
v-if="hasDates". If no dates, render a small CTA text:No schedule availablewith guidance. - Acceptance criteria: Timeline not rendered for projects missing
start_dateandend_date; when present, timeline works the same as other pages. - Quick check: run tests + visually verify page.
- Estimated effort: 15–30 minutes
-7) Team avatars & hide empty team (low)
- Status: [x]
- Motivation: Use
Avatar.vueto show team and hide the Team row when there are no members. - Files to edit:
src/pages/ProjectDetail.vue,src/components/Avatar.vue - Change summary: Render list of
Avatarcomponents forproject.team. Ifteamempty, show— Not set —(covered by task 1). - Acceptance criteria: Avatars visible when team exists, otherwise hidden or single muted placeholder.
- Quick check: unit test optional; manual visual verification.
- Estimated effort: 15–30 minutes
- External links consolidation (low)
- Status: [ ]
- Motivation: The External Links block shows decorative placeholders; consolidate into one clear list or a CTA to add links.
- Files to edit:
src/pages/ProjectDetail.vue - Change summary: Render a UL of links when present; otherwise show single muted line with CTA text
No external links. - Acceptance criteria: External links are shown as anchors when present and otherwise show single muted message.
- Quick check: manual verification.
- Estimated effort: 10–20 minutes
- Tests & typecheck (always run after edits)
- Status: [ ]
- Motivation: Keep changes safe — run typecheck and tests after each patch.
- Commands to run locally:
- Acceptance criteria:
npx tsc --noEmitexits 0 andnpm testshows no failing tests.
Marking progress
- To mark a task done: change the line
- Status: [ ]to- Status: [x], save, and commit the change. - Example commit command (fish):
If you want, I can apply the first fix (consolidate empty-state placeholders) now and update this list automatically. Reply with apply 1 to let me patch src/pages/ProjectDetail.vue or no to keep this as a plan only.
Additional suggestions (optional)
-
Consolidate header: show title, status, priority and a compact progress pill in the card header so the most important metadata appears above the fold. (See task 2 + accessible progress.)
-
Improve keyboard accessibility for timeline: make the mini-timeline keyboard-focusable and emit a clear
chart-clickpayload shaped like{ id, name, start, end }so other pages can re-use it. -
Add ProjectDetail edge-case tests: cover projects with no dates, no team, and no external links. Prefer small inline test wrappers (current test approach) until SFC transform issues are resolved in the test environment.
-
Small visual polish: tighten vertical rhythm in the header, reduce tag paddings for compact metadata, and ensure color contrast on status tags (use
readableTextColor).
Mark any of the above as done by changing the - [ ] to - [x] and committing.