home: add minerva dashboard scaffold
This commit is contained in:
38
home/minerva-dashboard/app/templates/base.html
Normal file
38
home/minerva-dashboard/app/templates/base.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ summary.profile.persona if summary is defined else 'Minerva' }} Dashboard</title>
|
||||
<link rel="stylesheet" href="/static/app.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="page-shell">
|
||||
<header class="masthead card glow-card">
|
||||
<div class="masthead-copy">
|
||||
<div>
|
||||
<p class="eyebrow">Ravenclaw common room</p>
|
||||
<h1>Minerva Dashboard</h1>
|
||||
<p class="lede">Elegant household focus for {{ summary.profile.display_name if summary is defined else 'Manndra' }}: agenda, lists, notes, and one calm place to decide what matters now.</p>
|
||||
</div>
|
||||
<div class="masthead-meta">
|
||||
<span class="badge">Private-first</span>
|
||||
<span class="badge bronze">Phone friendly</span>
|
||||
<span class="badge outline">{{ summary.profile.tone if summary is defined else 'Elegant, magical, useful' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<figure class="masthead-hero-frame">
|
||||
<img
|
||||
class="masthead-hero-image"
|
||||
src="/static/images/library-hero.jpg"
|
||||
alt="Grand library interior with high shelves and warm lamplight"
|
||||
>
|
||||
<figcaption>Library study-hall artwork grounding the dashboard in a scholarly common-room mood.</figcaption>
|
||||
</figure>
|
||||
</header>
|
||||
<main>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
160
home/minerva-dashboard/app/templates/dashboard.html
Normal file
160
home/minerva-dashboard/app/templates/dashboard.html
Normal file
@@ -0,0 +1,160 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block content %}
|
||||
<section class="hero-grid">
|
||||
<article class="card spotlight">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<p class="eyebrow">Primary profile</p>
|
||||
<h2>{{ summary['profile']['display_name'] }} / {{ summary['profile']['persona'] }}</h2>
|
||||
</div>
|
||||
<span class="badge bronze">{{ summary['profile']['house_style'] }}</span>
|
||||
</div>
|
||||
<p class="muted">{{ summary['profile']['notes'] }}</p>
|
||||
<div class="stats-grid">
|
||||
<div><span>Agenda</span><strong>{{ summary['counts']['agenda'] }}</strong></div>
|
||||
<div><span>Reminders</span><strong>{{ summary['counts']['reminders'] }}</strong></div>
|
||||
<div><span>Lists</span><strong>{{ summary['counts']['lists'] }}</strong></div>
|
||||
<div><span>Notes</span><strong>{{ summary['counts']['notes'] }}</strong></div>
|
||||
</div>
|
||||
<div class="spotlight-visuals" aria-label="Ravenclaw common-room imagery">
|
||||
<figure class="visual-medallion framed-medallion">
|
||||
<img src="/static/images/owl-engraving.jpg" alt="Vintage owl engraving used as a scholarly crest substitute">
|
||||
<figcaption>Owl engraving crest</figcaption>
|
||||
</figure>
|
||||
<figure class="visual-medallion room-medallion">
|
||||
<img src="/static/images/blue-interior.jpg" alt="Blue-toned interior painting with elegant room details">
|
||||
<figcaption>Blue interior study corner</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="card quick-add-card">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<p class="eyebrow">Quick action</p>
|
||||
<h2>Capture a note before it disappears</h2>
|
||||
</div>
|
||||
<span class="badge">Minerva quick add</span>
|
||||
</div>
|
||||
<form method="post" action="/quick-actions/notes" class="stack-form">
|
||||
<label>Title
|
||||
<input type="text" name="title" placeholder="School follow-up, errand, reminder..." required>
|
||||
</label>
|
||||
<label>Note
|
||||
<textarea name="body" rows="4" placeholder="Write the useful fragment and keep moving." required></textarea>
|
||||
</label>
|
||||
<label>Category
|
||||
<input type="text" name="category" value="note" placeholder="note, reminder, meal, school">
|
||||
</label>
|
||||
<button type="submit">Save quick note</button>
|
||||
</form>
|
||||
<figure class="inline-ornament">
|
||||
<img src="/static/images/art-nouveau-frame.svg" alt="Art Nouveau ornamental frame accent">
|
||||
<figcaption>Ornamental frame accent for the quick-capture panel.</figcaption>
|
||||
</figure>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section class="dashboard-grid">
|
||||
<article class="card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Agenda</p><h2>Today at a glance</h2></div></div>
|
||||
<ul class="timeline-list">
|
||||
{% for item in summary['agenda'] %}
|
||||
<li>
|
||||
<strong>{{ item.time_label }}</strong>
|
||||
<span>{{ item.title }}</span>
|
||||
<p class="muted">{{ item.detail }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Reminders</p><h2>Loose ends</h2></div></div>
|
||||
<ul class="plain-list">
|
||||
{% for item in summary['reminders'] %}
|
||||
<li>
|
||||
<strong>{{ item.title }}</strong>
|
||||
<span class="pill subtle">{{ item.urgency }}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Lists</p><h2>Household lanes</h2></div></div>
|
||||
{% for block in summary['lists'] %}
|
||||
<div class="subcard">
|
||||
<h3>{{ block['title'] }}</h3>
|
||||
<ul class="check-list">
|
||||
{% for item in block['items'] %}
|
||||
<li class="{{ 'done' if item['done'] else '' }}">{{ item['label'] }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</article>
|
||||
|
||||
<article class="card notes-card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Notes</p><h2>Recent captures</h2></div></div>
|
||||
{% for item in summary['notes'][:5] %}
|
||||
<div class="note-item {{ 'pinned' if item['pinned'] else '' }}">
|
||||
<div class="note-head">
|
||||
<h3>{{ item['title'] }}</h3>
|
||||
<span class="pill subtle">{{ item['category'] }}</span>
|
||||
</div>
|
||||
<p>{{ item['body'] }}</p>
|
||||
<p class="muted tiny">{{ item['source'] }}{% if item['created_at'] %} · {{ item['created_at'] }}{% endif %}</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Useful links</p><h2>Launch points</h2></div></div>
|
||||
<ul class="plain-list links-list">
|
||||
{% for item in summary['links'] %}
|
||||
<li>
|
||||
<a href="{{ item.url }}">{{ item.label }}</a>
|
||||
<p class="muted">{{ item.note }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Meal ideas</p><h2>Dinner sparks</h2></div></div>
|
||||
<ul class="plain-list">
|
||||
{% for item in summary['meal_ideas'] %}
|
||||
<li>
|
||||
<strong>{{ item.title }}</strong>
|
||||
<p class="muted">{{ item.detail }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Shortcuts</p><h2>Fast household moves</h2></div></div>
|
||||
<ul class="plain-list">
|
||||
{% for item in summary['shortcuts'] %}
|
||||
<li>
|
||||
<strong>{{ item.label }}</strong>
|
||||
<p class="muted">{{ item.hint }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<div class="section-heading"><div><p class="eyebrow">Quick actions</p><h2>Minerva prompts</h2></div></div>
|
||||
<ul class="plain-list">
|
||||
{% for item in summary['quick_actions'] %}
|
||||
<li>
|
||||
<strong>{{ item.label }}</strong>
|
||||
<p class="muted">{{ item.detail }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user