Summary
Prose has hardcoded navigation (Home, About). Site owners cannot customize the navigation menu, add custom links, or configure footer content. Modern blogging platforms provide a menu builder for full navigation control.
Who Has This
- WordPress — Full menu builder with drag-and-drop, multiple menu locations
- Ghost — Navigation editor with primary and secondary menus
Why This Matters
Every blog has different navigation needs. A photography blog might want Portfolio and Contact links. A tech blog might want categories in the nav. Hardcoded navigation forces all sites into the same structure.
Recommended Implementation
Model
Create a NavigationItem model:
label (string) — Display text
url (string) — Link URL (internal path or external URL)
position (integer) — Sort order
location (enum) — header, footer
open_in_new_tab (boolean)
Admin UI
- Navigation settings page at
/admin/settings/navigation (or a tab in settings)
- Sortable list of navigation items (drag-and-drop via Stimulus)
- Add/remove items inline
- Separate sections for header and footer navigation
Public Rendering
- Replace hardcoded nav with dynamic rendering from
NavigationItem records
- Cache navigation items (Solid Cache) — they change infrequently
- Support both internal paths (
/about) and external URLs (https://github.com/...)
Footer
- Add footer navigation section (currently no footer links)
- Include social media icon links (Twitter/X, GitHub, LinkedIn, etc.)
- Social links could be
SiteSetting entries or NavigationItem records with a social location
Key Files to Create/Modify
app/models/navigation_item.rb
app/controllers/admin/navigation_items_controller.rb
app/views/layouts/application.html.erb — Dynamic nav rendering
app/views/shared/_header.html.erb, _footer.html.erb
db/migrate/ — Create navigation_items table
db/seeds.rb — Default navigation items (Home, About)
Summary
Prose has hardcoded navigation (Home, About). Site owners cannot customize the navigation menu, add custom links, or configure footer content. Modern blogging platforms provide a menu builder for full navigation control.
Who Has This
Why This Matters
Every blog has different navigation needs. A photography blog might want Portfolio and Contact links. A tech blog might want categories in the nav. Hardcoded navigation forces all sites into the same structure.
Recommended Implementation
Model
Create a
NavigationItemmodel:label(string) — Display texturl(string) — Link URL (internal path or external URL)position(integer) — Sort orderlocation(enum) —header,footeropen_in_new_tab(boolean)Admin UI
/admin/settings/navigation(or a tab in settings)Public Rendering
NavigationItemrecords/about) and external URLs (https://github.com/...)Footer
SiteSettingentries orNavigationItemrecords with asociallocationKey Files to Create/Modify
app/models/navigation_item.rbapp/controllers/admin/navigation_items_controller.rbapp/views/layouts/application.html.erb— Dynamic nav renderingapp/views/shared/_header.html.erb,_footer.html.erbdb/migrate/— Create navigation_items tabledb/seeds.rb— Default navigation items (Home, About)