All checks were successful
Build and Push Madplaner / build (push) Successful in 26s
148 lines
7.9 KiB
HTML
148 lines
7.9 KiB
HTML
{% extends "base.html" %}
|
|
{% block content %}
|
|
<div class="max-w-6xl mx-auto px-6 py-12 md:py-24">
|
|
<div class="flex flex-col items-center text-center space-y-8">
|
|
<h1 class="text-5xl md:text-7xl font-light text-stone-900 leading-tight tracking-tight">
|
|
Dinner, simplified <br>
|
|
<span class="font-serif italic text-emerald-800">by design.</span>
|
|
</h1>
|
|
|
|
<p class="max-w-xl text-lg text-stone-500 font-light leading-relaxed">
|
|
A minimalist approach to meal planning. Clear out your fridge, reduce waste, and regain your evenings with
|
|
AI-tailored dinner plans.
|
|
</p>
|
|
|
|
<div class="pt-4">
|
|
{% if current_user.is_authenticated %}
|
|
<a href="/dashboard"
|
|
class="bg-emerald-800 text-stone-50 px-10 py-4 rounded-full font-medium transition-all hover:bg-stone-800 hover:shadow-xl active:scale-95 flex items-center gap-3">
|
|
Open Dashboard
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M17 8l4 4m0 0l-4 4m4-4H3" />
|
|
</svg>
|
|
</a>
|
|
{% else %}
|
|
<div class="flex flex-col sm:flex-row gap-4 items-center">
|
|
<a href="/register"
|
|
class="bg-emerald-800 text-white px-10 py-4 rounded-full font-medium shadow-sm hover:bg-emerald-900 transition-all active:scale-95">
|
|
Get Started
|
|
</a>
|
|
<a href="/login" class="text-stone-600 hover:text-stone-900 px-8 py-4 font-medium transition-colors">
|
|
Sign In
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-32 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-10 border-t border-stone-100 pt-16">
|
|
<div class="group space-y-4">
|
|
<div class="w-12 h-12 bg-amber-50 rounded-2xl flex items-center justify-center text-amber-700 group-hover:bg-amber-100 transition-colors">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" />
|
|
</svg>
|
|
</div>
|
|
<h3 class="text-lg font-semibold text-stone-800 tracking-tight">Purely Personal</h3>
|
|
<p class="text-stone-500 text-sm leading-relaxed font-light">Custom filters for Keto, Vegan, or family-friendly gourmet needs.</p>
|
|
</div>
|
|
|
|
<div class="group space-y-4">
|
|
<div class="w-12 h-12 bg-emerald-50 rounded-2xl flex items-center justify-center text-emerald-700 group-hover:bg-emerald-100 transition-colors">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" />
|
|
</svg>
|
|
</div>
|
|
<h3 class="text-lg font-semibold text-stone-800 tracking-tight">Zero Waste</h3>
|
|
<p class="text-stone-500 text-sm leading-relaxed font-light">Fridge clear-out logic that prioritizes what you already own.</p>
|
|
</div>
|
|
|
|
<div class="group space-y-4">
|
|
<div class="w-12 h-12 bg-orange-50 rounded-2xl flex items-center justify-center text-orange-700 group-hover:bg-orange-100 transition-colors">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
|
|
</svg>
|
|
</div>
|
|
<h3 class="text-lg font-semibold text-stone-800 tracking-tight">Smart Matrix</h3>
|
|
<p class="text-stone-500 text-sm leading-relaxed font-light">Instantly visualize ingredient reuse across your week.</p>
|
|
</div>
|
|
|
|
<div class="group space-y-4">
|
|
<div class="w-12 h-12 bg-blue-50 rounded-2xl flex items-center justify-center text-blue-700 group-hover:bg-blue-100 transition-colors">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
</svg>
|
|
</div>
|
|
<h3 class="text-lg font-semibold text-stone-800 tracking-tight">Time-Conscious</h3>
|
|
<p class="text-stone-500 text-sm leading-relaxed font-light">From 20-minute rapid meals to gourmet weekend dinners.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="install-banner" class="hidden mt-12 p-6 rounded-3xl items-center justify-between gap-4 border border-white/40 bg-white/30 backdrop-blur-md shadow-xl ring-1 ring-stone-900/5 transition-opacity duration-500">
|
|
<div class="flex items-center space-x-4 text-left">
|
|
<div class="p-3 bg-emerald-600 rounded-2xl text-white">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4" />
|
|
</svg>
|
|
</div>
|
|
<div>
|
|
<h3 class="text-stone-800 font-semibold tracking-tight">Madplaner App</h3>
|
|
<p class="text-stone-500 text-xs">Add to home screen for the best experience.</p>
|
|
</div>
|
|
</div>
|
|
<button id="install-button" class="bg-emerald-600 text-white px-6 py-2.5 rounded-full text-sm font-medium hover:bg-emerald-800 transition-all active:scale-95">
|
|
Install
|
|
</button>
|
|
</div>
|
|
|
|
<footer class="mt-24 border-t border-stone-100 pt-8 flex flex-col md:flex-row justify-between items-center gap-4 text-stone-400 text-xs">
|
|
|
|
{% if source_link %}
|
|
<a href="{{ source_link }}" target="_blank" rel="noopener" class="flex items-center gap-2 hover:text-emerald-800 transition-colors group">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-50 group-hover:opacity-100" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
|
|
</svg>
|
|
<span class="font-medium underline decoration-stone-200 underline-offset-4 group-hover:decoration-emerald-800">Source Code</span>
|
|
</a>
|
|
{% endif %}
|
|
</footer>
|
|
</div>
|
|
|
|
<style>
|
|
body {
|
|
background-color: #fdfdfc;
|
|
background-image: radial-gradient(#e5e7eb 0.5px, transparent 0.5px);
|
|
background-size: 40px 40px;
|
|
scrollbar-gutter: stable;
|
|
}
|
|
@media (display-mode: standalone) {
|
|
#install-banner { display: none !important; }
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
let deferredPrompt;
|
|
const installBanner = document.getElementById('install-banner');
|
|
|
|
window.addEventListener('beforeinstallprompt', (e) => {
|
|
console.log('Install prompt captured');
|
|
e.preventDefault();
|
|
deferredPrompt = e;
|
|
|
|
// Ensure banner is visible and styled
|
|
installBanner.classList.remove('hidden');
|
|
installBanner.classList.add('flex');
|
|
});
|
|
|
|
document.getElementById('install-button')?.addEventListener('click', async () => {
|
|
if (!deferredPrompt) return;
|
|
|
|
installBanner.classList.add('hidden');
|
|
await deferredPrompt.prompt();
|
|
|
|
const { outcome } = await deferredPrompt.userChoice;
|
|
console.log(`User response: ${outcome}`);
|
|
deferredPrompt = null;
|
|
});
|
|
</script>
|
|
|
|
{% endblock %} |