diff --git a/Makefile b/Makefile
index 629cbdf56..eb7f37705 100644
--- a/Makefile
+++ b/Makefile
@@ -22,9 +22,9 @@ unlink:
.PHONY: lint
lint:
- npm --prefix es-ds-styles run lint
- npm --prefix es-ds-components run lint
- npm --prefix es-ds-docs run lint
+ npm --prefix es-ds-styles run lint || { echo "Linting failed. Forgot to run 'make format'?"; exit 1; }
+ npm --prefix es-ds-components run lint || { echo "Linting failed. Forgot to run 'make format'?"; exit 1; }
+ npm --prefix es-ds-docs run lint || { echo "Linting failed. Forgot to run 'make format'?"; exit 1; }
.PHONY: format
format:
diff --git a/es-ds-components/components/es-footer.vue b/es-ds-components/components/es-footer.vue
new file mode 100644
index 000000000..5620d1a0f
--- /dev/null
+++ b/es-ds-components/components/es-footer.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
diff --git a/es-ds-components/components/es-nav-bar-account-menu.vue b/es-ds-components/components/es-nav-bar-account-menu.vue
new file mode 100644
index 000000000..6b4540be6
--- /dev/null
+++ b/es-ds-components/components/es-nav-bar-account-menu.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+ {{ loggedOut.menuButtonText }}
+
+
+
+
+
+
diff --git a/es-ds-components/components/es-nav-bar-featured-article.vue b/es-ds-components/components/es-nav-bar-featured-article.vue
new file mode 100644
index 000000000..316cc5e91
--- /dev/null
+++ b/es-ds-components/components/es-nav-bar-featured-article.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+ {{ eyebrow }}
+
+
+
+ {{ name }}
+
+
+
+
diff --git a/es-ds-components/components/es-nav-bar-link.vue b/es-ds-components/components/es-nav-bar-link.vue
new file mode 100644
index 000000000..dd1e2e578
--- /dev/null
+++ b/es-ds-components/components/es-nav-bar-link.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/es-ds-components/components/es-nav-bar-product-menu.vue b/es-ds-components/components/es-nav-bar-product-menu.vue
new file mode 100644
index 000000000..69959c661
--- /dev/null
+++ b/es-ds-components/components/es-nav-bar-product-menu.vue
@@ -0,0 +1,215 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/es-ds-components/components/es-nav-bar-top-level-menu.vue b/es-ds-components/components/es-nav-bar-top-level-menu.vue
new file mode 100644
index 000000000..a8888d4ec
--- /dev/null
+++ b/es-ds-components/components/es-nav-bar-top-level-menu.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
diff --git a/es-ds-components/components/es-nav-bar-topic-menu.vue b/es-ds-components/components/es-nav-bar-topic-menu.vue
new file mode 100644
index 000000000..9ae4bd0ae
--- /dev/null
+++ b/es-ds-components/components/es-nav-bar-topic-menu.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/es-ds-components/components/es-nav-bar.vue b/es-ds-components/components/es-nav-bar.vue
new file mode 100644
index 000000000..2412ba7ce
--- /dev/null
+++ b/es-ds-components/components/es-nav-bar.vue
@@ -0,0 +1,395 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/es-ds-components/utils/get-es-footer-content.js b/es-ds-components/utils/get-es-footer-content.js
new file mode 100644
index 000000000..2c790a5bb
--- /dev/null
+++ b/es-ds-components/utils/get-es-footer-content.js
@@ -0,0 +1,90 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable no-unused-vars */
+// keeping COMMUNITY_SOLAR_DOMAIN, HEAT_PUMPS_DOMAIN and NEWS_DOMAIN for now to keep function argument order intact
+// and to minimize breaking change to consuming applications, but they are now deprecated in this function
+export default (
+ ES_DOMAIN = process.env.ES_DOMAIN || 'https://www.energysage.com',
+ NEWS_DOMAIN = process.env.NEWS_DOMAIN || 'https://www.energysage.com',
+ COMMUNITY_SOLAR_DOMAIN = process.env.COMMUNITY_SOLAR_DOMAIN || 'https://communitysolar.energysage.com',
+ HEAT_PUMPS_DOMAIN = process.env.HEAT_PUMPS_DOMAIN || 'https://heatpumps.energysage.com',
+) => ({
+ banner: {
+ headline: 'Make an impact.',
+ subHeadline: "It's never been easier.",
+ body: `We developed our one-of-a-kind marketplace with funding from the U.S. Department of Energy to make
+ clean home energy solutions affordable and accessible to all.`,
+ },
+ home: {
+ name: 'EnergySage',
+ link: ES_DOMAIN,
+ },
+ columns: [
+ // TODO: remove new tab option once other verticals adopt global nav
+ {
+ title: 'Our offerings',
+ links: [
+ { text: 'Home solar', url: `${ES_DOMAIN}/shop/home-solar/` },
+ { text: 'Community solar', url: `${ES_DOMAIN}/shop/community-solar/` },
+ { text: 'Heating & cooling', url: `${ES_DOMAIN}/shop/heat-pumps/` },
+ { text: 'Backup power', url: `${ES_DOMAIN}/energy-storage/` },
+ { text: 'EV charging', url: `${ES_DOMAIN}/ev-charging/` },
+ { text: 'For your business', url: `${ES_DOMAIN}/businesses/` },
+ { text: 'Other energy options', url: `${ES_DOMAIN}/other-clean-options/` },
+ ],
+ },
+ {
+ title: 'Resources',
+ links: [
+ { text: 'Solar calculator', url: `${ES_DOMAIN}/solar/calculator/` },
+ { text: 'Solar rebates', url: `${ES_DOMAIN}/market/equipment-rebates/` },
+ { text: 'News', url: `${ES_DOMAIN}/blog/` },
+ { text: 'Home solar guide', url: `${ES_DOMAIN}/shop/home-solar/` },
+ { text: 'Market intel', url: `${ES_DOMAIN}/data/` },
+ { text: 'Refer a friend', url: `${ES_DOMAIN}/refer-a-friend/` },
+ ],
+ },
+ {
+ title: 'About us',
+ links: [
+ { text: 'Mission & values', url: `${ES_DOMAIN}/about-us/company/` },
+ { text: 'How it works', url: `${ES_DOMAIN}/shop/home-solar/` },
+ { text: 'Careers', url: `${ES_DOMAIN}/about-us/careers/` },
+ { text: 'Contact us', url: `${ES_DOMAIN}/contact/` },
+ { text: 'Editorial guidelines', url: `${ES_DOMAIN}/editorial-guidelines/` },
+ ],
+ },
+ {
+ title: 'Work with us',
+ links: [
+ { text: 'Solar & HVAC installers', url: `${ES_DOMAIN}/installers/` },
+ { text: 'Corporate partnerships', url: `${ES_DOMAIN}/partners/corporations` },
+ { text: 'Community programs', url: `${ES_DOMAIN}/partners/non-profits` },
+ { text: 'Utility programs', url: `${ES_DOMAIN}/partners/utilities` },
+ { text: 'Others', url: `${ES_DOMAIN}/partners/` },
+ ],
+ },
+ ],
+ socialLinks: [
+ { text: 'Facebook', url: 'https://www.facebook.com/EnergySage', icon: 'icon-facebook' },
+ { text: 'LinkedIn', url: 'https://www.linkedin.com/company/energysage/', icon: 'icon-linkedin' },
+ { text: 'Instagram', url: 'https://www.instagram.com/energysage_official/', icon: 'icon-instagram' },
+ { text: 'X', url: 'https://X.com/energysage', icon: 'icon-twitter' },
+ { text: 'YouTube', url: 'https://www.youtube.com/c/EnergySage', icon: 'icon-youtube' },
+ ],
+ legalLinks: [
+ { text: 'Terms of use', url: `${ES_DOMAIN}/terms-of-use/` },
+ { text: 'Privacy policy', url: `${ES_DOMAIN}/privacy-policy/` },
+ { text: 'Mobile terms of use', url: `${ES_DOMAIN}/mobile-terms-of-use/` },
+ { text: 'Non-discrimination policy', url: `${ES_DOMAIN}/nondiscrimination/` },
+ ],
+ copyrightText: '© Copyright 2009-{currentYear} EnergySage, Inc. All rights reserved.',
+ trademarkText: `ENERGYSAGE is a registered trademark and the EnergySage logo is a trademark of EnergySage, Inc.
+ Other trademarks are the property of either EnergySage, Inc. or our licensors and are used with permission.`,
+ departmentOfEnergy: {
+ learnMore: {
+ link: 'https://www.energy.gov/eere/solar/articles/eere-success-story-doe-funding-helps-build-one-stop-shop-rooftop-pv-systems',
+ text: 'Learn more about our success working with the U.S. Department of Energy.',
+ },
+ logoUrl: 'https://www-static.energysage.com/static/img/doe/doe-logo-179.943fe6467b04.png',
+ },
+});
diff --git a/es-ds-components/utils/get-es-nav-bar-account-content.js b/es-ds-components/utils/get-es-nav-bar-account-content.js
new file mode 100644
index 000000000..12945c7b3
--- /dev/null
+++ b/es-ds-components/utils/get-es-nav-bar-account-content.js
@@ -0,0 +1,55 @@
+// rooftop account links
+export default (
+ ES_DOMAIN = process.env.ES_DOMAIN || 'https://www.energysage.com',
+ ACCOUNTS_DOMAIN = process.env.ACCOUNTS_DOMAIN || 'https://accounts.energysage.com',
+ REGISTER_LINK = process.env.REGISTER_LINK || `${ACCOUNTS_DOMAIN}/register/?next=${ES_DOMAIN}/register-thanks/`,
+) => ({
+ mobileAccountButtonAltText: 'Open account menu',
+ loggedIn: {
+ items: [
+ {
+ name: 'My profile',
+ link: `${ES_DOMAIN}/profile/`,
+ },
+ {
+ name: 'My quotes',
+ link: `${ES_DOMAIN}/your-marketplace/`,
+ },
+ {
+ name: 'My messages',
+ link: `${ES_DOMAIN}/message/`,
+ },
+ {
+ name: 'My project preferences',
+ link: `${ES_DOMAIN}/market/solarpv/update/`,
+ },
+ {
+ name: 'Account settings',
+ link: `${ES_DOMAIN}/account-settings/router/`,
+ },
+ {
+ name: 'How it works',
+ link: `${ES_DOMAIN}/market-process/`,
+ },
+ {
+ name: 'Write a review',
+ link: `${ES_DOMAIN}/share-your-experience/`,
+ },
+ {
+ name: 'Sign out',
+ link: `${ES_DOMAIN}/logout/`,
+ },
+ ],
+ },
+ loggedOut: {
+ menuButtonText: 'Sign in',
+ signIn: {
+ name: 'Sign in',
+ link: `${ES_DOMAIN}/login/`,
+ },
+ createAccount: {
+ name: 'Create an account',
+ link: REGISTER_LINK,
+ },
+ },
+});
diff --git a/es-ds-components/utils/get-es-nav-bar-global-content.js b/es-ds-components/utils/get-es-nav-bar-global-content.js
new file mode 100644
index 000000000..171d56514
--- /dev/null
+++ b/es-ds-components/utils/get-es-nav-bar-global-content.js
@@ -0,0 +1,474 @@
+/* eslint-disable no-unused-vars */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+const NAV_BAR_ICONS = {
+ CALCULATOR: 'calculator',
+ ES_LEAF: 'es-leaf',
+ LIGHT_BULB: 'light-bulb',
+};
+
+export default (
+ ES_DOMAIN = process.env.ES_DOMAIN || 'https://www.energysage.com',
+ // exposed separately from ES_DOMAIN in case we want to use prod for images in local/dev
+ ES_IMAGE_DOMAIN = process.env.ES_IMAGE_DOMAIN || 'https://www.energysage.com',
+ // keeping NEWS_DOMAIN to minimize breaking change, but it is deprecated
+ NEWS_DOMAIN = process.env.NEWS_DOMAIN || 'https://www.energysage.com',
+ COMMUNITY_SOLAR_DOMAIN = process.env.COMMUNITY_SOLAR_DOMAIN || 'https://communitysolar.energysage.com',
+ HEAT_PUMPS_DOMAIN = process.env.HEAT_PUMPS_DOMAIN || 'https://heatpumps.energysage.com',
+ EV_RAIVEN_DOMAIN = 'https://shop.energysage.com/',
+) => ({
+ home: {
+ name: 'EnergySage',
+ link: ES_DOMAIN,
+ },
+ mainMenuText: 'Main menu',
+ mobileCloseButtonAltText: 'Close',
+ mobileNavButtonAltText: 'Open navigation menu',
+ seeAllText: 'See all',
+ topLevelMenus: [
+ {
+ name: 'Tips & guides',
+ subHeading: 'Learn from experts',
+ icon: NAV_BAR_ICONS.LIGHT_BULB,
+ topics: [
+ {
+ name: 'Solar',
+ subtopics: [
+ {
+ name: 'Home solar guide',
+ link: `${ES_DOMAIN}/solar/`,
+ },
+ {
+ name: 'Community solar guide',
+ link: `${ES_DOMAIN}/community-solar/`,
+ },
+ {
+ name: 'Best solar panels',
+ link: `${ES_DOMAIN}/solar/best-solar-panels-complete-ranking/`,
+ },
+ {
+ name: 'How much do solar panels cost?',
+ link: `${ES_DOMAIN}/local-data/solar-panel-cost/`,
+ },
+ ],
+ },
+ {
+ name: 'Backup power',
+ subtopics: [
+ {
+ name: 'Backup power guide',
+ link: `${ES_DOMAIN}/energy-storage/`,
+ },
+ {
+ name: 'Best home batteries',
+ link: `${ES_DOMAIN}/energy-storage/best-home-batteries/`,
+ },
+ {
+ name: 'Home batteries vs. generators',
+ // eslint-disable-next-line max-len
+ link: `${ES_DOMAIN}/energy-storage/battery-backup-power-vs-generators-which-is-right-for-you/`,
+ },
+ ],
+ },
+ {
+ name: 'Heating & cooling',
+ subtopics: [
+ {
+ name: 'Heat pump guide',
+ link: `${ES_DOMAIN}/heat-pumps/`,
+ },
+ {
+ name: 'How much do heat pumps cost?',
+ // eslint-disable-next-line max-len
+ link: `${ES_DOMAIN}/heat-pumps/costs-and-benefits-air-source-heat-pumps/`,
+ },
+ {
+ name: 'How do heat pumps work?',
+ link: `${ES_DOMAIN}/heat-pumps/how-do-heat-pumps-work/`,
+ },
+ ],
+ },
+ {
+ name: 'Electric vehicles',
+ subtopics: [
+ {
+ name: 'EV charging guide',
+ link: `${ES_DOMAIN}/ev-charging/`,
+ },
+ {
+ name: 'Electric vehicles guide',
+ link: `${ES_DOMAIN}/electric-vehicles/`,
+ },
+ {
+ name: 'Best EV chargers',
+ link: `${ES_DOMAIN}/ev-charging/ev-charging-stations/`,
+ },
+ {
+ name: 'How much does it cost to charge an EV?',
+ link: `${ES_DOMAIN}/ev-charging/electric-vehicle-charging-cost/`,
+ },
+ ],
+ },
+ {
+ name: 'Smart home',
+ subtopics: [
+ {
+ name: 'Home electricity guide',
+ link: `${ES_DOMAIN}/electricity/`,
+ },
+ {
+ name: 'Home energy management guide',
+ link: `${ES_DOMAIN}/energy-management/`,
+ },
+ {
+ name: 'Energy efficiency',
+ link: `${ES_DOMAIN}/energy-efficiency/`,
+ },
+ {
+ name: 'Best smart home gadgets',
+ link: `${ES_DOMAIN}/energy-products/`,
+ },
+ ],
+ },
+ {
+ name: 'For your business',
+ subtopics: [
+ {
+ name: 'Solar for businesses',
+ link: `${ES_DOMAIN}/business-solutions/commercial-solar-benefits/`,
+ },
+ {
+ name: 'Solar for nonprofit organizations',
+ link: `${ES_DOMAIN}/business-solutions/solar-nonprofit-benefits-financing/`,
+ },
+ {
+ name: 'Backup power for businesses',
+ link: `${ES_DOMAIN}/business-solutions/energy-storage-for-businesses/`,
+ },
+ ],
+ },
+ {
+ name: 'Clean energy financing',
+ subtopics: [
+ {
+ name: 'How to pay for solar',
+ link: `${ES_DOMAIN}/solar/how-to-pay-for-solar/`,
+ },
+ {
+ name: 'How to choose a solar loan',
+ link: `${ES_DOMAIN}/solar/solar-loans/`,
+ },
+ {
+ name: 'What to know about solar leases',
+ link: `${ES_DOMAIN}/solar/solar-leases/`,
+ },
+ {
+ name: 'Explore cost-saving clean energy incentives',
+ link: `${ES_DOMAIN}/shop/clean-energy-savings-and-tax-incentives/`,
+ },
+ ],
+ },
+ {
+ name: 'News',
+ subtopics: [
+ {
+ name: 'How long can you run your house on a Tesla Powerwall?',
+ // eslint-disable-next-line max-len
+ link: `${ES_DOMAIN}/energy-storage/tesla-powerwall-how-much-home-can-you-run-on-it-for-how-long/`,
+ },
+ {
+ name: 'How have solar panel cost and efficiency changed over time?',
+ link: `${ES_DOMAIN}/solar/solar-panel-efficiency-cost-over-time/`,
+ },
+ ],
+ link: `${ES_DOMAIN}/blog/`,
+ },
+ ],
+ featuredArticle: {
+ linkName: "Editors' pick",
+ linkUrl: `${ES_DOMAIN}/solar/are-solar-panels-worth-it/`,
+ lede: 'Are solar panels worth it?',
+ image500: `${ES_IMAGE_DOMAIN}/static/img/navbar/articles/are-solar-panels-worth-it-500w.png`,
+ imageAlt: 'home with solar panels',
+ },
+ },
+ {
+ name: 'Solar calculator',
+ subHeading: 'Check your savings',
+ icon: NAV_BAR_ICONS.CALCULATOR,
+ link: `${ES_DOMAIN}/solar/calculator/`,
+ topics: [],
+ },
+ {
+ name: 'About us',
+ subHeading: 'Why EnergySage',
+ icon: NAV_BAR_ICONS.ES_LEAF,
+ topics: [
+ {
+ name: 'Our company',
+ subtopics: [
+ {
+ name: 'Mission & values',
+ link: `${ES_DOMAIN}/about-us/company/`,
+ },
+ {
+ name: 'How it works',
+ link: `${ES_DOMAIN}/shop/home-solar/`,
+ },
+ {
+ name: 'Our team',
+ link: `${ES_DOMAIN}/about-us/team/`,
+ },
+ {
+ name: 'Our Energy Advisors',
+ link: `${ES_DOMAIN}/energy-advisors/`,
+ },
+ {
+ name: 'Careers',
+ link: `${ES_DOMAIN}/about-us/careers/`,
+ },
+ ],
+ },
+ {
+ name: 'Our work',
+ subtopics: [
+ {
+ name: 'Market intel',
+ link: `${ES_DOMAIN}/data/`,
+ },
+ {
+ name: 'Editorial guidelines',
+ link: `${ES_DOMAIN}/editorial-guidelines/`,
+ },
+ {
+ name: 'Press',
+ link: `${ES_DOMAIN}/press/`,
+ },
+ ],
+ },
+ {
+ name: 'Work with us',
+ subtopics: [
+ {
+ name: 'Solar & HVAC installers',
+ link: `${ES_DOMAIN}/installers/`,
+ },
+ {
+ name: 'Corporate partnerships',
+ link: `${ES_DOMAIN}/partners/corporations`,
+ },
+ {
+ name: 'Community programs',
+ link: `${ES_DOMAIN}/partners/non-profits`,
+ },
+ {
+ name: 'Utility programs',
+ link: `${ES_DOMAIN}/partners/utilities`,
+ },
+ {
+ name: 'Others',
+ link: `${ES_DOMAIN}/partners/`,
+ },
+ ],
+ },
+ ],
+ featuredArticle: {
+ linkName: 'New research',
+ linkUrl: `${ES_DOMAIN}/press/energysage-marketplace-intel-report-18`,
+ lede: "EnergySage Intel's latest Solar & Storage Marketplace Report",
+ image500: `${ES_IMAGE_DOMAIN}/static/img/navbar/articles/latest-market-intel-500w.png`,
+ imageAlt: 'market intel report charts',
+ },
+ },
+ ],
+ products: [
+ {
+ name: 'Home solar',
+ link: `${ES_DOMAIN}/shop/home-solar/`,
+ topics: [
+ {
+ name: 'Rooftop solar',
+ subHeading: 'Install solar on your property',
+ link: `${ES_DOMAIN}/shop/home-solar/`,
+ showItemsOnMobile: false,
+ subtopics: [
+ {
+ name: 'Home solar guide',
+ link: `${ES_DOMAIN}/solar/`,
+ },
+ {
+ name: 'Solar calculator',
+ link: `${ES_DOMAIN}/solar/calculator/`,
+ },
+ {
+ name: 'Search local installers',
+ // eslint-disable-next-line max-len
+ link: `${ES_DOMAIN}/supplier/search?selected_facets=services:installers&selected_facets=technology_types:Solar%20PV`,
+ },
+ {
+ name: 'Financing',
+ link: `${ES_DOMAIN}/solar/financing/loan-providers/`,
+ },
+ {
+ name: 'Equipment rebates',
+ link: `${ES_DOMAIN}/promotions/`,
+ },
+ {
+ name: 'Compare solar panels',
+ link: `${ES_DOMAIN}/solar-panels/`,
+ },
+ {
+ name: 'Compare inverters',
+ link: `${ES_DOMAIN}/solar-inverters/`,
+ },
+ {
+ name: 'Solar incentives',
+ link: `${ES_DOMAIN}/local-data/solar-rebates-incentives/`,
+ },
+ {
+ name: 'Backup power guide',
+ link: `${ES_DOMAIN}/energy-storage/`,
+ },
+ {
+ name: 'Get personalized quotes',
+ link: `${ES_DOMAIN}/market/start/`,
+ emphasize: true,
+ },
+ ],
+ },
+ {
+ name: 'Community solar',
+ subHeading: 'Go solar with no equipment',
+ link: `${ES_DOMAIN}/shop/community-solar/`,
+ showItemsOnMobile: false,
+ subtopics: [
+ {
+ name: 'Community solar guide',
+ link: `${ES_DOMAIN}/community-solar/`,
+ },
+ {
+ name: 'Search solar farms',
+ link: `${COMMUNITY_SOLAR_DOMAIN}/projects`,
+ newTab: true,
+ emphasize: true,
+ },
+ ],
+ },
+ ],
+ featuredArticle: {
+ eyebrow: "Editors' pick",
+ link: `${ES_DOMAIN}/local-data/solar-panel-cost/`,
+ name: 'How much do solar panels cost?',
+ image500: `${ES_IMAGE_DOMAIN}/static/img/navbar/articles/solar-panel-cost-500w.png`,
+ imageAlt: 'home with solar panels and money',
+ },
+ },
+ {
+ name: 'Community solar',
+ link: `${ES_DOMAIN}/shop/community-solar/`,
+ items: [
+ {
+ name: 'Community solar',
+ link: `${ES_DOMAIN}/shop/community-solar/`,
+ },
+ {
+ name: 'Community solar guide',
+ link: `${ES_DOMAIN}/community-solar/`,
+ },
+ {
+ name: 'Search solar farms ',
+ link: `${COMMUNITY_SOLAR_DOMAIN}/projects`,
+ newTab: true,
+ emphasize: true,
+ },
+ ],
+ },
+ {
+ name: 'Heating & cooling',
+ link: `${ES_DOMAIN}/shop/heat-pumps/`,
+ items: [
+ {
+ name: 'Heating & cooling',
+ link: `${ES_DOMAIN}/shop/heat-pumps/`,
+ },
+ {
+ name: 'Heat pump guide',
+ link: `${ES_DOMAIN}/heat-pumps/`,
+ },
+ {
+ name: 'Heat pump incentives',
+ link: `${ES_DOMAIN}/heat-pumps/heat-pump-incentives/`,
+ },
+ {
+ name: 'Get personalized quotes',
+ link: `${ES_DOMAIN}/shop/heat-pumps/`,
+ newTab: true,
+ emphasize: true,
+ },
+ ],
+ },
+ {
+ name: 'Backup power',
+ link: `${ES_DOMAIN}/energy-storage/`,
+ items: [
+ {
+ name: 'Backup power guide',
+ link: `${ES_DOMAIN}/energy-storage/`,
+ },
+ {
+ name: 'Home battery incentives',
+ link: `${ES_DOMAIN}/energy-storage/benefits-of-storage/energy-storage-incentives/`,
+ },
+ {
+ name: 'Compare home batteries',
+ link: `${ES_DOMAIN}/solar-batteries/`,
+ },
+ {
+ name: 'Get quotes for solar + batteries',
+ link: `${ES_DOMAIN}/market/start/`,
+ emphasize: true,
+ },
+ ],
+ },
+ {
+ name: 'EV charging',
+ link: `${ES_DOMAIN}/ev-charging/`,
+ items: [
+ {
+ name: 'EV charging guide',
+ link: `${ES_DOMAIN}/ev-charging/`,
+ },
+ {
+ name: 'Electric vehicle guide',
+ link: `${ES_DOMAIN}/electric-vehicles/`,
+ },
+ {
+ name: 'Shop EV chargers',
+ link: `${EV_RAIVEN_DOMAIN}`,
+ emphasize: true,
+ },
+ ],
+ },
+ {
+ name: 'For your business',
+ link: `${ES_DOMAIN}/businesses/`,
+ items: [
+ {
+ name: 'For your business',
+ link: `${ES_DOMAIN}/businesses/`,
+ },
+ {
+ name: 'Solar for businesses',
+ link: `${ES_DOMAIN}/business-solutions/commercial-solar-benefits/`,
+ },
+ {
+ name: 'Solar for nonprofit organizations',
+ link: `${ES_DOMAIN}/business-solutions/solar-nonprofit-benefits-financing/`,
+ },
+ {
+ name: 'Energy storage for businesses',
+ link: `${ES_DOMAIN}/business-solutions/energy-storage-for-businesses/`,
+ },
+ ],
+ },
+ ],
+});
diff --git a/es-ds-docs/components/ds-es-logo.vue b/es-ds-docs/components/ds-es-logo.vue
new file mode 100644
index 000000000..f34029d32
--- /dev/null
+++ b/es-ds-docs/components/ds-es-logo.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
diff --git a/es-ds-docs/components/ds-organisms-list.vue b/es-ds-docs/components/ds-organisms-list.vue
index c84eda7a7..f50688cfd 100644
--- a/es-ds-docs/components/ds-organisms-list.vue
+++ b/es-ds-docs/components/ds-organisms-list.vue
@@ -9,6 +9,12 @@
File preview modal
+
+ Footer
+
+
+ Nav bar
+
Reviews.io card carousel
diff --git a/es-ds-docs/layouts/footer.vue b/es-ds-docs/layouts/footer.vue
new file mode 100644
index 000000000..e62bfa834
--- /dev/null
+++ b/es-ds-docs/layouts/footer.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/es-ds-docs/layouts/nav.vue b/es-ds-docs/layouts/nav.vue
new file mode 100644
index 000000000..097e5596b
--- /dev/null
+++ b/es-ds-docs/layouts/nav.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/es-ds-docs/pages/organisms/footer.vue b/es-ds-docs/pages/organisms/footer.vue
new file mode 100644
index 000000000..42d7b0d5c
--- /dev/null
+++ b/es-ds-docs/pages/organisms/footer.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
EsFooter component
+
The footer is a specialized component intended for use outside the normal content container. See below.
+
+
+
diff --git a/es-ds-docs/pages/organisms/nav-bar.vue b/es-ds-docs/pages/organisms/nav-bar.vue
new file mode 100644
index 000000000..43fa16d8e
--- /dev/null
+++ b/es-ds-docs/pages/organisms/nav-bar.vue
@@ -0,0 +1,51 @@
+
+
+
+ EsNavBar
+ The nav bar is a specialized component intended for use outside the normal content container. See above.
+
+
+ Sample content to increase page length; for testing the sticky nav bar.
+
+
+
+
+
+
+
+
+