diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 6b6184b7a..2e5d46e46 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -54,6 +54,10 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools ${currentDate}T00:00:00+00:00 + + 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-altoo ${currentDate}T00:00:00+00:00 @@ -146,6 +150,10 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-projectionlab ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-rocket-money + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-seeking-alpha ${currentDate}T00:00:00+00:00 @@ -324,6 +332,10 @@ https://ghostfol.io/en/resources/personal-finance-tools ${currentDate}T00:00:00+00:00 + + 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-altoo ${currentDate}T00:00:00+00:00 @@ -416,6 +428,10 @@ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-projectionlab ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-rocket-money + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-seeking-alpha ${currentDate}T00:00:00+00:00 @@ -622,6 +638,10 @@ https://ghostfol.io/it/risorse/personal-finance-tools ${currentDate}T00:00:00+00:00 + + 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-altoo ${currentDate}T00:00:00+00:00 @@ -714,6 +734,10 @@ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-projectionlab ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-rocket-money + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-seeking-alpha ${currentDate}T00:00:00+00:00 @@ -766,6 +790,10 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools ${currentDate}T00:00:00+00:00 + + 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-altoo ${currentDate}T00:00:00+00:00 @@ -858,6 +886,10 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-projectionlab ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-rocket-money + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-seeking-alpha ${currentDate}T00:00:00+00:00 diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts index ad4fc699e..1daf63e11 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts @@ -16,10 +16,10 @@ const routes: Routes = [ .filter(({ key }) => { return key !== 'ghostfolio'; }) - .map(({ component, key, name }) => { + .map(({ alias, component, key, name }) => { return { canActivate: [AuthGuard], - path: $localize`open-source-alternative-to` + `-${key}`, + path: $localize`open-source-alternative-to` + `-${alias ?? key}`, loadComponent: () => import(`./products/${key}-page.component`).then(() => component), title: $localize`Open Source Alternative to ${name}` diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts index b06d46f38..173b5426f 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts @@ -12,9 +12,13 @@ import { products } from './products'; export class PersonalFinanceToolsPageComponent implements OnDestroy { public pathAlternativeTo = $localize`open-source-alternative-to` + '-'; public pathResources = '/' + $localize`resources`; - public products = products.filter(({ key }) => { - return key !== 'ghostfolio'; - }); + public products = products + .filter(({ key }) => { + return key !== 'ghostfolio'; + }) + .sort((a, b) => { + return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }); + }); public routerLinkAbout = ['/' + $localize`about`]; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html index 98e10ce73..51584e451 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html @@ -28,8 +28,8 @@
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 8eddbea16..050ee5383 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 @@ -7,6 +7,7 @@ import { CapMonPageComponent } from './products/capmon-page.component'; import { CopilotMoneyPageComponent } from './products/copilot-money-page.component'; import { DeltaPageComponent } from './products/delta-page.component'; import { DivvyDiaryPageComponent } from './products/divvydiary-page.component'; +import { EightFiguresPageComponent } from './products/eightfigures-page.component'; import { ExirioPageComponent } from './products/exirio-page.component'; import { FinaryPageComponent } from './products/finary-page.component'; import { FolisharePageComponent } from './products/folishare-page.component'; @@ -23,6 +24,7 @@ import { PlannixPageComponent } from './products/plannix-page.component'; import { PortfolioDividendTrackerPageComponent } from './products/portfolio-dividend-tracker-page.component'; import { PortseidoPageComponent } from './products/portseido-page.component'; import { ProjectionLabPageComponent } from './products/projectionlab-page.component'; +import { RocketMoneyPageComponent } from './products/rocket-money-page.component'; import { SeekingAlphaPageComponent } from './products/seeking-alpha-page.component'; import { SharesightPageComponent } from './products/sharesight-page.component'; import { SimplePortfolioPageComponent } from './products/simple-portfolio-page.component'; @@ -131,6 +133,15 @@ export const products: Product[] = [ pricingPerYear: '€65', slogan: 'Your personal Dividend Calendar' }, + { + alias: '8figures', + component: EightFiguresPageComponent, + founded: 2022, + key: 'eightfigures', + name: '8FIGURES', + origin: $localize`United States`, + slogan: 'Portfolio Tracker Designed by Professional Investors' + }, { component: ExirioPageComponent, founded: 2020, @@ -307,6 +318,15 @@ export const products: Product[] = [ pricingPerYear: '$108', slogan: 'Build Financial Plans You Love.' }, + { + component: RocketMoneyPageComponent, + founded: 2015, + hasSelfHostingAbility: false, + key: 'rocket-money', + name: 'Rocket Money', + origin: $localize`United States`, + slogan: 'Track your net worth' + }, { component: SeekingAlphaPageComponent, founded: 2004, diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts new file mode 100644 index 000000000..3867beaf2 --- /dev/null +++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-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-eightfigures-page', + standalone: true, + styleUrls: ['../product-page-template.scss'], + templateUrl: '../product-page-template.html' +}) +export class EightFiguresPageComponent { + public product1 = products.find(({ key }) => { + return key === 'ghostfolio'; + }); + + public product2 = products.find(({ key }) => { + return key === 'eightfigures'; + }); + + 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/rocket-money-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-money-page.component.ts new file mode 100644 index 000000000..cbf2599e8 --- /dev/null +++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-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-rocket-money-page', + standalone: true, + styleUrls: ['../product-page-template.scss'], + templateUrl: '../product-page-template.html' +}) +export class RocketMoneyPageComponent { + public product1 = products.find(({ key }) => { + return key === 'ghostfolio'; + }); + + public product2 = products.find(({ key }) => { + return key === 'rocket-money'; + }); + + public routerLinkAbout = ['/' + $localize`about`]; + public routerLinkFeatures = ['/' + $localize`features`]; + public routerLinkResourcesPersonalFinanceTools = [ + '/' + $localize`resources`, + 'personal-finance-tools' + ]; +} diff --git a/libs/common/src/lib/interfaces/product.ts b/libs/common/src/lib/interfaces/product.ts index c5465898d..274ee8207 100644 --- a/libs/common/src/lib/interfaces/product.ts +++ b/libs/common/src/lib/interfaces/product.ts @@ -1,4 +1,5 @@ export interface Product { + alias?: string; component: any; founded?: number; hasFreePlan?: boolean;