Skip to content

Navigation/menu customization #31

Description

@nwwatson

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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNet-new functionalitytier-2-mediumFeatures that improve competitiveness

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions