[{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/tags/chatbot/","section":"Tags","summary":"","title":"Chatbot","type":"tags"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/tags/dify/","section":"Tags","summary":"","title":"Dify","type":"tags"},{"content":"Datamatiker studerende\nInteresseret i webudvikling \u0026amp; software\nProjekter # Se nogle af mine projekter her:\nProjekt 1\n[Flere projekter på vej\u0026hellip;]\nSe alle projekter\nPosts # Læs mine posts her\n","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/","section":"Forside","summary":"","title":"Forside","type":"page"},{"content":"Jeg har lige implementeret en lille RAG-chatbot på mit portfolio. Her er hvordan jeg gjorde det.\nHvad er RAG? # RAG (Retrieval-Augmented Generation) betyder at chatbotten kan svare baseret på indhold fra dit eget site - i stedet for kun at bruge sin træningsdata. Det gør svarene meget mere relevante.\nArkitektur # Jeg brugte tre dele:\nFrontend: Vanilla JavaScript + CSS (floating widget i hjørne) på GitHub Pages Backend: Vercel API (sikrer API-nøgler) AI: Dify Knowledge Base (håndterer RAG + svar-generering) ##How-to\n1. Opret Knowledge Base i Dify # I Dify dashboard:\nOpret en ny Knowledge Base Aktivér Web Crawler og peg på dit portfolio Dify indekserer automatisk alle dine posts/projekter 2. Vercel API for proxy # Opret api/chat.js på Vercel:\nmodule.exports = async (req, res) =\u0026gt; { // CORS headers res.setHeader(\u0026#39;Access-Control-Allow-Origin\u0026#39;, \u0026#39;*\u0026#39;); res.setHeader(\u0026#39;Access-Control-Allow-Methods\u0026#39;, \u0026#39;POST, OPTIONS\u0026#39;); res.setHeader(\u0026#39;Access-Control-Allow-Headers\u0026#39;, \u0026#39;Content-Type\u0026#39;); if (req.method === \u0026#39;OPTIONS\u0026#39;) { res.status(200).end(); return; } const { message } = req.body; const apiKey = process.env.DIFY_API_KEY; const response = await fetch(\u0026#39;https://api.dify.ai/v1/chat-messages\u0026#39;, { method: \u0026#39;POST\u0026#39;, headers: { \u0026#39;Authorization\u0026#39;: `Bearer ${apiKey}`, \u0026#39;Content-Type\u0026#39;: \u0026#39;application/json\u0026#39; }, body: JSON.stringify({ inputs: {}, query: message, conversation_id: \u0026#39;\u0026#39;, user: \u0026#39;visitor\u0026#39; }) }); const data = await response.json(); return res.status(200).json({ answer: data.answer }); }; 3. Frontend chatbot # I static/js/chatbot.js:\nasync function sendToDify(message) { const response = await fetch(\u0026#39;https://portfolio-jet-rho-19.vercel.app/api/chat\u0026#39;, { method: \u0026#39;POST\u0026#39;, headers: { \u0026#39;Content-Type\u0026#39;: \u0026#39;application/json\u0026#39; }, body: JSON.stringify({ message }) }); const data = await response.json(); return data.answer; } (Erstat Vercel URL med din egen)\n4. Miljøvariabler på Vercel # Gå til Vercel dashboard → dit projekt → Settings → Environment Variables Tilføj: Name: DIFY_API_KEY Value: din Dify API key Redeploy Vigtigste lessons # Sikkerhed først: Hold API-nøgler på backend (Vercel), aldrig i browser RAG er powerful: Brugeren får svar baseret på dit indhold Vercel API: Super simpelt for serverless backend Dify Knowledge Base: Auto-indeksering af dit site Det er det! En simpel, sikker, AI-drevet chatbot på få timers arbejde.\n","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/posts/rag-chatbot/","section":"Posts","summary":"En kortfattet guide til at bygge en Retrieval-Augmented Generation chatbot med Dify, Netlify Functions og vanilla JavaScript.","title":"Hvordan jeg lavede en RAG-chatbot til mit portfolio","type":"posts"},{"content":"Her er mine blogposts\n","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/tags/rag/","section":"Tags","summary":"","title":"RAG","type":"tags"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"19 April 2026","externalUrl":null,"permalink":"/portfolio/categories/udvikling/","section":"Categories","summary":"","title":"Udvikling","type":"categories"},{"content":"","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":" Mit første projekt: Portfolio i Hugo # I dette projekt har jeg bygget mit eget portfolio site med Hugo.\nFormål # Formålet var at lære:\nHvordan man arbejder med static site generators Struktur i projekter Deployment Teknologier # Hugo HTML / CSS Git \u0026amp; GitHub Hvad jeg lærte # Hvordan Hugo bruger content og templates Hvordan man organiserer et projekt Hvordan man deployer et site Udfordringer # Jeg havde især problemer med:\nAt forstå Hugo’s struktur Styling og layout Jeg løste det ved at:\nLæse dokumentation Eksperimentere med temaer Resultat # Jeg har nu et fungerende portfolio site, som jeg kan bruge til at vise mine projekter.\n","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/posts/post1/","section":"Posts","summary":"Jeg har bygget mit eget portfolio site med Hugo og lært en masse undervejs.","title":"Mit første projekt: Portfolio i Hugo","type":"posts"},{"content":" Om mig # Jeg er datamatikerstuderende med interesse for softwareudvikling.\nTeknologier # Java HTML / CSS JavaScript C# SQL Git Mål # At udvikle mig fagligt så meget som muligt og have det sjovt samtidig.\nKontakt # Email: nicolai-strand@hotmail.com ","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/about/","section":"Forside","summary":"","title":"Om mig","type":"page"},{"content":" Portfolio Website # Dette er mit eget portfolio site bygget med Hugo.\nTeknologier # Hugo HTML / CSS Beskrivelse # Jeg har bygget dette site for at vise mine projekter.\n","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/projects/project1/","section":"Projekter","summary":"Mit portfolio site lavet i Hugo","title":"Portfolio Website","type":"projects"},{"content":"","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/categories/projekt/","section":"Categories","summary":"","title":"Projekt","type":"categories"},{"content":"Her er nogle af de projekter jeg har arbejdet på.\n","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/projects/","section":"Projekter","summary":"","title":"Projekter","type":"projects"},{"content":"","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/categories/studie/","section":"Categories","summary":"","title":"Studie","type":"categories"},{"content":"","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/tags/web/","section":"Tags","summary":"","title":"Web","type":"tags"},{"content":"","date":"14 April 2026","externalUrl":null,"permalink":"/portfolio/tags/webudvikling/","section":"Tags","summary":"","title":"Webudvikling","type":"tags"},{"content":"","externalUrl":null,"permalink":"/portfolio/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/portfolio/series/","section":"Series","summary":"","title":"Series","type":"series"}]