Skip to content

feat(projects): strip Edit Project modal to identity; move links to Sheet - #113

Merged
romahawk merged 5 commits into
mainfrom
feat/edit-project-identity-strip
Jun 29, 2026
Merged

feat(projects): strip Edit Project modal to identity; move links to Sheet#113
romahawk merged 5 commits into
mainfrom
feat/edit-project-identity-strip

Conversation

@romahawk

Copy link
Copy Markdown
Owner

Experiment

Name: edit-project-modal-identity-strip
Learning question: Can Claude Code execute a scoped form restructure that removes fields and relocates concerns across two components without leaking scope into adjacent modules?

ADR: ADR-007 — Project data model, milestones-only, sprint as separate object


Commit history (one per section)

# Commit Section
1 fa10761 ADR-007 only — no code change
2 85a6cae §1 — Remove Weekly Outcome + Links from modal
3 009e260 §2 — Calendar pickers, color swatches, status ToggleGroup
4 d7a265c §3 — Links block on Sheet (inline-editable)
5 012fd11 §4-6 — Sticky footer, keyboard shortcuts, layout polish + CHANGELOG

Before / After

Section Before After
§1 — Fields removed Weekly Outcome field, Links section, "Active projects require weekly outcome" validation Gone. weeklyOutcome field stays on type for session-2 migration.
§2 — Date pickers Native <input type="date"> × 2 shadcn Calendar + Popover, format dd MMM yyyy, end-after-start validation
§2 — Color picker <input type="color"> + hex text input Row of 8 preset swatches with ring-on-active
§2 — Status <Select> dropdown ToggleGroup segmented control (Active / Paused / Parked / Completed)
§3 — Links Read-only in modal Inline-editable on detail Sheet: + Add, hover-edit (pencil), hover-delete (trash with inline ✓/✗ confirm), URL tooltip
§4 — Footer Single full-width green "Save Changes" button Sticky: Delete project (muted red text, AlertDialog confirm) · Cancel · Save
§5 — Layout space-y-3, inconsistent label sizing space-y-4, mt-1.5 gap, uniform text-sm font-medium labels, max-w-[480px], max-h-[90vh]
§6 — Keyboard None Cmd/Ctrl+Enter → Save (when valid + dirty); Escape → close (Dialog default)

What was deferred

  • Session 2: Sprint type + persistence + Sheet block. weeklyOutcome field on Project type is intentionally left for migration.
  • Session 3: Milestones UI overhaul, target dates, vocabulary cleanup (tasksmilestones across non-modal surfaces).

Boundary check

  • No files created outside components/modules/projects-module.tsx and docs/DECISIONS_LOG.md + CHANGELOG.md.
  • No new npm dependencies added. All UI built from existing shadcn/Radix primitives already in the repo.

🤖 Generated with Claude Code

romahawk and others added 5 commits June 29, 2026 11:44
…t as separate object

Unblocks the edit-project-identity-strip session. Documents the
vocabulary split problem (tasks vs milestones across surfaces) and
the three-session plan to resolve it: session 1 strips the modal,
session 2 adds Sprint, session 3 cleans up vocabulary.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Per ADR-007: identity edits monthly, sprint/links change weekly.
Conflating them forced every weekly edit to scroll past identity
fields. Weekly Outcome and Links are removed from the modal; the
type field stays for session-2 migration. Links move to the Sheet
in §3. Active-project validation for weeklyOutcome is also removed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…roup

- Duration: native <input type="date"> → shadcn Calendar+Popover,
  format "dd MMM yyyy", end-after-start validation with inline error
- Color: color input + hex text → single row of 8 preset swatches
  with ring-on-active selection; persists same color hex field
- Status: Select dropdown → ToggleGroup (4 options, full-width,
  single-select) using existing STATUS_SECTIONS constant
- Remove Select import; add Calendar, Popover, ToggleGroup imports

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Links now live on the detail Sheet below Milestones with:
- + Add affordance → inline two-field row (Label / URL) + Save/Cancel
- Each row: link icon, label as clickable text, URL in tooltip on hover
- Hover reveals edit (pencil) and delete (trash) icons; delete requires
  a small inline confirm (✓/✕) instead of a modal
- Empty state: "No links yet — add one."
- Existing links survive modal saves since updateProject no longer
  touches url/links fields when editing identity

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
§4 — Modal footer:
- Sticky bottom row: Delete project (muted red text btn, AlertDialog
  confirm) on the left; Cancel (ghost) + Save (primary) on the right
- Save disabled when form is pristine (edit mode) or invalid
- formError moved inline under Duration for date validation

§5 — Layout polish:
- DialogContent: flex-col, p-0, max-w-[480px], max-h-[90vh]
- Header: border-b, px-5 pt-5 pb-4
- Body: overflow-y-auto, space-y-4, uniform label sizing
- Milestones field (create-only) has consistent mt-1.5 spacing

§6 — Keyboard:
- Cmd/Ctrl+Enter triggers Save when valid and dirty

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
magic-kick Ready Ready Preview, Comment Jun 29, 2026 12:13pm
magic-kick-kfb8 Ready Ready Preview, Comment Jun 29, 2026 12:13pm

@romahawk
romahawk merged commit a9ef7a5 into main Jun 29, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant