7 Commits

Author SHA1 Message Date
yehor
0b10a38921 Update version
All checks were successful
Build release image / build (push) Successful in 1m18s
2025-10-08 11:45:44 +03:00
yehor
6e8c00c313 Update heading styles. self-hosted list WIP 2025-10-08 11:45:28 +03:00
yehor
cf8e3ac9ae Add self-hosted list
All checks were successful
Build release image / build (push) Successful in 1m24s
2025-10-07 23:36:01 +03:00
yehor
727906d461 Update theme
All checks were successful
Build release image / build (push) Successful in 1m17s
2025-10-07 22:58:30 +03:00
yehor
756312021a Add discussion link
All checks were successful
Build release image / build (push) Successful in 1m26s
2025-10-07 21:05:49 +03:00
yehor
d6d3cd6d00 Fix blog table of contents styles 2025-10-07 20:21:25 +03:00
yehor
6d43975f0b Fix typo 2025-10-07 14:53:26 +03:00
24 changed files with 231 additions and 33 deletions

View File

@@ -116,4 +116,6 @@ binary_sensor:
pin:
number: D5
mode: INPUT
```
```
<BlogDiscussions/>

View File

@@ -49,4 +49,6 @@ Now we need to create a handler of the Aqara button in `automations.yaml`:
- data:
message: "Someone near your front door"
service: notify.push
```
```
<BlogDiscussions/>

View File

@@ -134,4 +134,6 @@ Now we can rely on that groups state to check if there is nobody home. Ive
service: notify.push
```
That is all for now. Thanks for reading.
That is all for now. Thanks for reading.
<BlogDiscussions/>

View File

@@ -208,4 +208,6 @@ Also, this automation should be able to run in parallel to make it possible to h
```yaml
mode: parallel
max: 10
```
```
<BlogDiscussions/>

View File

@@ -40,4 +40,6 @@ binary_sensor:
friendly_name: "Bed occupancy"
device_class: occupancy
value_template: "{{is_state('binary_sensor.bed_occupancy_door_side', 'off') or is_state('binary_sensor.bed_occupancy_window_side', 'off')}}"
```
```
<BlogDiscussions/>

View File

@@ -42,4 +42,6 @@ action:
![Parsing action](parse_action.png)
Here we are checking for the `engine is off` text in incoming SMS to perform some action. For example, to set the value of some `input_boolean`.
Here we are checking for the `engine is off` text in incoming SMS to perform some action. For example, to set the value of some `input_boolean`.
<BlogDiscussions/>

View File

@@ -105,3 +105,5 @@ switch:
```
Thats it for today. Thanks for reading.
<BlogDiscussions/>

View File

@@ -237,4 +237,6 @@ Before placing our power supply inside the TV we need to make sure it is isolate
So the overall picture is looking like this:
![](overview.png)
![](overview.png)
<BlogDiscussions/>

View File

@@ -85,4 +85,6 @@ Compile, flash, open logs and start firing into our device with your IR remote.
[17:34:51][D][remote.samsung:055]: Received Samsung: data=0xE0E020DF
```
You can now use this data with the ESPHome [Remote Transmitter](https://esphome.io/components/remote_transmitter.html) component to build, for example, something like [this](/2021-01-13-building-wifi-ir-remote-control-for-any-tv-with-esp8266-wemos-d1-mini-and-esphome/index.md).
You can now use this data with the ESPHome [Remote Transmitter](https://esphome.io/components/remote_transmitter.html) component to build, for example, something like [this](/2021-01-13-building-wifi-ir-remote-control-for-any-tv-with-esp8266-wemos-d1-mini-and-esphome/index.md).
<BlogDiscussions/>

View File

@@ -120,4 +120,6 @@ Decreasing the volume action is the same, but with negative `target`:
service: esphome.amplifier_set_volume
data:
target: -50
```
```
<BlogDiscussions/>

View File

@@ -119,4 +119,6 @@ You'll get an email notification on the address added here when there will be ti
After certificate generation, we should open Settings on the same Certificates tab, find our domain service, and choose the newly generated certificate for it.
That's it!
That's it!
<BlogDiscussions/>

View File

@@ -43,4 +43,6 @@ In your Home Assistant go to _Settings -> Devices & services_ and click the _"Ad
In the configuration window that appeared you need to set your NAS's local IP address as a _Host_ and leave the _Port_ number unchanged.
Hit _Submit_ and you are done.
Hit _Submit_ and you are done.
<BlogDiscussions/>

View File

@@ -54,4 +54,6 @@ The authorization header should have the next format: `PVEAPIToken=<proxmox user
You can use `shutdown` or `reboot` as a `command`.
After restarting Home Assistant you will have a new service available. In our example, it would be `rest_command.spacedock_one_shutdown`. Calling it will do the trick.
After restarting Home Assistant you will have a new service available. In our example, it would be `rest_command.spacedock_one_shutdown`. Calling it will do the trick.
<BlogDiscussions/>

View File

@@ -105,4 +105,6 @@ And up it back with a system service, also enabling it:
sudo systemctl start wg-quick@wg0 && sudo systemctl enable wg-quick@wg0
```
Further interface control should be performed through `systemctl` as well like `systemctrl stop`, `systemctl restart` or `systemctl status`.
Further interface control should be performed through `systemctl` as well like `systemctrl stop`, `systemctl restart` or `systemctl status`.
<BlogDiscussions/>

View File

@@ -98,4 +98,6 @@ Cron job line to add:
```
@reboot sleep 30s && /usr/sbin/etherwake -i vmbr0 <mac_address>
```
```
<BlogDiscussions/>

View File

@@ -70,7 +70,7 @@ iface vmbr1 inet static
Let's see what's going on in here.
For the containers that don't require a public IP, I choose `vbmr1` bridge, set some IP from the local IP range (192.168.50.x), and use the local IP as a gateway:
For the containers that don't require a public IP, I choose `vbmr1` bridge, set some IP from the local IP range (192.168.50.x), and use host local IP as a gateway:
![LXC local network](vmbr1.png)
@@ -182,4 +182,6 @@ After installing it and configuring it to use [Backblaze S3 storage](https://pbs
## Conclusion
Have no idea why everyone wants to write a conclusion for each post nowadays. It looks like a forced conclusion to a school physics problem in most cases: "Solving this problem of moving trains, we found out that trains can move".
Have a nice tinkering.
Have a nice tinkering.
<BlogDiscussions/>

View File

@@ -99,10 +99,11 @@ const config = {
},
items: [
{ to: '/blog', label: 'Blog', position: 'left' },
{ to: '/selfhosted-list', label: 'Self-hosted List', position: 'left' },
],
},
footer: {
style: 'dark',
style: 'light',
links: [
{
title: 'This site sections:',

View File

@@ -1,6 +1,6 @@
{
"name": "yevi-org",
"version": "0.2.2",
"version": "0.4.1",
"private": true,
"scripts": {
"docusaurus": "docusaurus",

View File

@@ -0,0 +1,16 @@
import styles from './styles.module.css';
export default function BlogDiscussions() {
const Svg = require('@site/static/icons/matrix.svg').default;
return (
<section className={styles.blogDiscussions}>
<a className={styles.blogDiscussions_container} href="https://matrix.to/#/%23yevi-org-pub:vi.place" target='_blank'>
<Svg fill="currentColor" className={styles.icon} role="img" />
<span className={styles.linkText}>Join discussion at Matrix</span>
</a>
</section>
);
}

View File

@@ -0,0 +1,28 @@
.blogDiscussions {
display: flex;
flex-direction: row;
justify-content: center;
padding: 1rem 0;
}
.blogDiscussions_container {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: center;
}
.linkText {
width: 12rem;
}
.icon {
width: 2rem;
height: 2rem;
padding-right: 0.5rem;
}
.icon path {
fill: var(--ifm-heading-color) !important;
}

View File

@@ -9,15 +9,31 @@
padding-bottom: 1rem;
}
@media (max-width: 996px) {
.featureBlock {
--ifm-col-width: 50%;
}
}
@media (max-width: 500px) {
.featureBlock {
--ifm-col-width: 100%;
}
}
.featureSvg {
height: 100px;
width: 100px;
height: 60px;
width: 60px;
}
.featureSvg path {
fill: var(--ifm-link-color) !important;
}
.featureBlock:hover .featureSvg path {
opacity: 0.7;
}
.featureLink {
display: contents;
color: unset;
@@ -31,4 +47,8 @@
.featureLink:visited {
text-decoration: none;
color: unset;
}
.featureLink p {
color: var(--ifm-color-secondary-contrast-foreground);
}

View File

@@ -11,12 +11,19 @@
--ifm-color-primary-darker: #471947;
--ifm-color-primary-darkest: #3b143b;
--ifm-color-primary-light: #3b143b;
--ifm-color-primary-lighter: #612161;
--ifm-color-primary-lightest: #6d266d;
--ifm-color-primary-lighter: #712471;
--ifm-color-primary-lightest: #9d389d;
--ifm-code-font-size: 95%;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
--ifm-footer-link-hover-color: #b07ab0;
--ifm-link-color: var(--ifm-color-primary-lightest)
--ifm-link-color: var(--ifm-color-primary-lightest);
--ifm-global-shadow-lw: 0 1px 2px 0 #541d5428;
--ifm-heading-color: #575757;
}
.hero--primary {
--ifm-hero-background-color: transparent;
--ifm-hero-text-color: var(--ifm-font-color-base);
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
@@ -30,16 +37,14 @@
--ifm-color-primary-lightest: #d1b2d1;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
--ifm-link-color: var(--ifm-color-primary-darker);
--ifm-heading-color: #919191;
}
@media (max-width: 996px) {
.col {
--ifm-col-width: 50%;
}
}
@media (max-width: 500px) {
.col {
--ifm-col-width: 100%;
}
h1 a,
h2 a,
h3 a,
h4 a,
h5 a,
h6 a {
color: var(--ifm-heading-color) !important;
}

View File

@@ -0,0 +1,83 @@
---
title: Self-hosted List
description: A list of services I'm currently hosting for myself, family and friends
---
A list of services I'm currently hosting for myself, family and friends. Grouped by access levels and sorted by gut feeling.
## Publicly accessible
Services anyone on the internet can access.
### This website (Docusaurus)
[Service](https://www.yevi.org) | [Product](https://docusaurus.io)
This static site generator is mainly designed for documentation, but has a blog feature, pages, Markdown, and MDX support. When I decided to leave Ghost behind for something database-less, Markdown-ish, and stored in git, I checked different similar projects, like Hugo, for example. Docusaurus had the cleanest documentation, nicest look, and a very detailed example of a working website once you set it up. Keep it up, Docusaurus!
### Gitea
[Service](https://git.nicelycomposed.codes) | [Product](https://about.gitea.com)
When I decided to self-host a Git server, GitLab was the first option I tried, as it was familiar to me from my day job. I launched it on an old Intel NUC with only 2 GB of memory... And started to search for lighter alternatives. So here I am with a Gitea instance that hosts my old repositories from GitHub, as well as a lot of private repos with different stuff. Gitea is fast, lightweight, single-binary, and has everything I need, including GitHub-compatible CI/CD.
## Restricted
Services exposed to the internet, but require authorization.
### Plausible Analytics
[Product](https://plausible.io)
Google Analytics was my one-stop service for a long time, but it slowly enshittified into a huge, overcomplicated pile of pages and graphs you can hardly understand. Lack of fine documentation and constant requests to a user to migrate, fix, review, or reconfigure something didn't add any comfort in using it, while "Easy to use and privacy-friendly Google Analytics alternative" became more and more popular Google Search request.
[Umami](https://umami.is) was the first thing I tried. It was almost perfect service for my needs until I faced the need to use API calls to send events from my pet project app. So now I'm with Plausible, and it looks like it is here to stay.
### Plane
[Product](https://plane.so/project-management)
The only service I'm not happy with, but still using. Plane is slowly evolving into Jira. They even launched their own Confluence recently. While it is still a good project management software, I need something simpler for my needs. And there are some alternatives, but I have my pet-project tickets in Plane, and the migration will be a painful manual job. I'm not ready for this yet.
### Kan.bn
[Product](https://kan.bn)
It is a simple but very nice kanban board. I'm not sure I will replace Plane with it, but I'm using it now as a personal to-do list. And for my homelab stuff, I'll never finish.
### Outline
[Product](https://www.getoutline.com)
Need to store personal notes, family recipes, or a teams knowledge base? Get an Outline in any of those cases and in other cases as well. The thing is so simple yet powerful and nice looking, I recommend setting it up even if you think you don't need it. As a bonus, mobile UI feels like a native app. My dream note-taking and knowledge-holding software looks and feels like Outline, has its collaboration features, but stores all notes locally like Obsidian does. For offline access at any time. Did you find something like this yet? Or maybe developing right now? No? Then I'll stick to the Outline for now.
- **Yamtrack**
- **AdventureLog**
- **Authentik**
- **Synapse** Matrix server
- **Matrix Authentication Service**
- **Home Assistant**
- **Plex**
- **n8n**
- **FreshRSS**
## Internal
Services accessible only from my home network or Tailnet.
- Zoraxy
- Caddy
- Grafana
- Prometheus
- InfuxDB
- Dockge
- Studio Code Server
- Gitea Action Runner
- Element Admin
- Sonarr
- Radarr
- Prowlarr
- qBittorrent
- Proxmox Backup Server
## Operating Systems
- TrueNAS Community Edition
- Proxmox VE
## Tools
- Tailscale

View File

@@ -0,0 +1,13 @@
import React from 'react';
// Import the original mapper
import MDXComponents from '@theme-original/MDXComponents';
//Import custom component
import BlogDiscussions from '@site/src/components/BlogDiscussions';
export default {
// Re-use the default mapping
...MDXComponents,
// Map the "<BlogDiscussions>" tag to our BlogDiscussions component
// `BlogDiscussions` will receive all props that were passed to `<BlogDiscussions>` in MDX
BlogDiscussions,
};