Skip to content

feat(projects): redesign /projects/new — layout, hierarchy and density - #12

Merged
MeepCastana merged 4 commits into
developfrom
feat/projects-new-redesign
Aug 6, 2026
Merged

MeepCastana merged 4 commits into
developfrom
feat/projects-new-redesign

Conversation

@OGtwelve

@OGtwelve OGtwelve commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Fixes #1

Top of the stack: merge order #9#10#11 → this. GitHub retargets each base automatically after the previous merge.

What

The remaining items from #1 after the split-out fixes (#2/#3/#4):

  • One shared width — header inner and content both use max-w-5xl; no more logo pinned 500px away from a floating form column.
  • Header carries the page — title (from fix(projects): add page heading to /projects/new route header #9) plus an explicit ← Back to Projects ghost link, so the bar's justify-between finally has two sides.
  • Two-column layoutProject Details | Video Settings side by side. Implemented with a container query (@container + @3xl:), not viewport breakpoints, because the same form renders inside the edit dialog on /projects — the split follows the actual available width. (Turns out the edit dialog is wide enough to get two columns too, and looks better for it — screenshot below note.)
  • Density — card padding and vertical rhythm tightened one step, the redundant <Separator /> between two already-bordered cards is gone. Page height at 1440 wide: 900px, zero scroll (was ~1570px).
  • Template cards differentiated — three presets share a ~16:9 silhouette, so the silhouette can't be the identifier. Cards are compact (56px silhouette) with a platform icon (YouTube/Instagram/LinkedIn/Twitter/phone) + name as the primary row; resolution • ratio kept as secondary text.
  • Button hierarchyCancel demoted to ghost; Create Project is the only prominent control.
  • Promo modal ⚠️ product decision, please confirm: KubeezWelcomePromo now skips task surfaces (/projects/new, /editor) and shows on the next visit to any other route instead. Once-per-browser localStorage behavior unchanged. Easy to drop from this PR if you'd rather keep it everywhere.

Verification (headless Chromium, dev server)

Check Result
Vertical scroll at 1440×900 none — page height exactly 900
Header inner width == content width 1024 == 1024
Create bg vs Cancel bg primary purple vs transparent
Grid columns at 1440 2
Template cards / with icons 7 / 7
Promo on /projects/new (fresh profile) not shown
Promo on /projects (same fresh profile) shown
375px & 768px pre-existing desktop gate renders (app blocks <1000px viewports), no horizontal overflow
Create flow end-to-end project created, editor opens
Edit dialog on /projects opens, form renders two-column in the wide dialog, values prefilled

lint ✅ · check:boundaries ✅ · test:run: 1259 passed, only pre-existing editor.test.tsx env failure (fixed separately in #8)

Screenshots

Can't attach from CLI — the layout is quick to check: npm run dev/projects/new.

The route passed hideHeader to ProjectForm (suppressing its h1) and
rendered only the logo in its own header bar, leaving the page with no
heading at all — nothing visible saying what the screen is, and no
document heading for screen-reader navigation.

Render the h1 in the route header next to the logo, separated by a
divider, per the issue's preferred option: the heading shares the
existing bar instead of stacking a second one.
The Create Project button was disabled the moment /projects/new loaded:
name is required, the form validates onChange, and the untouched field
showed no validation message — a dead primary button with no explanation.

Prefill the name as 'Project N' (N from the loaded project count, store
is preloaded in beforeLoad) and focus the field with the text selected,
so a first-time visitor can submit immediately or just type over the
default. The defaultValues object is memoized once on mount — a stable
identity, since ProjectForm resets whenever it changes.

Focus + select runs in an effect declared after the reset effect
(reset() rewrites the input value, which collapses any earlier
selection) and is limited to the create flow (!isEditing) to stay out of
the edit dialog's focus management.
Four raw inputs/textareas and five raw labels carried a duplicated
inline Tailwind class string while the FPS Select in the same form used
the shadcn component — two styling systems side by side, with different
heights, backgrounds, and focus rings.

Swap them for the existing Input, Textarea, and Label primitives. They
forward refs and spread props, so react-hook-form's register() spread,
type=number, min, and placeholder all pass through unchanged.
- Header and content share one max-w-5xl column; the header bar carries
  the title (from the earlier h1 fix) plus an explicit Back to Projects
  ghost link, so justify-between finally has two sides
- Two-column layout (Project Details | Video Settings) driven by a
  container query (@3xl) rather than viewport breakpoints, because the
  same form renders inside the narrow-to-wide edit dialog
- Density: p-6/mb-6/space-y-8 tightened one step, redundant Separator
  between the two bordered cards removed; the page now fits 1440x900
  with no vertical scroll (was ~1570px tall)
- Template cards: compact (h-14 silhouette), platform icon as the
  primary identifier since three presets share a ~16:9 silhouette;
  resolution and ratio kept as secondary text
- Button hierarchy: Cancel demoted to ghost, Create Project is the only
  prominent control
- Kubeez welcome promo no longer interrupts task surfaces: it skips
  /projects/new and /editor and shows on the next visit to any other
  route instead (localStorage once-per-browser behavior unchanged)
@MeepCastana
MeepCastana changed the base branch from fix/project-form-shadcn to develop August 6, 2026 14:55

@MeepCastana MeepCastana left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed locally on a combined review branch (all six merged clean, no conflicts). CI green. Approved.

@MeepCastana
MeepCastana merged commit 3aa8741 into develop Aug 6, 2026
1 check 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.

Redesign /projects/new — layout, hierarchy and density need a pass

2 participants