diff --git a/CHANGELOG.md b/CHANGELOG.md
index 88c92809..268c0a65 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Added
+
+- Added a blog post: _Ghostfolio meets Umbrel_
+
## 1.238.0 - 2023-02-25
### Added
diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts
index 8165af21..9376f5c4 100644
--- a/apps/api/src/app/frontend.middleware.ts
+++ b/apps/api/src/app/frontend.middleware.ts
@@ -90,6 +90,11 @@ export class FrontendMiddleware implements NestMiddleware {
) {
featureGraphicPath = 'assets/images/blog/ghostfolio-x-sackgeld.png';
title = `Ghostfolio auf Sackgeld.com vorgestellt - ${title}`;
+ } else if (
+ request.path.startsWith('/de/blog/2023/02/ghostfolio-meets-umbrel')
+ ) {
+ featureGraphicPath = 'assets/images/blog/ghostfolio-meets-umbrel.png';
+ title = `Ghostfolio meets Umbrel - ${title}`;
}
if (
diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts
index 485128e3..b3623e33 100644
--- a/apps/client/src/app/app-routing.module.ts
+++ b/apps/client/src/app/app-routing.module.ts
@@ -123,6 +123,13 @@ const routes: Routes = [
'./pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.module'
).then((m) => m.GhostfolioAufSackgeldVorgestelltPageModule)
},
+ {
+ path: 'blog/2023/02/ghostfolio-meets-umbrel',
+ loadChildren: () =>
+ import(
+ './pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module'
+ ).then((m) => m.GhostfolioMeetsUmbrelPageModule)
+ },
{
path: 'demo',
loadChildren: () =>
diff --git a/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page-routing.module.ts b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page-routing.module.ts
new file mode 100644
index 00000000..c4905279
--- /dev/null
+++ b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page-routing.module.ts
@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
+
+import { GhostfolioMeetsUmbrelPageComponent } from './ghostfolio-meets-umbrel-page.component';
+
+const routes: Routes = [
+ {
+ canActivate: [AuthGuard],
+ component: GhostfolioMeetsUmbrelPageComponent,
+ path: '',
+ title: 'Ghostfolio meets Umbrel'
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class GhostfolioMeetsUmbrelPageRoutingModule {}
diff --git a/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts
new file mode 100644
index 00000000..6917348d
--- /dev/null
+++ b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts
@@ -0,0 +1,9 @@
+import { Component } from '@angular/core';
+
+@Component({
+ host: { class: 'page' },
+ selector: 'gf-ghostfolio-meets-umbrel-page',
+ styleUrls: ['./ghostfolio-meets-umbrel-page.scss'],
+ templateUrl: './ghostfolio-meets-umbrel-page.html'
+})
+export class GhostfolioMeetsUmbrelPageComponent {}
diff --git a/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.html b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.html
new file mode 100644
index 00000000..39c71cf5
--- /dev/null
+++ b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.html
@@ -0,0 +1,200 @@
+
+
+
+
+
+
Ghostfolio meets Umbrel
+
2023-02-25
+

+
+
+
+ We are happy to announce that
+ Ghostfolio, the web-based personal
+ finance management software, is now available in the
+ Umbrel App Store, a
+ home server OS for self-hosting.
+
+
+ In recent years, we have seen an increasing number of individuals
+ and organizations moving their data to the cloud. While cloud
+ computing has its benefits, such as accessibility and scalability,
+ it also comes with some concerns regarding data privacy and
+ security. However, there is an alternative to cloud computing that
+ provides the convenience of the cloud while giving you ownership and
+ control of your data: personal servers.
+
+
+
+ Umbrel – A personal server OS for self-hosting
+
+ Umbrel
+ is an operating system based on
+ Docker that
+ allows you to run a personal server in your home. With it, you can
+ self-host open source apps directly from an integrated app store.
+ This means that you can discover self-hosted apps directly in the
+ Umbrel App Store
+ and install them in one click. You can get up and running Umbrel on
+ a Raspberry Pi 4, any Ubuntu / Debian system, or a VPS in only 5
+ minutes.
+
+
+ Umbrel offers numerous advantages for running a personal server in
+ your home, such as enhanced data privacy and security, ownership and
+ control of your data, and access to a diverse selection of
+ self-hosted apps.
+
+
+
+
+ Ghostfolio – Track your portfolio without being tracked
+
+
+ Keeping track of multiple assets can make managing your personal
+ finance a challenging task. However, there are tools available
+ beyond spreadsheets that can help you streamline the process and
+ make well-informed investment decisions based on data.
+
+
+ Ghostfolio
+ is a modern open source web application designed to manage your
+ personal finance with ease and confidence. It presents your current
+ assets in real-time, including stocks, ETFs, cryptocurrencies,
+ commodities, and more. It allows you to track and analyze your
+ investments in one place.
+
+
+ The application has a range of features such as real-time asset
+ tracking, data import and export and advanced portfolio analytics
+ tools.
+
+
+
+
+ To participate in the ongoing development of Ghostfolio, please feel
+ free to reach out to us on our
+ Slack channel
+ or via Twitter
+ @ghostfolio_. We look forward to hearing from you!
+
+
+
+
+ -
+ Announcement
+
+ -
+ App Store
+
+ -
+ Assets
+
+ -
+ Cloud
+
+ -
+ Commodity
+
+ -
+ Cryptocurrency
+
+ -
+ Debian
+
+ -
+ Development
+
+ -
+ Docker
+
+ -
+ ETF
+
+ -
+ Fintech
+
+ -
+ Ghostfolio
+
+ -
+ Home Server
+
+ -
+ Investing
+
+ -
+ Linux
+
+ -
+ Open Source
+
+ -
+ Operating System
+
+ -
+ OS
+
+ -
+ OSS
+
+ -
+ Personal Finance
+
+ -
+ Personal Server
+
+ -
+ Portfolio
+
+ -
+ Privacy
+
+ -
+ Raspberry Pi
+
+ -
+ Security
+
+ -
+ Software
+
+ -
+ Spreadsheet
+
+ -
+ Stocks
+
+ -
+ Ubuntu
+
+ -
+ Umbrel
+
+ -
+ VPS
+
+ -
+ Wealth Management
+
+
+
+
+
+
+
diff --git a/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module.ts b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module.ts
new file mode 100644
index 00000000..b15ca1c2
--- /dev/null
+++ b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module.ts
@@ -0,0 +1,13 @@
+import { CommonModule } from '@angular/common';
+import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
+import { RouterModule } from '@angular/router';
+
+import { GhostfolioMeetsUmbrelPageRoutingModule } from './ghostfolio-meets-umbrel-page-routing.module';
+import { GhostfolioMeetsUmbrelPageComponent } from './ghostfolio-meets-umbrel-page.component';
+
+@NgModule({
+ declarations: [GhostfolioMeetsUmbrelPageComponent],
+ imports: [CommonModule, GhostfolioMeetsUmbrelPageRoutingModule, RouterModule],
+ schemas: [CUSTOM_ELEMENTS_SCHEMA]
+})
+export class GhostfolioMeetsUmbrelPageModule {}
diff --git a/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.scss b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.scss
new file mode 100644
index 00000000..5d4e87f3
--- /dev/null
+++ b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.scss
@@ -0,0 +1,3 @@
+:host {
+ display: block;
+}
diff --git a/apps/client/src/app/pages/blog/blog-page.html b/apps/client/src/app/pages/blog/blog-page.html
index 69b5000b..0349eb16 100644
--- a/apps/client/src/app/pages/blog/blog-page.html
+++ b/apps/client/src/app/pages/blog/blog-page.html
@@ -2,6 +2,32 @@
Blog
+
+
+
+
+
diff --git a/apps/client/src/assets/images/blog/ghostfolio-x-umbrel.png b/apps/client/src/assets/images/blog/ghostfolio-x-umbrel.png
new file mode 100644
index 00000000..7f491959
Binary files /dev/null and b/apps/client/src/assets/images/blog/ghostfolio-x-umbrel.png differ
diff --git a/apps/client/src/assets/sitemap.xml b/apps/client/src/assets/sitemap.xml
index b64993b8..34118134 100644
--- a/apps/client/src/assets/sitemap.xml
+++ b/apps/client/src/assets/sitemap.xml
@@ -6,94 +6,98 @@
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
https://ghostfol.io
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/de/blog
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/de/blog/2021/07/hallo-ghostfolio
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/de/pricing
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/about
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/about/changelog
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2021/07/hello-ghostfolio
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2022/01/ghostfolio-first-months-in-open-source
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2022/07/ghostfolio-meets-internet-identity
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2022/07/how-do-i-get-my-finances-in-order
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2022/08/500-stars-on-github
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2022/10/hacktoberfest-2022
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2022/11/black-friday-2022
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/blog/2022/12/the-importance-of-tracking-your-personal-finances
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
+
+
+ https://ghostfol.io/en/blog/2023/02/ghostfolio-meets-umbrel
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/demo
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/faq
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/features
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/markets
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/pricing
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/register
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00
https://ghostfol.io/en/resources
- 2023-01-30T00:00:00+00:00
+ 2023-02-25T00:00:00+00:00