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
+ Ghostfolio meets Umbrel Teaser +
+
+

+ 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