feat(items): add German product names for in-store navigation
All checks were successful
Build and Deploy citti / build-and-deploy (push) Successful in 47s
All checks were successful
Build and Deploy citti / build-and-deploy (push) Successful in 47s
Each item now shows the German name (de field) below the Danish name so it's easier to find products on shelves in Citti Flensburg. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
104
app.py
104
app.py
@@ -15,76 +15,76 @@ DB = str(DATA_DIR / "data.db")
|
||||
|
||||
SECTIONS = [
|
||||
{"id": "koed", "emoji": "🥩", "title": "Kød & fisk", "est": 1580, "varer": [
|
||||
{"key": "entrecote", "name": "Entrecote ½ kg", "note": "Frisk sydamerikansk", "qty": "6 × ½ kg", "est": 605.94, "badges": ["card"]},
|
||||
{"key": "nakkekoteletter", "name": "Nakkekoteletter ½ kg", "note": "Med/uden krydderi", "qty": "6 × ½ kg", "est": 191.94},
|
||||
{"key": "kyllingebryst", "name": "Kyllingebryst ½ kg", "note": "Texas-marinade", "qty": "6 × ½ kg", "est": 359.94},
|
||||
{"key": "hakket-oksekoed", "name": "Hakket oksekød", "note": "Køddisk — spørg personalet", "qty": "3 kg", "est": 240},
|
||||
{"key": "rumpsteak", "name": "Rumpsteak ½ kg", "note": "Modnet, tyske kvier", "qty": "1 × ½ kg", "est": 167.99},
|
||||
{"key": "lakseside", "name": "Lakseside premium", "note": "15,99/100g · tag ~700g", "qty": "~700g", "est": 112},
|
||||
{"key": "grillpoelser", "name": "Gerstand grillpølser", "note": "10 stk. à 100g", "qty": "1 kg", "est": 74.99},
|
||||
{"key": "bacon", "name": "Steinemann bacon i skiver","note": "Røget · fryseegnet", "qty": "1 kg", "est": 74.99},
|
||||
{"key": "entrecote", "name": "Entrecote ½ kg", "de": "Entrecôte ½ kg", "note": "Frisk sydamerikansk", "qty": "6 × ½ kg", "est": 605.94, "badges": ["card"]},
|
||||
{"key": "nakkekoteletter", "name": "Nakkekoteletter ½ kg", "de": "Schweinenackenkoteletten ½ kg", "note": "Med/uden krydderi", "qty": "6 × ½ kg", "est": 191.94},
|
||||
{"key": "kyllingebryst", "name": "Kyllingebryst ½ kg", "de": "Hähnchenbrustfilet ½ kg", "note": "Texas-marinade", "qty": "6 × ½ kg", "est": 359.94},
|
||||
{"key": "hakket-oksekoed", "name": "Hakket oksekød", "de": "Rinderhackfleisch", "note": "Køddisk — spørg personalet", "qty": "3 kg", "est": 240},
|
||||
{"key": "rumpsteak", "name": "Rumpsteak ½ kg", "de": "Rumpsteak ½ kg", "note": "Modnet, tyske kvier", "qty": "1 × ½ kg", "est": 167.99},
|
||||
{"key": "lakseside", "name": "Lakseside premium", "de": "Lachsseite premium", "note": "15,99/100g · tag ~700g", "qty": "~700g", "est": 112},
|
||||
{"key": "grillpoelser", "name": "Gerstand grillpølser", "de": "Gerstand Grillwürste", "note": "10 stk. à 100g", "qty": "1 kg", "est": 74.99},
|
||||
{"key": "bacon", "name": "Steinemann bacon i skiver","de": "Steinemann Bauchspeck in Scheiben", "note": "Røget · fryseegnet", "qty": "1 kg", "est": 74.99},
|
||||
]},
|
||||
{"id": "frost", "emoji": "🧊", "title": "Frostgrønt · 3 kg poser", "est": 100, "varer": [
|
||||
{"key": "wok-mix", "name": "Wok-mix blandede grøntsager", "qty": "3 kg", "est": 40},
|
||||
{"key": "aerter", "name": "Ærter", "qty": "3 kg", "est": 30},
|
||||
{"key": "broccoli", "name": "Broccoli", "qty": "3 kg", "est": 35},
|
||||
{"key": "frost-andet", "name": "Hvad der ellers frister", "note": "Tjek frysedisken", "qty": "—", "est": 0},
|
||||
{"key": "wok-mix", "name": "Wok-mix blandede grøntsager", "de": "Wok-Mix Gemüsemischung", "qty": "3 kg", "est": 40},
|
||||
{"key": "aerter", "name": "Ærter", "de": "Erbsen", "qty": "3 kg", "est": 30},
|
||||
{"key": "broccoli", "name": "Broccoli", "de": "Brokkoli", "qty": "3 kg", "est": 35},
|
||||
{"key": "frost-andet", "name": "Hvad der ellers frister", "de": "Was sonst verlockend ist", "note": "Tjek frysedisken", "qty": "—", "est": 0},
|
||||
]},
|
||||
{"id": "mejeri", "emoji": "🧀", "title": "Mejeri, ost & frost", "est": 185, "varer": [
|
||||
{"key": "feta", "name": "Greco Schaffeta feta 150g", "note": "70% fåremælk", "qty": "3 stk.", "est": 44.97},
|
||||
{"key": "frutti-mare", "name": "Frutti di Mare", "note": "Rejer, muslinger, blæksprutte", "qty": "1 kg", "est": 59.99},
|
||||
{"key": "tigerrejer", "name": "Sorte tigerrejer frost", "note": "Rå, pillede · wok/grill", "qty": "1 kg", "est": 79.99},
|
||||
{"key": "feta", "name": "Greco Schaffeta feta 150g", "de": "Greco Schaffeta Feta 150g", "note": "70% fåremælk", "qty": "3 stk.", "est": 44.97},
|
||||
{"key": "frutti-mare", "name": "Frutti di Mare", "de": "Frutti di Mare", "note": "Rejer, muslinger, blæksprutte", "qty": "1 kg", "est": 59.99},
|
||||
{"key": "tigerrejer", "name": "Sorte tigerrejer frost", "de": "Schwarze Tigergarnelen TK", "note": "Rå, pillede · wok/grill", "qty": "1 kg", "est": 79.99},
|
||||
]},
|
||||
{"id": "pasta", "emoji": "🍝", "title": "Pasta frisk køl · Gut & Günstig ~800g", "est": 160, "varer": [
|
||||
{"key": "tortelloni-skinke", "name": "Tortelloni Skinke", "qty": "2 stk.", "est": 55},
|
||||
{"key": "tortelloni-spinat", "name": "Tortelloni Spinat & ricotta", "qty": "2 stk.", "est": 55},
|
||||
{"key": "tortelloni-valg", "name": "Tortelloni valgfri variant", "note": "Svampe, tomat-mozzarella o.l.", "qty": "2 stk.", "est": 55},
|
||||
{"key": "tortelloni-skinke", "name": "Tortelloni Skinke", "de": "Tortelloni Schinken", "qty": "2 stk.", "est": 55},
|
||||
{"key": "tortelloni-spinat", "name": "Tortelloni Spinat & ricotta", "de": "Tortelloni Spinat & Ricotta", "qty": "2 stk.", "est": 55},
|
||||
{"key": "tortelloni-valg", "name": "Tortelloni valgfri variant", "de": "Tortelloni nach Wahl", "note": "Svampe, tomat-mozzarella o.l.", "qty": "2 stk.", "est": 55},
|
||||
]},
|
||||
{"id": "groent", "emoji": "🥗", "title": "Grønt, olier & tørvarer", "est": 245, "varer": [
|
||||
{"key": "avocado", "name": "Avocado Hass", "note": "Fra Peru, SanLucar", "qty": "5 stk.", "est": 74.95},
|
||||
{"key": "olivenolie", "name": "Bertolli olivenolie extra vergine", "qty": "1L", "est": 99.99},
|
||||
{"key": "mutti", "name": "Mutti passata", "note": "Natur eller basilikum","qty": "3 × 700g", "est": 44.97},
|
||||
{"key": "rustichella", "name": "Rustichella d'Abruzzo pasta", "qty": "4 × 500g", "est": 75.96},
|
||||
{"key": "avocado", "name": "Avocado Hass", "de": "Avocado Hass", "note": "Fra Peru, SanLucar", "qty": "5 stk.", "est": 74.95},
|
||||
{"key": "olivenolie", "name": "Bertolli olivenolie extra vergine", "de": "Bertolli Olivenöl extra vergine", "qty": "1L", "est": 99.99},
|
||||
{"key": "mutti", "name": "Mutti passata", "de": "Mutti Passata", "note": "Natur eller basilikum", "qty": "3 × 700g", "est": 44.97},
|
||||
{"key": "rustichella", "name": "Rustichella d'Abruzzo pasta", "de": "Rustichella d'Abruzzo Pasta", "qty": "4 × 500g", "est": 75.96},
|
||||
]},
|
||||
{"id": "konserves", "emoji": "🥫", "title": "Konserves — tomat & basis", "est": 185, "varer": [
|
||||
{"key": "hakkede-tomater", "name": "Hakkede tomater 400g", "qty": "8 dåser", "est": 50},
|
||||
{"key": "flaede-tomater", "name": "Flåede tomater 400g", "qty": "4 dåser", "est": 25},
|
||||
{"key": "tomatpure", "name": "Tomatpuré / koncentrat", "qty": "4 stk.", "est": 35},
|
||||
{"key": "tun", "name": "Tun i olie 80g", "qty": "6 dåser", "est": 47},
|
||||
{"key": "majs", "name": "Majs 340g", "qty": "4 dåser", "est": 28},
|
||||
{"key": "hakkede-tomater", "name": "Hakkede tomater 400g", "de": "Gehackte Tomaten 400g", "qty": "8 dåser", "est": 50},
|
||||
{"key": "flaede-tomater", "name": "Flåede tomater 400g", "de": "Geschälte Tomaten 400g", "qty": "4 dåser", "est": 25},
|
||||
{"key": "tomatpure", "name": "Tomatpuré / koncentrat", "de": "Tomatenmark / -konzentrat", "qty": "4 stk.", "est": 35},
|
||||
{"key": "tun", "name": "Tun i olie 80g", "de": "Thunfisch in Öl 80g", "qty": "6 dåser", "est": 47},
|
||||
{"key": "majs", "name": "Majs 340g", "de": "Mais 340g", "qty": "4 dåser", "est": 28},
|
||||
]},
|
||||
{"id": "indisk", "emoji": "🌶️", "title": "Indisk & karry", "est": 160, "varer": [
|
||||
{"key": "tikka-masala", "name": "Tikka masala sauce", "note": "350–500g · Taste of India", "qty": "5 stk.", "est": 70},
|
||||
{"key": "karrypasta-roed", "name": "Karrypasta rød 50g", "qty": "2 stk.", "est": 20},
|
||||
{"key": "karrypasta-groen", "name": "Karrypasta grøn 50g", "qty": "2 stk.", "est": 20},
|
||||
{"key": "karrypasta-gul", "name": "Karrypasta gul/mild", "qty": "2 stk.", "est": 20},
|
||||
{"key": "mango-chutney", "name": "Mango chutney 300g", "qty": "2 stk.", "est": 24},
|
||||
{"key": "basmatiris", "name": "Basmatiris 1 kg", "qty": "2 stk.", "est": 28},
|
||||
{"key": "tikka-masala", "name": "Tikka masala sauce", "de": "Tikka Masala Sauce", "note": "350–500g · Taste of India", "qty": "5 stk.", "est": 70},
|
||||
{"key": "karrypasta-roed", "name": "Karrypasta rød 50g", "de": "Rote Currypaste 50g", "qty": "2 stk.", "est": 20},
|
||||
{"key": "karrypasta-groen", "name": "Karrypasta grøn 50g", "de": "Grüne Currypaste 50g", "qty": "2 stk.", "est": 20},
|
||||
{"key": "karrypasta-gul", "name": "Karrypasta gul/mild", "de": "Gelbe Currypaste/mild", "qty": "2 stk.", "est": 20},
|
||||
{"key": "mango-chutney", "name": "Mango chutney 300g", "de": "Mango-Chutney 300g", "qty": "2 stk.", "est": 24},
|
||||
{"key": "basmatiris", "name": "Basmatiris 1 kg", "de": "Basmatireis 1 kg", "qty": "2 stk.", "est": 28},
|
||||
]},
|
||||
{"id": "mex", "emoji": "🌮", "title": "Mexicansk & asiatisk", "est": 185, "varer": [
|
||||
{"key": "tacokrydderi", "name": "Tacokrydderi pakke", "qty": "6 stk.", "est": 33},
|
||||
{"key": "jalapenos", "name": "Jalapeños på glas 200g", "qty": "2 stk.", "est": 16},
|
||||
{"key": "salsa", "name": "Salsa / tomatdip 300g", "qty": "2 stk.", "est": 19},
|
||||
{"key": "tacoshells", "name": "Tacoshells / tortilla wraps","qty": "2 stk.", "est": 24},
|
||||
{"key": "kokosmalk", "name": "Kokosmælk 400ml", "qty": "6 dåser", "est": 47},
|
||||
{"key": "sojasauce", "name": "Sojasauce 250ml", "qty": "1 stk.", "est": 10},
|
||||
{"key": "bambusskud", "name": "Bambusskud / vandkastanjer","qty": "2 dåser", "est": 14},
|
||||
{"key": "tacokrydderi", "name": "Tacokrydderi pakke", "de": "Taco-Gewürzmischung", "qty": "6 stk.", "est": 33},
|
||||
{"key": "jalapenos", "name": "Jalapeños på glas 200g", "de": "Jalapeños im Glas 200g", "qty": "2 stk.", "est": 16},
|
||||
{"key": "salsa", "name": "Salsa / tomatdip 300g", "de": "Salsa / Tomaten-Dip 300g", "qty": "2 stk.", "est": 19},
|
||||
{"key": "tacoshells", "name": "Tacoshells / tortilla wraps","de": "Taco-Shells / Tortilla-Wraps","qty": "2 stk.", "est": 24},
|
||||
{"key": "kokosmalk", "name": "Kokosmælk 400ml", "de": "Kokosmilch 400ml", "qty": "6 dåser", "est": 47},
|
||||
{"key": "sojasauce", "name": "Sojasauce 250ml", "de": "Sojasoße 250ml", "qty": "1 stk.", "est": 10},
|
||||
{"key": "bambusskud", "name": "Bambusskud / vandkastanjer","de": "Bambussprossen / Wasserkastanien","qty": "2 dåser", "est": 14},
|
||||
]},
|
||||
{"id": "drikke", "emoji": "🍺", "title": "Drikkevarer", "est": 530, "varer": [
|
||||
{"key": "carlsberg", "name": "Carlsberg / Carls Special 0,33L", "qty": "24 stk.", "est": 79, "badges": ["kasse"]},
|
||||
{"key": "pepsi-max", "name": "Pepsi Max 1,5L", "qty": "6 stk.", "est": 49.99, "badges": ["kasse"]},
|
||||
{"key": "faxe-kondi", "name": "Faxe Kondi Appelsin 0,33L", "qty": "24 stk.", "est": 54.99, "badges": ["kasse"]},
|
||||
{"key": "kuehling-vin", "name": "Kühling hvid-/rosévin 0,75L", "qty": "4 stk.", "est": 159.96, "badges": ["card"]},
|
||||
{"key": "grauburgunder", "name": "Grauburgunder hvidvin 1,5L", "qty": "1 stk.", "est": 59.99, "badges": ["card"]},
|
||||
{"key": "kaffe", "name": "Eduscho Caffè Crema hele bønner", "qty": "1 kg", "est": 104.99},
|
||||
{"key": "carlsberg", "name": "Carlsberg / Carls Special 0,33L", "de": "Carlsberg / Carls Special 0,33L", "qty": "24 stk.", "est": 79, "badges": ["kasse"]},
|
||||
{"key": "pepsi-max", "name": "Pepsi Max 1,5L", "de": "Pepsi Max 1,5L", "qty": "6 stk.", "est": 49.99, "badges": ["kasse"]},
|
||||
{"key": "faxe-kondi", "name": "Faxe Kondi Appelsin 0,33L", "de": "Faxe Kondi Orange 0,33L", "qty": "24 stk.", "est": 54.99, "badges": ["kasse"]},
|
||||
{"key": "kuehling-vin", "name": "Kühling hvid-/rosévin 0,75L", "de": "Kühling Weiß-/Roséwein 0,75L", "qty": "4 stk.", "est": 159.96, "badges": ["card"]},
|
||||
{"key": "grauburgunder", "name": "Grauburgunder hvidvin 1,5L", "de": "Grauburgunder Weißwein 1,5L", "qty": "1 stk.", "est": 59.99, "badges": ["card"]},
|
||||
{"key": "kaffe", "name": "Eduscho Caffè Crema hele bønner", "de": "Eduscho Caffè Crema ganze Bohnen", "qty": "1 kg", "est": 104.99},
|
||||
]},
|
||||
{"id": "hus", "emoji": "🏠", "title": "Husholdning & skafferi", "est": 535, "varer": [
|
||||
{"key": "ariel", "name": "Ariel vaskemiddel", "note": "100–111 vaske", "qty": "1 stk.", "est": 199.90},
|
||||
{"key": "finish", "name": "Finish opvasketabs", "note": "64 stk.", "qty": "1 stk.", "est": 59.99},
|
||||
{"key": "cashew", "name": "BASE Culinar cashewnødder", "qty": "1 kg", "est": 79.99},
|
||||
{"key": "nutella", "name": "Nutella 1 kg glas", "qty": "1 stk.", "est": 49.99, "badges": ["card"]},
|
||||
{"key": "biscoff", "name": "Lotus Biscoff smørepålæg 1,6 kg", "qty": "1 stk.", "est": 99.99, "badges": ["card"]},
|
||||
{"key": "haribo", "name": "Haribo vingummi / lakrids", "note": "800–1000g", "qty": "1 stk.", "est": 44.99},
|
||||
{"key": "ariel", "name": "Ariel vaskemiddel", "de": "Ariel Waschmittel", "note": "100–111 vaske", "qty": "1 stk.", "est": 199.90},
|
||||
{"key": "finish", "name": "Finish opvasketabs", "de": "Finish Spülmaschinentabs", "note": "64 stk.", "qty": "1 stk.", "est": 59.99},
|
||||
{"key": "cashew", "name": "BASE Culinar cashewnødder", "de": "BASE Culinar Cashewkerne", "qty": "1 kg", "est": 79.99},
|
||||
{"key": "nutella", "name": "Nutella 1 kg glas", "de": "Nutella 1 kg Glas", "qty": "1 stk.", "est": 49.99, "badges": ["card"]},
|
||||
{"key": "biscoff", "name": "Lotus Biscoff smørepålæg 1,6 kg", "de": "Lotus Biscoff Brotaufstrich 1,6 kg", "qty": "1 stk.", "est": 99.99, "badges": ["card"]},
|
||||
{"key": "haribo", "name": "Haribo vingummi / lakrids", "de": "Haribo Weingummi / Lakritz", "note": "800–1000g", "qty": "1 stk.", "est": 44.99},
|
||||
]},
|
||||
]
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
.item-check input[type=checkbox] { width: 17px; height: 17px; accent-color: var(--accent); cursor: pointer; }
|
||||
.item-name { padding: 0.7rem 0.5rem; font-size: 14px; }
|
||||
.item-name .note { font-size: 11px; color: var(--muted); display: block; margin-top: 1px; }
|
||||
.item-name .de { font-size: 10px; color: #b0aba3; display: block; margin-top: 0; font-style: italic; }
|
||||
.badge { display: inline-block; font-size: 9px; padding: 1px 5px; border-radius: 3px; margin-left: 5px; vertical-align: middle; font-weight: 500; }
|
||||
.badge-card { background: var(--blue-light); color: var(--blue); }
|
||||
.badge-kasse { background: var(--amber-light); color: var(--amber); }
|
||||
@@ -229,6 +230,7 @@
|
||||
<div class="item-name">
|
||||
{{ item.name }}
|
||||
{% if item.get('badges') %}{% for b in item.badges %}{% if b == 'card' %}<span class="badge badge-card">CITTI CARD</span>{% endif %}{% if b == 'kasse' %}<span class="badge badge-kasse">Hel kasse</span>{% endif %}{% endfor %}{% endif %}
|
||||
{% if item.get('de') %}<span class="de">🇩🇪 {{ item.de }}</span>{% endif %}
|
||||
{% if item.get('note') %}<span class="note">{{ item.note }}</span>{% endif %}
|
||||
</div>
|
||||
<div class="item-qty">
|
||||
|
||||
Reference in New Issue
Block a user