Move new-series form to its own page on mobile
The inline sidebar stacks below both task columns on narrow
viewports, pushing the form out of easy reach. A dedicated
/series/new route (using the existing view) keeps mobile
focused on the task lists, with a header link when needed.

Assisted-by: Claude Opus 4.6 via Claude Code
change wtvlsynzzxvqnuqmmwozqussrquxrotv
commit 7ba3eb0dfe43c01be9d5dc407f789f0caa153a8e
author Alpha Chen <alpha@kejadlen.dev>
date
parent svkqopyv
diff --git a/lib/ketchup/views/dashboard.rb b/lib/ketchup/views/dashboard.rb
index a3e42be..14710bb 100644
--- a/lib/ketchup/views/dashboard.rb
+++ b/lib/ketchup/views/dashboard.rb
@@ -174,7 +174,7 @@ module Views
     end
 
     def new_series_sidebar
-      div(class: "column column-aside") do
+      div(class: "column column-aside column-aside--new") do
         div(class: "column-header") do
           h2 { "New Series" }
           button(type: "submit", form: "new-series-form", id: "create-series-btn", class: "aside-heading-action", disabled: true) { "Create" }
diff --git a/lib/ketchup/views/layout.rb b/lib/ketchup/views/layout.rb
index f8d6683..331a386 100644
--- a/lib/ketchup/views/layout.rb
+++ b/lib/ketchup/views/layout.rb
@@ -27,6 +27,7 @@ module Views
         body do
           header(class: "site-header") do
             a(href: "/", class: "site-name") { "Ketchup" }
+            a(href: "/series/new", class: "mobile-new-link") { "+ New" }
             span(class: "user") { @current_user[:name] || @current_user[:login] }
           end
           yield
diff --git a/lib/ketchup/web.rb b/lib/ketchup/web.rb
index 1331120..b581fa2 100644
--- a/lib/ketchup/web.rb
+++ b/lib/ketchup/web.rb
@@ -5,6 +5,7 @@ require "roda"
 
 require_relative "models"
 require_relative "views/dashboard"
+require_relative "views/series/new"
 
 class Web < Roda
   plugin :halt
@@ -34,6 +35,10 @@ class Web < Roda
     end
 
     r.on "series" do
+      r.get "new" do
+        Views::Series::New.new(current_user: @user).call
+      end
+
       r.is do
         r.post do
           note = r.params["note"].to_s.strip
diff --git a/public/css/app.css b/public/css/app.css
index 5d22d8b..68a8349 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -42,6 +42,7 @@ h2 { font-size: var(--step-0); font-weight: 600; }
   display: flex;
   justify-content: space-between;
   align-items: center;
+  gap: var(--space-s);
   padding: var(--space-xs) var(--grid-gutter);
   border-block-end: 1px dotted #ccc;
 }
@@ -55,6 +56,10 @@ h2 { font-size: var(--step-0); font-weight: 600; }
   color: #777;
 }
 
+.mobile-new-link {
+  display: none;
+}
+
 /* -------------------- */
 /* Site footer */
 /* -------------------- */
@@ -102,9 +107,20 @@ h2 { font-size: var(--step-0); font-weight: 600; }
     width: auto;
   }
 
+  .column-aside--new {
+    display: none;
+  }
+
   .home--series .column-aside {
     order: -1;
   }
+
+  .mobile-new-link {
+    display: inline;
+    margin-left: auto;
+    font-size: var(--step--1);
+    color: #777;
+  }
 }
 
 .column {