Artemis now offers Participate Energy Prepaid Lease.
Learn more →

Artemis Privacy Policy

Effective Date: January 20, 2025

This Privacy Policy explains how Artemis, a product of Monalee Inc. (“Artemis,” “we,” “our,” or “us”), collects, uses, and shares information when you visit our website, use our platform, or interact with us.

By accessing Artemis or using our services, you agree to the terms outlined in this Privacy Policy.

1. Information We Collect

We collect information to operate effectively and provide the best experience. We may collect:

Personal Information

  • Name, email address, company name, phone number
  • Login credentials and account profile details
  • Billing and payment details (if applicable)

Usage Data

  • Pages visited, actions taken, time on site, and browser/device type
  • IP address, geolocation (where allowed), and session data

Customer Data

  • When you use Artemis to generate proposals, we collect system design data, property addresses, utility data, and any financing selections made.

Communications

  • If you contact us or participate in surveys or demos, we may store your messages, feedback, and contact details.

2. How We Use Your Information

We use your information to:

  • Provide and improve the Artemis platform and services
  • Personalize your user experience
  • Enable proposal generation, design previews, and financing comparisons
  • Process payments and manage subscriptions
  • Communicate with you about updates, support, and offers
  • Monitor system performance, detect fraud, and enforce our terms

3. Sharing Your Information

We do not sell your personal data. We may share information with:

  • Trusted service providers who help operate Artemis (e.g., hosting, analytics, payment processors)
  • Financing partners (e.g., Sungage, GoodLeap) when proposals include financing options
  • Legal authorities if required by law or to protect our rights and users

We may share aggregated or anonymized data for research, marketing, or benchmarking purposes — but this cannot be used to identify individuals or companies.

4. Data Security

We implement technical and organizational safeguards to protect your information. While no system is 100% secure, we follow industry best practices to prevent unauthorized access, disclosure, or loss.

5. Data Retention

We retain your data only as long as necessary to provide our services or as required by law. You may request deletion of your data by contacting us (see Section 9).

6. Your Rights & Choices

Depending on your location, you may have rights to:

  • Access the information we hold about you
  • Request correction or deletion of your personal data
  • Opt out of marketing communications at any time
  • Restrict or object to certain data processing

To exercise these rights, please contact us at privacy@artemis.solar.

7. Cookies & Tracking Technologies

We use cookies and similar technologies to:

  • Understand site usage and improve our services
  • Remember your preferences and login state
  • Deliver relevant ads and measure campaign performance

You can manage your cookie preferences through your browser settings.

8. Third-Party Links

Our platform may contain links to third-party tools, websites, or partners. We are not responsible for the privacy practices of those third parties.

9. Contact Us

If you have any questions or concerns about this Privacy Policy, contact:

Monalee Inc.
5325 Elkhorn Blvd PMB 7028
Sacramento, CA 95842
Email: privacy@artemis.solar

10. Updates to This Policy

We may update this Privacy Policy periodically. Changes will be posted here with a revised “Effective Date.” Your continued use of Artemis means you accept those updates.

// Initialize Lenis const lenis = new Lenis({ lerp: 0.1, }); // Listen for the scroll event and log the event data lenis.on(‘scroll’, (e) => { console.log(e); }); // Use requestAnimationFrame to continuously update the scroll function raf(time) { lenis.raf(time); requestAnimationFrame(raf); } requestAnimationFrame(raf); gsap.registerPlugin(ScrollTrigger); const splitTypes = document.querySelectorAll(‘.scroll-highlight’); splitTypes.forEach((char, i) => { const text = new SplitType(char, { types: [‘chars’, ‘words’] }); gsap.from(text.chars, { scrollTrigger: { trigger: char, start: ‘top 50%’, end: ‘top 10%’, scrub: 1, }, opacity: 0.2, stagger: 0.1, }); }); new WordPlay({ className: “h-2”, // the text element mode: “letter”, // choose between letter or word offset: 20, // offset if revealed by scroll speed: 0.7, delay: 0.015, // stagger delay }); .skip-link { position: absolute; top: -100px; left: 0; background: #000; color: white; padding: 10px 15px; z-index: 1000; text-decoration: none; } .skip-link:focus { top: 10px; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } document.addEventListener(“DOMContentLoaded”, function () { const page = document.querySelector(“.page-container”); if (!page) { console.log(“No .page-container found”); return; } document.addEventListener(“click”, function (event) { const t1 = event.target.closest(“.link-trigger-1”); const t2 = event.target.closest(“.link-trigger-2”); // Click inside link-trigger-1 if (t1) { console.log(“Clicked link-trigger-1 → overflow: clip”); page.style.overflow = “clip”; // if this does nothing in your browser, use “hidden” } // Click inside link-trigger-2 if (t2) { console.log(“Clicked link-trigger-2 → overflow: visible”); page.style.overflow = “visible”; // or “auto”/”hidden” depending on what you want } }); }); (function() { // Configuration var config = { autoplayDelay: 2300, // Time between auto-advances (ms) transitionSpeed: 600 // Slide transition duration (ms) }; // State var isTransitioning = false; var autoplayInterval = null; var track = null; var slides = []; var slideWidth = 0; var currentOffset = 0; var leftBuffer = 2; // Initialize function init() { track = document.getElementById(‘reviewBadgeTrack’); if (!track) return; track.style.visibility = ‘hidden’; slides = Array.from(track.querySelectorAll(‘.review-badge-carousel__slide’)); if (slides.length === 0) { track.style.visibility = ‘visible’; return; } calculateDimensions(); for (var i = 0; i < leftBuffer; i++) { var lastSlide = slides.pop(); slides.unshift(lastSlide); track.insertBefore(lastSlide, track.firstChild); } centerCurrentSlide(false); updateActiveStates(); requestAnimationFrame(function() { track.style.visibility = 'visible'; startAutoplay(); }); window.addEventListener('resize', handleResize); track.addEventListener('click', handleSlideClick); track.parentElement.addEventListener('mouseenter', stopAutoplay); track.parentElement.addEventListener('mouseleave', startAutoplay); } function calculateDimensions() { if (slides.length === 0) return; var firstSlide = slides[0]; var style = getComputedStyle(firstSlide); var width = firstSlide.offsetWidth; var marginLeft = parseFloat(style.marginLeft); var marginRight = parseFloat(style.marginRight); slideWidth = width + marginLeft + marginRight; } function centerCurrentSlide(animate) { var viewportCenter = window.innerWidth / 2; var slideCenter = slideWidth / 2; currentOffset = viewportCenter – slideCenter – (leftBuffer * slideWidth); if (animate) { isTransitioning = true; track.style.transition = 'transform ' + config.transitionSpeed + 'ms ease'; } else { track.style.transition = 'none'; track.offsetHeight; // Force reflow } track.style.transform = 'translateX(' + currentOffset + 'px)'; } function updateActiveStates() { slides.forEach(function(slide, i) { var isVisible = i <= (leftBuffer + 2); if (i === leftBuffer) { slide.classList.add('active'); } else { slide.classList.remove('active'); } slide.style.visibility = isVisible ? 'visible' : 'hidden'; }); } function nextSlide() { if (isTransitioning || slides.length === 0) return; isTransitioning = true; currentOffset -= slideWidth; track.style.transition = 'transform ' + config.transitionSpeed + 'ms ease'; track.style.transform = 'translateX(' + currentOffset + 'px)'; setTimeout(handleTransitionEnd, config.transitionSpeed); } function handleTransitionEnd() { var firstSlide = slides.shift(); slides.push(firstSlide); track.appendChild(firstSlide); currentOffset += slideWidth; track.style.transition = 'none'; track.offsetHeight; // Force reflow track.style.transform = 'translateX(' + currentOffset + 'px)'; updateActiveStates(); isTransitioning = false; } function prevSlide() { if (isTransitioning || slides.length === 0) return; isTransitioning = true; var lastSlide = slides.pop(); slides.unshift(lastSlide); track.insertBefore(lastSlide, track.firstChild); currentOffset -= slideWidth; track.style.transition = 'none'; track.offsetHeight; // Force reflow track.style.transform = 'translateX(' + currentOffset + 'px)'; updateActiveStates(); currentOffset += slideWidth; requestAnimationFrame(function() { track.style.transition = 'transform ' + config.transitionSpeed + 'ms ease'; track.style.transform = 'translateX(' + currentOffset + 'px)'; setTimeout(function() { isTransitioning = false; }, config.transitionSpeed); }); } function startAutoplay() { stopAutoplay(); autoplayInterval = setInterval(nextSlide, config.autoplayDelay); } function stopAutoplay() { if (autoplayInterval) { clearInterval(autoplayInterval); autoplayInterval = null; } } function handleSlideClick(e) { var slide = e.target.closest('.review-badge-carousel__slide'); if (!slide || isTransitioning) return; var clickedIndex = slides.indexOf(slide); if (clickedIndex === leftBuffer) return; if (clickedIndex === leftBuffer + 1) { nextSlide(); } else if (clickedIndex === leftBuffer – 1) { prevSlide(); } } var resizeTimeout; function handleResize() { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(function() { calculateDimensions(); centerCurrentSlide(false); }, 100); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); function getUrlParams() { const params = new URLSearchParams(window.location.search); let utmParams = {}; const list = [‘utm_source’, ‘utm_medium’, ‘utm_campaign’, ‘utm_term’, ‘utm_content’]; list.forEach(param => { if (params.has(param)) { const val = params.get(param); utmParams[param] = val; document.cookie = `${param}=${val}; path=/;`; } }); return utmParams; } function getUtmFromCookies() { const cookies = document.cookie.split(‘; ‘).reduce((acc, cookie) => { const [key, value] = cookie.split(‘=’); acc[key] = value; return acc; }, {}); let utmParams = {}; const list = [‘utm_source’, ‘utm_medium’, ‘utm_campaign’, ‘utm_term’, ‘utm_content’]; list.forEach(param => { if (cookies[param]) { utmParams[param] = cookies[param]; } }); return utmParams; } function fillUtmFields() { let utmData = getUrlParams(); if (Object.keys(utmData).length === 0) { utmData = getUtmFromCookies(); } Object.keys(utmData).forEach(key => { const input = document.querySelector(`input[name=”${key}”]`); if (input) { input.value = utmData[key]; } }); } document.addEventListener(“DOMContentLoaded”, fillUtmFields);