feat(projects): strip Edit Project modal to identity; move links to Sheet - #113
Merged
Conversation
…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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
fa1076185a6cae009e260d7a265c012fd11Before / After
weeklyOutcomefield stays on type for session-2 migration.<input type="date">× 2Calendar + Popover, formatdd MMM yyyy, end-after-start validation<input type="color">+ hex text input<Select>dropdownToggleGroupsegmented control (Active / Paused / Parked / Completed)+ Add, hover-edit (pencil), hover-delete (trash with inline ✓/✗ confirm), URL tooltipDelete project(muted red text, AlertDialog confirm) ·Cancel·Savespace-y-3, inconsistent label sizingspace-y-4,mt-1.5gap, uniformtext-sm font-mediumlabels,max-w-[480px],max-h-[90vh]What was deferred
weeklyOutcomefield onProjecttype is intentionally left for migration.tasks→milestonesacross non-modal surfaces).Boundary check
components/modules/projects-module.tsxanddocs/DECISIONS_LOG.md+CHANGELOG.md.🤖 Generated with Claude Code