{% extends "_base.html" %} {% block title %}This Week · Cauldron{% endblock %} {% block content %}
// plan · week of {{ week_start.strftime('%b %-d, %Y') }}

{% if is_current_week %}this week {% elif is_past_week %}past week {% else %}future week {% endif %}

{% if plan.locked_at %} locked {% if plan.locked_reason == 'user' and locked_by_display %} by {{ locked_by_display }} {% else %} automatically {% endif %} · {{ plan.locked_at.strftime('%a %-I:%M %p') }} {% elif plan.slots %} generated{% if generated_by_display %} by {{ generated_by_display }}{% endif %}. lock it in when the household has agreed. {% else %} {{ pick_count }} pinned in the pool. summon the planner to build a 7-day plan. {% endif %}

state

{% if plan.locked_at %} {{ 'auto-locked' if plan.locked_reason == 'auto' else 'locked' }} {% elif plan.slots %} generated {% else %} open {% endif %} week of {{ week_start.strftime('%b %-d, %Y') }}
{% if plan.locked_at %}

this week's plan is locked. it'll archive Sunday night and a fresh week opens Monday.

{% if plan.preference_prompt %}
vibe this week: "{{ plan.preference_prompt }}"
{% endif %} {% if plan.targets_label %}
macros: {{ plan.targets_label }}
{% endif %} {% if plan.exclusions_label %}
excluding: {{ plan.exclusions_label }}
{% endif %} {% elif not plan.slots %}

no plan yet. summon hecate to build one from the {{ pick_count }} pinned pick{{ '' if pick_count == 1 else 's' }} + the rest of the grimoire.

numeric targets + allergen exclusions (optional)
cal/day g protein/day g carbs/day g fat/day
hecate · ~30s
{% else %}

plan's set.

{% if plan.preference_prompt %}
vibe this week: "{{ plan.preference_prompt }}"
{% endif %} {% if plan.targets_label %}
macros: {{ plan.targets_label }}
{% endif %} {% if plan.exclusions_label %}
excluding: {{ plan.exclusions_label }}
{% endif %}
{% if plan.generated_by_sub == current_user_sub %} {% endif %} view list →
{% endif %}
{% if plan.hecate_reading %}

hecate's reading

weekly
{{ plan.hecate_reading }}
{% endif %}

forgotten gems

recipes you haven't seen in 90+ days

let hecate look through your library for recipes that fit who you are but haven't crossed your table recently.

hecate · ~10s
{% if plan.slots %}

the week

{{ plan.slots|length }} slot{{ '' if plan.slots|length == 1 else 's' }} · {{ plan.meal_types_list|join(' + ') }}
{# Group slots by day, then render each meal_type within the day card #} {% set days_order = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'] %} {% set meals_by_day = {} %} {% for s in plan.slots %} {% if s.day not in meals_by_day %}{% set _ = meals_by_day.update({s.day: []}) %}{% endif %} {% set _ = meals_by_day[s.day].append(s) %} {% endfor %}
{% for d in days_order %}{% if d in meals_by_day %} {% set day_slots = meals_by_day[d] %}
{{ d }}
{% for s in day_slots %}
{% if (plan.meal_types_list|length) > 1 %}
{{ s.meal_type or 'dinner' }}
{% endif %} {{ s.recipe_name }} {% if s.picker_subs %}
{% for sub in s.picker_subs %} 🍄 {{ sub_display.get(sub, 'family') }} {% endfor %}
{% endif %} {% if s.reason %}
{{ s.reason }}
{% endif %}
{% endfor %}
{% endif %}{% endfor %}
{% endif %} {% endblock %}