Private
Public Access
1
0
2025-12-30 22:15:48 +01:00
2025-12-30 17:41:28 +01:00
2025-12-30 22:15:48 +01:00
2025-12-30 17:41:28 +01:00
2025-12-30 17:41:28 +01:00
2025-12-30 17:41:38 +01:00
2025-12-30 17:41:28 +01:00
2025-12-30 17:41:28 +01:00
2025-12-30 19:28:27 +01:00
2025-12-30 17:41:28 +01:00

madplaner.rasmusbendtsen.dk

Introkduktion

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åltidskasserne, 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

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

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 fil og derefter
docker compose up -d

Docker compose

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}
      # Anvendes 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

Frontend

Frontenden er lavet med tailwindcss. Jeg har forsøgt at begrænse anvendelsen af javascript. Layout og UI er 100% vibecoded.

Tilpasning

Ved at redigere i dashboard.html og system_prompt.txt. Kan løsningen 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
Description
No description provided
Readme 689 KiB
Languages
HTML 79.3%
Python 16.5%
Dockerfile 2.6%
JavaScript 1.5%
CSS 0.1%