From 65276483e09994a60dc601f66bf0f53c4e3b6b13 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 25 Feb 2023 20:14:33 +0100 Subject: [PATCH] Feature/add umbrel blog post (#1749) * Add blog post: Ghostfolio meets Umbrel * Update changelog --- CHANGELOG.md | 6 + apps/api/src/app/frontend.middleware.ts | 5 + apps/client/src/app/app-routing.module.ts | 7 + ...tfolio-meets-umbrel-page-routing.module.ts | 20 ++ .../ghostfolio-meets-umbrel-page.component.ts | 9 + .../ghostfolio-meets-umbrel-page.html | 200 ++++++++++++++++++ .../ghostfolio-meets-umbrel-page.module.ts | 13 ++ .../ghostfolio-meets-umbrel-page.scss | 3 + apps/client/src/app/pages/blog/blog-page.html | 26 +++ .../images/blog/ghostfolio-x-umbrel.png | Bin 0 -> 16324 bytes apps/client/src/assets/sitemap.xml | 50 +++-- 11 files changed, 316 insertions(+), 23 deletions(-) create mode 100644 apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page-routing.module.ts create mode 100644 apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts create mode 100644 apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.html create mode 100644 apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module.ts create mode 100644 apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.scss create mode 100644 apps/client/src/assets/images/blog/ghostfolio-x-umbrel.png 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 0000000000000000000000000000000000000000..7f491959730d45ea45737ac0bafe9473e01116f0 GIT binary patch literal 16324 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 XhB(>|QJj3(c1?`T&zJpq^Zx$<>;yUf literal 0 HcmV?d00001 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