Initial commit

This commit is contained in:
MassiveBox 2023-02-25 23:04:11 +01:00
commit c573b95984
36 changed files with 22555 additions and 0 deletions

20
.gitignore vendored Normal file
View File

@ -0,0 +1,20 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

5
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/

12
.idea/ecodash-website.iml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ecodash-website.iml" filepath="$PROJECT_DIR$/.idea/ecodash-website.iml" />
</modules>
</component>
</project>

15
docs/ezodash.md Normal file
View File

@ -0,0 +1,15 @@
---
unlisted: true
---
# 🍀 EZoDash - EcoDash simplified
EcoDash has the great strength of being widely compatible, but that comes at the cost of forcing our users to spend more time configurating their setup. It also forces users to use a compatibility layer - HomeAssistant - which standardizes the different home plugs into one simple language that EcoDash can understand. Running it represents a significant overhead for admins who are only using it for EcoDash - especially the ones running less capable devices.
Since most potential users of EcoDash don't have a smart plug and are already running Linux on their homeserver, we've thought of creating a much lighter compatibility layer for EcoDash which works with only a single type of smart plugs - one which is usually very cheap and completely cloud-free.
We've opted for Zigbee-compatible plugs such as [this one](https://www.aliexpress.com/item/1005002344798281.html). A smart plug and the [USB stick](https://www.aliexpress.com/w/wholesale-zigbee-usb-dongle.html) which is required to read and send data to it will cost only about ~€15.
EZoDash will be a component of EcoDash, not a separate project. EcoDash will still be compatible with HomeAssistant in order to support all different smart plug types.
EZoDash will be released before v1.0.

28
docs/index.md Normal file
View File

@ -0,0 +1,28 @@
---
sidebar_position: 0
---
# 📖 Introduction
Empower your end users with EcoDash - the accessible and user-friendly power usage monitoring tool. Our public dashboard provides clear and concise information about server energy consumption, with easy-to-understand comparisons that make energy usage tangible. By using EcoDash, you can increase transparency and accountability around energy consumption, and help drive sustainable practices in your organization.
## F.A.Q.
### How does it work?
Since most consumer-grade hardware isn't equipped with internal energy consumption sensors, we've opted to make EcoDash work with external sensors - smart energy monitoring plugs.
EcoDash reads data trough an external component - HomeAssistant (default) or [EZoDash](/docs/ezodash) (coming soon) - and logs it into its database.
### Who is it for?
EcoDash is for everyone with a homeserver who wants to be completely trasparent towards their users about how much their server consumes. You can think of it like an uptime status page - while it's not strictly necessary, it can help your users see that they're trusting a reliable and environmentally-conscious person or organization.
### What devices are compatible?
Since EcoDash currently uses HomeAssistant as its intermediary to talk with smart plugs, it supports all the devices supported by HomeAssistant.
There is no official list of supported plugs. [This](https://www.hadevices.com/category/power) is a starting point, but it doesn't include non-US plugs and Zigbee devices.
EcoDash's main developer is using [this](https://www.aliexpress.com/item/1005002344798281.html) Zigbee plug and [this](https://www.aliexpress.com/item/1005003606832844.html) gateway.

View File

@ -0,0 +1,9 @@
{
"label": "⬇️ Install",
"position": 2,
"link": {
"type": "generated-index",
"description": "Here's how to install EcoDash on different platforms. Choose yours from the list below. Docker is the recommended one, as it's platform-independent.",
"slug": "/install",
}
}

46
docs/install/docker.md Normal file
View File

@ -0,0 +1,46 @@
# 🐳 Docker
Docker is the recommended deployment method for EcoDash. It allows to run on different architectures and operating systems without hassle.
Pre-built Docker containers are offered for Linux on ARM and x86_64. If you're not on a supported architecture or operating system, please check the [Building the container](https://gitea.massivebox.net/ecodash/ecodash/src/branch/master/BUILD.md) guide.
## With Docker command-line
```
docker run -v /absolute_path_to/config.json:/app/config.json -v /absolute_path_to/database.db:/app/database.db --name ecodash -p 8080:80 gitea.massivebox.net/massivebox/ecodash
```
This will open the container on port 8080. Replace "8080" in the command with whatever number you want to open that specific port.
## With Docker Compose
Create a file `docker-compose.yml` with the following content:
```
version: '3'
services:
ecodash:
container_name: ecodash
image: gitea.massivebox.net/massivebox/ecodash
ports:
- '8080:80'
volumes:
- ./config.json:/app/config.json
- ./database.db:/app/database.db
restart: always
```
Run the container with
```
docker compose up -d
```
This will open the container on port 8080. Replace "8080" in the file with whatever number you want to open that specific port.
## Get notified about new releases
Since EcoDash doesn't have any way to notify admins of new releases, you're encouraged to add our repository's feed into your RSS reader: https://gitea.massivebox.net/ecodash/ecodash.rss

59
docs/install/linux.md Normal file
View File

@ -0,0 +1,59 @@
# 🐧 Linux
Pre-built binaries are available for Linux systems with x86_64 and ARM architecture. They should work on any distribution, but haven't been tested on all. Please open an issue if problems arise.
If you're not on a supported architecture, please check the [Building on Linux](https://gitea.massivebox.net/ecodash/ecodash/src/branch/master/BUILD.md) guide.
The [docker image](/docs/install/Docker) is recommended over running from binaries.
## Download
1. Grab the appropriate ZIP from the [latest release page](https://gitea.massivebox.net/ecodash/ecodash/releases/latest). Make sure to select the right file for your architecture:
`wget LINK_TO_APPROPRIATE_FILE`
2. Extract the contents. This will create a folder named `ecodash` in the current directory, which will contain the binary, the configuration, the database and HTML templates folder:
`unzip FILE_NAME`
3. To start the container, first enter the `ecodash` directory:
`cd ecodash`
Then run it. This will expose EcoDash on port 80 by default:
`./ecodash`
If you want to run on any other port, use an environment variable like this:
`env PORT=8080 ./ecodash`
## Set up auto-restart
You might want your EcoDash server to restart automatically in the event of system reboots, programming bugs or configuration saves. This tutorial only covers distributions with systemd.
1. Create a file at `/etc/systemd/system/ecodash.service` with this content:
```
[Unit]
Description=EcoDash
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
User=USER
ExecStart=EXTRACTION_PATH/ecodash/ecodash
[Install]
WantedBy=multi-user.target
```
Make sure to replace USER with your username and EXTRACTION_PATH with the path where you performed the `wget` earlier.
2. Test if it works:
`systemctl start ecodash`
3. If it does (you don't see any error) you can set the OS to automatically start it after reboots with this:
`systemctl enable ecodash`
## Get notified about new releases
Since EcoDash doesn't have any way to notify admins of new releases, you're encouraged to add our repository's feed into your RSS reader: https://gitea.massivebox.net/ecodash/ecodash.rss
## Moving on
Now that EcoDash is installed, you can proceed to the Setup.

3
docs/install/windows.md Normal file
View File

@ -0,0 +1,3 @@
# 🪟 Windows
Pre-built binaries or Docker images are not yet offered for Windows. You are encouraged to use WSL or [build yourself](https://gitea.massivebox.net/ecodash/ecodash/src/branch/master/BUILD.md) the Docker container for Windows. Support for this operating system and related documentation will come in future releases.

27
docs/roadmap.md Normal file
View File

@ -0,0 +1,27 @@
---
sidebar_position: 1
---
# 🛣 Roadmap
You can monitor our progress here:
<iframe src="https://kanboard.massivebox.net/public/board/aa1008cd9b368fe13d84b22fe3a0b1c7cdea0a9a984417642d933922b5cb" width="100%" height="700px"/>
### Columns
- `Backlog` is for features on which the ones in `Ready` depend on
- `Ready` is for features which have all requirements completed
- `Work In Progress` is for features which are being worked on but haven't been committed
- `Done` is for features which are committed but not in a stable release. Once a feature is released, it is removed from the board.
### Tags
- `v*` means that the feature will be included in that version
- `next` means the feature will be in the next stable release
- untagged means the feature has no ETA

View File

@ -0,0 +1,9 @@
{
"label": "⚙️ Setup",
"position": 3,
"link": {
"type": "generated-index",
"description": "Learn how to configure EcoDash, from the basics to the most advanced settings. If you're just getting started, follow the tutorials in this section in order.",
"slug": "/setup",
}
}

39
docs/setup/admin-panel.md Normal file
View File

@ -0,0 +1,39 @@
---
sidebar_position: 2
---
# ⚙️ Admin Panel
The Admin Panel is the right place to configure and customize EcoDash.
## How to access the Admin Panel
If this is the first time you've run EcoDash, you will load directly into the Admin Panel, and you won't be able to leave it until you've changed the settings.
After the first run, click the "Admin" button in the left side of the navbar, or in the hamburger menu from mobile devices.
If you do not see that button, you can still access the admin panel by appending "/admin" to the URL of your EcoDash homepage.
## Configuration
### HomeAssistant
- **HomeAssistant's base URL**: the base URL which you use to access HomeAssistant on your server. It should be something like `http://INTERNAL_IP_ADDRESS:8123/` or `https://homeassistant.youdomain.com/`.
- **HomeAssistant's API Key**:
- **Installation date**: Select the date of the first day in which your server's consumption was logged in its entirety. Users won't be able to see consumption data before this date.
### Sensors
- **Polled Smart Energy Summation entity ID**: After your plug is added in HomeAssistant, get it in Settings -> Devices & Services -> Select the smart plug (or the Zigbee dongle -> Smart plug) -> look for an entity called like "[Name of your plug] Polledsmartenergysummation" -> Settings -> Copy the Entity ID. Check that the unit of measurement in the "Info" tab is kWh.
- **CO2 signal Grid fossil fuel percentage entity ID**: After the CO2 Signal integration is enabled in HomeAssistant, get it in Settings -> Devices & Services -> CO2 Signal "2 entities" -> CO2 signal Grid fossil fuel percentage -> Settings -> Copy the Entity ID. Check that the unit of measurement in the "Info" tab is %.
### Admin account
- **Username**: The username which you will have to enter the Admin Panel. Note it doesn't have to be the same as HomeAssistant.
- **Password**: The password which you will have to enter the Admin Panel. Note it doesn't have to be the same as HomeAssistant.
### Personalization
- **Theme**: This setting will allow you to change the theme. There are no alternative themes at the moment.
- **Dashboard name**: This will change the name shown in the top-left corner of the screen.

9
docs/setup/advanced.md Normal file
View File

@ -0,0 +1,9 @@
---
sidebar_position: 3
---
# 📚 Advanced configuration
This section describes how to customize EcoDash beyond the Admin Panel's limits. It's not necessary to change these settings.
This section is still a work in progress. It will be published before release v1.

15
docs/setup/ecodash.md Normal file
View File

@ -0,0 +1,15 @@
---
sidebar_position: 1
---
# 🏠 HomeAssistant Setup
EcoDash requires HomeAssistant to run. Its purpose is translating the protocols that different smart plugs use into a simple universal HTTP API that EcoDash can use.
1. Install HomeAssistant: follow [this](https://www.home-assistant.io/installation/) guide. The installation method you choose doesn't matter.
2. Add your smart energy monitor. Go to Settings -> Devices and Services -> Add Integration -> Choose your device type. Follow [this](https://www.home-assistant.io/integrations/zha/#configuration---gui) guide for Zigbee devices.
3. Generate an API Key for EcoDash:
1. Go to your profile (bottom left of the page - click on your account name)
2. Scroll to "Long-Lived Access Tokens"
3. Press "Create token", give it a name and click OK
4. Copy the token and paste it in a safe place.

31
docs/support.md Normal file
View File

@ -0,0 +1,31 @@
---
sidebar_position: 4
---
# 🆘 Support
You can get support for EcoDash on the following channels:
- [Matrix](https://matrix.to/#/#ecodash-support:massivebox.net)
- [Telegram](https://t.me/ecodash_support)
- [Issues on Gitea](https://gitea.massivebox.net/massivebox/ecodash/issues)
- [support@ecodash.xyz](mailto:support@ecodash.xyz)
The Matrix and Telegram rooms are bridged toghether, meaning that users of either one can read and respond to the messages in the other.
Before asking others, you're encouraged to search for your issue in the chat history and in the repository's issues tab.
## 📐 Rules
The following rules apply on all support channels.
- **Be patient**: since EcoDash's community is small (for now!), it might take time to get an answer that is right for you.
- **Be inclusive and polite**: EcoDash's community aims to be made of all kinds of people. Help us building a diverse community by being inclusive, avoiding discrimination and political talk in general.
- **Stay on topic**: support channels don't allow for discussion which is not related to EcoDash.
- **Content rules**: only safe-for-work content is allowed. Content which is illegal under Italian laws is strictly forbidden.

151
docusaurus.config.js Normal file
View File

@ -0,0 +1,151 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'EcoDash',
tagline: 'Let your users see how much your server consumes at a glance.',
favicon: 'img/favicon.ico',
// Set the production url of your site here
url: 'https://ecodash.xyz',
// Set the /<baseUrl>/ pathname under which your site is served
// For GitHub pages deployment, it is often '/<projectName>/'
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
// Even if you don't use internalization, you can use this field to set useful
// metadata like html lang. For example, if your site is Chinese, you may want
// to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'en',
locales: ['en'],
},
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve('./sidebars.js'),
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
// Replace with your project's social card
image: 'img/docusaurus-social-card.jpg',
navbar: {
title: 'EcoDash',
logo: {
alt: 'EcoDash Logo',
src: 'img/logo.svg',
},
items: [
{
type: 'doc',
position: 'left',
label: 'Docs',
docId: "index",
},
{
type: 'doc',
position: 'left',
label: 'Support',
docId: "support",
},
{
href: 'https://gitea.massivebox.net/ecodash/ecodash',
label: 'Gitea',
position: 'left',
},
{
href: '/contribute',
label: 'Contribute',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Docs',
items: [
{
label: 'Introduction',
to: '/docs',
},
{
label: 'Install',
to: '/docs/install',
},
],
},
{
title: 'Community',
items: [
{
label: 'Matrix',
href: 'https://matrix.to/#/#ecodash-support:massivebox.net',
},
{
label: 'Telegram',
href: 'https://t.me/ecodash_support',
},
{
label: 'Gitea issues',
href: 'https://gitea.massivebox.net/ecodash/ecodash/issues',
},
],
},
{
title: 'Source code',
items: [
{
label: 'Website',
href: 'https://gitea.massivebox.net/ecodash/website'
},
{
label: 'EcoDash',
href: 'https://gitea.massivebox.net/ecodash/ecodash',
}
]
},
{
title: 'More',
items: [
{
label: 'Privacy Policy',
href: '/privacy',
},
{
label: 'Contribute',
href: '/contribute',
}
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} <a href="https://massivebox.net">MassiveBox</a>.`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
}),
};
module.exports = config;

21535
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

43
package.json Normal file
View File

@ -0,0 +1,43 @@
{
"name": "ecodash-website",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "0.0.0-5496",
"@docusaurus/preset-classic": "0.0.0-5496",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.2.1",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.3.0"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"engines": {
"node": ">=16.14"
}
}

19
sidebars.js Normal file
View File

@ -0,0 +1,19 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
sidebar: [{type: 'autogenerated', dirName: '.'}],
};
module.exports = sidebars;

View File

@ -0,0 +1,69 @@
import React from 'react';
import clsx from 'clsx';
import styles from './styles.module.css';
import Link from '@docusaurus/Link';
const FeatureList = [
{
title: 'Easy to Use',
imgName: 'easy-to-use-icon.svg',
description: (
<>
EcoDash is built to be simple to install and use, both for the administrators and the end users.
</>
),
buttonLabel: "Install",
buttonDest: "/docs/install"
},
{
title: 'All the data you need, nothing more',
imgName: 'data-analysis-icon.svg',
description: (
<>
The dashboard has all the most useful information, while keeping itself clean, minimalistic and easy to understand by anyone.
</>
),
buttonLabel: "See the demo",
buttonDest: "https://demo.ecodash.xyz"
},
{
title: 'Widely compatible',
imgName: 'power-cord-icon.svg',
description: (
<>
EcoDash supports a wide range of electricity consumption monitoring devices, including Zigbee smart plugs.
</>
),
buttonLabel: "Compatibility table",
buttonDest: "o"
},
];
function Feature({title, imgName, description, buttonLabel, buttonDest}) {
return (
<div className={clsx('col col--4')}>
<div className="text--center">
<img src={'/img/' + imgName} className={styles.featureSvg} role="img" />
</div>
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
<p><a href={buttonDest}>{buttonLabel}</a></p>
</div>
</div>
);
}
export default function HomepageFeatures() {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

View File

@ -0,0 +1,11 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 200px;
width: 200px;
}

29
src/css/custom.css Normal file
View File

@ -0,0 +1,29 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #00a440;
--ifm-color-primary-dark: #008031;
--ifm-color-primary-darker: #004d1d;
--ifm-color-primary-darkest: #001a0a;
--ifm-color-primary-light: #00cc4e;
--ifm-color-primary-lighter: #00ff62;
--ifm-color-primary-lightest: #33ff81;
--ifm-code-font-size: 95%;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
}
[data-theme='dark'] {
--ifm-color-primary: #00cc4e;
--ifm-color-primary-dark: #00b344;
--ifm-color-primary-darker: #008031;
--ifm-color-primary-darkest: #004d1d;
--ifm-color-primary-light: #1aff71;
--ifm-color-primary-lighter: #4dff91;
--ifm-color-primary-lightest: #80ffb0;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}

26
src/pages/contribute.md Normal file
View File

@ -0,0 +1,26 @@
# Contribute
You can contribute to EcoDash's development either by help with coding or donations. Choose whatever you like, we will be very grateful to you regardless!
## Code contributions
You can help us further develop EcoDash with code contributions. Just check out what our goals are, implement new features or fix bugs, and open a Pull Request! Make sure to talk in the [community channels](/docs/support) to make sure that your work isn't overlapping anybody else's.
A good starting point to always know what has to be done are the [issues on Gitea](https://gitea.massivebox.net/ecodash/ecodash/issues).
## Financial support
You can help us pay the bills in several ways:
- Via Credit Card: [payment link](https://revolut.me/scatola)
- Referrals (we do not endorse these products, rewards are not guaranteed):
- [Mega.nz](https://mega.nz/aff=FTCD_qygL6U) - cheap encrypted cloud that pays me if you sign up for premium
- [Binance](https://www.binance.com/en/activity/referral-entry/CPA?fromActivityPage=true&ref=CPA_001OSDNNFB) - deposit $50 within 14 days and we [should](https://www.binance.com/en/support/faq/how-to-use-binance-lite-referral-5e284447daa34a338a968d64f7023c73) both get 100 USDT
- With crypto:
- BTC: `1EybumHaeSLp44R3tzxpxj84E7yFwGoNEA`
- ETH: `0x1192e4C951F207B5C6b463C968902d57C2c8Ce0f`
- XMR: `44xyoXhUXVV6XZ4uFEVMncXq8bibb9jhaKiK9f1DQFeZFby9hjsvPwhhkY9ot3CGABK7Nctdv9KgTaGsA7L27Maf1ZjYRpJ`
- LTC: `Lbn6PK6YU2CFio6cVpE1XUfCX67UYoeWs7`
- BNB: `bnb1q2ay88jmly7tuk4xjae205stzhmjxgsedgc77w`
These funds will go to [MassiveBox](https://massivebox.net), the main developer of EcoDash. They will be spent to pay the running costs we have and improve EcoDash even more.

52
src/pages/index.js Normal file
View File

@ -0,0 +1,52 @@
import React from 'react';
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';
import HomepageFeatures from '@site/src/components/HomepageFeatures';
import ThemedImage from '@theme/ThemedImage';
import styles from './index.module.css';
function HomepageHeader() {
const {siteConfig} = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<ThemedImage sources={{
light: '/img/light/logo.svg',
dark: '/img/dark/logo.svg',
}} width="200px" />
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className="button button--primary button--lg"
to="https://demo.ecodash.xyz">
🔧 See the demo
</Link>
<Link
className="button button--secondary button--lg"
to="/docs">
Get Started
</Link>
</div>
</div>
</header>
);
}
export default function Home() {
const {siteConfig} = useDocusaurusContext();
return (
<Layout
title="Home"
description="Description will go into a meta tag in <head />">
<HomepageHeader />
<main>
<HomepageFeatures />
</main>
</Layout>
);
}

View File

@ -0,0 +1,23 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}

46
src/pages/privacy.md Normal file
View File

@ -0,0 +1,46 @@
# Privacy Policy
This document describes how the EcoDash Website, Support and Software treat their users'data.
## EcoDash Website
By EcoDash Website we mean the https://ecodash.xyz website, all its subfolders and subdomains.
The EcoDash website doesn't use cookies or any other tracking technology.
Access and error logs are kept for a maximum of seven days. They include the following information:
- IP address
- Exact time of request
- HTTP protocol version
- HTTP method
- Requested URL
- Response status code
These information are stored exclusively in the server which we own and are the only ones who have access to, located in Italy. They are never transferred elsewhere.
They are exclusively used to spot programming errors and see how users interact with the site.
We don't knowingly collect information of individuals under the age of 13. This website is not aimed at them.
Some third-parties provide services which we need for the core functionality of the EcoDash Website. Their privacy policies might differ from ours, so you're encouraged to check them.
- [**Hurricane Electric DNS**](https://dns.he.net/): DNS routing ([Privacy](https://he.net/privacy.html))
- [**WindTre**](https://www.windtre.it/): This server's Internet Service Provider ([Privacy](https://d1qsjop7tycsfb.cloudfront.net/fileadmin/mainbrand/footer/privacy/Informativa_PRIVACY_consumer_ex_artt_13_e_14_GDPR_20052022_DEF.pdf))
The EcoDash Website contains links to external sites. Their privacy policies might differ from ours, so you're encouraged to check them.
In case you want your information removed from our storage, or have any other question, contact [legal@ecodash.xyz](mailto:legal@ecodash.xyz).
## EcoDash Support
EcoDash provides several support channels on external platforms. Their privacy policies might differ from ours, so you're encouraged to check them.
- Matrix: [Privacy](https://placeholder.com/)
- Telegram: [Privacy](https://telegram.org/privacy)
- Email: We use Yandex.Mail for our support email. [Privacy](https://yandex.com/legal/privacy/)
## EcoDash Software
The EcoDash software doesn't have analytics or any other way to send data to its developers.
Depending on which source you use to obtain the EcoDash software, some analytics might be collected at the time of download. Consult the source of the download for further details.

0
static/.nojekyll Normal file
View File

44
static/img/dark/logo.svg Normal file
View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
id="Layer_1"
data-name="Layer 1"
viewBox="0 0 122.88 114.86"
version="1.1"
sodipodi:docname="logo.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview11"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="6.8605258"
inkscape:cx="61.51132"
inkscape:cy="57.43"
inkscape:window-width="1858"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<defs
id="defs4">
<style
id="style2">.cls-1{fill:#01a437;}</style>
</defs>
<title
id="title6">leaves</title>
<path
class="cls-1"
d="M59.07,110.77C110.92,105,139.6,71.12,112.44,0c-21.29,14.9-50.39,24.6-65,44.55C57,52.94,64.89,62.23,67.08,74.37c13.19-16.08,27.63-30.72,35.23-47-7.79,39.07-20,53.84-38.78,73.81a93.64,93.64,0,0,1-4.46,9.62Zm-14.9,4C4,105-15.18,76.09,14.27,24.75c23.8,22.92,65.79,37.48,38.39,85.86a27.08,27.08,0,0,1-1.83,2.93C45.9,89.62,26.21,70.69,20.43,50.61,21.77,83.42,31.23,93,45.88,114.86c-.57,0-1.14-.06-1.71-.13Z"
id="path8"
style="fill:#000000" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
id="Layer_1"
data-name="Layer 1"
viewBox="0 0 122.88 85.75"
version="1.1"
sodipodi:docname="data-analysis-icon.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview11"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="9.1895044"
inkscape:cx="60.394987"
inkscape:cy="42.875"
inkscape:window-width="1858"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<defs
id="defs4">
<style
id="style2">.cls-1{fill-rule:evenodd;}</style>
</defs>
<title
id="title6">data-analysis</title>
<path
class="cls-1"
d="m 114.69,36.31 v 48 a 1.45,1.45 0 0 1 -1.44,1.44 H 100.84 A 1.45,1.45 0 0 1 99.4,84.31 v -35.7 c 2.54,-2.48 5.65,-5.48 8.83,-8.54 l 5,-4.82 a 12.84,12.84 0 0 0 1.45,1.06 z m -84.56,-13 a 20.9,20.9 0 0 0 -8.08,1 h -0.06 a 20.87,20.87 0 0 0 -13.65,24.47 20.45,20.45 0 0 0 1.79,4.93 l -9.82,9.4 a 1,1 0 0 0 0,1.41 l 5.56,5.82 a 1,1 0 0 0 1.41,0 l 9.45,-9.12 a 20.78,20.78 0 0 0 4.63,2.47 21.48,21.48 0 0 0 6,1.3 20.9,20.9 0 0 0 21.15,-27.48 v 0 A 20.86,20.86 0 0 0 30.13,23.34 Z m -12.38,8.31 a 16.65,16.65 0 0 1 23.52,1.6 v 0.05 a 16.7,16.7 0 0 1 3.19,5.59 v 0 A 16.71,16.71 0 0 1 34,60 16.8,16.8 0 0 1 27.56,60.82 16.44,16.44 0 0 1 21.28,59.13 v 0 a 16.7,16.7 0 0 1 -5.1,-4 l -0.05,-0.06 a 16.63,16.63 0 0 1 -3.2,-5.59 v -0.05 a 16.71,16.71 0 0 1 -0.8,-6.39 16.62,16.62 0 0 1 5.66,-11.43 z m 28.59,-8.08 11,-9.6 c 7.26,7.12 14.3,15.72 21.49,22.82 L 105,10.43 96.55,2 122.88,0 121.4,26.83 113.3,18.73 C 107.49,24.62 93.75,37.59 87.93,43.41 80.58,50.76 77.07,50.9 69.72,43.54 L 57.3,29.73 53.44,33.15 a 28.54,28.54 0 0 0 -1.37,-2.7 26.3,26.3 0 0 0 -3,-4.18 v 0 A 26.43,26.43 0 0 0 46.3,23.55 Z m 18.42,31.34 v 29.43 a 1.45,1.45 0 0 1 -1.44,1.44 H 50.91 A 1.45,1.45 0 0 1 49.47,84.31 V 62.92 a 29,29 0 0 0 2.12,-2.44 27.34,27.34 0 0 0 2.91,-4.66 27.33,27.33 0 0 0 2.65,-8.6 l 3.31,3.68 0.43,0.45 a 50.63,50.63 0 0 0 3.87,3.53 z m -25,14.5 v 14.93 a 1.45,1.45 0 0 1 -1.44,1.44 H 25.94 A 1.45,1.45 0 0 1 24.5,84.31 V 70.93 a 29.79,29.79 0 0 0 3.08,0.38 28.48,28.48 0 0 0 10.78,-1.4 c 0.48,-0.17 1,-0.34 1.43,-0.53 z M 89.72,57.07 v 27.24 a 1.45,1.45 0 0 1 -1.44,1.44 H 75.87 a 1.45,1.45 0 0 1 -1.44,-1.44 v -24.4 a 19.22,19.22 0 0 0 4.54,0.46 19.79,19.79 0 0 0 10.75,-3.3 z"
id="path8"
style="fill:#999999"
inkscape:highlight-color="#303846" />
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 104.31 122.88"
style="enable-background:new 0 0 104.31 122.88"
xml:space="preserve"
sodipodi:docname="easy-to-use-icon.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs9" /><sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="3.2063803"
inkscape:cx="35.242232"
inkscape:cy="101.67228"
inkscape:window-width="1858"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><g
id="g4"
style="fill:#999999"><path
d="m 83.23,24.31 c -1.22,1.3 -3.24,1.34 -4.52,0.14 -1.3,-1.22 -1.34,-3.24 -0.14,-4.52 l 8.82,-9.39 c 1.22,-1.3 3.25,-1.34 4.52,-0.14 1.3,1.22 1.34,3.24 0.14,4.52 z M 43.96,23.65 c 1.3,1.22 1.34,3.25 0.14,4.52 -1.22,1.3 -3.25,1.34 -4.52,0.14 l -9.4,-8.82 c -1.29,-1.23 -1.33,-3.25 -0.14,-4.52 1.22,-1.3 3.25,-1.34 4.52,-0.14 z m 19.73,-7.69 c 0.05,1.76 -1.34,3.24 -3.09,3.3 -1.75,0.06 -3.24,-1.34 -3.3,-3.09 L 56.91,3.3 C 56.85,1.55 58.25,0.06 60,0 c 1.76,-0.05 3.24,1.34 3.29,3.09 z m 13.19,47.35 c -1.3,-1.22 -1.34,-3.25 -0.14,-4.52 1.22,-1.3 3.24,-1.34 4.52,-0.14 l 9.39,8.82 c 1.3,1.22 1.34,3.24 0.14,4.52 -1.22,1.3 -3.24,1.34 -4.52,0.14 z M 88.36,44.35 c -1.75,0.06 -3.24,-1.34 -3.3,-3.09 -0.05,-1.75 1.34,-3.24 3.09,-3.3 l 12.86,-0.43 c 1.75,-0.06 3.24,1.34 3.3,3.09 0.06,1.75 -1.34,3.24 -3.09,3.3 z M 60.88,58.97 c 0.17,0.1 0.34,0.22 0.5,0.38 l 2.29,2.29 c 0.12,0.12 0.24,0.28 0.34,0.42 2.57,3.52 2.17,6.66 0.42,9.52 0.31,0.12 0.62,0.29 0.86,0.54 l 2.29,2.29 c 0.12,0.12 0.24,0.28 0.34,0.42 2.76,3.8 2.07,7.12 0,10.14 0.1,0.05 0.17,0.14 0.28,0.24 l 2.29,2.29 c 0.12,0.12 0.24,0.28 0.34,0.42 5.31,7.26 -1.02,13.42 -6.1,18.39 l -1.31,1.31 -5.67,5.95 -0.18,0.17 c -5.19,4.71 -10.33,5.97 -16.28,7.42 -1,0.24 -2,0.5 -3.4,0.86 -0.04,0 -0.06,0.02 -0.1,0.02 -3.22,0.88 -6.14,1.09 -8.76,0.62 -2.66,-0.48 -4.97,-1.67 -6.9,-3.56 L 2.31,99.29 C 0.31,97.36 -0.38,94.98 0.19,92.15 0.62,89.89 1.94,87.38 4,84.68 L 9.3,54.74 v -0.12 c 0.24,-1.71 0.78,-4.24 1.71,-6.68 0.71,-1.83 1.67,-3.62 2.92,-5.07 1.51,-1.71 3,-2.76 4.47,-3.32 1.81,-0.69 3.54,-0.6 5.07,0.06 1.43,0.6 2.64,1.69 3.56,3.08 1.12,1.67 1.85,3.8 2.05,6.02 0.16,1.83 0.48,4.85 0.78,7.81 L 30.1,58.99 53,36.07 c 4.4,-4.4 9.16,-5.27 12.97,-4.02 1.53,0.5 2.88,1.33 4,2.45 1.12,1.12 1.95,2.47 2.45,4 1.26,3.8 0.4,8.63 -3.92,12.95 l -7.59,7.59 z"
id="path2"
sodipodi:nodetypes="ccccccccccccccccsccccccccccccccccscccsscccscccscccccccccccccccccccccccccscsc"
style="fill:#999999" /></g></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
static/img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

44
static/img/light/logo.svg Normal file
View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
id="Layer_1"
data-name="Layer 1"
viewBox="0 0 122.88 114.86"
version="1.1"
sodipodi:docname="whitelogo.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview11"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="6.8605258"
inkscape:cx="61.51132"
inkscape:cy="57.43"
inkscape:window-width="1858"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<defs
id="defs4">
<style
id="style2">.cls-1{fill:#01a437;}</style>
</defs>
<title
id="title6">leaves</title>
<path
class="cls-1"
d="M59.07,110.77C110.92,105,139.6,71.12,112.44,0c-21.29,14.9-50.39,24.6-65,44.55C57,52.94,64.89,62.23,67.08,74.37c13.19-16.08,27.63-30.72,35.23-47-7.79,39.07-20,53.84-38.78,73.81a93.64,93.64,0,0,1-4.46,9.62Zm-14.9,4C4,105-15.18,76.09,14.27,24.75c23.8,22.92,65.79,37.48,38.39,85.86a27.08,27.08,0,0,1-1.83,2.93C45.9,89.62,26.21,70.69,20.43,50.61,21.77,83.42,31.23,93,45.88,114.86c-.57,0-1.14-.06-1.71-.13Z"
id="path8"
style="fill:#ffffff" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

1
static/img/logo.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 114.86"><defs><style>.cls-1{fill:#01a437;}</style></defs><title>leaves</title><path class="cls-1" d="M59.07,110.77C110.92,105,139.6,71.12,112.44,0c-21.29,14.9-50.39,24.6-65,44.55C57,52.94,64.89,62.23,67.08,74.37c13.19-16.08,27.63-30.72,35.23-47-7.79,39.07-20,53.84-38.78,73.81a93.64,93.64,0,0,1-4.46,9.62Zm-14.9,4C4,105-15.18,76.09,14.27,24.75c23.8,22.92,65.79,37.48,38.39,85.86a27.08,27.08,0,0,1-1.83,2.93C45.9,89.62,26.21,70.69,20.43,50.61,21.77,83.42,31.23,93,45.88,114.86c-.57,0-1.14-.06-1.71-.13Z"/></svg>

After

Width:  |  Height:  |  Size: 603 B

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
shape-rendering="geometricPrecision"
text-rendering="geometricPrecision"
image-rendering="optimizeQuality"
fill-rule="evenodd"
clip-rule="evenodd"
viewBox="0 0 417 512.17"
version="1.1"
id="svg4"
sodipodi:docname="power-cord-icon.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs8" />
<sodipodi:namedview
id="namedview6"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.5385517"
inkscape:cx="208.63777"
inkscape:cy="256.08499"
inkscape:window-width="1858"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
d="M387.65 219.35v48.36c0 48-11.65 86.72-36.24 114.61-22.91 25.99-56.78 42.26-102.6 47.51v82.34h-80.62v-81.55c-47.08-6.33-81.34-21.28-104.19-46.45-23.63-26.04-34.64-62.52-34.62-111.2l.02-53.62h-7.46C9.88 219.35 0 209.47 0 197.41v-25.45c0-12.07 9.88-21.94 21.94-21.94H88.9V34.75C88.9 15.63 104.54 0 123.65 0s34.74 15.66 34.74 34.75v115.27h102V34.75C260.39 15.63 276.02 0 295.14 0c19.11 0 34.75 15.66 34.75 34.75v115.27h65.16c12.07 0 21.95 9.87 21.95 21.94v25.45c0 12.06-9.88 21.94-21.95 21.94h-7.4zm-163.53 40.58h21.11a5.537 5.537 0 0 1 4.6 8.62l-50.26 85.75a5.536 5.536 0 0 1-7.58 1.88 5.537 5.537 0 0 1-2.56-5.85l7.41-52.61-24.99.43a5.538 5.538 0 0 1-5.61-5.43c0-1.06.28-2.04.78-2.89l49.43-85.71a5.518 5.518 0 0 1 7.56-1.95 5.518 5.518 0 0 1 2.65 5.53l-2.54 52.23z"
id="path2"
style="fill:#999999" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB