# [madplaner.rasmusbendtsen.dk](https://madplaner.rasmusbendtsen.dk) ## Introduktion Min kæreste og jeg var trætte af altid at spise spagetti kødsovs eller boller i karry. Vi forsøgte os med forskellige måltidskasser, men sad hurtigt tilbage med en følelse af, at det aldrig rigtig var pengene værd. Især fordi vi primært anvendte som at måde at slippe for, altid at skulle tænke over "hvad skal spise de næste par og hvilke vare skal vi købe". Selve det at handle ind og madlavningen, er ikke et problem. Det handlede mest om planlægningen. Hvis det er eneste formål, så er måltidskasser en dyr løsning. Jeg anvendte ChatGPT til hurtigt at generer en indkøbsliste til fire retter. Det fungeret overraskende godt. Min kæreste sagde så, "Skal jeg så printe det ud, inden jeg går ud og handler" ![Michael Jordan meme](https://media1.tenor.com/m/B3_AR5dup94AAAAd/michael-jordan.gif) Derfor lavet jeg denne løsning i stedet. Den fungere ved at brugeren udfylder nogle inputfelter, som flettes ind i systempromten til en LLM. Svaret fra sprogmodellen sættes så pænt og let tilgængeligt op. ## Start din egen instans ```bash mkdir madplaner; \ cd madplaner; \ mkdir instance; \ wget https://git.rasmusbendtsen.dk/rasmus/madplaner/raw/branch/main/compose.yml; ``` Opret .env fil eller rediger direkte i compose filen og derefter. ```bash docker compose up -d ``` Gå til localhost: Docker compose ```yaml services: web: image: git.rasmusbendtsen.dk/rasmus/madplaner:latest container_name: madplaner restart: always ports: - "${HOST_PORT:-80}:5000" volumes: # sqlite DB lives here - ./instance:/app/instance environment: - FLASK_ENV=production - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} - OPENROUTER_MODEL= ${OPENROUTER_MODEL} - SECRET_KEY=${SECRET_KEY} # Udfyldes kun hvis der skal vises link til klidekode på forsiden - SOURCECODE_LINK=${SOURCECODE_LINK} ``` ## Backend Backenden er lavet med Flask og SQlite. Sprogmodellen kaldes gennem Open-Router. Der bør tilføjes server side validering af inputfelterne for at forhindre prompt injection. Servicen kører fra en ældre kontor pc i min lejlighed i Valby. Den er gjort tilgængelig gennem en omvendt proxy på den billigeste VPS jeg kunne finde, ved brug af [Pangolin](https://github.com/fosrl/pangolin) ## Frontend Frontenden er lavet med tailwindcss. Jeg har forsøgt at begrænse anvendelsen af javascript. Layout og UI er 100% vibecoded. Siden har PWA funktionalitet, så man kan *Installerer den som app* ## Tilpasning Løsningen er bygget omkring at flette værdier ind i systempromten til en sporgmodel og så udstille resultatet. Hvis man ønsker at generer madplaner ud fra andre variabler, kan man justere formuleren i dashboard.html og systemprompten. Løsningen kan også justeres til andre formål. Eksempelvis - Lav en træningsplan til mig - Anbefal nogle film og tv-serier - Hvilken X vil være bedst at købe, udfra mine behov