{"id":11190,"date":"2025-08-05T09:16:51","date_gmt":"2025-08-05T09:16:51","guid":{"rendered":"https:\/\/trekpathways.com\/?page_id=11190"},"modified":"2025-12-12T07:08:56","modified_gmt":"2025-12-12T07:08:56","slug":"free-ai-trip-planner-itinerary-generator","status":"publish","type":"page","link":"https:\/\/trekpathways.com\/es\/planificador-de-viajes-con-ia\/","title":{"rendered":"Planificador de viajes y generador de itinerarios con IA gratis | Viaje perfecto"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11190\" class=\"elementor elementor-11190\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-82c49cf e-flex e-con-boxed e-con e-parent\" data-id=\"82c49cf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-808176a elementor-widget elementor-widget-heading\" data-id=\"808176a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">free Ai Trek PlanNER <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6cf38c4 e-con-full e-flex e-con e-parent\" data-id=\"6cf38c4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-714dc19 elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"714dc19\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"trip-planner-widget\" style=\"font-family: Arial, sans-serif; max-width: 480px; margin: 2rem auto; background: #101820; color: #eee; border-radius: 12px; padding: 1.5rem; box-shadow: 0 6px 20px rgba(0,0,0,0.7);\">\r\n  <h2 style=\"text-align:center; color:#ffb347; letter-spacing: 0.05em; margin-bottom: 2rem;\">AI Trip Planner<\/h2>\r\n  <input type=\"text\" id=\"tpw-location\" placeholder=\"Trip Location\" style=\"width:100%; padding:12px; margin-bottom: 12px; border-radius: 8px; border:none; font-size:16px; background: rgba(255 255 255 \/ 0.1); color: #eee;\" \/>\r\n  <input type=\"number\" id=\"tpw-days\" placeholder=\"Number of Days\" style=\"width:100%; padding:12px; margin-bottom: 12px; border-radius: 8px; border:none; font-size:16px; background: rgba(255 255 255 \/ 0.1); color: #eee;\" \/>\r\n  <input type=\"text\" id=\"tpw-interests\" placeholder=\"Your Interests\" style=\"width:100%; padding:12px; margin-bottom: 12px; border-radius: 8px; border:none; font-size:16px; background: rgba(255 255 255 \/ 0.1); color: #eee;\" \/>\r\n  <select id=\"tpw-level\" style=\"width:100%; padding:12px; margin-bottom: 20px; border-radius: 8px; border:none; font-size:16px; background: rgba(255 255 255 \/ 0.1); color: #eee;\">\r\n    <option value=\"beginner\">Beginner<\/option>\r\n    <option value=\"intermediate\">Intermediate<\/option>\r\n    <option value=\"pro\">Pro<\/option>\r\n  <\/select>\r\n  <button id=\"tpw-generate-btn\" style=\"width:100%; background:#ffb347; color:#101820; font-weight:700; border:none; padding:14px; border-radius:12px; cursor:pointer; letter-spacing: 0.03em;\">Generate Itinerary<\/button>\r\n\r\n  <div id=\"tpw-result-container\" role=\"region\" aria-live=\"polite\" aria-atomic=\"true\" style=\"margin-top: 2rem; background: linear-gradient(135deg, #202c33, #18303f); padding: 20px; border-radius: 14px; max-height: 450px; overflow-y: auto; box-shadow: 0 6px 20px rgb(0 0 0 \/ 0.6); opacity: 0; transition: opacity 0.5s ease;\">\r\n    <div id=\"tpw-itinerary\" style=\"white-space: pre-wrap;\"><\/div>\r\n    <button id=\"tpw-send-email-btn\" style=\"display:none; margin-top: 1rem; background:#ffb347; border:none; padding:12px 16px; border-radius:12px; cursor:pointer; font-weight:bold;\">Send to TrekPathways<\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  \/\/ Elements scoped inside container\r\n  const container = document.getElementById('trip-planner-widget');\r\n  const btn = container.querySelector('#tpw-generate-btn');\r\n  const resultContainer = container.querySelector('#tpw-result-container');\r\n  const itineraryDiv = container.querySelector('#tpw-itinerary');\r\n  const sendEmailBtn = container.querySelector('#tpw-send-email-btn');\r\n\r\n  \/\/ Minimal markdown-like parser\r\n  function parseMarkdown(text) {\r\n    \/\/ Escape HTML to prevent XSS\r\n    text = text.replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\");\r\n\r\n    \/\/ Main title ## heading\r\n    text = text.replace(\/^##\\s*(.+)$\/gm, '<div style=\"font-size:24px; font-weight:900; margin-bottom:12px; color:#ffd54f;\">$1<\/div>');\r\n    \/\/ Day headings like Day 1:\r\n    text = text.replace(\/^Day\\s*\\d+.*$\/gm, match => `<div style=\"font-size:20px; font-weight:700; color:#ffb347; margin-top:20px; margin-bottom:6px; border-left:4px solid #ffaa1b; padding-left:10px;\">${match}<\/div>`);\r\n    \/\/ Bold **text**\r\n    text = text.replace(\/\\*\\*(.+?)\\*\\*\/g, '<b style=\"color:#ffcc5c;\">$1<\/b>');\r\n    \/\/ Italic *text*\r\n    text = text.replace(\/\\*(.+?)\\*\/g, '<i style=\"color:#ccc;\">$1<\/i>');\r\n    \/\/ Bullet lists\r\n    let lines = text.split('\\n');\r\n    let insideList = false;\r\n    let res = [];\r\n    lines.forEach(line => {\r\n      if (\/^\\s*[\\*\\-]\\s+\/.test(line)) {\r\n        if (!insideList) {\r\n          insideList = true;\r\n          res.push('<ul style=\"padding-left:1.3rem; margin-top:0.25rem; margin-bottom:0.5rem; color:#ddd;\">');\r\n        }\r\n        const item = line.replace(\/^\\s*[\\*\\-]\\s+\/, '');\r\n        res.push(`<li style=\"margin-bottom:0.35rem;\">${item}<\/li>`);\r\n      } else {\r\n        if (insideList) {\r\n          res.push('<\/ul>');\r\n          insideList = false;\r\n        }\r\n        if (line.trim() === '') {\r\n          res.push('<br\/>');\r\n        } else {\r\n          res.push(line);\r\n        }\r\n      }\r\n    });\r\n    if (insideList) res.push('<\/ul>');\r\n\r\n    return res.join('\\n').replace(\/\\n\/g, '<br\/>');\r\n  }\r\n\r\n  btn.addEventListener('click', async () => {\r\n    const location = container.querySelector('#tpw-location').value.trim();\r\n    const days = container.querySelector('#tpw-days').value.trim();\r\n    const interests = container.querySelector('#tpw-interests').value.trim();\r\n    const level = container.querySelector('#tpw-level').value;\r\n\r\n    if (!location || !days || !interests) {\r\n      alert('Please fill all fields.');\r\n      return;\r\n    }\r\n\r\n    itineraryDiv.innerHTML = '<div aria-label=\"Loading\" style=\"margin:20px auto; border:4px solid rgba(255,255,255,0.3); border-top:4px solid #ffb347; border-radius:50%; width:28px; height:28px; animation: spin 1s linear infinite;\"><\/div>';\r\n    resultContainer.style.opacity = '1';\r\n    sendEmailBtn.style.display = 'none';\r\n\r\n    const prompt = `Generate a detailed day-by-day trekking itinerary for:\r\nLocation: ${location}\r\nDays: ${days}\r\nInterests: ${interests}\r\nExperience Level: ${level}\r\nInclude scenic spots, cultural highlights, local tips, important notes, and travel details.\r\nPresent the response with headings, bullet points, and day sections clearly labeled.`;\r\n\r\n    try {\r\n      const response = await fetch(\"https:\/\/generativelanguage.googleapis.com\/v1beta\/models\/gemini-2.0-flash:generateContent?key=AIzaSyA-zZtDhetlyDgC3FaQoMt8KnG_Jb7coNk\", {\r\n        method: \"POST\",\r\n        headers: { \"Content-Type\": \"application\/json\" },\r\n        body: JSON.stringify({\r\n          contents: [{ parts: [{ text: prompt }] }]\r\n        })\r\n      });\r\n\r\n      const data = await response.json();\r\n\r\n      let itineraryText = \"\";\r\n      if (data?.candidates?.[0]?.content?.parts?.[0]?.text) {\r\n        itineraryText = data.candidates[0].content.parts[0].text;\r\n      } else {\r\n        itineraryText = \"No itinerary generated. Please try again.\";\r\n      }\r\n\r\n      itineraryDiv.innerHTML = parseMarkdown(itineraryText);\r\n      sendEmailBtn.style.display = 'block';\r\n    } catch (error) {\r\n      itineraryDiv.innerHTML = \"Error generating itinerary.\";\r\n      console.error(error);\r\n    }\r\n  });\r\n\r\n  sendEmailBtn.addEventListener('click', () => {\r\n    const subject = encodeURIComponent(\"Generated Trip Itinerary\");\r\n    \/\/ Use plain text for email body\r\n    const body = encodeURIComponent(itineraryDiv.innerText);\r\n    window.location.href = `mailto:info@trekpathways.com?subject=${subject}&body=${body}`;\r\n  });\r\n\r\n  \/\/ Minimal spinner animation style added programmatically to avoid CSS leaks\r\n  const style = document.createElement('style');\r\n  style.textContent = `\r\n    @keyframes spin {\r\n      to { transform: rotate(360deg); }\r\n    }\r\n  `;\r\n  document.head.appendChild(style);\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b21fbde e-flex e-con-boxed e-con e-parent\" data-id=\"b21fbde\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bcdb70d elementor-widget elementor-widget-shortcode\" data-id=\"bcdb70d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div id=\"trip-planner-widget\">\n        <h2>AI Trip Planner<\/h2>\n        <form id=\"trip-planner-form\">\n            <div class=\"form-group\">\n                <label for=\"tpw-location\">Trip Location<\/label>\n                <input type=\"text\" id=\"tpw-location\" name=\"location\" placeholder=\"Enter location\" required>\n            <\/div>\n            <div class=\"form-group\">\n                <label for=\"tpw-days\">Number of Days<\/label>\n                <input type=\"number\" id=\"tpw-days\" name=\"days\" placeholder=\"Enter number of days\" required>\n            <\/div>\n            <div class=\"form-group\">\n                <label for=\"tpw-interests\">Your Interests<\/label>\n                <input type=\"text\" id=\"tpw-interests\" name=\"interests\" placeholder=\"Enter interests\" required>\n            <\/div>\n            <div class=\"form-group\">\n                <label for=\"tpw-level\">Experience Level<\/label>\n                <select id=\"tpw-level\" name=\"level\">\n                    <option value=\"beginner\">Beginner<\/option>\n                    <option value=\"intermediate\">Intermediate<\/option>\n                    <option value=\"pro\">Pro<\/option>\n                <\/select>\n            <\/div>\n            <button type=\"submit\" id=\"tpw-generate-btn\">Generate Itinerary<\/button>\n        <\/form>\n        <div id=\"tpw-result-container\">\n            <div id=\"tpw-itinerary\"><\/div>\n            <button id=\"tpw-send-email-btn\" style=\"display:none;\">Send to TrekPathways<\/button>\n        <\/div>\n    <\/div>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Planificador de viaje AI Trek Planner AI PrincipianteIntermediatePro Generar itinerario Enviar a TrekPathways<\/p>","protected":false},"author":1,"featured_media":11201,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11190","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/pages\/11190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/comments?post=11190"}],"version-history":[{"count":0,"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/pages\/11190\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/media\/11201"}],"wp:attachment":[{"href":"https:\/\/trekpathways.com\/es\/wp-json\/wp\/v2\/media?parent=11190"}],"curies":[{"name":"pp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}