feat: Update layout with bottom navigation and PWA meta tags

This commit is contained in:
2026-03-27 13:23:30 -07:00
parent 9ac63a42e5
commit f10f1df91e
+66
View File
@@ -3,11 +3,16 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#2d5a27">
<meta name="description" content="EuchreCamp - Track your Euchre games and tournaments">
<title>EuchreCamp</title> <title>EuchreCamp</title>
<%= favicon_tag %> <%= favicon_tag %>
<%= stylesheet_tag "app" %> <%= stylesheet_tag "app" %>
<!-- PWA Manifest -->
<link rel="manifest" href="/manifest.json">
</head> </head>
<body> <body>
<!-- Desktop Navigation -->
<nav class="main-nav"> <nav class="main-nav">
<div class="nav-brand"> <div class="nav-brand">
<a href="/">EuchreCamp</a> <a href="/">EuchreCamp</a>
@@ -32,9 +37,70 @@
<% end %> <% end %>
</div> </div>
</nav> </nav>
<!-- Main Content -->
<main class="main-content"> <main class="main-content">
<%= yield %> <%= yield %>
</main> </main>
<!-- Bottom Navigation (Mobile) -->
<nav class="bottom-nav">
<a href="/rankings" class="bottom-nav-item" id="nav-rankings">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
</svg>
<span>Rankings</span>
</a>
<% if defined?(current_player) && current_player %>
<a href="/players/<%= current_player.id %>/schedule" class="bottom-nav-item" id="nav-schedule">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
</svg>
<span>Schedule</span>
</a>
<a href="/players/<%= current_player.id %>/profile" class="bottom-nav-item" id="nav-profile">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
</svg>
<span>Profile</span>
</a>
<% if current_player.respond_to?(:admin?) && current_player.admin? %>
<a href="/admin" class="bottom-nav-item" id="nav-admin">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
</svg>
<span>Admin</span>
</a>
<% end %>
<% else %>
<a href="/login" class="bottom-nav-item" id="nav-login">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1" />
</svg>
<span>Login</span>
</a>
<% end %>
</nav>
<%= javascript_tag "app" %> <%= javascript_tag "app" %>
<!-- Service Worker Registration -->
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js')
.then(registration => {
console.log('ServiceWorker registration successful');
})
.catch(error => {
console.log('ServiceWorker registration failed:', error);
});
});
}
</script>
</body> </body>
</html> </html>