commit a9e4e6805c2a0712ef6d43f2f0cf2fdbf2530395
Author: root <root@hub.scroll.pub> Date: 2024-12-27 14:35:54 +0000 Subject: Initial commit diff --git a/body.html b/body.html new file mode 100644 index 0000000..ea40ae7 --- /dev/null +++ b/body.html @@ -0,0 +1,81 @@ +<header> + <nav class="main-nav"> + <div class="logo">WanderPlan</div> + <button class="menu-toggle" aria-label="Toggle menu"> + <span></span> + <span></span> + <span></span> + </button> + <ul class="nav-links"> + <li><a href="#planner">Plan Trip</a></li> + <li><a href="#stays">Find Stays</a></li> + <li><a href="#saved">Saved Plans</a></li> + </ul> + </nav> +</header> + +<main> + <section class="hero"> + <h1>Plan Your Perfect Family Adventure</h1> + <div class="search-container"> + <input type="text" id="destination" placeholder="Where would you like to go?" aria-label="Enter destination"> + <button class="search-btn">Start Planning</button> + </div> + </section> + + <section id="planner" class="planner-section"> + <h2>Trip Planner</h2> + <div class="planner-grid"> + <div class="calendar-container"> + <div class="date-picker"> + <input type="date" id="start-date" aria-label="Start date"> + <input type="date" id="end-date" aria-label="End date"> + </div> + <div id="calendar" class="calendar"></div> + </div> + <div class="itinerary-builder"> + <h3>Your Itinerary</h3> + <div id="itinerary-list" class="sortable-list"></div> + <button class="add-activity">Add Activity</button> + </div> + </div> + </section> + + <section id="stays" class="stays-section"> + <h2>Find Places to Stay</h2> + <div class="filters"> + <select id="property-type" aria-label="Property type"> + <option value="">All Properties</option> + <option value="hotel">Hotels</option> + <option value="apartment">Apartments</option> + <option value="house">Houses</option> + </select> + <div class="price-range"> + <input type="range" id="price-slider" min="0" max="1000" aria-label="Price range"> + <span class="price-display"></span> + </div> + </div> + <div class="accommodations-grid" id="accommodations"></div> + </section> +</main> + +<footer> + <div class="footer-content"> + <div class="footer-section"> + <h4>About WanderPlan</h4> + <p>Making family travel planning simple and enjoyable</p> + </div> + <div class="footer-section"> + <h4>Quick Links</h4> + <ul> + <li><a href="#planner">Plan Trip</a></li> + <li><a href="#stays">Find Stays</a></li> + <li><a href="#saved">Saved Plans</a></li> + </ul> + </div> + <div class="footer-section"> + <h4>Contact</h4> + <p>hello@wanderplan.scroll.pub</p> + </div> + </div> +</footer> diff --git a/index.scroll b/index.scroll new file mode 100644 index 0000000..3ef9191 --- /dev/null +++ b/index.scroll @@ -0,0 +1,10 @@ +buildHtml +baseUrl https://wanderplan.scroll.pub +metaTags + description Plan your perfect family trip itinerary and find accommodations worldwide. Interactive travel planning made simple. + keywords travel planning, family vacation, itinerary planner, accommodation finder, trip organizer +editButton /edit.html +title WanderPlan - Family Travel Itinerary Planner +style.css +body.html +script.js diff --git a/readme.scroll b/readme.scroll new file mode 100644 index 0000000..0dcd2bd --- /dev/null +++ b/readme.scroll @@ -0,0 +1,2 @@ +# wanderplan.scroll.pub +Website generated by Claude from prompt: create a website where I can plan the itinerary for my choice of place in the world with my family and find places to stay \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 0000000..6aaca65 --- /dev/null +++ b/script.js @@ -0,0 +1,109 @@ +document.addEventListener('DOMContentLoaded', () => { + // Mobile Menu Toggle + const menuToggle = document.querySelector('.menu-toggle'); + const navLinks = document.querySelector('.nav-links'); + + menuToggle.addEventListener('click', () => { + navLinks.classList.toggle('active'); + const spans = menuToggle.getElementsByTagName('span'); + spans[0].style.transform = navLinks.classList.contains('active') ? + 'rotate(45deg) translate(5px, 6px)' : ''; + spans[1].style.opacity = navLinks.classList.contains('active') ? '0' : '1'; + spans[2].style.transform = navLinks.classList.contains('active') ? + 'rotate(-45deg) translate(5px, -6px)' : ''; + }); + + // Smooth Scroll + document.querySelectorAll('a[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', function (e) { + e.preventDefault(); + const target = document.querySelector(this.getAttribute('href')); + target.scrollIntoView({ + behavior: 'smooth' + }); + }); + }); + + // Calendar Implementation + const calendar = document.getElementById('calendar'); + const startDate = document.getElementById('start-date'); + const endDate = document.getElementById('end-date'); + + function createCalendar() { + const date = new Date(); + const month = date.getMonth(); + const year = date.getFullYear(); + + const firstDay = new Date(year, month, 1); + const lastDay = new Date(year, month + 1, 0); + + let html = '<table><thead><tr>'; + ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'].forEach(day => { + html += `<th>${day}</th>`; + }); + html += '</tr></thead><tbody>'; + + let day = 1; + for (let i = 0; i < 6; i++) { + html += '<tr>'; + for (let j = 0; j < 7; j++) { + if (i === 0 && j < firstDay.getDay()) { + html += '<td></td>'; + } else if (day > lastDay.getDate()) { + html += '<td></td>'; + } else { + html += `<td data-date="${year}-${month + 1}-${day}">${day}</td>`; + day++; + } + } + html += '</tr>'; + } + html += '</tbody></table>'; + calendar.innerHTML = html; + } + + createCalendar(); + + // Itinerary Builder + const itineraryList = document.getElementById('itinerary-list'); + const addActivityBtn = document.querySelector('.add-activity'); + + let activities = []; + + addActivityBtn.addEventListener('click', () => { + const activity = { + id: Date.now(), + title: 'New Activity', + time: '12:00', + description: 'Add description' + }; + activities.push(activity); + renderActivities(); + }); + + function renderActivities() { + itineraryList.innerHTML = activities.map(activity => ` + <div class="activity-item" draggable="true" data-id="${activity.id}"> + <input type="time" value="${activity.time}"> + <input type="text" value="${activity.title}"> + <textarea>${activity.description}</textarea> + <button onclick="removeActivity(${activity.id})">Remove</button> + </div> + `).join(''); + } + + window.removeActivity = (id) => { + activities = activities.filter(activity => activity.id !== id); + renderActivities(); + }; + + // Accommodation Search + const propertyType = document.getElementById('property-type'); + const priceSlider = document.getElementById('price-slider'); + const priceDisplay = document.querySelector('.price-display'); + const accommodationsGrid = document.getElementById('accommodations'); + + priceSlider.addEventListener('input', () => { + priceDisplay.textContent = `$${priceSlider.value}`; + }); +}); diff --git a/style.css b/style.css new file mode 100644 index 0000000..5244719 --- /dev/null +++ b/style.css @@ -0,0 +1,204 @@ +:root { + --primary-color: #2a6b9c; + --secondary-color: #4ca1d8; + --accent-color: #f7c948; + --text-color: #333; + --light-bg: #f5f7fa; + --white: #ffffff; + --shadow: 0 4px 6px rgba(0, 0, 0, 0.1); +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Segoe UI', system-ui, sans-serif; + line-height: 1.6; + color: var(--text-color); +} + +/* Header & Navigation */ +.main-nav { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem 2rem; + background: var(--white); + box-shadow: var(--shadow); + position: fixed; + width: 100%; + z-index: 1000; +} + +.logo { + font-size: 1.5rem; + font-weight: 700; + color: var(--primary-color); +} + +.nav-links { + display: flex; + gap: 2rem; + list-style: none; +} + +.nav-links a { + text-decoration: none; + color: var(--text-color); + font-weight: 500; + transition: color 0.3s ease; +} + +.nav-links a:hover { + color: var(--secondary-color); +} + +.menu-toggle { + display: none; +} + +/* Hero Section */ +.hero { + height: 100vh; + background: linear-gradient(rgba(42, 107, 156, 0.8), rgba(76, 161, 216, 0.8)), + url('data:image/svg+xml,<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" fill="%234ca1d8"/></svg>'); + background-size: cover; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + padding: 2rem; +} + +.hero h1 { + color: var(--white); + font-size: 3.5rem; + margin-bottom: 2rem; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2); +} + +.search-container { + display: flex; + gap: 1rem; + max-width: 600px; + width: 100%; +} + +.search-container input { + flex: 1; + padding: 1rem; + border: none; + border-radius: 4px; + font-size: 1.1rem; +} + +.search-btn { + padding: 1rem 2rem; + background: var(--accent-color); + border: none; + border-radius: 4px; + color: var(--text-color); + font-weight: 600; + cursor: pointer; + transition: transform 0.3s ease; +} + +.search-btn:hover { + transform: translateY(-2px); +} + +/* Planner Section */ +.planner-section { + padding: 4rem 2rem; + background: var(--light-bg); +} + +.planner-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; + max-width: 1200px; + margin: 0 auto; +} + +.calendar-container { + background: var(--white); + padding: 2rem; + border-radius: 8px; + box-shadow: var(--shadow); +} + +.itinerary-builder { + background: var(--white); + padding: 2rem; + border-radius: 8px; + box-shadow: var(--shadow); +} + +/* Stays Section */ +.stays-section { + padding: 4rem 2rem; +} + +.filters { + display: flex; + gap: 2rem; + margin-bottom: 2rem; +} + +.accommodations-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 2rem; +} + +/* Responsive Design */ +@media (max-width: 768px) { + .menu-toggle { + display: block; + background: none; + border: none; + cursor: pointer; + } + + .menu-toggle span { + display: block; + width: 25px; + height: 3px; + background: var(--text-color); + margin: 5px 0; + transition: 0.3s; + } + + .nav-links { + display: none; + position: absolute; + top: 100%; + left: 0; + right: 0; + background: var(--white); + flex-direction: column; + padding: 1rem; + text-align: center; + } + + .nav-links.active { + display: flex; + } + + .planner-grid { + grid-template-columns: 1fr; + } + + .hero h1 { + font-size: 2.5rem; + } + + .search-container { + flex-direction: column; + } +}