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
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 {