commit a0a540d16fb9955e403993340651f84a736dc05c
Author: root <root@hub.scroll.pub>
Date: 2024-12-27 19:20:43 +0000
Subject: Initial commit
diff --git a/body.html b/body.html
new file mode 100644
index 0000000..4937f6a
--- /dev/null
+++ b/body.html
@@ -0,0 +1,79 @@
+<header>
+ <nav>
+ <div class="logo">DocCare</div>
+ <button class="mobile-menu" aria-label="Menu">
+ <span></span><span></span><span></span>
+ </button>
+ <ul class="nav-links">
+ <li><a href="#home">Home</a></li>
+ <li><a href="#doctors">Doctors</a></li>
+ <li><a href="#appointments">Appointments</a></li>
+ <li><a href="#login" class="btn-login">Login</a></li>
+ <li><button class="theme-toggle" aria-label="Toggle theme">🌓</button></li>
+ </ul>
+ </nav>
+</header>
+
+<main>
+ <section id="hero">
+ <div class="hero-content">
+ <h1>Expert Healthcare at Your Fingertips</h1>
+ <p>Book appointments with top doctors instantly</p>
+ <button class="cta-button">Book Now</button>
+ </div>
+ </section>
+
+ <section id="featured-doctors">
+ <h2>Our Specialists</h2>
+ <div class="carousel">
+ <div class="carousel-track">
+ <div class="doctor-card">
+ <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E" alt="Dr. Smith">
+ <h3>Dr. Sarah Smith</h3>
+ <p>Cardiologist</p>
+ <div class="rating">★★★★★</div>
+ </div>
+ <!-- More doctor cards -->
+ </div>
+ </div>
+ </section>
+
+ <section id="booking">
+ <h2>Book Your Appointment</h2>
+ <div class="booking-container">
+ <div class="calendar"></div>
+ <div class="time-slots">
+ <h3>Available Times</h3>
+ <div class="slot-grid"></div>
+ </div>
+ </div>
+ </section>
+
+ <section id="testimonials">
+ <h2>Patient Testimonials</h2>
+ <div class="testimonial-grid">
+ <div class="testimonial">
+ <p>"Excellent service! Very easy to book appointments."</p>
+ <cite>- John D.</cite>
+ </div>
+ <!-- More testimonials -->
+ </div>
+ </section>
+</main>
+
+<footer>
+ <div class="footer-content">
+ <div class="footer-section">
+ <h3>DocCare</h3>
+ <p>Modern healthcare appointments made simple</p>
+ </div>
+ <div class="footer-section">
+ <h3>Quick Links</h3>
+ <ul>
+ <li><a href="#about">About</a></li>
+ <li><a href="#contact">Contact</a></li>
+ <li><a href="#privacy">Privacy Policy</a></li>
+ </ul>
+ </div>
+ </div>
+</footer>
diff --git a/index.scroll b/index.scroll
new file mode 100644
index 0000000..78c9d40
--- /dev/null
+++ b/index.scroll
@@ -0,0 +1,8 @@
+buildHtml
+baseUrl https://doccare.scroll.pub
+metaTags
+editButton /edit.html
+title DocCare - Modern Healthcare Appointments
+style.css
+body.html
+script.js
diff --git a/prompt.json b/prompt.json
new file mode 100644
index 0000000..0033a3c
--- /dev/null
+++ b/prompt.json
@@ -0,0 +1,20 @@
+{
+ "id": "msg_01YQaw83GSLGRbr3PvnyNfg1",
+ "type": "message",
+ "role": "assistant",
+ "model": "claude-3-5-sonnet-20241022",
+ "content": [
+ {
+ "type": "text",
+ "text": "Let me help create this doctor appointment website with a modern, accessible design.\n\n---domain---\ndoccare.scroll.pub\n\n---index.scroll---\nbuildHtml\nbaseUrl https://doccare.scroll.pub\nmetaTags\neditButton /edit.html\ntitle DocCare - Modern Healthcare Appointments\nstyle.css\nbody.html\nscript.js\n\n---body.html---\n<header>\n <nav>\n <div class=\"logo\">DocCare</div>\n <button class=\"mobile-menu\" aria-label=\"Menu\">\n <span></span><span></span><span></span>\n </button>\n <ul class=\"nav-links\">\n <li><a href=\"#home\">Home</a></li>\n <li><a href=\"#doctors\">Doctors</a></li>\n <li><a href=\"#appointments\">Appointments</a></li>\n <li><a href=\"#login\" class=\"btn-login\">Login</a></li>\n <li><button class=\"theme-toggle\" aria-label=\"Toggle theme\">🌓</button></li>\n </ul>\n </nav>\n</header>\n\n<main>\n <section id=\"hero\">\n <div class=\"hero-content\">\n <h1>Expert Healthcare at Your Fingertips</h1>\n <p>Book appointments with top doctors instantly</p>\n <button class=\"cta-button\">Book Now</button>\n </div>\n </section>\n\n <section id=\"featured-doctors\">\n <h2>Our Specialists</h2>\n <div class=\"carousel\">\n <div class=\"carousel-track\">\n <div class=\"doctor-card\">\n <img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E\" alt=\"Dr. Smith\">\n <h3>Dr. Sarah Smith</h3>\n <p>Cardiologist</p>\n <div class=\"rating\">★★★★★</div>\n </div>\n <!-- More doctor cards -->\n </div>\n </div>\n </section>\n\n <section id=\"booking\">\n <h2>Book Your Appointment</h2>\n <div class=\"booking-container\">\n <div class=\"calendar\"></div>\n <div class=\"time-slots\">\n <h3>Available Times</h3>\n <div class=\"slot-grid\"></div>\n </div>\n </div>\n </section>\n\n <section id=\"testimonials\">\n <h2>Patient Testimonials</h2>\n <div class=\"testimonial-grid\">\n <div class=\"testimonial\">\n <p>\"Excellent service! Very easy to book appointments.\"</p>\n <cite>- John D.</cite>\n </div>\n <!-- More testimonials -->\n </div>\n </section>\n</main>\n\n<footer>\n <div class=\"footer-content\">\n <div class=\"footer-section\">\n <h3>DocCare</h3>\n <p>Modern healthcare appointments made simple</p>\n </div>\n <div class=\"footer-section\">\n <h3>Quick Links</h3>\n <ul>\n <li><a href=\"#about\">About</a></li>\n <li><a href=\"#contact\">Contact</a></li>\n <li><a href=\"#privacy\">Privacy Policy</a></li>\n </ul>\n </div>\n </div>\n</footer>\n\n---style.css---\n:root {\n --primary: #2563eb;\n --secondary: #3b82f6;\n --background: #ffffff;\n --text: #1f2937;\n --accent: #dbeafe;\n --transition: all 0.3s ease;\n}\n\n[data-theme=\"dark\"] {\n --primary: #3b82f6;\n --secondary: #60a5fa;\n --background: #111827;\n --text: #f3f4f6;\n --accent: #1e3a8a;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: system-ui, -apple-system, sans-serif;\n background: var(--background);\n color: var(--text);\n line-height: 1.6;\n transition: var(--transition);\n}\n\nheader {\n position: fixed;\n width: 100%;\n top: 0;\n z-index: 100;\n background: var(--background);\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n\nnav {\n max-width: 1200px;\n margin: 0 auto;\n padding: 1rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.logo {\n font-size: 1.5rem;\n font-weight: bold;\n color: var(--primary);\n}\n\n.nav-links {\n display: flex;\n gap: 2rem;\n list-style: none;\n}\n\n.nav-links a {\n text-decoration: none;\n color: var(--text);\n transition: var(--transition);\n}\n\n.nav-links a:hover {\n color: var(--primary);\n}\n\n.btn-login {\n background: var(--primary);\n color: white !important;\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n}\n\n.theme-toggle {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1.2rem;\n}\n\n#hero {\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n background: linear-gradient(45deg, var(--primary), var(--secondary));\n}\n\n.hero-content {\n color: white;\n padding: 2rem;\n}\n\n.hero-content h1 {\n font-size: 3rem;\n margin-bottom: 1rem;\n}\n\n.cta-button {\n background: white;\n color: var(--primary);\n border: none;\n padding: 1rem 2rem;\n border-radius: 2rem;\n font-size: 1.1rem;\n cursor: pointer;\n transition: var(--transition);\n}\n\n.cta-button:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n/* Add more styles for other sections */\n\n@media (max-width: 768px) {\n .nav-links {\n display: none;\n }\n \n .mobile-menu {\n display: block;\n }\n \n .hero-content h1 {\n font-size: 2rem;\n }\n}\n\n---script.js---\n// Theme Toggle\nconst themeToggle = document.querySelector('.theme-toggle');\nconst prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');\n\nfunction setTheme(theme) {\n document.documentElement.setAttribute('data-theme', theme);\n localStorage.setItem('theme', theme);\n}\n\nthemeToggle.addEventListener('click', () => {\n const currentTheme = document.documentElement.getAttribute('data-theme');\n setTheme(currentTheme === 'dark' ? 'light' : 'dark');\n});\n\n// Initialize theme\nconst savedTheme = localStorage.getItem('theme');\nif (savedTheme) {\n setTheme(savedTheme);\n} else {\n setTheme(prefersDarkScheme.matches ? 'dark' : 'light');\n}\n\n// Mobile Menu\nconst mobileMenu = document.querySelector('.mobile-menu');\nconst navLinks = document.querySelector('.nav-links');\n\nmobileMenu.addEventListener('click', () => {\n navLinks.classList.toggle('active');\n});\n\n// Carousel\nlet currentSlide = 0;\nconst track = document.querySelector('.carousel-track');\nconst slides = document.querySelectorAll('.doctor-card');\n\nfunction updateCarousel() {\n track.style.transform = `translateX(-${currentSlide * 100}%)`;\n}\n\nsetInterval(() => {\n currentSlide = (currentSlide + 1) % slides.length;\n updateCarousel();\n}, 5000);\n\n// Calendar\nconst calendar = document.querySelector('.calendar');\nconst slotGrid = document.querySelector('.slot-grid');\n\nfunction generateCalendar() {\n // Calendar generation logic here\n}\n\nfunction generateTimeSlots() {\n // Time slot generation logic here\n}\n\ngenerateCalendar();\ngenerateTimeSlots();\n\n---end---\n\nThis implementation provides a modern, accessible doctor appointment website with a clean design and smooth interactions. The site features a dark/light mode toggle, responsive design, and interactive elements for appointment booking. The CSS includes modern features like CSS variables for theming and smooth transitions. The JavaScript handles theme switching, mobile menu functionality, and carousel automation.\n\nNote that this is a simplified version - you'd want to add more robust error handling, form validation, and additional interactive features for a production environment. The calendar and time slot generation functions would need to be implemented based on your specific requirements."
+ }
+ ],
+ "stop_reason": "end_turn",
+ "stop_sequence": null,
+ "usage": {
+ "input_tokens": 793,
+ "cache_creation_input_tokens": 0,
+ "cache_read_input_tokens": 0,
+ "output_tokens": 2341
+ }
+}
\ No newline at end of file
diff --git a/readme.scroll b/readme.scroll
new file mode 100644
index 0000000..760bb34
--- /dev/null
+++ b/readme.scroll
@@ -0,0 +1,2 @@
+# doccare.scroll.pub
+Website generated by Claude from prompt: Generate a full-stack MERN (MongoDB, Express, React, Node.js) application for a modern Doctor's Appointment website with the following features, using Vite for the frontend:Frontend Modern UI/UX Design: Support light and dark modes with a toggle switch. Responsive design for mobile, tablet, and desktop compatibility. Smooth animations and transitions (e.g., a carousel for showcasing doctors or testimonials). Pages: Home Page: Modern layout with a carousel showcasing featured doctors or services, a call-to-action section, and customer testimonials. Login/Sign-up Page: Secure authentication using JWT. User Dashboard: Displays upcoming appointments, doctor recommendations, and personal profiles. Search Page: Search doctors by specialty, location, availability, and ratings. Appointment Booking Page: Interactive calendar for slot selection and booking confirmation. Frontend Framework: Use React for the frontend with Vite for faster development and optimized production builds. Use Tailwind CSS for clean, modern, and customizable styling. Implement routing using react-router-dom. Backend Node.js with Express: RESTful APIs for user authentication, appointment management, and doctor data retrieval. Secure routes using JWT for authentication and role-based access control (e.g., admin vs. user). Database: Use MongoDB to store data: Users: Name, email, password (hashed), appointments, and preferences. Doctors: Name, specialty, ratings, availability, and location. Appointments: User ID, doctor ID, date, time, and status. Prepopulate the database with random doctor profiles (e.g., 20 entries). Deployment Frontend: Deploy the frontend on Vercel or GitHub Pages (using vite.config.js adjustments for relative paths). Backend: Deploy the backend on platforms like Render, Vercel, or AWS Lambda. Use .env files to manage sensitive environment variables (e.g., MongoDB URI, JWT secret). Additional Features Dark/Light Mode: Implement a toggle switch with local storage to save user preferences. SEO Optimizations: Use meta tags and dynamic routing for better search engine visibility. Sample Data: Create a JSON file for the prepopulated doctor database with fields: Name, Specialty, Availability (dates/times), Ratings (1-5 stars), and Location. Interactive Components: Use libraries like react-calendar or fullcalendar for appointment selection. Add animated modals for login, registration, and booking confirmation.
\ No newline at end of file
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..e273ac2
--- /dev/null
+++ b/script.js
@@ -0,0 +1,58 @@
+// Theme Toggle
+const themeToggle = document.querySelector('.theme-toggle');
+const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');
+
+function setTheme(theme) {
+ document.documentElement.setAttribute('data-theme', theme);
+ localStorage.setItem('theme', theme);
+}
+
+themeToggle.addEventListener('click', () => {
+ const currentTheme = document.documentElement.getAttribute('data-theme');
+ setTheme(currentTheme === 'dark' ? 'light' : 'dark');
+});
+
+// Initialize theme
+const savedTheme = localStorage.getItem('theme');
+if (savedTheme) {
+ setTheme(savedTheme);
+} else {
+ setTheme(prefersDarkScheme.matches ? 'dark' : 'light');
+}
+
+// Mobile Menu
+const mobileMenu = document.querySelector('.mobile-menu');
+const navLinks = document.querySelector('.nav-links');
+
+mobileMenu.addEventListener('click', () => {
+ navLinks.classList.toggle('active');
+});
+
+// Carousel
+let currentSlide = 0;
+const track = document.querySelector('.carousel-track');
+const slides = document.querySelectorAll('.doctor-card');
+
+function updateCarousel() {
+ track.style.transform = `translateX(-${currentSlide * 100}%)`;
+}
+
+setInterval(() => {
+ currentSlide = (currentSlide + 1) % slides.length;
+ updateCarousel();
+}, 5000);
+
+// Calendar
+const calendar = document.querySelector('.calendar');
+const slotGrid = document.querySelector('.slot-grid');
+
+function generateCalendar() {
+ // Calendar generation logic here
+}
+
+function generateTimeSlots() {
+ // Time slot generation logic here
+}
+
+generateCalendar();
+generateTimeSlots();
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..ecbd86b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,135 @@
+:root {
+ --primary: #2563eb;
+ --secondary: #3b82f6;
+ --background: #ffffff;
+ --text: #1f2937;
+ --accent: #dbeafe;
+ --transition: all 0.3s ease;
+}
+
+[data-theme="dark"] {
+ --primary: #3b82f6;
+ --secondary: #60a5fa;
+ --background: #111827;
+ --text: #f3f4f6;
+ --accent: #1e3a8a;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: system-ui, -apple-system, sans-serif;
+ background: var(--background);
+ color: var(--text);
+ line-height: 1.6;
+ transition: var(--transition);
+}
+
+header {
+ position: fixed;
+ width: 100%;
+ top: 0;
+ z-index: 100;
+ background: var(--background);
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+}
+
+nav {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 1rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.logo {
+ font-size: 1.5rem;
+ font-weight: bold;
+ color: var(--primary);
+}
+
+.nav-links {
+ display: flex;
+ gap: 2rem;
+ list-style: none;
+}
+
+.nav-links a {
+ text-decoration: none;
+ color: var(--text);
+ transition: var(--transition);
+}
+
+.nav-links a:hover {
+ color: var(--primary);
+}
+
+.btn-login {
+ background: var(--primary);
+ color: white !important;
+ padding: 0.5rem 1rem;
+ border-radius: 0.5rem;
+}
+
+.theme-toggle {
+ background: none;
+ border: none;
+ cursor: pointer;
+ font-size: 1.2rem;
+}
+
+#hero {
+ height: 100vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ background: linear-gradient(45deg, var(--primary), var(--secondary));
+}
+
+.hero-content {
+ color: white;
+ padding: 2rem;
+}
+
+.hero-content h1 {
+ font-size: 3rem;
+ margin-bottom: 1rem;
+}
+
+.cta-button {
+ background: white;
+ color: var(--primary);
+ border: none;
+ padding: 1rem 2rem;
+ border-radius: 2rem;
+ font-size: 1.1rem;
+ cursor: pointer;
+ transition: var(--transition);
+}
+
+.cta-button:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+}
+
+/* Add more styles for other sections */
+
+@media (max-width: 768px) {
+ .nav-links {
+ display: none;
+ }
+
+ .mobile-menu {
+ display: block;
+ }
+
+ .hero-content h1 {
+ font-size: 2rem;
+ }
+}