Skip to content

[0.2.0] "Lasagna" 🍝 - 2026-10-03

Latest

Choose a tag to compare

@jacquesfize jacquesfize released this 03 Oct 09:22
· 19 commits to main since this release

✨ Added

  • Recipe list: active filters now also show as removable pills next to the Filters button
    (one pill per selected ingredient/allergen), so you can clear a single filter without opening
    the filters panel.
  • Recipe list: the Exclude allergens filter lets you choose individual allergens to hide,
    instead of the all-or-nothing "Hide recipes containing my allergens" checkbox. Your own
    allergies and intolerances are still selected by default, and Add my allergies and
    intolerances
    puts them back after removing some.
  • The Random recipe page's filters (diet, in-season ingredients, and a new allergen
    exclusion filter) are now hidden by default behind a filter toggle button next to Another
    one
    , with a badge showing how many are active. The new allergen filter is pre-filled from
    the signed-in user's own allergies/intolerances, like the main recipe list already does.
  • Shopping-list export now offers a Share option (using the device's share sheet) on devices
    that support the Web Share API, so a list can be sent directly into a notes or to-do app (Apple
    Notes, Google Keep, Reminders, Todoist, etc.) instead of only downloading a .txt file. On
    browsers without the Web Share API (most desktop browsers besides Windows/Safari), the button
    now copies the list to the clipboard instead, ready to paste into any app; downloading a .txt
    file remains the last-resort fallback.
  • Two new instance-level settings, both off by default: PLANNING_SNACK_ENABLED shows or hides
    the Snack meal slot in the weekly planner, and NUTRITION_ALERTS_ENABLED shows or hides
    the nutrient-deficiency alerts in the planner's nutritional intake summary. See the admin
    guide's Configuration page.
  • The seeded ingredient library now includes "Tomates concassées" (canned crushed tomatoes), which the
    documentation demo data relies on.
  • GDPR tooling for instance administrators: explicit consent to the processing of health-related
    data (diet, activity level, allergies) is now required at sign-up and can be withdrawn or given
    again from My account; withdrawing it erases that data.
  • Legal notice and Privacy policy pages (linked in the footer and on the sign-up form),
    filled from the new LEGAL_*, PRIVACY_CONTACT_EMAIL and PRIVACY_POLICY_VERSION settings.
  • When deleting their account, users can now keep their public recipes under an anonymous author
    ("Utilisateur supprimé") instead of deleting them; staff can do the same through the API and
    purge_inactive_users --keep-recipes.
  • Export my data now also contains the agenda shares, the user's comments and ratings, and the
    consent date and policy version.
  • purge_inactive_users management command (with --dry-run): emails then deletes accounts with
    no login for INACTIVE_ACCOUNT_RETENTION_DAYS days (default 730; staff accounts are never
    touched). See the new "GDPR compliance" page of the admin guide.
  • The app version is now shown discreetly at the bottom of the My account page.
  • Recipe cover images and individual recipe steps can now carry an image license and credit (CC
    BY, CC BY-SA, public domain, personal photo, used with permission, or not specified) — required
    for a new or changed image, shown as attribution wherever the image appears, and never
    retroactively required for images that already existed.
  • Each recipe step can optionally have its own photo, added via an "Add an image" button and
    viewable by tapping a small photo icon next to the step (on the recipe page and in cook mode).

🔄 Changed

  • The weekly planner's Nutritional intake button is now hidden entirely when
    NUTRITION_ALERTS_ENABLED is off (the default), instead of only hiding the deficiency list
    inside its dialog.
  • Paste Cooklang now understands full Cooklang files, such as those downloaded from
    recipes.cooklang.org: metadata (title, servings, prep/cook times, source link, description),
    multi-word ingredient names, fractions (1/2, ½), preparation notes (@café{30%g}(moulu)),
    sections (used to group ingredients) and notes (added to the description). Title and servings
    are now optional in the form when the file's metadata provides them. Pasted ingredients are
    matched against the library like a URL import (by translation and close spelling too), and
    cl/dl/mg quantities are converted. Parsing now relies on the cooklang-py library.
  • Recipe list redesign: on a computer the filters now sit in a column on the left of the list
    (always visible) and recipes are shown two per row; on a phone the Filters button opens the
    panel above the list instead of a bottom sheet. Ingredients are picked from a searchable
    multi-select shown as pills, the diet is a list of radio buttons, max prep/cook times are
    sliders, carbon impact is a colour-coded slider (green / orange / red), and the in-season
    checkbox is now an In season leaf toggle. The New recipe and Import buttons are
    merged into a single New recipe menu (Create manually / Import from a URL).
  • The "pièce" (piece) unit now accepts decimal quantities on a recipe (e.g. 0.5 for half a
    camembert); shopping lists still round up to a whole piece when aggregating.
  • Cook mode's button now uses a chef's hat icon instead of a generic expand icon, and reaching the
    last step and pressing "next" now exits cook mode instead of doing nothing.
  • Images imported from a URL are credited as "Not specified" with a note citing the source,
    editable before saving.
  • Adding a recipe to a planner slot now opens in a dialog instead of an inline form squeezed into
    the calendar cell, which also fixes the recipe-search dropdown being clipped in narrow agenda
    cells.
  • The planner's calendar grid now has a white background, and page titles across the app now show
    a small icon next to them for quicker visual scanning.
  • Form fields now have a white background with a subtle colored border and less rounded corners.
  • Shopping-list items are now grouped under a heading per ingredient category (vegetable, fruit,
    dairy, etc.) instead of a single flat list, and a ticked item can now be unticked again by
    clicking its checkbox a second time (previously it was stuck checked once ticked — generating a
    new list from the planner was the only way to undo a mistaken tick).
  • Shopping lists got a visual refresh: each category heading now has an icon, a progress summary
    ("x/y bought") with a progress bar sits above the list, each category shows its own "done/total"
    count, and quantities are shown as a small pill badge for easier scanning. The Shopping
    overview page got the same treatment (an icon, date and progress bar per list, on a clickable
    card), and the list detail page now has a "Back to my lists" link.
  • On the homepage, "New recipe" and "Import" are now a single "New recipe" button that opens a
    menu offering "Create manually" or "Import from a URL", and the "Browse recipes" button was
    removed since the main navigation already links to the recipe list.
  • In cook mode, a step's photo now fills most of the available height instead of a small fixed-size
    crop, with the instruction text anchored to a band at the bottom (around 20% of the height by
    default, growing to fit longer instructions instead of ever clipping them).
  • The homepage got a visual refresh. The latest-recipes carousel is replaced by a "today's pick"
    hero: the most recent recipe in a large photo card (with a decorative stack of cards behind
    it), its diet/time/servings, a View recipe and a Plan for later button. It auto-advances
    through your 5 latest recipes, with dots below to jump to one directly (on mobile, the title and
    CTAs sit over the photo instead of above it); the "New recipe" quick action now sits at the top
    of that same hero instead of floating in its own row above an unrelated section, and is now
    styled as a card matching the Latest shopping list button next to it (an icon over a label)
    instead of a stretched pill. That Latest shopping list card (showing its bought/total
    progress) sits in its own box next to, rather than inside, the "This week" card, which floats
    over the hero's bottom edge and lists Today/Tomorrow side by side: each meal slot (Breakfast,
    Lunch, Dinner, Snack) is the same size, either a photo tile (recipe picture, meal, title) when
    planned or a + button to add one when empty, instead of one plain text line or a single
    "Plan a meal" prompt per day. Further down, Explore and In season now are now two
    matching cards side by side instead of two plain headed sections stacked vertically, with larger
    Explore photo avatars (a row of round photo avatars instead of square tiles, so a page without
    its own photo shows its icon on a plain accent-tinted circle instead of a flat saturated-color
    card) to fill the roomier card.
  • The weekly/monthly planner now tints today's column (week view) or day cell (month view) so
    it's easy to spot, and the "Today" button that jumps back to the current period (shown once
    you've navigated away) got a reset icon and a visible border so it reads as a button rather
    than a label.
  • In cook mode, clicking a highlighted ingredient name now shows its quantity in a small popover
    anchored next to it instead of a full modal dialog; on a mouse, the popover also appears just by
    hovering over the name.

🐛 Fixed

  • Recipe list: a long recipe title no longer runs under the owner's actions (⋮) menu button —
    the title now clamps to two lines (hover to see the full title) and the button no longer
    overlaps the text.
  • On a phone, the page footer no longer gets hidden behind the bottom tab bar.
  • Form validation errors (recipe details, ingredients, planner entries) are now shown consistently
    via inline messages instead of relying on the browser's native validation bubbles, which could be
    invisible or badly positioned on mobile.
  • Fixed autocomplete dropdowns reopening after selecting a suggestion (noticeable on the recipe
    picker used when adding a recipe to the planner, and on the ingredient-mention autocomplete in
    recipe step text), which made it look like the first click didn't register and required
    clicking the suggestion a second time.