{
    "componentChunkName": "component---src-templates-post-list-pagnition-template-js",
    "path": "/blog",
    "result": {"data":{"allMdx":{"edges":[{"node":{"id":"51851f81-f10f-5d8e-9f55-e3b7a4aa8e56","excerpt":"Python FastAPI with JWT Auth serving a simple…","fields":{"slug":"/posts/2026-04-14-python-fastapi-auth-ml-one/"},"frontmatter":{"date":"16-April-2026","title":"Python FastAPI with JWT Auth predicting house prices by Machine Learning","tags":["python","fastapi","vercel","rest-api","devops","postgresql","ai","machine-learning"],"categories":["Python","FastAPI","DevOps","Vercel","REST API","PostgreSQL","AI","Machine Learning"]},"body":"var _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Python FastAPI with JWT Auth predicting house prices by Machine Learning\",\n  \"date\": \"2026-04-16T00:00:00.000Z\",\n  \"published\": true,\n  \"categories\": [\"Python\", \"FastAPI\", \"DevOps\", \"Vercel\", \"REST API\", \"PostgreSQL\", \"AI\", \"Machine Learning\"],\n  \"tags\": [\"python\", \"fastapi\", \"vercel\", \"rest-api\", \"devops\", \"postgresql\", \"ai\", \"machine-learning\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Python FastAPI with JWT Auth serving a simple Machine Learning Application Predicting House Prices - hosted at Vercel Cloud using Serverless Functions\"), mdx(\"p\", null, mdx(\"a\", {\n    href: \"https://fastapi-jwt-auth-ml-one.vercel.app/docs\",\n    target: \"_blank\",\n    title: \"FastAPI serving JWT Auth and ML\"\n  }, \"Try the demo by OpenAPI...\")), mdx(\"p\", null, \"A Starter FastAPI + JWT Auth + ML Predicting house prices + OpenAPI / Swagger - secured by HTTPS\"), mdx(\"p\", null, \"During the development process, I used ChatGPT for assisting with code generation and Github Copilot for code inline suggestion\"), mdx(\"p\", null, \"DevOps by VS Code + GitHub + Vercel Cloud \"), mdx(\"a\", {\n    href: \"https://github.com/persteenolsen/fastapi-jwt-auth-ml-one\",\n    target: \"_blank\"\n  }, \"The Web API at GitHub\"));\n}\n;\nMDXContent.isMDXComponent = true;"}},{"node":{"id":"318eb610-9762-5cb1-9913-02abf869f981","excerpt":"This short version of my CV should show my…","fields":{"slug":"/posts/2022-05-10-my-cv/"},"frontmatter":{"date":"16-April-2026","title":"My CV","tags":["my-cv","per-steen-olsen"],"categories":["About me"]},"body":"var _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"My CV\",\n  \"date\": \"2026-04-16T00:00:00.000Z\",\n  \"published\": true,\n  \"categories\": [\"About me\"],\n  \"tags\": [\"my-cv\", \"per-steen-olsen\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This short version of my CV should show my technical background for making this Tech Blog and AI Projects\"), mdx(\"p\", null, \"I am a Software Developer with passion for AI, C#, .NET, Umbraco CMS, Python, Django, FastAPI, Wagtail CMS, Java, Node.js, JavaScript, TypeScript, Next.js, React, Nuxt, Vue.js, Angular, Webpack and Vite as well as other programming languages, tools and DevOps\"), mdx(\"p\", null, \"Besides working with IT and Web Development, I have been working in other areas as well.\"), mdx(\"p\", null, \"IT Working experience\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Freelance\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Web Developer at VM Kontorteknik\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"IT Worker at the Libraries of Slagelse\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Web Developer at the former Jara IT\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Web Developer at the former Bank bankTrelleborg\")), mdx(\"p\", null, \"Higher education\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"AI, RAG and Machine Learning\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Education in C#, .NET, Python, Java, Node.js, JavaScript, TypeScript, Next.js, React, Nuxt, Vue.js and Angular / Full Stack \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Online education in digital marketing\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Developing ASP.NET MVC Web Applications (20486)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Portuguese language exam B1/B2\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"AP Graduate in Computer Science\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Mathematics level C1\")), mdx(\"p\", null, \"Skills of languages\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Danish as my native language, and I passed an exam with the level equal to C2\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"English exams did I pass at the level equal to B2 written and spoken\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Portuguese exams passed in Lisbon at the level equal to B1/B2 written and spoken\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"German exam at level equal to B1\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Swedish and Norwegian without writing skills\")));\n}\n;\nMDXContent.isMDXComponent = true;"}},{"node":{"id":"97c99588-7047-5510-9000-fe18ad96136e","excerpt":"Python FastAPI with JWT Auth serving an AI Agent…","fields":{"slug":"/posts/2026-04-02-python-fastapi-auth-ai-agent-three/"},"frontmatter":{"date":"15-April-2026","title":"Python FastAPI with JWT Auth serving an AI Agent","tags":["python","fastapi","vercel","rest-api","devops","ai","ai-agent","groq","langchain"],"categories":["Python","FastAPI","DevOps","Vercel","REST API","AI","AI Agent","Groq","Langchain"]},"body":"var _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Python FastAPI with JWT Auth serving an AI Agent\",\n  \"date\": \"2026-04-15T00:00:00.000Z\",\n  \"published\": true,\n  \"categories\": [\"Python\", \"FastAPI\", \"DevOps\", \"Vercel\", \"REST API\", \"AI\", \"AI Agent\", \"Groq\", \"Langchain\"],\n  \"tags\": [\"python\", \"fastapi\", \"vercel\", \"rest-api\", \"devops\", \"ai\", \"ai-agent\", \"groq\", \"langchain\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Python FastAPI with JWT Auth serving an AI Agent by Groq and Langchain - hosted at Vercel Cloud using Serverless Functions\"), mdx(\"p\", null, mdx(\"a\", {\n    href: \"https://fastapi-jwt-auth-ai-agent-three.vercel.app/docs\",\n    target: \"_blank\",\n    title: \"FastAPI JWT Auth and an AI Agent\"\n  }, \"Try the demo by OpenAPI...\")), mdx(\"p\", null, \"A Starter FastAPI + JWT Auth + AI Agent + Groq + LLP + Langchain + OpenAPI / Swagger - secured by HTTPS\"), mdx(\"p\", null, \"During the development process, I used ChatGPT for assisting with code generation and Github Copilot for code inline suggestion\"), mdx(\"p\", null, \"DevOps by VS Code + GitHub + Vercel Cloud \"), mdx(\"a\", {\n    href: \"https://github.com/persteenolsen/fastapi-jwt-auth-ai-agent-three\",\n    target: \"_blank\"\n  }, \"The Web API at GitHub\"));\n}\n;\nMDXContent.isMDXComponent = true;"}},{"node":{"id":"1b8079b8-942a-53e0-9b76-dd239776b033","excerpt":"Python FastAPI with JWT Auth serving a RAG…","fields":{"slug":"/posts/2026-04-08-python-fastapi-auth-rag-one/"},"frontmatter":{"date":"15-April-2026","title":"Python FastAPI with JWT Auth serving RAG by fake Embeddings","tags":["python","fastapi","vercel","rest-api","devops","postgresql","ai","retrieval-augmented-generation","groq"],"categories":["Python","FastAPI","DevOps","Vercel","REST API","PostgreSQL","AI","Retrieval-Augmented Generation","Groq"]},"body":"var _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Python FastAPI with JWT Auth serving RAG by fake Embeddings\",\n  \"date\": \"2026-04-15T00:00:00.000Z\",\n  \"published\": true,\n  \"categories\": [\"Python\", \"FastAPI\", \"DevOps\", \"Vercel\", \"REST API\", \"PostgreSQL\", \"AI\", \"Retrieval-Augmented Generation\", \"Groq\"],\n  \"tags\": [\"python\", \"fastapi\", \"vercel\", \"rest-api\", \"devops\", \"postgresql\", \"ai\", \"retrieval-augmented-generation\", \"groq\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Python FastAPI with JWT Auth serving a RAG Application using Groq + fake embeddings - hosted at Vercel Cloud using Serverless Functions\"), mdx(\"p\", null, mdx(\"a\", {\n    href: \"https://fastapi-jwt-auth-rag-one.vercel.app/docs\",\n    target: \"_blank\",\n    title: \"FastAPI serving JWT Auth and RAG\"\n  }, \"Try the demo by OpenAPI...\")), mdx(\"p\", null, \"A Starter FastAPI + JWT Auth + Retrieval-Augmented Generation (RAG) by Groq LLM + fake embeddings + OpenAPI / Swagger - secured by HTTPS\"), mdx(\"p\", null, \"During the development process, I used ChatGPT for assisting with code generation and Github Copilot for code inline suggestion\"), mdx(\"p\", null, \"DevOps by VS Code + GitHub + Vercel Cloud \"), mdx(\"a\", {\n    href: \"https://github.com/persteenolsen/fastapi-jwt-auth-rag-one\",\n    target: \"_blank\"\n  }, \"The Web API at GitHub\"));\n}\n;\nMDXContent.isMDXComponent = true;"}},{"node":{"id":"81d1a324-f751-5b5c-9a8d-0a21decdb06d","excerpt":"Python FastAPI with JWT Auth serving a RAG…","fields":{"slug":"/posts/2026-04-11-python-fastapi-auth-rag-two/"},"frontmatter":{"date":"15-April-2026","title":"Python FastAPI with JWT Auth serving RAG by Hugging Face embeddings","tags":["python","fastapi","vercel","rest-api","devops","postgresql","ai","retrieval-augmented-generation","groq","hugging-face"],"categories":["Python","FastAPI","DevOps","Vercel","REST API","PostgreSQL","AI","Retrieval-Augmented Generation","Groq","Hugging Face"]},"body":"var _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Python FastAPI with JWT Auth serving RAG by Hugging Face embeddings\",\n  \"date\": \"2026-04-15T00:00:00.000Z\",\n  \"published\": true,\n  \"categories\": [\"Python\", \"FastAPI\", \"DevOps\", \"Vercel\", \"REST API\", \"PostgreSQL\", \"AI\", \"Retrieval-Augmented Generation\", \"Groq\", \"Hugging Face\"],\n  \"tags\": [\"python\", \"fastapi\", \"vercel\", \"rest-api\", \"devops\", \"postgresql\", \"ai\", \"retrieval-augmented-generation\", \"groq\", \"hugging-face\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Python FastAPI with JWT Auth serving a RAG Application using Groq + Hugging Face embeddings - hosted at Vercel Cloud using Serverless Functions\"), mdx(\"p\", null, mdx(\"a\", {\n    href: \"https://fastapi-jwt-auth-rag-two.vercel.app/docs\",\n    target: \"_blank\",\n    title: \"FastAPI serving JWT Auth and RAG pipeline\"\n  }, \"Try the demo by OpenAPI...\")), mdx(\"p\", null, \"A Starter FastAPI + JWT Auth + Retrieval-Augmented Generation (RAG) by Groq LLM + Real embeddings by Hugging Face model + OpenAPI / Swagger - secured by HTTPS\"), mdx(\"p\", null, \"During the development process, I used ChatGPT for assisting with code generation and Github Copilot for code inline suggestion\"), mdx(\"p\", null, \"DevOps by VS Code + GitHub + Vercel Cloud \"), mdx(\"a\", {\n    href: \"https://github.com/persteenolsen/fastapi-jwt-auth-rag-two\",\n    target: \"_blank\"\n  }, \"The Web API at GitHub\"));\n}\n;\nMDXContent.isMDXComponent = true;"}}]}},"pageContext":{"limit":5,"skip":0,"numPages":3,"currentPage":1}},
    "staticQueryHashes": ["4278130389"]}