From 39d1a852678a368a637758f123f3b6f636039519 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 7 Nov 2023 18:14:54 +0100
Subject: [PATCH] Feature/extend personal finance tools pages 20231107 (#2618)
* Add Monarch Money
* Add YNAB
* Add Allvue Systems
---
apps/api/src/assets/sitemap.xml | 48 +++++++++++++++++++
.../personal-finance-tools/products.ts | 35 ++++++++++++++
.../products/allvue-systems-page.component.ts | 31 ++++++++++++
.../products/monarch-money-page.component.ts | 31 ++++++++++++
.../products/ynab-page.component.ts | 31 ++++++++++++
5 files changed, 176 insertions(+)
create mode 100644 apps/client/src/app/pages/resources/personal-finance-tools/products/allvue-systems-page.component.ts
create mode 100644 apps/client/src/app/pages/resources/personal-finance-tools/products/monarch-money-page.component.ts
create mode 100644 apps/client/src/app/pages/resources/personal-finance-tools/products/ynab-page.component.ts
diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml
index 5f7049311..2c8ad34b9 100644
--- a/apps/api/src/assets/sitemap.xml
+++ b/apps/api/src/assets/sitemap.xml
@@ -58,6 +58,10 @@
https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-8figures
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-allvue-systems
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-altoo
${currentDate}T00:00:00+00:00
@@ -130,6 +134,10 @@
https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-maybe-finance
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-monarch-money
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-monse
${currentDate}T00:00:00+00:00
@@ -202,6 +210,10 @@
https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-yeekatee
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-ynab
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/de/ueber-uns
${currentDate}T00:00:00+00:00
@@ -348,6 +360,10 @@
https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-8figures
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-allvue-systems
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-altoo
${currentDate}T00:00:00+00:00
@@ -420,6 +436,10 @@
https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-maybe-finance
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-monarch-money
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-monse
${currentDate}T00:00:00+00:00
@@ -492,6 +512,10 @@
https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-yeekatee
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-ynab
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/es
${currentDate}T00:00:00+00:00
@@ -662,6 +686,10 @@
https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-8figures
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-allvue-systems
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-altoo
${currentDate}T00:00:00+00:00
@@ -734,6 +762,10 @@
https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-maybe-finance
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-monarch-money
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-monse
${currentDate}T00:00:00+00:00
@@ -806,6 +838,10 @@
https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-yeekatee
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-ynab
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/nl
${currentDate}T00:00:00+00:00
@@ -822,6 +858,10 @@
https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-8figures
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-allvue-systems
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-altoo
${currentDate}T00:00:00+00:00
@@ -894,6 +934,10 @@
https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-maybe-finance
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-monarch-money
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-monse
${currentDate}T00:00:00+00:00
@@ -966,6 +1010,10 @@
https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-yeekatee
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-ynab
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/nl/functionaliteiten
${currentDate}T00:00:00+00:00
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products.ts
index 09569d8c1..8e4559fa5 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/products.ts
@@ -1,5 +1,6 @@
import { Product } from '@ghostfolio/common/interfaces';
+import { AllvueSystemsPageComponent } from './products/allvue-systems-page.component';
import { AltooPageComponent } from './products/altoo-page.component';
import { BeanvestPageComponent } from './products/beanvest-page.component';
import { CapitallyPageComponent } from './products/capitally-page.component';
@@ -19,6 +20,7 @@ import { JustEtfPageComponent } from './products/justetf-page.component';
import { KuberaPageComponent } from './products/kubera-page.component';
import { MarketsShPageComponent } from './products/markets.sh-page.component';
import { MaybeFinancePageComponent } from './products/maybe-finance-page.component';
+import { MonarchMoneyPageComponent } from './products/monarch-money-page.component';
import { MonsePageComponent } from './products/monse-page.component';
import { ParqetPageComponent } from './products/parqet-page.component';
import { PlannixPageComponent } from './products/plannix-page.component';
@@ -37,6 +39,7 @@ import { UtlunaPageComponent } from './products/utluna-page.component';
import { VyzerPageComponent } from './products/vyzer-page.component';
import { WealthicaPageComponent } from './products/wealthica-page.component';
import { YeekateePageComponent } from './products/yeekatee-page.component';
+import { YnabPageComponent } from './products/ynab-page.component';
export const products: Product[] = [
{
@@ -62,6 +65,16 @@ export const products: Product[] = [
slogan: 'Open Source Wealth Management',
useAnonymously: true
},
+ {
+ component: AllvueSystemsPageComponent,
+ founded: 2019,
+ hasFreePlan: false,
+ hasSelfHostingAbility: false,
+ key: 'allvue-systems',
+ name: 'Allvue Systems',
+ origin: $localize`United States`,
+ slogan: 'Investment Software Suite'
+ },
{
component: AltooPageComponent,
founded: 2017,
@@ -265,6 +278,17 @@ export const products: Product[] = [
region: $localize`United States`,
slogan: 'Your financial future, in your control'
},
+ {
+ component: MonarchMoneyPageComponent,
+ founded: 2019,
+ hasFreePlan: false,
+ hasSelfHostingAbility: false,
+ key: 'monarch-money',
+ name: 'Monarch Money',
+ origin: $localize`United States`,
+ pricingPerYear: '$99.99',
+ slogan: 'The modern way to manage your money'
+ },
{
component: MonsePageComponent,
hasFreePlan: false,
@@ -452,5 +476,16 @@ export const products: Product[] = [
origin: $localize`Switzerland`,
region: $localize`Switzerland`,
slogan: 'Connect. Share. Invest.'
+ },
+ {
+ component: YnabPageComponent,
+ founded: 2004,
+ hasFreePlan: false,
+ hasSelfHostingAbility: false,
+ key: 'ynab',
+ name: 'YNAB (You Need a Budget)',
+ origin: $localize`United States`,
+ pricingPerYear: '$99',
+ slogan: 'Change Your Relationship With Money'
}
];
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/allvue-systems-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/allvue-systems-page.component.ts
new file mode 100644
index 000000000..a8acb3742
--- /dev/null
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/allvue-systems-page.component.ts
@@ -0,0 +1,31 @@
+import { CommonModule } from '@angular/common';
+import { Component } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { RouterModule } from '@angular/router';
+
+import { products } from '../products';
+
+@Component({
+ host: { class: 'page' },
+ imports: [CommonModule, MatButtonModule, RouterModule],
+ selector: 'gf-allvue-systems-page',
+ standalone: true,
+ styleUrls: ['../product-page-template.scss'],
+ templateUrl: '../product-page-template.html'
+})
+export class AllvueSystemsPageComponent {
+ public product1 = products.find(({ key }) => {
+ return key === 'ghostfolio';
+ });
+
+ public product2 = products.find(({ key }) => {
+ return key === 'allvue-systems';
+ });
+
+ public routerLinkAbout = ['/' + $localize`about`];
+ public routerLinkFeatures = ['/' + $localize`features`];
+ public routerLinkResourcesPersonalFinanceTools = [
+ '/' + $localize`resources`,
+ 'personal-finance-tools'
+ ];
+}
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/monarch-money-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/monarch-money-page.component.ts
new file mode 100644
index 000000000..4b21de801
--- /dev/null
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/monarch-money-page.component.ts
@@ -0,0 +1,31 @@
+import { CommonModule } from '@angular/common';
+import { Component } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { RouterModule } from '@angular/router';
+
+import { products } from '../products';
+
+@Component({
+ host: { class: 'page' },
+ imports: [CommonModule, MatButtonModule, RouterModule],
+ selector: 'gf-monarch-money-page',
+ standalone: true,
+ styleUrls: ['../product-page-template.scss'],
+ templateUrl: '../product-page-template.html'
+})
+export class MonarchMoneyPageComponent {
+ public product1 = products.find(({ key }) => {
+ return key === 'ghostfolio';
+ });
+
+ public product2 = products.find(({ key }) => {
+ return key === 'monarch-money';
+ });
+
+ public routerLinkAbout = ['/' + $localize`about`];
+ public routerLinkFeatures = ['/' + $localize`features`];
+ public routerLinkResourcesPersonalFinanceTools = [
+ '/' + $localize`resources`,
+ 'personal-finance-tools'
+ ];
+}
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/ynab-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/ynab-page.component.ts
new file mode 100644
index 000000000..d63f70e25
--- /dev/null
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/ynab-page.component.ts
@@ -0,0 +1,31 @@
+import { CommonModule } from '@angular/common';
+import { Component } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { RouterModule } from '@angular/router';
+
+import { products } from '../products';
+
+@Component({
+ host: { class: 'page' },
+ imports: [CommonModule, MatButtonModule, RouterModule],
+ selector: 'gf-ynab-page',
+ standalone: true,
+ styleUrls: ['../product-page-template.scss'],
+ templateUrl: '../product-page-template.html'
+})
+export class YnabPageComponent {
+ public product1 = products.find(({ key }) => {
+ return key === 'ghostfolio';
+ });
+
+ public product2 = products.find(({ key }) => {
+ return key === 'ynab';
+ });
+
+ public routerLinkAbout = ['/' + $localize`about`];
+ public routerLinkFeatures = ['/' + $localize`features`];
+ public routerLinkResourcesPersonalFinanceTools = [
+ '/' + $localize`resources`,
+ 'personal-finance-tools'
+ ];
+}