From 204dc620217c4a6ee60ed64850d99845613cfcb1 Mon Sep 17 00:00:00 2001 From: bitsalv Date: Sun, 31 Aug 2025 01:14:11 +0200 Subject: [PATCH 1/4] feat: implement automated documentation publishing workflow - Add content-only repository structure - Add GitHub Actions sync workflow for cross-repository content sync - Add complete documentation content (intro, about, product, modelling, contribution, FAQ) - Add repository documentation and structure guides - Remove build files and dependencies (content-only approach) - Add comprehensive documentation for the two-repository workflow --- .github/workflows/sync-docs.yml | 46 ++++ .gitignore | 29 +++ PULL_REQUEST_GUIDE.md | 143 ++++++++++ README.md | 184 ++++++++----- REPOSITORY_STRUCTURE.md | 121 +++++++++ docs/about-us.md | 74 ++++++ docs/contribution.md | 168 ++++++++++++ docs/faq.md | 157 +++++++++++ docs/intro.md | 39 +++ docs/modelling/README.md | 59 +++++ .../domain-driven-architecture-overview.md | 245 ++++++++++++++++++ docs/modelling/glossary.md | 160 ++++++++++++ docs/product/product-cycle.md | 139 ++++++++++ 13 files changed, 1502 insertions(+), 62 deletions(-) create mode 100644 .github/workflows/sync-docs.yml create mode 100644 .gitignore create mode 100644 PULL_REQUEST_GUIDE.md create mode 100644 REPOSITORY_STRUCTURE.md create mode 100644 docs/about-us.md create mode 100644 docs/contribution.md create mode 100644 docs/faq.md create mode 100644 docs/intro.md create mode 100644 docs/modelling/README.md create mode 100644 docs/modelling/domain-driven-architecture-overview.md create mode 100644 docs/modelling/glossary.md create mode 100644 docs/product/product-cycle.md diff --git a/.github/workflows/sync-docs.yml b/.github/workflows/sync-docs.yml new file mode 100644 index 0000000..40629a0 --- /dev/null +++ b/.github/workflows/sync-docs.yml @@ -0,0 +1,46 @@ +name: Sync Documentation Content + +on: + push: + branches: [ main ] + paths: + - 'docs/**' + pull_request: + branches: [ main ] + paths: + - 'docs/**' + workflow_dispatch: # Manual trigger + +jobs: + sync-docs-content: + runs-on: ubuntu-latest + + steps: + - name: Checkout docs repository + uses: actions/checkout@v4 + with: + path: docs-repo + + - name: Checkout edgemining.energy repository + uses: actions/checkout@v4 + with: + repository: edge-mining/edgemining.energy + token: ${{ secrets.EDGEMINING_ENERGY_TOKEN }} + path: edgemining-energy + + - name: Sync docs content to edgemining.energy + run: | + # Remove existing docs directory + rm -rf edgemining-energy/docs + + # Copy docs content + cp -r docs-repo/docs edgemining-energy/ + + - name: Commit and push to edgemining.energy + working-directory: edgemining-energy + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add docs/ + git commit -m "Auto-sync: Update docs content from edge-mining/docs [skip ci]" + git push origin main diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e1b6935 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Temporary files +*.tmp +*.temp + +# Backup files +*.bak +*.backup \ No newline at end of file diff --git a/PULL_REQUEST_GUIDE.md b/PULL_REQUEST_GUIDE.md new file mode 100644 index 0000000..40d1f1e --- /dev/null +++ b/PULL_REQUEST_GUIDE.md @@ -0,0 +1,143 @@ +# Pull Request Guide + +## 🎯 Overview + +This repository (`edge-mining/docs`) contains **only the documentation content** for the Edge Mining website. The VuePress site and deployment infrastructure are in `edge-mining/edgemining.energy`. + +## πŸ“‹ Pull Request Checklist + +### **For `edge-mining/docs` (Content Repository):** + +#### **Files to Include:** +- [ ] `.github/workflows/sync-docs.yml` - Content sync workflow +- [ ] `docs/` - All documentation content +- [ ] `README.md` - Repository documentation +- [ ] `REPOSITORY_STRUCTURE.md` - Structure explanation +- [ ] `LICENSE` - MIT license +- [ ] `.gitignore` - Git ignore rules + +#### **Files NOT to Include:** +- ❌ `package.json` (not needed for content repo) +- ❌ `node_modules/` (not needed for content repo) +- ❌ VuePress configuration (goes in edgemining.energy repo) +- ❌ Build files (handled by edgemining.energy repo) + +#### **Setup Required:** +- [ ] Add `EDGEMINING_ENERGY_TOKEN` secret to repository +- [ ] Configure repository permissions for cross-repo access + +### **For `edge-mining/edgemining.energy` (Site Repository):** + +#### **Files to Include:** +- [ ] `.github/workflows/build-and-deploy.yml` - Build and deploy workflow +- [ ] `docs/.vuepress/` - VuePress configuration +- [ ] `docs/docs/` - Documentation content (synced from edge-mining/docs) +- [ ] `package.json` - Dependencies and scripts +- [ ] `CNAME` - Custom domain configuration +- [ ] `.gitignore` - Git ignore rules + +#### **Setup Required:** +- [ ] Enable GitHub Pages +- [ ] Configure custom domain `edgemining.energy` +- [ ] Set up CNAME file + +## πŸ”„ Workflow Process + +### **Content Updates:** +1. **Edit** Markdown files in `docs/` +2. **Push** to `edge-mining/docs` +3. **GitHub Action** copies `docs/` to `edge-mining/edgemining.energy/docs/` +4. **Triggers build** in `edgemining.energy` +5. **Deploys** to `edgemining.energy` + +### **Site Updates:** +1. **Edit** VuePress config, styles, or other site files +2. **Push** to `edge-mining/edgemining.energy` +3. **GitHub Action** builds VuePress +4. **Deploys** to `edgemining.energy` + +## πŸ“ PR Messages + +### **For edge-mining/docs:** +```markdown +# πŸ“š Documentation Content Setup + +## Overview +This PR sets up the content repository for Edge Mining documentation with automatic sync to the site repository. + +## What's Included +- Documentation content structure (intro, about, product, modelling, contribution, FAQ) +- GitHub Actions workflow for content synchronization +- Repository documentation and structure guide + +## Workflow +- Push to `main` β†’ Syncs content to `edge-mining/edgemining.energy` +- Content writers work only with Markdown files +- Automatic deployment via cross-repository sync + +## Setup Required +1. Add `EDGEMINING_ENERGY_TOKEN` secret +2. Configure repository permissions +3. Test content sync workflow + +## Next Steps +1. Create PR for `edge-mining/edgemining.energy` (VuePress site) +2. Configure deployment infrastructure +3. Test complete workflow +``` + +### **For edge-mining/edgemining.energy:** +```markdown +# 🌐 VuePress Site Setup + +## Overview +This PR sets up the VuePress site repository for Edge Mining with automatic deployment to edgemining.energy. + +## What's Included +- VuePress 2 configuration with custom styling +- GitHub Actions workflow for build and deployment +- Custom CSS with Edge Mining brand colors +- Logo and favicon from Edge Mining organization +- Responsive design for mobile and desktop + +## Workflow +- Push to `main` β†’ Builds VuePress β†’ Deploys to edgemining.energy +- Receives content updates from `edge-mining/docs` +- Independent deployment for site changes + +## Setup Required +1. Enable GitHub Pages +2. Configure custom domain `edgemining.energy` +3. Set up CNAME file +4. Test deployment workflow + +## Next Steps +1. Configure content sync from `edge-mining/docs` +2. Test complete deployment workflow +3. Review and finalize content +``` + +## 🎯 Repository Structure + +### **edge-mining/docs (Content):** +``` +docs/ +β”œβ”€β”€ intro.md +β”œβ”€β”€ about-us.md +β”œβ”€β”€ product/ +β”œβ”€β”€ modelling/ +β”œβ”€β”€ contribution.md +└── faq.md +``` + +### **edge-mining/edgemining.energy (Site):** +``` +docs/ +β”œβ”€β”€ .vuepress/ # VuePress configuration +β”œβ”€β”€ docs/ # Content (synced from edge-mining/docs) +└── README.md # Homepage +``` + +--- + +**Note**: This guide ensures proper separation between content management and site development. diff --git a/README.md b/README.md index 76a8c27..7a266bd 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,125 @@ -⚠️ **Disclaimer**: *This project is in a preliminary state and under active development. Features and functionality may change significantly.* - -➑️ **Development Note**: -- This is the **Docs repository**, specifically dedicated to documentation of the Edge Mining application. -- The [Core repository](https://github.com/edge-mining/core) contains the main engine of the Edge Mining system. -- The [Add-on repository](https://github.com/edge-mining/addon) provides the Home Assistant integration. - - -# ⚑ Bitcoin Mining for Energy Efficiency - -Bitcoin mining represents a unique opportunity to improve efficiency in both the production and use of energy, whether on an industrial scale or for smaller setups. This project aims to make mining accessible and easy to implement, providing tools to integrate mining into energy systems and maximize the use of the energy produced. - -## 🌞 The Challenge: Managing Excess Energy - -In energy production plants, especially those relying on renewable sources like solar and wind, there's often a surplus of energy generated during peak hours (for example, when there is a lot of sun or wind) that doesn't align with peak demand times. Today, the main options for managing this excess energy include: - -- **Selling the energy to the national grid**: This is possible only if the grid accepts the surplus, and often at unfavorable economic conditions. -- **Purchasing additional storage systems**: Such as batteries, which can be expensive and not always scalable, limiting this option for many small producers. -- **Using the energy for various purposes**: For instance, producing hydrogen through electrolysis, charging electric vehicles, or pumping water for hydroelectric storage. However, these solutions are often challenging and costly to implement, especially for small- and medium-sized plants. -- **Using energy for marginal purposes**: Such as resistive heating, which generally doesn’t add significant economic value. -- **Wasting the energy**: Which is a loss that reduces the overall efficiency of the plant. - -## πŸ”Œ The Solution: Bitcoin Mining - -Bitcoin mining is a computational process that verifies and validates transactions on the Bitcoin network. This process ensures network security, using electrical energy to power specialized devices called miners. In return for this activity, miners receive a reward in Bitcoin, making mining not only useful for the network but also economically beneficial for participants. - -This process has a unique feature that makes it particularly suitable for integration with renewable energy production plants: it is extremely flexible, able to be activated to consume energy during times of surplus and stopped immediately when energy is needed for other purposes. - -Moreover, mining produces heat as a byproduct. 100% of the electrical energy used by a miner is converted into heat, making it similar to an electric heater that, in addition to providing warmth, also generates a constant economic reward. - -These characteristics make mining an ideal solution for managing excess energy, particularly in small- and medium-sized plants. - -## 🏑 Edge Mining: A Practical Approach for Everyone - -Aside from electrical power, mining only requires a miner and a low-speed internet connection. It virtually needs nothing else, making it a very simple activity to implement anywhere. - -You could say that the hardware implementation of a mining system is not particularly complex from a technical standpoint. In trying to implement it ourselves, we realized that the only missing element for a fully functional system was a management and automation solution for the mining process, specifically software that connects the energy production plant to the miners, regulating power on/off and energy consumption. - -Our project aims to develop a mining management system that: - -- Connects the power generation plant with one or more ASIC devices for mining. -- Allows users, even non-experts, to automate the mining process based on specific energy requirements. -- Helps users manage and make the most of the heat generated by the ASICs for space heating, thereby maximizing the energy surplus of the plant. - -## πŸ’Ύβ€‹ Development - -Following the general overview of the project, the following link provides a deeper technical insight into how the system is structured according to Domain-Driven Design (DDD) principles. It identifies the core domain of energy optimization, categorizes supporting and generic subdomains, defines the internal structure of each, and maps the interactions between them. This approach allows us to align the software architecture with real-world needs, ensuring clarity, modularity, and scalability. The document is continuously evolving and reflects an iterative design processβ€”nothing is final, and all aspects are considered open to revision as the system and its understanding mature over time. - -[πŸ‘‰Domain-Driven Architecture Overview](./modelling/domain-driven-architecture-overview.md) - -The following link provides access to a shared vocabulary used throughout the Edge Mining project, following the principles of Ubiquitous Language from Domain-Driven Design (DDD). It is organized by subdomain and offers simplified definitions based on domain expertise. The goal is to ensure consistent communication between developers, domain experts, and stakeholders, and to serve as a reference point during design and implementation. - -[πŸ‘‰Glossary](./modelling/glossary.md) +# Edge Mining Documentation Repository + +This repository contains **only the documentation content** (Markdown files) for the Edge Mining website. The live site at [edgemining.energy](https://edgemining.energy) is automatically built and deployed via GitHub Actions. + +## πŸ—οΈ Repository Structure + +### **This Repository (`edge-mining/docs`):** +``` +edge-mining/docs/ +└── docs/ # Documentation content ONLY + β”œβ”€β”€ intro.md # Introduction + β”œβ”€β”€ about-us.md # About Edge Mining + β”œβ”€β”€ product/ # Product documentation + β”‚ └── product-cycle.md + β”œβ”€β”€ modelling/ # Architecture & DDD + β”‚ β”œβ”€β”€ domain-driven-architecture-overview.md + β”‚ └── glossary.md + β”œβ”€β”€ contribution.md # How to contribute + └── faq.md # Frequently asked questions +``` + +### **Site Repository (`edge-mining/edgemining.energy`):** +``` +edge-mining/edgemining.energy/ +β”œβ”€β”€ docs/ # VuePress site (copied from this repo) +β”‚ β”œβ”€β”€ .vuepress/ # VuePress configuration +β”‚ β”‚ β”œβ”€β”€ config.js # Site configuration +β”‚ β”‚ β”œβ”€β”€ styles/ # Custom CSS styles +β”‚ β”‚ └── public/ # Static assets (logo, favicon) +β”‚ β”œβ”€β”€ docs/ # Documentation content (synced from this repo) +β”‚ └── README.md # Homepage content +β”œβ”€β”€ package.json # Dependencies and scripts +└── .github/workflows/ # Build and deploy workflows +``` + +## πŸ”„ Automatic Deployment Workflow + +### **Two-Way Sync Process:** + +#### **1. Content Changes (this repo):** +- **Push to `edge-mining/docs`** β†’ Triggers sync workflow +- **Copies `docs/`** β†’ `edge-mining/edgemining.energy/docs/` +- **Triggers build** β†’ Deploys to `edgemining.energy` + +#### **2. Site Changes (edgemining.energy repo):** +- **Push to `edge-mining/edgemining.energy`** β†’ Triggers build workflow +- **Builds VuePress** β†’ Deploys to `edgemining.energy` + +## πŸ› οΈ Setup Required + +### **1. Repository Token** +In the `edge-mining/docs` repository, add this secret: +``` +EDGEMINING_ENERGY_TOKEN = Personal Access Token with permissions on edgemining.energy +``` + +### **2. Repository Permissions** +The token must have access to: +- `edge-mining/docs` (read) +- `edge-mining/edgemining.energy` (read/write) + +## πŸ“ Current Status + +### **βœ… Completed:** +- [x] Documentation content structure (intro, about, product, modelling, contribution, FAQ) +- [x] GitHub Actions workflow for content sync +- [x] VuePress site configuration (in edgemining.energy) +- [x] Custom CSS styling with Edge Mining brand colors +- [x] Logo and favicon from Edge Mining organization +- [x] Navigation structure (Home, Docs, Discord, GitHub) + +### **⚠️ Pending:** +- [ ] Content review and finalization +- [ ] Visual design improvements +- [ ] Testing of deployment workflow + +## πŸ”§ Local Development + +### **For Content Development (this repo):** +```bash +# Edit Markdown files in docs/ +# Push to trigger automatic sync +``` + +### **For Site Development (edgemining.energy repo):** +```bash +npm run docs:dev # Development server +npm run docs:build # Production build +npm run docs:clean # Clean build +``` + +### **Access:** +- **Development**: `http://localhost:8080/` (from edgemining.energy repo) +- **Production**: `https://edgemining.energy` + +## πŸ“‹ Pull Request Checklist + +### **For `edge-mining/docs`:** +- [ ] Add `EDGEMINING_ENERGY_TOKEN` secret +- [ ] Configure repository permissions +- [ ] Test content sync workflow + +### **For `edge-mining/edgemining.energy`:** +- [ ] Enable GitHub Pages +- [ ] Configure custom domain `edgemining.energy` +- [ ] Set up CNAME file +- [ ] Configure repository permissions + +## 🎯 Next Steps + +1. **Create Pull Request** for `edge-mining/docs` (content only) +2. **Create Pull Request** for `edge-mining/edgemining.energy` (VuePress site) +3. **Configure secrets** and permissions +4. **Test deployment workflow** +5. **Review and finalize content** + +## πŸ“š Documentation Files + +- **`docs/docs/`** β†’ All documentation content (this repo) +- **VuePress configuration** β†’ In edgemining.energy repo +- **Deployment workflows** β†’ In both repositories --- -## ✏️ Conclusion - -Edge Mining proposes an innovative solution to optimize the use of excess energy produced by small power plants, particularly renewable ones. Integrating Bitcoin mining is a flexible, economically advantageous, and easy-to-implement choice. With our mining management system, users can maximize the efficiency of their plant, utilize the heat produced, and contribute positively to the Bitcoin network. This approach turns a potential inefficiency into a concrete opportunity for profit and sustainable energy use. - -## 🀝 Contributions and Feedback - -We welcome contributions and feedback to make this project even better. Feel free to open issues or submit pull requests. - -Let’s mine smarter, together. +**Note**: This repository contains ONLY the documentation content. The VuePress site and deployment infrastructure are in the `edge-mining/edgemining.energy` repository. \ No newline at end of file diff --git a/REPOSITORY_STRUCTURE.md b/REPOSITORY_STRUCTURE.md new file mode 100644 index 0000000..08590d7 --- /dev/null +++ b/REPOSITORY_STRUCTURE.md @@ -0,0 +1,121 @@ +# Repository Structure Guide + +## 🎯 Overview + +Edge Mining uses **two separate repositories** for the documentation system: + +1. **`edge-mining/docs`** β†’ Content repository (Markdown files only) +2. **`edge-mining/edgemining.energy`** β†’ Site repository (VuePress + deployment) + +## πŸ“ Repository Details + +### **1. edge-mining/docs (Content Repository)** + +**Purpose**: Store only the documentation content in Markdown format. + +**Structure**: +``` +edge-mining/docs/ +β”œβ”€β”€ .github/workflows/ +β”‚ └── sync-docs.yml # Syncs content to edgemining.energy +β”œβ”€β”€ docs/ # Documentation content ONLY +β”‚ β”œβ”€β”€ intro.md # Introduction +β”‚ β”œβ”€β”€ about-us.md # About Edge Mining +β”‚ β”œβ”€β”€ product/ # Product documentation +β”‚ β”‚ └── product-cycle.md +β”‚ β”œβ”€β”€ modelling/ # Architecture & DDD +β”‚ β”‚ β”œβ”€β”€ domain-driven-architecture-overview.md +β”‚ β”‚ └── glossary.md +β”‚ β”œβ”€β”€ contribution.md # How to contribute +β”‚ └── faq.md # Frequently asked questions +└── README.md # Repository documentation +``` + +**Workflow**: +- Push to `main` β†’ Triggers sync to `edgemining.energy/docs/` +- Only syncs the `docs/` directory content + +### **2. edge-mining/edgemining.energy (Site Repository)** + +**Purpose**: VuePress site with full deployment infrastructure. + +**Structure**: +``` +edge-mining/edgemining.energy/ +β”œβ”€β”€ .github/workflows/ +β”‚ └── build-and-deploy.yml # Builds and deploys the site +β”œβ”€β”€ docs/ # VuePress site (synced from edge-mining/docs) +β”‚ β”œβ”€β”€ .vuepress/ # VuePress configuration +β”‚ β”‚ β”œβ”€β”€ config.js # Site configuration +β”‚ β”‚ β”œβ”€β”€ styles/ # Custom CSS styles +β”‚ β”‚ └── public/ # Static assets (logo, favicon) +β”‚ β”œβ”€β”€ docs/ # Documentation content (synced from edge-mining/docs) +β”‚ └── README.md # Homepage content +β”œβ”€β”€ package.json # Dependencies and scripts +└── CNAME # Custom domain configuration +``` + +**Workflow**: +- Push to `main` β†’ Builds VuePress β†’ Deploys to `edgemining.energy` +- Receives content updates from `edge-mining/docs` + +## πŸ”„ Workflow Process + +### **Content Updates (edge-mining/docs):** +1. **Edit** Markdown files in `docs/` +2. **Push** to `edge-mining/docs` +3. **GitHub Action** copies `docs/` to `edge-mining/edgemining.energy/docs/` +4. **Triggers build** in `edgemining.energy` +5. **Deploys** to `edgemining.energy` + +### **Site Updates (edge-mining/edgemining.energy):** +1. **Edit** VuePress config, styles, or other site files +2. **Push** to `edge-mining/edgemining.energy` +3. **GitHub Action** builds VuePress +4. **Deploys** to `edgemining.energy` + +## πŸ› οΈ Development Workflow + +### **For Content Writers:** +- **Repository**: `edge-mining/docs` +- **Work on**: `docs/` directory +- **Result**: Automatic sync and deployment + +### **For Site Developers:** +- **Repository**: `edge-mining/edgemining.energy` +- **Work on**: VuePress config, styles, assets +- **Result**: Direct deployment + +## πŸ” Required Setup + +### **edge-mining/docs:** +- `EDGEMINING_ENERGY_TOKEN` secret for cross-repo access + +### **edge-mining/edgemining.energy:** +- GitHub Pages enabled +- Custom domain `edgemining.energy` +- CNAME file configured + +## πŸ“‹ Benefits of This Structure + +1. **Separation of Concerns**: Content vs. presentation +2. **Content Focus**: Writers only deal with Markdown +3. **Site Flexibility**: Developers can modify site without touching content +4. **Automatic Sync**: Content changes automatically update the site +5. **Independent Deployment**: Site changes deploy immediately + +## 🎯 Pull Request Strategy + +### **Content Changes:** +- **PR to**: `edge-mining/docs` +- **Scope**: Only `docs/` directory changes +- **Result**: Automatic sync to site + +### **Site Changes:** +- **PR to**: `edge-mining/edgemining.energy` +- **Scope**: VuePress config, styles, assets +- **Result**: Direct deployment + +--- + +**Note**: This structure ensures clean separation between content management and site development while maintaining automatic synchronization. diff --git a/docs/about-us.md b/docs/about-us.md new file mode 100644 index 0000000..50069db --- /dev/null +++ b/docs/about-us.md @@ -0,0 +1,74 @@ +# About Us + +## Our Story + +Edge Mining was born from a simple observation: energy often goes unused during low-demand periods. Instead of selling this energy cheaply, investing in costly storage solutions, or simply wasting it, we saw an opportunity to convert surplus energy directly into Bitcoin, creating sustainable and intelligent value. + +## Our Mission + +We believe that energy should never go to waste. Our mission is to unlock new economic possibilities from otherwise wasted resources by leveraging the power of Bitcoin mining to create value from surplus energy. + +## Why We Exist + +Energy often goes unused during low-demand periods. Instead of selling cheaply, investing in costly storage, or wasting this energy, Edge Mining converts it directly into Bitcoin, creating value sustainably and intelligently. + +## Our Approach + +### Research-Driven Development + +We take a research-driven approach to everything we do. Our team continuously explores new technologies, methodologies, and approaches to ensure that Edge Mining remains at the forefront of energy optimization. + +### Open Source Philosophy + +We believe in the power of open source. By making our code transparent and accessible, we enable collaboration, innovation, and community-driven development. There are no licensing fees - Edge Mining is 100% open source. + +### Community Focus + +Our community is at the heart of everything we do. We believe that the best solutions come from collaboration and shared knowledge. Whether you're a developer, energy enthusiast, or simply curious about the project, there's a place for you in our community. + +## We're in Alpha + +Edge Mining is currently in an early, alpha stage of development. Our research-driven approach is rapidly evolving, and features, performance, and reliability are continuously improving. + +### What This Means + +- **Active Development**: We're constantly working on new features and improvements +- **Research Phase**: We're exploring different approaches and technologies +- **Community Input**: Your feedback and contributions are invaluable +- **Rapid Evolution**: The project is changing and improving quickly + +## Key Features + +### Smart Automation + +Intelligent automation based on energy availability to maximize efficiency. Our systems automatically adjust to energy availability, ensuring optimal performance. + +### Heat Recovery + +Advanced heat recovery systems for practical applications. We don't just mine Bitcoin - we also recover and utilize the heat generated during the mining process. + +### Versatile Sizing + +Designed for small to medium energy installations. Whether you have a small solar setup or a medium-sized wind farm, Edge Mining can work for you. + +### 100% Open Source + +Fully open-source with no licensing fees. You can inspect, modify, and contribute to the codebase. + +## Get Involved + +Join our growing community of developers and energy enthusiasts. Together, we're building the future of energy optimization. + +### Discord + +Connect with our community to discuss ideas, ask questions, and collaborate on new features. + +### GitHub + +Explore our codebase, contribute to development, or fork the project to create your own solution. + +## Contact + +- **GitHub**: [edge-mining](https://github.com/edge-mining) +- **Discord**: [Join our community](https://discord.com/invite/VQa9UY5SsS) +- **Website**: [edgemining.energy](https://edgemining.energy) \ No newline at end of file diff --git a/docs/contribution.md b/docs/contribution.md new file mode 100644 index 0000000..959863c --- /dev/null +++ b/docs/contribution.md @@ -0,0 +1,168 @@ +# Contribution + +## Get Involved + +Join our growing community of developers and energy enthusiasts. Together, we're building the future of energy optimization. + +## How to Contribute + +There are many ways to contribute to Edge Mining: + +### πŸ› Report Bugs + +If you find a bug, please: + +1. Search existing [issues](https://github.com/edge-mining/docs/issues) to see if it's already been reported +2. Create a new issue with: + - Clear description of the problem + - Steps to reproduce the bug + - System information (OS, version, etc.) + - Screenshots if applicable + +### πŸ’‘ Suggest New Features + +To suggest new features: + +1. Create an issue with the `enhancement` tag +2. Describe the feature and its value to users +3. Include mockups or examples if possible + +### πŸ“ Improve Documentation + +Documentation is crucial! You can contribute by: + +- Fixing grammatical errors +- Adding examples +- Improving clarity +- Translating to other languages + +### πŸ”§ Contribute Code + +#### Prerequisites + +- Node.js 18+ +- Git +- Knowledge of JavaScript/TypeScript +- Familiarity with Domain-Driven Design principles + +#### Development Environment Setup + +```bash +# Fork and clone the repository +git clone https://github.com/your-username/edge-mining.git +cd edge-mining + +# Install dependencies +npm install + +# Start development server +npm run docs:dev + +# Run tests +npm test +``` + +#### Contribution Process + +1. **Fork** the repository on GitHub +2. **Create a branch** for your feature/fix: + ```bash + git checkout -b feature/your-feature-name + ``` +3. **Make changes** and commit: + ```bash + git add . + git commit -m "feat: add new feature" + ``` +4. **Push** to your fork: + ```bash + git push origin feature/your-feature-name + ``` +5. **Create a Pull Request** on GitHub + +#### Commit Conventions + +We use [Conventional Commits](https://www.conventionalcommits.org/): + +- `feat:` for new features +- `fix:` for bug fixes +- `docs:` for documentation changes +- `style:` for formatting changes +- `refactor:` for code refactoring +- `test:` for adding or modifying tests +- `chore:` for build/configuration changes + +### πŸ§ͺ Testing + +Help us test: + +- Try new features +- Verify bug fixes +- Test on different operating systems +- Report performance issues + +## Code Guidelines + +### Code Style + +- Follow the project's ESLint conventions +- Write readable, well-commented code +- Add tests for new features +- Maintain high test coverage + +### Architecture + +- Keep code modular +- Follow SOLID principles +- Avoid code duplication +- Document public APIs + +### Domain-Driven Design + +Since Edge Mining follows Domain-Driven Design principles: + +- **Entities**: Implement as classes with identity and lifecycle +- **Value Objects**: Immutable objects representing concepts +- **Aggregates**: Clusters of entities with consistency boundaries +- **Repositories**: Abstract data access for aggregates +- **Services**: Domain logic that doesn't belong to entities + +## Review Process + +1. **Automatic checks**: All PRs must pass automatic tests +2. **Code review**: At least one maintainer must approve +3. **Testing**: Changes must be tested +4. **Documentation**: Update documentation if necessary + +## Community + +### Communication Channels + +- **GitHub Issues**: For bugs and feature requests +- **GitHub Discussions**: For general discussions +- **Discord**: [Join our community](https://discord.gg/edgemining) +- **Main Website**: [edgemining.energy](https://edgemining.energy) + +### Events + +- **Hacktoberfest**: Participate every October +- **Community calls**: Monthly community calls +- **Development sprints**: Intensive development sessions + +## Acknowledgments + +All contributors are listed in the [CONTRIBUTORS.md](https://github.com/edge-mining/docs/blob/main/CONTRIBUTORS.md) file. + +## License + +By contributing to Edge Mining, you agree that your contributions will be released under the MIT license of the project. + +## Questions? + +If you have questions about contributing, don't hesitate to: + +- Open an issue on GitHub +- Ask on GitHub Discussions +- Contact the maintainers on Discord + +Thank you for your contribution! πŸš€ \ No newline at end of file diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 0000000..e62a35e --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,157 @@ +# Frequently Asked Questions (FAQ) + +## General Questions + +### What is Edge Mining? + +Edge Mining is a research-driven, open-source project that transforms surplus energy into Bitcoin-powered digital value. Instead of wasting energy during low-demand periods, Edge Mining converts it directly into Bitcoin, creating sustainable and intelligent value. + +### Why does Edge Mining exist? + +Energy often goes unused during low-demand periods. Instead of selling cheaply, investing in costly storage, or wasting this energy, Edge Mining converts it directly into Bitcoin, creating value sustainably and intelligently. + +### What stage of development is Edge Mining in? + +Edge Mining is currently in an **alpha stage** of development. Our research-driven approach is rapidly evolving, and features, performance, and reliability are continuously improving. + +## Technical Questions + +### What are the key features of Edge Mining? + +- **Smart Automation**: Intelligent automation based on energy availability to maximize efficiency +- **Heat Recovery**: Advanced heat recovery systems for practical applications +- **Versatile Sizing**: Designed for small to medium energy installations +- **100% Open Source**: Fully open-source with no licensing fees + +### What energy sources does Edge Mining support? + +Edge Mining is designed to work with various energy sources, including: +- Solar power +- Wind energy +- Hydroelectric power +- Any other renewable or surplus energy source + +### How does the heat recovery system work? + +Our advanced heat recovery systems capture the heat generated during Bitcoin mining and convert it into useful energy for practical applications, improving overall efficiency. + +### Is Edge Mining really 100% open source? + +Yes! Edge Mining is fully open-source with no licensing fees. You can inspect, modify, and contribute to the codebase. + +## Getting Started + +### How can I get involved with Edge Mining? + +There are several ways to get involved: + +1. **Join our Discord community** to discuss ideas and ask questions +2. **Explore our GitHub repository** to understand the codebase +3. **Contribute to development** by submitting pull requests +4. **Help with documentation** and testing +5. **Share feedback** and suggestions + +### Do I need technical skills to contribute? + +While technical skills are helpful, there are many ways to contribute: +- **Documentation**: Help improve our documentation +- **Testing**: Test features and report bugs +- **Community**: Help answer questions and support other users +- **Feedback**: Share ideas and suggestions + +### How can I stay updated on Edge Mining development? + +- **GitHub**: Follow our [repository](https://github.com/edge-mining) for code updates +- **Discord**: Join our [community](https://discord.com/invite/VQa9UY5SsS) for real-time discussions +- **Website**: Check [edgemining.energy](https://edgemining.energy) for updates + +## Community and Support + +### Where can I get help? + +- **Discord**: [Join our community](https://discord.gg/edgemining) for real-time support +- **GitHub Issues**: Report bugs and request features +- **GitHub Discussions**: Ask questions and share ideas +- **Documentation**: Explore our comprehensive documentation + +### How can I report a bug? + +1. Search existing [issues](https://github.com/edge-mining/docs/issues) to see if it's already been reported +2. Create a new issue with: + - Clear description of the problem + - Steps to reproduce the bug + - System information (OS, version, etc.) + - Screenshots if applicable + +### How can I suggest a new feature? + +1. Create an issue with the `enhancement` tag +2. Describe the feature and its value to users +3. Include mockups or examples if possible + +## Development and Architecture + +### What is Domain-Driven Design (DDD)? + +Domain-Driven Design is an approach to software development that focuses on creating a shared understanding between technical and non-technical stakeholders. Edge Mining uses DDD principles to organize code around business domains. + +### What technologies does Edge Mining use? + +Edge Mining uses modern web technologies and follows best practices for: +- **Backend**: Node.js/TypeScript with clean architecture +- **Frontend**: Modern web frameworks +- **Database**: Efficient data storage solutions +- **Infrastructure**: Scalable deployment options + +### How is the project organized? + +The project follows a modular architecture with clear separation of concerns: +- **Mining Domain**: Core mining functionality +- **Network Domain**: Communication and connectivity +- **Wallet Domain**: Cryptocurrency management +- **User Domain**: User management and authentication + +## Future Plans + +### What's the roadmap for Edge Mining? + +**Short Term (Next 6 Months)**: +- Complete alpha stage development +- Stabilize core features +- Improve documentation +- Expand community engagement + +**Medium Term (6-12 Months)**: +- Release beta version +- Implement advanced automation features +- Enhance heat recovery systems +- Scale to larger installations + +**Long Term (1+ Years)**: +- Production-ready release +- Advanced AI-powered optimization +- Integration with multiple energy sources +- Global community adoption + +### Will Edge Mining support other cryptocurrencies? + +Currently, Edge Mining focuses on Bitcoin. Future support for other cryptocurrencies will be considered based on community needs and technical feasibility. + +## Contact and Links + +### Where can I find more information? + +- **Website**: [edgemining.energy](https://edgemining.energy) +- **GitHub**: [edge-mining/docs](https://github.com/edge-mining/docs) +- **Discord**: [Join our community](https://discord.gg/edgemining) + +### How can I contact the team? + +The best way to contact us is through: +- **Discord**: For real-time communication +- **GitHub Issues**: For bug reports and feature requests +- **GitHub Discussions**: For general questions and discussions + +--- + +*This FAQ is continuously updated. If you have a question that's not answered here, please ask in our [Discord community](https://discord.gg/edgemining) or create a [GitHub discussion](https://github.com/edge-mining/docs/discussions).* \ No newline at end of file diff --git a/docs/intro.md b/docs/intro.md new file mode 100644 index 0000000..25f4a6f --- /dev/null +++ b/docs/intro.md @@ -0,0 +1,39 @@ +# Introduction + +Welcome to Edge Mining - a research-driven, open-source project that transforms surplus energy into Bitcoin-powered digital value. + +## What is Edge Mining? + +Edge Mining is an innovative solution that addresses the challenge of unused energy during low-demand periods. Instead of selling energy cheaply, investing in costly storage, or simply wasting it, Edge Mining converts surplus energy directly into Bitcoin, creating sustainable and intelligent value. + +## Our Mission + +We believe that energy should never go to waste. Our mission is to unlock new economic possibilities from otherwise wasted resources by leveraging the power of Bitcoin mining to create value from surplus energy. + +## Key Principles + +- **Sustainability**: Convert waste energy into valuable digital assets +- **Intelligence**: Smart automation based on energy availability +- **Efficiency**: Maximize the value of every kilowatt-hour +- **Open Source**: Transparent, community-driven development +- **Innovation**: Research-driven approach to energy optimization + +## Current Status + +Edge Mining is currently in an **alpha stage** of development. Our research-driven approach is rapidly evolving, and features, performance, and reliability are continuously improving. + +## Getting Started + +To get involved with Edge Mining: + +1. **Explore the Documentation**: Start with our [About Us](/docs/about-us.html) page +2. **Understand the Product**: Learn about our [Product Cycle](/docs/product/product-cycle.html) +3. **Study the Architecture**: Dive into our [Domain-Driven Architecture](/docs/modelling/domain-driven-architecture-overview.html) +4. **Join the Community**: Connect with us on [Discord](https://discord.gg/edgemining) and [GitHub](https://github.com/edge-mining/docs) + +## Next Steps + +- [About Us](/docs/about-us.html) - Learn more about our mission and values +- [Product Cycle](/docs/product/product-cycle.html) - Understand our development process +- [Contribution](/docs/contribution.html) - Find out how to contribute +- [FAQ](/docs/faq.html) - Get answers to common questions \ No newline at end of file diff --git a/docs/modelling/README.md b/docs/modelling/README.md new file mode 100644 index 0000000..4a2237f --- /dev/null +++ b/docs/modelling/README.md @@ -0,0 +1,59 @@ +# Architecture Documentation + +This section contains the architectural documentation for the Edge Mining platform, focusing on Domain-Driven Design principles and system architecture. + +## Overview + +Edge Mining follows a **Domain-Driven Design (DDD)** approach to create a clean, maintainable, and scalable architecture. The system is organized into distinct domains and subdomains, each with clear boundaries and responsibilities. + +## Documentation Structure + +### [Domain-Driven Architecture Overview](./domain-driven-architecture-overview.md) + +A comprehensive overview of the Edge Mining architecture, including: + +- **Core Domains**: Mining, Network, Wallet, and User domains +- **Subdomains**: Specific areas within each domain +- **Bounded Contexts**: Clear boundaries between domains +- **Architectural Patterns**: Clean Architecture, CQRS, Event Sourcing +- **Technology Stack**: Backend, frontend, and infrastructure choices +- **Implementation Guidelines**: Code organization and testing strategies + +### [Glossary](./glossary.md) + +A comprehensive glossary of terms and concepts used throughout the Edge Mining documentation and codebase, including: + +- **Domain-Driven Design terms**: Aggregate, Entity, Value Object, etc. +- **Cryptocurrency terms**: Block, Hash, Mining Pool, etc. +- **Technical terms**: API, Repository, Service, etc. + +## Key Architectural Principles + +1. **Domain-Driven Design**: Organize code around business domains +2. **Clean Architecture**: Separate concerns into layers +3. **CQRS**: Separate read and write operations +4. **Event Sourcing**: Store all changes as events +5. **Microservices**: Decompose into small, focused services + +## Getting Started with Architecture + +1. **Read the Overview**: Start with the [Domain-Driven Architecture Overview](./domain-driven-architecture-overview.md) +2. **Understand the Glossary**: Familiarize yourself with the [Glossary](./glossary.md) +3. **Explore the Code**: Look at the actual implementation in the main repository +4. **Join Discussions**: Participate in architectural discussions on GitHub + +## Contributing to Architecture + +When contributing to the architecture: + +1. **Follow DDD Principles**: Organize code around business domains +2. **Maintain Boundaries**: Keep bounded contexts separate +3. **Document Changes**: Update this documentation when making architectural changes +4. **Get Review**: Have architectural changes reviewed by the team + +## Related Resources + +- [Main Project Repository](https://github.com/edge-mining/docs) +- [Domain-Driven Design Resources](https://martinfowler.com/bliki/DomainDrivenDesign.html) +- [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) +- [Event Sourcing](https://martinfowler.com/eaaDev/EventSourcing.html) \ No newline at end of file diff --git a/docs/modelling/domain-driven-architecture-overview.md b/docs/modelling/domain-driven-architecture-overview.md new file mode 100644 index 0000000..1bdd2f3 --- /dev/null +++ b/docs/modelling/domain-driven-architecture-overview.md @@ -0,0 +1,245 @@ +# Domain-Driven Architecture Overview + +## Introduction + +Edge Mining follows a **Domain-Driven Design (DDD)** approach to create a clean, maintainable, and scalable architecture. This document provides an overview of the domain model and architectural decisions that guide the development of the Edge Mining platform. + +## Core Domains + +The Edge Mining system is organized into several core domains, each representing a distinct area of business functionality: + +### 1. Mining Domain + +The **Mining Domain** is the heart of the system, responsible for all mining-related operations. + +**Key Concepts:** +- **Mining Pool**: A collection of miners working together to solve cryptographic puzzles +- **Mining Task**: A specific computational task assigned to miners +- **Hash Rate**: The computational power contributed by a miner +- **Block Reward**: The cryptocurrency reward for successfully mining a block + +**Responsibilities:** +- Task distribution and management +- Hash rate calculation and monitoring +- Block validation and submission +- Reward distribution + +### 2. Network Domain + +The **Network Domain** handles all network-related operations and peer-to-peer communication. + +**Key Concepts:** +- **Node**: A participant in the Edge Mining network +- **Peer**: Another node in the network +- **Connection**: A network connection between nodes +- **Message**: A communication unit between nodes + +**Responsibilities:** +- Peer discovery and management +- Message routing and delivery +- Network topology maintenance +- Connection health monitoring + +### 3. Wallet Domain + +The **Wallet Domain** manages cryptocurrency wallets and transactions. + +**Key Concepts:** +- **Wallet**: A digital wallet for storing cryptocurrency +- **Address**: A unique identifier for a wallet +- **Transaction**: A transfer of cryptocurrency +- **Balance**: The current amount of cryptocurrency in a wallet + +**Responsibilities:** +- Wallet creation and management +- Transaction processing +- Balance tracking +- Security and encryption + +### 4. User Domain + +The **User Domain** handles user management and authentication. + +**Key Concepts:** +- **User**: An individual using the Edge Mining platform +- **Account**: A user's account information +- **Profile**: User profile and preferences +- **Session**: An active user session + +**Responsibilities:** +- User registration and authentication +- Profile management +- Session handling +- Access control + +## Subdomains + +Each core domain is further divided into subdomains that handle specific aspects of the domain: + +### Mining Subdomains + +- **Task Management**: Handles mining task creation, distribution, and completion +- **Performance Monitoring**: Tracks mining performance and statistics +- **Reward Processing**: Manages reward calculation and distribution + +### Network Subdomains + +- **Peer Discovery**: Finds and maintains connections with other nodes +- **Message Handling**: Processes and routes network messages +- **Topology Management**: Maintains network structure and routing + +### Wallet Subdomains + +- **Address Management**: Handles wallet address creation and validation +- **Transaction Processing**: Manages transaction creation and verification +- **Security**: Implements wallet security measures + +### User Subdomains + +- **Authentication**: Handles user login and session management +- **Profile Management**: Manages user profiles and preferences +- **Authorization**: Controls access to system resources + +## Bounded Contexts + +Each domain is implemented within its own **Bounded Context**, which defines clear boundaries and interfaces: + +### Context Mapping + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Mining β”‚ β”‚ Network β”‚ β”‚ Wallet β”‚ +β”‚ Context │◄──►│ Context │◄──►│ Context β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ User β”‚ β”‚ Analytics β”‚ β”‚ Notification β”‚ +β”‚ Context β”‚ β”‚ Context β”‚ β”‚ Context β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### Context Relationships + +- **Shared Kernel**: Common utilities and shared models +- **Customer-Supplier**: Clear dependencies between contexts +- **Conformist**: Adherence to external standards and protocols +- **Anti-Corruption Layer**: Protection against external system changes + +## Architectural Patterns + +### Clean Architecture + +The system follows Clean Architecture principles with clear separation of concerns: + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Presentation Layer β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ Application Layer β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ Domain Layer β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ Infrastructure Layer β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### CQRS (Command Query Responsibility Segregation) + +The system separates read and write operations: + +- **Commands**: Operations that change system state +- **Queries**: Operations that retrieve data +- **Command Handlers**: Process commands and update state +- **Query Handlers**: Retrieve and format data for display + +### Event Sourcing + +Key domain events are stored and can be replayed to reconstruct system state: + +- **Domain Events**: Significant occurrences in the domain +- **Event Store**: Persistent storage of domain events +- **Event Handlers**: React to domain events +- **Projections**: Build read models from events + +## Technology Stack + +### Backend + +- **Language**: Node.js/TypeScript +- **Framework**: Express.js or Fastify +- **Database**: PostgreSQL with event sourcing +- **Message Queue**: Redis or RabbitMQ +- **Caching**: Redis + +### Frontend + +- **Framework**: React or Vue.js +- **State Management**: Redux or Vuex +- **UI Library**: Material-UI or Vuetify +- **Real-time**: WebSocket connections + +### Infrastructure + +- **Containerization**: Docker +- **Orchestration**: Kubernetes +- **Monitoring**: Prometheus + Grafana +- **Logging**: ELK Stack (Elasticsearch, Logstash, Kibana) + +## Implementation Guidelines + +### Domain Model Implementation + +1. **Entities**: Implement as classes with identity and lifecycle +2. **Value Objects**: Immutable objects representing concepts +3. **Aggregates**: Clusters of entities with consistency boundaries +4. **Repositories**: Abstract data access for aggregates +5. **Services**: Domain logic that doesn't belong to entities + +### Code Organization + +``` +src/ +β”œβ”€β”€ domains/ +β”‚ β”œβ”€β”€ mining/ +β”‚ β”‚ β”œβ”€β”€ entities/ +β”‚ β”‚ β”œβ”€β”€ value-objects/ +β”‚ β”‚ β”œβ”€β”€ aggregates/ +β”‚ β”‚ β”œβ”€β”€ repositories/ +β”‚ β”‚ └── services/ +β”‚ β”œβ”€β”€ network/ +β”‚ β”œβ”€β”€ wallet/ +β”‚ └── user/ +β”œβ”€β”€ shared/ +β”‚ β”œβ”€β”€ domain/ +β”‚ β”œβ”€β”€ infrastructure/ +β”‚ └── application/ +└── presentation/ + β”œβ”€β”€ api/ + └── web/ +``` + +### Testing Strategy + +- **Unit Tests**: Test individual domain objects and services +- **Integration Tests**: Test interactions between components +- **End-to-End Tests**: Test complete user workflows +- **Performance Tests**: Ensure system meets performance requirements + +## Benefits of This Architecture + +1. **Maintainability**: Clear separation of concerns makes the code easier to maintain +2. **Scalability**: Modular design allows for independent scaling of components +3. **Testability**: Domain logic is isolated and easily testable +4. **Flexibility**: Changes in one domain don't affect others +5. **Team Productivity**: Teams can work on different domains independently + +## Next Steps + +1. **Detailed Domain Models**: Create detailed models for each domain +2. **API Design**: Design RESTful APIs for each bounded context +3. **Database Schema**: Design database schemas for each context +4. **Implementation Plan**: Create a phased implementation plan +5. **Team Structure**: Organize teams around domain boundaries + +This architecture provides a solid foundation for building a robust, scalable, and maintainable Edge Mining platform that can evolve with changing requirements and growing user needs. \ No newline at end of file diff --git a/docs/modelling/glossary.md b/docs/modelling/glossary.md new file mode 100644 index 0000000..dda71aa --- /dev/null +++ b/docs/modelling/glossary.md @@ -0,0 +1,160 @@ +# Glossary + +This glossary defines key terms and concepts used throughout the Edge Mining documentation and codebase. + +## A + +### Aggregate +A cluster of domain objects that can be treated as a single unit for data changes. Aggregates have a root entity that maintains consistency boundaries. + +### Anti-Corruption Layer +A design pattern that isolates a system from external dependencies by translating between different data models and protocols. + +### API (Application Programming Interface) +A set of rules and protocols that allows different software applications to communicate with each other. + +## B + +### Block +A collection of transactions in a blockchain that has been cryptographically linked to the previous block. + +### Block Reward +The cryptocurrency reward given to miners for successfully mining a new block in the blockchain. + +### Bounded Context +A boundary within which a particular domain model is defined and applicable. It helps manage complexity by clearly defining what belongs to the domain and what doesn't. + +## C + +### Command +An object that represents an intention to change the state of the system. Commands are processed by command handlers. + +### CQRS (Command Query Responsibility Segregation) +A pattern that separates read and write operations for a data store, allowing them to be optimized independently. + +### Cryptocurrency +A digital or virtual currency that uses cryptography for security and operates on a decentralized network. + +## D + +### Domain +A sphere of knowledge, influence, or activity. In Domain-Driven Design, a domain represents a specific area of business functionality. + +### Domain Event +A significant occurrence that happened within the domain. Domain events are used to communicate changes between different parts of the system. + +### Domain Model +A conceptual model of the domain that incorporates both behavior and data. It represents the core business logic and rules. + +### Domain Service +A service that implements domain logic that doesn't naturally belong to any entity or value object. + +## E + +### Edge Device +A computing device that performs data processing at the edge of a network, closer to the data source, rather than in a centralized location. + +### Entity +An object that has a unique identity and a lifecycle that can change over time. Entities are defined by their identity rather than their attributes. + +### Event Sourcing +A pattern where all changes to application state are stored as a sequence of events. The current state can be reconstructed by replaying these events. + +## F + +### Fork +A situation where a blockchain splits into two separate chains, usually due to a disagreement in the network about which version of the blockchain to follow. + +## H + +### Hash +A mathematical function that converts input data of any size into a fixed-size string of characters. In cryptocurrency mining, hashes are used to secure the blockchain. + +### Hash Rate +The speed at which a computer or network can perform hash operations. It's a measure of mining power and is typically expressed in hashes per second (H/s). + +## M + +### Mining +The process of validating and adding new transactions to a blockchain by solving complex mathematical puzzles. + +### Mining Pool +A group of miners who combine their computational resources to increase their chances of successfully mining blocks and earning rewards. + +### Mining Task +A specific computational task assigned to miners, typically involving finding a hash that meets certain criteria. + +## N + +### Node +A computer or device that participates in a blockchain network by maintaining a copy of the blockchain and validating transactions. + +### Nonce +A number used once in cryptographic communications. In mining, it's a value that miners change to try to find a valid hash. + +## P + +### Peer +Another node in the network with which a node can communicate directly. + +### Proof of Work (PoW) +A consensus mechanism that requires participants to perform computational work to validate transactions and create new blocks. + +## Q + +### Query +An object that represents a request for data from the system. Queries are processed by query handlers and do not change system state. + +## R + +### Repository +An abstraction that encapsulates the logic required to access data sources. Repositories provide a collection-like interface for accessing domain objects. + +### Reward +The cryptocurrency payment given to miners for successfully mining a block or contributing to the network. + +## S + +### Service +A stateless object that implements domain logic that doesn't belong to any entity or value object. + +### Shared Kernel +A design pattern where multiple bounded contexts share a common subset of the domain model, including code, database schema, and language. + +### Smart Contract +A self-executing contract with the terms of the agreement directly written into code. Smart contracts run on blockchain platforms. + +## T + +### Transaction +A record of a cryptocurrency transfer from one address to another. Transactions are grouped together in blocks. + +### Transaction Fee +A small amount of cryptocurrency paid to miners for processing and validating a transaction. + +## U + +### User Story +A description of a feature from the perspective of the end user. User stories help guide development by focusing on user value. + +## V + +### Value Object +An object that represents a descriptive aspect of the domain with no conceptual identity. Value objects are defined by their attributes rather than their identity. + +## W + +### Wallet +A digital tool that allows users to store, send, and receive cryptocurrency. Wallets contain private keys that are used to sign transactions. + +### WebSocket +A communication protocol that provides full-duplex communication channels over a single TCP connection, enabling real-time data exchange. + +## Z + +### Zero-Knowledge Proof +A cryptographic method that allows one party to prove to another that a statement is true without revealing any information beyond the validity of the statement itself. + +--- + +This glossary is a living document that will be updated as the Edge Mining platform evolves. If you encounter terms that are not defined here, please contribute to the documentation by adding them. \ No newline at end of file diff --git a/docs/product/product-cycle.md b/docs/product/product-cycle.md new file mode 100644 index 0000000..c060d2d --- /dev/null +++ b/docs/product/product-cycle.md @@ -0,0 +1,139 @@ +# Product Cycle + +## Overview + +Edge Mining follows a research-driven product development cycle that emphasizes continuous improvement, community feedback, and sustainable innovation. + +## Development Phases + +### Alpha Stage (Current) + +We are currently in the alpha stage of development. This means: + +- **Research Phase**: Exploring different approaches and technologies +- **Prototype Development**: Building and testing initial concepts +- **Community Feedback**: Gathering input from early adopters +- **Rapid Iteration**: Quickly implementing improvements based on feedback + +### Key Characteristics of Alpha + +- **Experimental Features**: New features are being tested and refined +- **Performance Optimization**: Continuous work on efficiency and reliability +- **Architecture Evolution**: The system architecture is being refined +- **Documentation Development**: Comprehensive documentation is being created + +## Development Process + +### 1. Research and Planning + +- Identify energy optimization opportunities +- Research new technologies and approaches +- Plan feature development and architecture improvements +- Gather community feedback and requirements + +### 2. Design and Architecture + +- Design new features using Domain-Driven Design principles +- Create architectural diagrams and documentation +- Plan integration with existing systems +- Consider scalability and maintainability + +### 3. Development and Testing + +- Implement new features following open-source best practices +- Conduct thorough testing and validation +- Optimize performance and efficiency +- Ensure code quality and documentation + +### 4. Community Review + +- Share developments with the community +- Gather feedback and suggestions +- Incorporate improvements based on community input +- Maintain transparency throughout the process + +### 5. Release and Iteration + +- Release new versions with improvements +- Monitor performance and gather usage data +- Plan next iteration based on feedback +- Continue the cycle of improvement + +## Key Focus Areas + +### Smart Automation + +- **Energy Availability Detection**: Automatically detect when surplus energy is available +- **Intelligent Scheduling**: Optimize mining operations based on energy patterns +- **Performance Monitoring**: Track and optimize system performance +- **Adaptive Algorithms**: Continuously improve automation logic + +### Heat Recovery Systems + +- **Thermal Management**: Efficient heat capture and utilization +- **Practical Applications**: Convert heat into useful energy +- **System Integration**: Seamless integration with existing infrastructure +- **Efficiency Optimization**: Maximize heat recovery efficiency + +### Versatile Sizing + +- **Scalable Architecture**: Support for various installation sizes +- **Modular Design**: Easy to adapt to different energy sources +- **Flexible Configuration**: Customizable for specific needs +- **Resource Optimization**: Efficient use of available resources + +### Open Source Development + +- **Transparent Codebase**: All code is open and accessible +- **Community Contributions**: Welcome contributions from the community +- **Documentation**: Comprehensive documentation for all features +- **Licensing**: No licensing fees or restrictions + +## Future Roadmap + +### Short Term (Next 6 Months) + +- Complete alpha stage development +- Stabilize core features +- Improve documentation +- Expand community engagement + +### Medium Term (6-12 Months) + +- Release beta version +- Implement advanced automation features +- Enhance heat recovery systems +- Scale to larger installations + +### Long Term (1+ Years) + +- Production-ready release +- Advanced AI-powered optimization +- Integration with multiple energy sources +- Global community adoption + +## Community Involvement + +The product cycle is heavily influenced by community feedback and contributions: + +- **Feature Requests**: Community suggestions drive new features +- **Bug Reports**: Community helps identify and fix issues +- **Code Contributions**: Community members contribute to development +- **Testing and Validation**: Community provides real-world testing +- **Documentation**: Community helps improve documentation + +## Get Involved + +To participate in the product development cycle: + +1. **Join the Community**: Connect with us on [Discord](https://discord.gg/edgemining) +2. **Explore the Code**: Check out our [GitHub repository](https://github.com/edge-mining/docs) +3. **Provide Feedback**: Share your ideas and suggestions +4. **Contribute Code**: Submit pull requests and improvements +5. **Test Features**: Help test new features and provide feedback + +## Contact + +- **GitHub**: [edge-mining/docs](https://github.com/edge-mining/docs) +- **Discord**: [Join our community](https://discord.gg/edgemining) +- **Website**: [edgemining.energy](https://edgemining.energy) \ No newline at end of file From 2aa604674665ab321be98ca047c8dd9c9b8a478d Mon Sep 17 00:00:00 2001 From: bitsalv Date: Sun, 31 Aug 2025 01:35:05 +0200 Subject: [PATCH 2/4] fix: correct broken links and update repository structure - Fix broken .html links to .md format - Update repository references from edge-mining to bitsalv - Correct Discord invite link - Update README to reflect actual repository structure - Synchronize documentation between repositories --- README.md | 78 ++++++++++++++++++++++------------------ docs/intro.md | 16 ++++----- docs/modelling/README.md | 2 +- 3 files changed, 52 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 7a266bd..536893f 100644 --- a/README.md +++ b/README.md @@ -4,25 +4,28 @@ This repository contains **only the documentation content** (Markdown files) for ## πŸ—οΈ Repository Structure -### **This Repository (`edge-mining/docs`):** +### **This Repository (`bitsalv/edgemining-docs`):** ``` -edge-mining/docs/ -└── docs/ # Documentation content ONLY - β”œβ”€β”€ intro.md # Introduction - β”œβ”€β”€ about-us.md # About Edge Mining - β”œβ”€β”€ product/ # Product documentation - β”‚ └── product-cycle.md - β”œβ”€β”€ modelling/ # Architecture & DDD - β”‚ β”œβ”€β”€ domain-driven-architecture-overview.md - β”‚ └── glossary.md - β”œβ”€β”€ contribution.md # How to contribute - └── faq.md # Frequently asked questions +edgemining-docs/ +β”œβ”€β”€ docs/ # Documentation content ONLY +β”‚ β”œβ”€β”€ intro.md # Introduction +β”‚ β”œβ”€β”€ about-us.md # About Edge Mining +β”‚ β”œβ”€β”€ product/ # Product documentation +β”‚ β”‚ └── product-cycle.md +β”‚ β”œβ”€β”€ modelling/ # Architecture & DDD +β”‚ β”‚ β”œβ”€β”€ README.md +β”‚ β”‚ β”œβ”€β”€ domain-driven-architecture-overview.md +β”‚ β”‚ └── glossary.md +β”‚ β”œβ”€β”€ contribution.md # How to contribute +β”‚ └── faq.md # Frequently asked questions +β”œβ”€β”€ images/ # Documentation images +└── .github/workflows/ # Sync workflow ``` -### **Site Repository (`edge-mining/edgemining.energy`):** +### **Site Repository (`bitsalv/edgemining.energy`):** ``` -edge-mining/edgemining.energy/ -β”œβ”€β”€ docs/ # VuePress site (copied from this repo) +edgemining.energy/ +β”œβ”€β”€ docs/ # VuePress site (synced from this repo) β”‚ β”œβ”€β”€ .vuepress/ # VuePress configuration β”‚ β”‚ β”œβ”€β”€ config.js # Site configuration β”‚ β”‚ β”œβ”€β”€ styles/ # Custom CSS styles @@ -38,26 +41,26 @@ edge-mining/edgemining.energy/ ### **Two-Way Sync Process:** #### **1. Content Changes (this repo):** -- **Push to `edge-mining/docs`** β†’ Triggers sync workflow -- **Copies `docs/`** β†’ `edge-mining/edgemining.energy/docs/` +- **Push to `bitsalv/edgemining-docs`** β†’ Triggers sync workflow +- **Copies `docs/`** β†’ `bitsalv/edgemining.energy/docs/` - **Triggers build** β†’ Deploys to `edgemining.energy` #### **2. Site Changes (edgemining.energy repo):** -- **Push to `edge-mining/edgemining.energy`** β†’ Triggers build workflow +- **Push to `bitsalv/edgemining.energy`** β†’ Triggers build workflow - **Builds VuePress** β†’ Deploys to `edgemining.energy` ## πŸ› οΈ Setup Required ### **1. Repository Token** -In the `edge-mining/docs` repository, add this secret: +In the `bitsalv/edgemining-docs` repository, add this secret: ``` EDGEMINING_ENERGY_TOKEN = Personal Access Token with permissions on edgemining.energy ``` ### **2. Repository Permissions** The token must have access to: -- `edge-mining/docs` (read) -- `edge-mining/edgemining.energy` (read/write) +- `bitsalv/edgemining-docs` (read) +- `bitsalv/edgemining.energy` (read/write) ## πŸ“ Current Status @@ -68,22 +71,25 @@ The token must have access to: - [x] Custom CSS styling with Edge Mining brand colors - [x] Logo and favicon from Edge Mining organization - [x] Navigation structure (Home, Docs, Discord, GitHub) +- [x] Fixed broken links in documentation +- [x] Synchronized content between repositories ### **⚠️ Pending:** +- [ ] Configure `EDGEMINING_ENERGY_TOKEN` secret for automatic sync +- [ ] Test deployment workflow - [ ] Content review and finalization -- [ ] Visual design improvements -- [ ] Testing of deployment workflow ## πŸ”§ Local Development ### **For Content Development (this repo):** ```bash # Edit Markdown files in docs/ -# Push to trigger automatic sync +# Push to trigger automatic sync (when token is configured) ``` ### **For Site Development (edgemining.energy repo):** ```bash +cd edgemining.energy npm run docs:dev # Development server npm run docs:build # Production build npm run docs:clean # Clean build @@ -93,33 +99,35 @@ npm run docs:clean # Clean build - **Development**: `http://localhost:8080/` (from edgemining.energy repo) - **Production**: `https://edgemining.energy` -## πŸ“‹ Pull Request Checklist +## πŸ“‹ Setup Checklist -### **For `edge-mining/docs`:** +### **For `bitsalv/edgemining-docs`:** +- [x] Repository structure corrected +- [x] Documentation links fixed - [ ] Add `EDGEMINING_ENERGY_TOKEN` secret - [ ] Configure repository permissions - [ ] Test content sync workflow -### **For `edge-mining/edgemining.energy`:** +### **For `bitsalv/edgemining.energy`:** +- [x] VuePress configuration complete +- [x] Build workflow functional - [ ] Enable GitHub Pages - [ ] Configure custom domain `edgemining.energy` - [ ] Set up CNAME file -- [ ] Configure repository permissions ## 🎯 Next Steps -1. **Create Pull Request** for `edge-mining/docs` (content only) -2. **Create Pull Request** for `edge-mining/edgemining.energy` (VuePress site) -3. **Configure secrets** and permissions -4. **Test deployment workflow** -5. **Review and finalize content** +1. **Configure GitHub Secrets** for automatic sync +2. **Test deployment workflow** +3. **Review and finalize content** +4. **Enable GitHub Pages** with custom domain ## πŸ“š Documentation Files -- **`docs/docs/`** β†’ All documentation content (this repo) +- **`docs/`** β†’ All documentation content (this repo) - **VuePress configuration** β†’ In edgemining.energy repo - **Deployment workflows** β†’ In both repositories --- -**Note**: This repository contains ONLY the documentation content. The VuePress site and deployment infrastructure are in the `edge-mining/edgemining.energy` repository. \ No newline at end of file +**Note**: This repository contains ONLY the documentation content. The VuePress site and deployment infrastructure are in the `bitsalv/edgemining.energy` repository. \ No newline at end of file diff --git a/docs/intro.md b/docs/intro.md index 25f4a6f..7872e2c 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -26,14 +26,14 @@ Edge Mining is currently in an **alpha stage** of development. Our research-driv To get involved with Edge Mining: -1. **Explore the Documentation**: Start with our [About Us](/docs/about-us.html) page -2. **Understand the Product**: Learn about our [Product Cycle](/docs/product/product-cycle.html) -3. **Study the Architecture**: Dive into our [Domain-Driven Architecture](/docs/modelling/domain-driven-architecture-overview.html) -4. **Join the Community**: Connect with us on [Discord](https://discord.gg/edgemining) and [GitHub](https://github.com/edge-mining/docs) +1. **Explore the Documentation**: Start with our [About Us](./about-us.md) page +2. **Understand the Product**: Learn about our [Product Cycle](./product/product-cycle.md) +3. **Study the Architecture**: Dive into our [Domain-Driven Architecture](./modelling/domain-driven-architecture-overview.md) +4. **Join the Community**: Connect with us on [Discord](https://discord.com/invite/VQa9UY5SsS) and [GitHub](https://github.com/bitsalv/edgemining.energy) ## Next Steps -- [About Us](/docs/about-us.html) - Learn more about our mission and values -- [Product Cycle](/docs/product/product-cycle.html) - Understand our development process -- [Contribution](/docs/contribution.html) - Find out how to contribute -- [FAQ](/docs/faq.html) - Get answers to common questions \ No newline at end of file +- [About Us](./about-us.md) - Learn more about our mission and values +- [Product Cycle](./product/product-cycle.md) - Understand our development process +- [Contribution](./contribution.md) - Find out how to contribute +- [FAQ](./faq.md) - Get answers to common questions \ No newline at end of file diff --git a/docs/modelling/README.md b/docs/modelling/README.md index 4a2237f..25a24b7 100644 --- a/docs/modelling/README.md +++ b/docs/modelling/README.md @@ -53,7 +53,7 @@ When contributing to the architecture: ## Related Resources -- [Main Project Repository](https://github.com/edge-mining/docs) +- [Main Project Repository](https://github.com/bitsalv/edgemining.energy) - [Domain-Driven Design Resources](https://martinfowler.com/bliki/DomainDrivenDesign.html) - [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) - [Event Sourcing](https://martinfowler.com/eaaDev/EventSourcing.html) \ No newline at end of file From 1656b3a4a9757b0a440766c245fe7b5473b55713 Mon Sep 17 00:00:00 2001 From: bitsalv Date: Sun, 31 Aug 2025 01:45:49 +0200 Subject: [PATCH 3/4] refactor: clean repository structure and update README for editors - Remove duplicate modelling directory and unnecessary files - Delete PULL_REQUEST_GUIDE.md and REPOSITORY_STRUCTURE.md - Update README to be editor-focused with clear workflow - Add specific guidance for editors vs developers - Clarify repository relationships and contribution workflow - Fix repository references to original edge-mining repositories --- PULL_REQUEST_GUIDE.md | 143 -------------- README.md | 181 ++++++++---------- REPOSITORY_STRUCTURE.md | 121 ------------ .../domain-driven-architecture-overview.md | 107 ----------- modelling/glossary.md | 90 --------- 5 files changed, 82 insertions(+), 560 deletions(-) delete mode 100644 PULL_REQUEST_GUIDE.md delete mode 100644 REPOSITORY_STRUCTURE.md delete mode 100644 modelling/domain-driven-architecture-overview.md delete mode 100644 modelling/glossary.md diff --git a/PULL_REQUEST_GUIDE.md b/PULL_REQUEST_GUIDE.md deleted file mode 100644 index 40d1f1e..0000000 --- a/PULL_REQUEST_GUIDE.md +++ /dev/null @@ -1,143 +0,0 @@ -# Pull Request Guide - -## 🎯 Overview - -This repository (`edge-mining/docs`) contains **only the documentation content** for the Edge Mining website. The VuePress site and deployment infrastructure are in `edge-mining/edgemining.energy`. - -## πŸ“‹ Pull Request Checklist - -### **For `edge-mining/docs` (Content Repository):** - -#### **Files to Include:** -- [ ] `.github/workflows/sync-docs.yml` - Content sync workflow -- [ ] `docs/` - All documentation content -- [ ] `README.md` - Repository documentation -- [ ] `REPOSITORY_STRUCTURE.md` - Structure explanation -- [ ] `LICENSE` - MIT license -- [ ] `.gitignore` - Git ignore rules - -#### **Files NOT to Include:** -- ❌ `package.json` (not needed for content repo) -- ❌ `node_modules/` (not needed for content repo) -- ❌ VuePress configuration (goes in edgemining.energy repo) -- ❌ Build files (handled by edgemining.energy repo) - -#### **Setup Required:** -- [ ] Add `EDGEMINING_ENERGY_TOKEN` secret to repository -- [ ] Configure repository permissions for cross-repo access - -### **For `edge-mining/edgemining.energy` (Site Repository):** - -#### **Files to Include:** -- [ ] `.github/workflows/build-and-deploy.yml` - Build and deploy workflow -- [ ] `docs/.vuepress/` - VuePress configuration -- [ ] `docs/docs/` - Documentation content (synced from edge-mining/docs) -- [ ] `package.json` - Dependencies and scripts -- [ ] `CNAME` - Custom domain configuration -- [ ] `.gitignore` - Git ignore rules - -#### **Setup Required:** -- [ ] Enable GitHub Pages -- [ ] Configure custom domain `edgemining.energy` -- [ ] Set up CNAME file - -## πŸ”„ Workflow Process - -### **Content Updates:** -1. **Edit** Markdown files in `docs/` -2. **Push** to `edge-mining/docs` -3. **GitHub Action** copies `docs/` to `edge-mining/edgemining.energy/docs/` -4. **Triggers build** in `edgemining.energy` -5. **Deploys** to `edgemining.energy` - -### **Site Updates:** -1. **Edit** VuePress config, styles, or other site files -2. **Push** to `edge-mining/edgemining.energy` -3. **GitHub Action** builds VuePress -4. **Deploys** to `edgemining.energy` - -## πŸ“ PR Messages - -### **For edge-mining/docs:** -```markdown -# πŸ“š Documentation Content Setup - -## Overview -This PR sets up the content repository for Edge Mining documentation with automatic sync to the site repository. - -## What's Included -- Documentation content structure (intro, about, product, modelling, contribution, FAQ) -- GitHub Actions workflow for content synchronization -- Repository documentation and structure guide - -## Workflow -- Push to `main` β†’ Syncs content to `edge-mining/edgemining.energy` -- Content writers work only with Markdown files -- Automatic deployment via cross-repository sync - -## Setup Required -1. Add `EDGEMINING_ENERGY_TOKEN` secret -2. Configure repository permissions -3. Test content sync workflow - -## Next Steps -1. Create PR for `edge-mining/edgemining.energy` (VuePress site) -2. Configure deployment infrastructure -3. Test complete workflow -``` - -### **For edge-mining/edgemining.energy:** -```markdown -# 🌐 VuePress Site Setup - -## Overview -This PR sets up the VuePress site repository for Edge Mining with automatic deployment to edgemining.energy. - -## What's Included -- VuePress 2 configuration with custom styling -- GitHub Actions workflow for build and deployment -- Custom CSS with Edge Mining brand colors -- Logo and favicon from Edge Mining organization -- Responsive design for mobile and desktop - -## Workflow -- Push to `main` β†’ Builds VuePress β†’ Deploys to edgemining.energy -- Receives content updates from `edge-mining/docs` -- Independent deployment for site changes - -## Setup Required -1. Enable GitHub Pages -2. Configure custom domain `edgemining.energy` -3. Set up CNAME file -4. Test deployment workflow - -## Next Steps -1. Configure content sync from `edge-mining/docs` -2. Test complete deployment workflow -3. Review and finalize content -``` - -## 🎯 Repository Structure - -### **edge-mining/docs (Content):** -``` -docs/ -β”œβ”€β”€ intro.md -β”œβ”€β”€ about-us.md -β”œβ”€β”€ product/ -β”œβ”€β”€ modelling/ -β”œβ”€β”€ contribution.md -└── faq.md -``` - -### **edge-mining/edgemining.energy (Site):** -``` -docs/ -β”œβ”€β”€ .vuepress/ # VuePress configuration -β”œβ”€β”€ docs/ # Content (synced from edge-mining/docs) -└── README.md # Homepage -``` - ---- - -**Note**: This guide ensures proper separation between content management and site development. diff --git a/README.md b/README.md index 536893f..e572d27 100644 --- a/README.md +++ b/README.md @@ -1,133 +1,116 @@ # Edge Mining Documentation Repository -This repository contains **only the documentation content** (Markdown files) for the Edge Mining website. The live site at [edgemining.energy](https://edgemining.energy) is automatically built and deployed via GitHub Actions. +This repository contains **only the documentation content** (Markdown files) for the Edge Mining website. The live site at [edgemining.energy](https://edgemining.energy) is automatically built and deployed from the [edge-mining/edgemining.energy](https://github.com/edge-mining/edgemining.energy) repository. -## πŸ—οΈ Repository Structure +## 🎯 For Documentation Editors -### **This Repository (`bitsalv/edgemining-docs`):** -``` -edgemining-docs/ -β”œβ”€β”€ docs/ # Documentation content ONLY -β”‚ β”œβ”€β”€ intro.md # Introduction -β”‚ β”œβ”€β”€ about-us.md # About Edge Mining -β”‚ β”œβ”€β”€ product/ # Product documentation -β”‚ β”‚ └── product-cycle.md -β”‚ β”œβ”€β”€ modelling/ # Architecture & DDD -β”‚ β”‚ β”œβ”€β”€ README.md -β”‚ β”‚ β”œβ”€β”€ domain-driven-architecture-overview.md -β”‚ β”‚ └── glossary.md -β”‚ β”œβ”€β”€ contribution.md # How to contribute -β”‚ └── faq.md # Frequently asked questions -β”œβ”€β”€ images/ # Documentation images -└── .github/workflows/ # Sync workflow -``` +This repository is specifically for **editing and maintaining the documentation content**. All documentation changes should be made here and will be automatically synced to the website repository. + +> **πŸ“ For Editors**: This repository is for **content editing** - writing, updating, and maintaining documentation. If you're a **developer** making technical changes to the website, use the [edge-mining/edgemining.energy](https://github.com/edge-mining/edgemining.energy) repository instead. + +## πŸ“ Repository Structure -### **Site Repository (`bitsalv/edgemining.energy`):** ``` -edgemining.energy/ -β”œβ”€β”€ docs/ # VuePress site (synced from this repo) -β”‚ β”œβ”€β”€ .vuepress/ # VuePress configuration -β”‚ β”‚ β”œβ”€β”€ config.js # Site configuration -β”‚ β”‚ β”œβ”€β”€ styles/ # Custom CSS styles -β”‚ β”‚ └── public/ # Static assets (logo, favicon) -β”‚ β”œβ”€β”€ docs/ # Documentation content (synced from this repo) -β”‚ └── README.md # Homepage content -β”œβ”€β”€ package.json # Dependencies and scripts -└── .github/workflows/ # Build and deploy workflows +docs/ +β”œβ”€β”€ intro.md # Introduction +β”œβ”€β”€ about-us.md # About Edge Mining +β”œβ”€β”€ product/ # Product documentation +β”‚ └── product-cycle.md +β”œβ”€β”€ modelling/ # Architecture & DDD +β”‚ β”œβ”€β”€ README.md +β”‚ β”œβ”€β”€ domain-driven-architecture-overview.md +β”‚ └── glossary.md +β”œβ”€β”€ contribution.md # How to contribute +└── faq.md # Frequently asked questions ``` -## πŸ”„ Automatic Deployment Workflow +## πŸ”„ Workflow for Documentation Changes -### **Two-Way Sync Process:** +### **How to Contribute:** -#### **1. Content Changes (this repo):** -- **Push to `bitsalv/edgemining-docs`** β†’ Triggers sync workflow -- **Copies `docs/`** β†’ `bitsalv/edgemining.energy/docs/` -- **Triggers build** β†’ Deploys to `edgemining.energy` +1. **Edit Documentation**: Modify Markdown files in the `docs/` directory +2. **Test Locally**: Use the VuePress site to preview changes +3. **Commit Changes**: Push to this repository +4. **Automatic Sync**: Changes are automatically synced to [edge-mining/edgemining.energy](https://github.com/edge-mining/edgemining.energy) +5. **Live Update**: Website is automatically updated at [edgemining.energy](https://edgemining.energy) -#### **2. Site Changes (edgemining.energy repo):** -- **Push to `bitsalv/edgemining.energy`** β†’ Triggers build workflow -- **Builds VuePress** β†’ Deploys to `edgemining.energy` +### **Repository Relationships:** -## πŸ› οΈ Setup Required - -### **1. Repository Token** -In the `bitsalv/edgemining-docs` repository, add this secret: ``` -EDGEMINING_ENERGY_TOKEN = Personal Access Token with permissions on edgemining.energy +Documentation Repository (edge-mining/docs) - FOR EDITORS + ↓ (Auto-sync) +Website Repository (edge-mining/edgemining.energy) - FOR DEVELOPERS + ↓ (Auto-deploy) +Live Site (edgemining.energy) ``` -### **2. Repository Permissions** -The token must have access to: -- `bitsalv/edgemining-docs` (read) -- `bitsalv/edgemining.energy` (read/write) - -## πŸ“ Current Status - -### **βœ… Completed:** -- [x] Documentation content structure (intro, about, product, modelling, contribution, FAQ) -- [x] GitHub Actions workflow for content sync -- [x] VuePress site configuration (in edgemining.energy) -- [x] Custom CSS styling with Edge Mining brand colors -- [x] Logo and favicon from Edge Mining organization -- [x] Navigation structure (Home, Docs, Discord, GitHub) -- [x] Fixed broken links in documentation -- [x] Synchronized content between repositories +## πŸ› οΈ Local Development -### **⚠️ Pending:** -- [ ] Configure `EDGEMINING_ENERGY_TOKEN` secret for automatic sync -- [ ] Test deployment workflow -- [ ] Content review and finalization +### **For Documentation Editing:** -## πŸ”§ Local Development - -### **For Content Development (this repo):** ```bash +# Clone this repository +git clone https://github.com/edge-mining/docs.git +cd docs + # Edit Markdown files in docs/ -# Push to trigger automatic sync (when token is configured) +# Test with VuePress (see below) +# Commit and push changes ``` -### **For Site Development (edgemining.energy repo):** +### **For Preview with VuePress:** + ```bash -cd edgemining.energy -npm run docs:dev # Development server -npm run docs:build # Production build -npm run docs:clean # Clean build +# Navigate to the website repository +cd ../edgemining.energy + +# Install dependencies +npm install + +# Start development server +npm run docs:dev + +# View at http://localhost:8080 ``` -### **Access:** -- **Development**: `http://localhost:8080/` (from edgemining.energy repo) -- **Production**: `https://edgemining.energy` +## πŸ“ Documentation Guidelines + +### **File Organization:** +- **`docs/intro.md`**: Project introduction and overview +- **`docs/about-us.md`**: Mission, values, and team information +- **`docs/product/`**: Product-specific documentation +- **`docs/modelling/`**: Architecture and technical documentation +- **`docs/contribution.md`**: How to contribute to the project +- **`docs/faq.md`**: Frequently asked questions -## πŸ“‹ Setup Checklist +### **Markdown Standards:** +- Use relative links: `./about-us.md` instead of `/docs/about-us.html` +- Include proper frontmatter for VuePress +- Follow consistent formatting and structure +- Update table of contents when adding new pages -### **For `bitsalv/edgemining-docs`:** -- [x] Repository structure corrected -- [x] Documentation links fixed -- [ ] Add `EDGEMINING_ENERGY_TOKEN` secret -- [ ] Configure repository permissions -- [ ] Test content sync workflow +## πŸ”— Important Links -### **For `bitsalv/edgemining.energy`:** -- [x] VuePress configuration complete -- [x] Build workflow functional -- [ ] Enable GitHub Pages -- [ ] Configure custom domain `edgemining.energy` -- [ ] Set up CNAME file +- **Website Repository**: [edge-mining/edgemining.energy](https://github.com/edge-mining/edgemining.energy) (for developers) +- **Live Website**: [edgemining.energy](https://edgemining.energy) +- **Community**: [Discord](https://discord.com/invite/VQa9UY5SsS) -## 🎯 Next Steps +## ⚠️ Important Notes -1. **Configure GitHub Secrets** for automatic sync -2. **Test deployment workflow** -3. **Review and finalize content** -4. **Enable GitHub Pages** with custom domain +- **Auto-sync**: Changes here are automatically synced to the website repository +- **No direct editing**: Don't edit the website repository directly for documentation changes +- **Immediate deployment**: Changes appear on the live site after sync +- **Editor-focused**: This repository is for content editors, not developers -## πŸ“š Documentation Files +## 🎯 Next Steps for Contributors -- **`docs/`** β†’ All documentation content (this repo) -- **VuePress configuration** β†’ In edgemining.energy repo -- **Deployment workflows** β†’ In both repositories +1. **Fork this repository** (if you haven't already) +2. **Make your changes** to the documentation +3. **Test locally** using the VuePress development server +4. **Create a Pull Request** to this repository +5. **Wait for review and merge** +6. **Changes will automatically appear** on the live site --- -**Note**: This repository contains ONLY the documentation content. The VuePress site and deployment infrastructure are in the `bitsalv/edgemining.energy` repository. \ No newline at end of file +**Note**: This repository is for documentation content only. The VuePress website and deployment infrastructure are in the [edge-mining/edgemining.energy](https://github.com/edge-mining/edgemining.energy) repository. \ No newline at end of file diff --git a/REPOSITORY_STRUCTURE.md b/REPOSITORY_STRUCTURE.md deleted file mode 100644 index 08590d7..0000000 --- a/REPOSITORY_STRUCTURE.md +++ /dev/null @@ -1,121 +0,0 @@ -# Repository Structure Guide - -## 🎯 Overview - -Edge Mining uses **two separate repositories** for the documentation system: - -1. **`edge-mining/docs`** β†’ Content repository (Markdown files only) -2. **`edge-mining/edgemining.energy`** β†’ Site repository (VuePress + deployment) - -## πŸ“ Repository Details - -### **1. edge-mining/docs (Content Repository)** - -**Purpose**: Store only the documentation content in Markdown format. - -**Structure**: -``` -edge-mining/docs/ -β”œβ”€β”€ .github/workflows/ -β”‚ └── sync-docs.yml # Syncs content to edgemining.energy -β”œβ”€β”€ docs/ # Documentation content ONLY -β”‚ β”œβ”€β”€ intro.md # Introduction -β”‚ β”œβ”€β”€ about-us.md # About Edge Mining -β”‚ β”œβ”€β”€ product/ # Product documentation -β”‚ β”‚ └── product-cycle.md -β”‚ β”œβ”€β”€ modelling/ # Architecture & DDD -β”‚ β”‚ β”œβ”€β”€ domain-driven-architecture-overview.md -β”‚ β”‚ └── glossary.md -β”‚ β”œβ”€β”€ contribution.md # How to contribute -β”‚ └── faq.md # Frequently asked questions -└── README.md # Repository documentation -``` - -**Workflow**: -- Push to `main` β†’ Triggers sync to `edgemining.energy/docs/` -- Only syncs the `docs/` directory content - -### **2. edge-mining/edgemining.energy (Site Repository)** - -**Purpose**: VuePress site with full deployment infrastructure. - -**Structure**: -``` -edge-mining/edgemining.energy/ -β”œβ”€β”€ .github/workflows/ -β”‚ └── build-and-deploy.yml # Builds and deploys the site -β”œβ”€β”€ docs/ # VuePress site (synced from edge-mining/docs) -β”‚ β”œβ”€β”€ .vuepress/ # VuePress configuration -β”‚ β”‚ β”œβ”€β”€ config.js # Site configuration -β”‚ β”‚ β”œβ”€β”€ styles/ # Custom CSS styles -β”‚ β”‚ └── public/ # Static assets (logo, favicon) -β”‚ β”œβ”€β”€ docs/ # Documentation content (synced from edge-mining/docs) -β”‚ └── README.md # Homepage content -β”œβ”€β”€ package.json # Dependencies and scripts -└── CNAME # Custom domain configuration -``` - -**Workflow**: -- Push to `main` β†’ Builds VuePress β†’ Deploys to `edgemining.energy` -- Receives content updates from `edge-mining/docs` - -## πŸ”„ Workflow Process - -### **Content Updates (edge-mining/docs):** -1. **Edit** Markdown files in `docs/` -2. **Push** to `edge-mining/docs` -3. **GitHub Action** copies `docs/` to `edge-mining/edgemining.energy/docs/` -4. **Triggers build** in `edgemining.energy` -5. **Deploys** to `edgemining.energy` - -### **Site Updates (edge-mining/edgemining.energy):** -1. **Edit** VuePress config, styles, or other site files -2. **Push** to `edge-mining/edgemining.energy` -3. **GitHub Action** builds VuePress -4. **Deploys** to `edgemining.energy` - -## πŸ› οΈ Development Workflow - -### **For Content Writers:** -- **Repository**: `edge-mining/docs` -- **Work on**: `docs/` directory -- **Result**: Automatic sync and deployment - -### **For Site Developers:** -- **Repository**: `edge-mining/edgemining.energy` -- **Work on**: VuePress config, styles, assets -- **Result**: Direct deployment - -## πŸ” Required Setup - -### **edge-mining/docs:** -- `EDGEMINING_ENERGY_TOKEN` secret for cross-repo access - -### **edge-mining/edgemining.energy:** -- GitHub Pages enabled -- Custom domain `edgemining.energy` -- CNAME file configured - -## πŸ“‹ Benefits of This Structure - -1. **Separation of Concerns**: Content vs. presentation -2. **Content Focus**: Writers only deal with Markdown -3. **Site Flexibility**: Developers can modify site without touching content -4. **Automatic Sync**: Content changes automatically update the site -5. **Independent Deployment**: Site changes deploy immediately - -## 🎯 Pull Request Strategy - -### **Content Changes:** -- **PR to**: `edge-mining/docs` -- **Scope**: Only `docs/` directory changes -- **Result**: Automatic sync to site - -### **Site Changes:** -- **PR to**: `edge-mining/edgemining.energy` -- **Scope**: VuePress config, styles, assets -- **Result**: Direct deployment - ---- - -**Note**: This structure ensures clean separation between content management and site development while maintaining automatic synchronization. diff --git a/modelling/domain-driven-architecture-overview.md b/modelling/domain-driven-architecture-overview.md deleted file mode 100644 index 4de3064..0000000 --- a/modelling/domain-driven-architecture-overview.md +++ /dev/null @@ -1,107 +0,0 @@ - -# Domain-Driven Architecture Overview - -The central problem the application solves is the *optimization of energy usage* using excess energy production (especially from renewables) by integrating Bitcoin mining. This isn't just about mining; it's about using mining as *a tool* for energy management. The core domain revolves around the intelligent automation and control of mining based on energy availability and goals. - -# Domains Brake Down - -This outlines a strategic categorization of subdomains according to their importance within the system. Furthermore, it details the internal composition of each subdomain, breaking it down into entities, value objects, and aggregates to clarify responsibilities and structure. - -- πŸŸ’β€‹ **Core:** The *automation/decision logic* is central. This is where the unique value proposition lies. -- 🟣 **Supporting:** These domains are necessary for the core domain to function but aren't the primary differentiator. -- ⚫ **Generic:** These are common problems solved elsewhere, not specific to this domain. - -The identified domains are: -- 🟒 [Energy Optimization & Mining Automation](#energy-optimization--mining-automation) -- 🟣 [Energy System Monitoring](#energy-system-monitoring) -- 🟣 [Mining Device Management](#mining-device-management) -- 🟣 [Home Consumption Analytics](#home-consumption-analytics) -- 🟣 [Energy Forecast](#energy-forecast) -- 🟣 [Heat Utilization](#heat-utilization) -- 🟣 [Mining Performance Analysis](#mining-performance-analysis) -- ⚫ [User Settings](#user-settings) -- ⚫ [Notification System](#notification-system) - -## Energy Optimization & Mining Automation -This is the **Core** domain that captures the intelligence, making smart decisions about *when* to mine based on energy conditions. - -**Components**: - - `OptimizationPolicy`Β (Entity? Aggregate Root?): A collection of rules and goals driving the automation decisions. It makes decisions based on input (e.g. "*stabilizes hashrate*", "*battery health*" or "*heats the room*"). - - `AutomationRule`Β (Entity? Maybe Value Object within a Policy?): Represents a user-defined or system rule (e.g., "*turn on if battery > 80% AND forecast > X*"). TheΒ *logic*Β itself. - - `MiningDecision`Β (Value Object): The output of the policy (e.g., `StartMining`, `StopMining`, `MaintainState`, `ChangeState`). - -## Energy System Monitoring -This is a **Supporting** domain, focuses on data acquisition from the energy plant (production, storage, consumption) and to provide them to the core domain. It doesn'tΒ *decide*Β anything, just reports. - -**Components**: - - `EnergyPlant`Β (Entity or Aggregate Root): Represents the overall energy production system. - - `EnergySource`Β (Entity): e.g., Solar Panel Array, Wind Turbine. Has properties likeΒ `CurrentProduction`Β (VO). - - `EnergyStorage`Β (Entity): e.g., Battery. Has properties likeΒ `StateOfCharge` (VO),Β `NominalCapacity`Β (VO), `ActualCapacity` (VO). - - `EnergyLoad`Β (Entity): Represents the user's main energy load. Contains `CurrentConsumption` (VO) - - `EnergyReading`Β (Value Object): A specific measurement (e.g., 5 kW production at timestamp T). - - `EnergyStateSnapshot`Β (Value Object): Represents the state of the energy system at a point in time (*production*, *consumption*, *battery level*, *forecast*). Used as input for decisions. - -## Mining Device Management -This is a **Supporting** domain, focuses on controlling and possibly monitoring the state of the ASIC miners. Needs to execute the commands from the core domain (turn on/off) and maybe report miner status. It doesn'tΒ *decide*Β when to turn on/off. - -**Components**: - - `Miner`Β (ASIC) (Entity): Represents a physical mining device. Has a `MinerId` (VO),Β `Status`Β (VO: *On, Off, Error*), maybeΒ `PowerConsumption`Β (VO). - - `MiningFarm`Β (Entity? Aggregate Root? Optional): If managing multiple miners as a group. - - `ControlCommand`Β (Value Object): e.g., `TurnOn`, `TurnOff`, `SetHashboard`. - -## Energy Forecast -This is a ***Supporting** domain, focuses on data collection from forecast external services and to provide them to the core domain. - -**Components**: - - `ForecastData` (Value Object): Represents the relevant solar/energy forecast. - -## Home Consumption Analytics -This is a **Supporting** domain, focuses on home energy loads forcasts. Needs to provide data (estimate consumptions, times) of the home energy loads (Washing machine, Dishwasher, Boiler, EV Charger) to the core domain. It can be a **core subdomain** (thanks to [this post](https://vladikk.com/2018/01/26/revisiting-the-basics-of-ddd/)), but let's keep it as supporting for now. - -**Components**: - - `HomeLoadsProfile` (Aggregate Root): Represents the typical energy load profile of a household. - - `LoadDevice` (Entity): Represents a specific energy load inside the home. Includes `ConsumptionForecast`. - -## Heat Utilization -This is a **Supporting** domain, could become more core if heatΒ *demand*Β starts driving mining decisions, but based on the actual needs, it's primarily aboutΒ *using*Β the byproduct. - -**Components**: - - (Potentially) `HeatOutput`Β (Value Object?): Associated with aΒ Miner's operation. - - (Potentially) `HeatingZone`Β (Entity?): If actively managing heat distribution. - - (Potentially) `TemperatureSensor`Β (Entity?): To monitor effectiveness. - -## Mining Performance Analysis -This is a **Supporting** domain, focuses on reporting earnings, hash rates, etc. Important for the user, but the coreΒ *automation*Β doesn't strictly depend on real-time profitability calculations (though it could influence userΒ *goals*). - -**Components**: - - `MiningSession`Β (Entity?): Represents a period when a miner was active. - - `MiningReward`Β (Value Object): Satoshi earned. - - `HashRate`Β (Value Object): Mining speed. - - `PoolConnectionDetails`Β (Value Object/Entity?): Details about the mining pool being used. - -## User Settings -This is a **Generic** domain. Handles user settings, goals, and UI presentation. Let's treat it as Supporting as it presents data from other domains and takes user input that influences the Core domain. - -**Components**: - - `User`Β (Entity): The system user. - - `SystemSettings`Β (Entity/VO): Global or specific settings. - - `NotificationPreference`Β (VO): Notification settings. - -## Notification System -This is a **Generic** domain. Informing users about events. - -# Context Mapping: Subdomain Interactions - -Shows how different subdomains interact by exchanging information and triggering actions. This helps define the flow of responsibilities in the system. - -| From (Subdomain) | ➑️ | To (Subdomain) | Data/Action Provided | -| ----------------------------------- | --- | --------------------------------------- | ------------------------------------------------- | -| Energy System Monitoring | ➑️ | Energy Optimization & Mining Automation | `EnergyStateSnapshot` | -| External Integrations (Forecast) | ➑️ | Energy Optimization & Mining Automation | `ForecastData` | -| User Configuration & Interaction | ➑️ | Energy Optimization & Mining Automation | User parameters for `OptimizationPolicy` | -| Energy Optimization & Mining Auto. | ➑️ | Mining Device Management | `ControlCommand` (e.g., TurnOn Miner X) | -| Mining Device Management | ➑️ | Energy Optimization & Mining Automation | Miner status reports | -| Mining Device Management | ➑️ | Mining Performance Analysis | Uptime, possibly hashrate | -| External Integrations (Mining Pool) | ➑️ | Mining Performance Analysis | `MiningReward` data | -| Home Consumption Analytics | ➑️ | Energy Optimization & Mining Automation | Aggregate `ConsumptionForecast` | -| Monitoring Subdomains | ➑️ | User Configuration & Interaction | Data for display (status, performance, heat, ...) | diff --git a/modelling/glossary.md b/modelling/glossary.md deleted file mode 100644 index 49aef1b..0000000 --- a/modelling/glossary.md +++ /dev/null @@ -1,90 +0,0 @@ -# Glossary - -Following the **Ubiquitous Language** approach of Domain-Driven Design (DDD), this glossary is organized by subdomains and contains simplified definitions gathered from domain experts. Its purpose is to establish a clear and consistent vocabulary, essential for effective communication and development of the application. - -Subdomains: -- 🟒 [Energy Optimization & Mining Automation](#energy-optimization--mining-automation) -- 🟣 [Energy System Monitoring](#energy-system-monitoring) -- 🟣 [Mining Device Management](#mining-device-management) -- 🟣 [Home Consumption Analytics](#home-consumption-analytics) -- 🟣 [Energy Forecast](#energy-forecast) -- 🟣 [Heat Utilization](#heat-utilization) -- 🟣 [Mining Performance Analysis](#mining-performance-analysis) -- ⚫ [User Settings](#user-settings) -- ⚫ [Notification System](#notification-system) - -## Energy Optimization & Mining Automation -**Automation Rule**: Rules that automate the process of turning on, controlling, or turning off a miner. For example, turn off the miner if the battery has dropped below 80%. - -**Optimization Policy**: Collection of automation rules that define energy optimization policies aimed at achieving a goal. For example: -- *Preserve Battery*: a collection of rules designed to provide power to the miner only if the battery is full without ever discharging it. -- *Stop Export*: a collection of rules aimed at reduce or totally stopping the energy exported to the Grid Operator. - -## Energy System Monitoring -**Inverter**: A machine that produces energy using solar panels. It may have one or multiple MPPTs and can be either on-grid or off-grid. - -**Solar panel**: A hardware component that produces energy from sunlight. - -**Battery**: A hardware component that stores energy. - -**Battery SoC**: *State of Charge* of the battery; it represents the total amount of energy stored in the battery. - -**Battery Discharge**: The process by which energy exits the battery. - -**Battery Charge**: The process by which energy enters the battery. - -**Unused Energy**: -- In On-Grid systems, this is the energy not used by the loads and fed into the national electric grid. -- In Off-Grid systems, this is the energy not produced by the system because it is not required by the loads/batteries. - -**Loads**: Devices that consume energy. - -## Mining Device Management -**Miner**: A machine that uses electrical energy to solve mathematical calculations and produce heat. - -**Hashboard**: The part of the miner that contains the chips responsible for calculating hashes. - -**Control board**: The main controller in a miner that manages communication, power distribution, and operational logic. - -**Fan**: A cooling component that regulates the miner's internal temperature by moving air across heated parts. - -**Smart plug**: A remotely controllable power outlet that can be used to power on/off a miner automatically or based on conditions. - -**Hashrate**: A measurement of the computing power of a miner. - -**Energy consumption**: The electrical energy used by the miner. - -**Core temperature**: The temperature of the main chips. - -**Efficiency**: The power consumption in relation to the produced hashrate. Can be measured in W/TH or J/TH. - -**Mining pool**: A group of miners who combine their computational resources to increase the probability of mining a block and share the reward proportionally. - -**Stock Firmware**: The original firmware pre-installed by the miner's manufacturer. It governs low-level operations such as startup sequences, thermal management, fan control, hashrate adjustment, and network communication. Typically more stable but less customizable than third-party firmware. - -**Third-Party Firmware**: Custom firmware developed by independent developers or communities that replaces the stock firmware on a miner. It often provides enhanced functionality, greater configurability, performance tuning options, and additional features such as API access, advanced monitoring, or custom fan curves. It may, however, require more technical knowledge and can void warranties. - -## Home Consumption Analytics - -*to complete...* - -## Energy Forecast - -*to complete...* - -## Heat Utilization - -*to be complete...* - -## Mining Performance Analysis - -*to be complete...* - -## User Settings - -*to be complete...* - -## Notification System - -*to be complete...* - From a8c60663230bfccfcddc683b65fdb135fa5f6e47 Mon Sep 17 00:00:00 2001 From: bitsalv Date: Sun, 31 Aug 2025 01:58:12 +0200 Subject: [PATCH 4/4] cleanup: remove unused images directory - Remove images/domain-and-subdomains.png (not referenced in docs) - Remove images/logo 3.png (not referenced in docs) - Clean repository structure for better organization - No references to images found in any markdown files --- images/domain-and-subdomains.png | Bin 24344 -> 0 bytes images/logo 3.png | Bin 5040 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/domain-and-subdomains.png delete mode 100644 images/logo 3.png diff --git a/images/domain-and-subdomains.png b/images/domain-and-subdomains.png deleted file mode 100644 index 13801dbbf3977ded053a74e3e839786ad33ea0a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24344 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