Browse Source

Feature/extend faq pages (#4655)

* Extend FAQ pages

* Update changelog
pull/4658/head
Thomas Kaul 2 months ago
committed by GitHub
parent
commit
ecffb53f07
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 3
      apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
  3. 24
      apps/client/src/app/pages/faq/overview/faq-overview-page.html
  4. 9
      apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts
  5. 4
      apps/client/src/app/pages/faq/saas/saas-page.component.ts
  6. 59
      apps/client/src/app/pages/faq/saas/saas-page.html
  7. 9
      apps/client/src/app/pages/faq/saas/saas-page.module.ts
  8. 4
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts
  9. 19
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html
  10. 9
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts

1
CHANGELOG.md

@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- Added the watchlist to the features page - Added the watchlist to the features page
- Extended the content of the Frequently Asked Questions (FAQ) pages
### Changed ### Changed

3
apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts

@ -12,6 +12,9 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false standalone: false
}) })
export class FaqOverviewPageComponent implements OnDestroy { export class FaqOverviewPageComponent implements OnDestroy {
public pricingUrl =
`https://ghostfol.io/${document.documentElement.lang}/` +
$localize`:snake-case:pricing`;
public routerLinkFeatures = ['/' + $localize`:snake-case:features`]; public routerLinkFeatures = ['/' + $localize`:snake-case:features`];
public user: User; public user: User;

24
apps/client/src/app/pages/faq/overview/faq-overview-page.html

@ -59,9 +59,14 @@
world. The world. The
<a href="https://github.com/ghostfolio/ghostfolio">source code</a> is <a href="https://github.com/ghostfolio/ghostfolio">source code</a> is
fully available as open source software (OSS). Thanks to our generous fully available as open source software (OSS). Thanks to our generous
<a href="https://ghostfol.io/en/pricing">Ghostfolio Premium</a> users <a class="align-items-center d-inline-flex" [href]="pricingUrl"
and <a href="https://www.buymeacoffee.com/ghostfolio">sponsors</a> we >Ghostfolio Premium<gf-premium-indicator
have the ability to run a free, limited plan for novice class="d-inline-block ml-1"
[enableLink]="false"
/></a>
users and
<a href="https://www.buymeacoffee.com/ghostfolio">sponsors</a> we have
the ability to run a free, limited plan for novice
investors.</mat-card-content investors.</mat-card-content
> >
</mat-card> </mat-card>
@ -82,8 +87,11 @@
</mat-card-header> </mat-card-header>
<mat-card-content <mat-card-content
>By offering >By offering
<a href="https://ghostfol.io/en/pricing">Ghostfolio Premium</a>, a <a class="align-items-center d-inline-flex" [href]="pricingUrl"
subscription plan with a managed hosting service and enhanced >Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false" /></a
>, a subscription plan with a managed hosting service and enhanced
features, we fund our business while providing added value to our features, we fund our business while providing added value to our
users.</mat-card-content users.</mat-card-content
> >
@ -105,7 +113,11 @@
</mat-card-header> </mat-card-header>
<mat-card-content <mat-card-content
>Any support for Ghostfolio is welcome. Be it with a >Any support for Ghostfolio is welcome. Be it with a
<a href="https://ghostfol.io/en/pricing">Ghostfolio Premium</a> <a class="align-items-center d-inline-flex" [href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
subscription to finance the hosting infrastructure, a positive rating subscription to finance the hosting infrastructure, a positive rating
in the in the
<a <a

9
apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts

@ -1,3 +1,5 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card'; import { MatCardModule } from '@angular/material/card';
@ -7,7 +9,12 @@ import { FaqOverviewPageComponent } from './faq-overview-page.component';
@NgModule({ @NgModule({
declarations: [FaqOverviewPageComponent], declarations: [FaqOverviewPageComponent],
imports: [CommonModule, FaqOverviewPageRoutingModule, MatCardModule], imports: [
CommonModule,
FaqOverviewPageRoutingModule,
GfPremiumIndicatorComponent,
MatCardModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}) })
export class FaqOverviewPageModule {} export class FaqOverviewPageModule {}

4
apps/client/src/app/pages/faq/saas/saas-page.component.ts

@ -12,8 +12,10 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false standalone: false
}) })
export class SaasPageComponent implements OnDestroy { export class SaasPageComponent implements OnDestroy {
public pricingUrl =
`https://ghostfol.io/${document.documentElement.lang}/` +
$localize`:snake-case:pricing`;
public routerLinkMarkets = ['/' + $localize`:snake-case:markets`]; public routerLinkMarkets = ['/' + $localize`:snake-case:markets`];
public routerLinkPricing = ['/' + $localize`:snake-case:pricing`];
public routerLinkRegister = ['/' + $localize`:snake-case:register`]; public routerLinkRegister = ['/' + $localize`:snake-case:register`];
public user: User; public user: User;

59
apps/client/src/app/pages/faq/saas/saas-page.html

@ -14,11 +14,11 @@
<mat-card-title>How do I start?</mat-card-title> <mat-card-title>How do I start?</mat-card-title>
</mat-card-header> </mat-card-header>
<mat-card-content> <mat-card-content>
You can sign up via the<a [routerLink]="routerLinkRegister" You can sign up via the
>Get Started</a <a [routerLink]="routerLinkRegister">Get Started</a> button at the top
>” button at the top of the page. You have multiple options to join of the page. You have multiple options to join Ghostfolio: Create an
Ghostfolio: Create an account with a security token or account with a security token or <i>Google Sign</i>. We will guide you
<i>Google Sign</i>. We will guide you to set up your portfolio. to set up your portfolio.
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
@ -38,8 +38,8 @@
> >
<mat-card-content <mat-card-content
>Yes, it is! Our >Yes, it is! Our
<a [routerLink]="routerLinkPricing">pricing page</a> details <a target="_blank" [href]="pricingUrl">pricing page</a>
everything you get for free.</mat-card-content details everything you get for free.</mat-card-content
> >
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
@ -49,12 +49,20 @@
></mat-card-header ></mat-card-header
> >
<mat-card-content <mat-card-content
><a [routerLink]="routerLinkPricing">Ghostfolio Premium</a> is a fully ><a
managed Ghostfolio cloud offering for ambitious investors. Revenue is class="align-items-center d-inline-flex"
used to cover the costs of the hosting infrastructure and to fund target="_blank"
ongoing development. It is the Open Source code base with some extras [href]="pricingUrl"
like the <a [routerLink]="routerLinkMarkets">markets overview</a> and >Ghostfolio Premium<gf-premium-indicator
a professional data provider.</mat-card-content class="d-inline-block ml-1"
[enableLink]="false"
/></a>
is a fully managed Ghostfolio cloud offering for ambitious investors.
Revenue is used to cover the costs of the hosting infrastructure and
to fund ongoing development. It is the Open Source code base with some
extras like the
<a [routerLink]="routerLinkMarkets">markets overview</a> and a
professional data provider.</mat-card-content
> >
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
@ -65,8 +73,15 @@
> >
<mat-card-content <mat-card-content
>Yes, you can try >Yes, you can try
<a [routerLink]="routerLinkPricing">Ghostfolio Premium</a> by signing <a
up for Ghostfolio and applying for a trial (see class="align-items-center d-inline-flex"
target="_blank"
[href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
by signing up for Ghostfolio and applying for a trial (see
<a [routerLink]="['/account', 'membership']">Membership</a>). It is <a [routerLink]="['/account', 'membership']">Membership</a>). It is
easy, free and there is no commitment. You can stop using it at any easy, free and there is no commitment. You can stop using it at any
time.</mat-card-content time.</mat-card-content
@ -93,9 +108,17 @@
> >
</mat-card-header> </mat-card-header>
<mat-card-content <mat-card-content
>No, <a [routerLink]="routerLinkPricing">Ghostfolio Premium</a> does >No,
not include auto-renewal. Upon expiration, you can choose whether to <a
start a new subscription.</mat-card-content class="align-items-center d-inline-flex"
target="_blank"
[href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
does not include auto-renewal. Upon expiration, you can choose whether
to start a new subscription.</mat-card-content
> >
</mat-card> </mat-card>
@if (user?.subscription?.type === 'Premium') { @if (user?.subscription?.type === 'Premium') {

9
apps/client/src/app/pages/faq/saas/saas-page.module.ts

@ -1,3 +1,5 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card'; import { MatCardModule } from '@angular/material/card';
@ -7,7 +9,12 @@ import { SaasPageComponent } from './saas-page.component';
@NgModule({ @NgModule({
declarations: [SaasPageComponent], declarations: [SaasPageComponent],
imports: [CommonModule, MatCardModule, SaasPageRoutingModule], imports: [
CommonModule,
GfPremiumIndicatorComponent,
MatCardModule,
SaasPageRoutingModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}) })
export class SaasPageModule {} export class SaasPageModule {}

4
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts

@ -9,6 +9,10 @@ import { Subject } from 'rxjs';
standalone: false standalone: false
}) })
export class SelfHostingPageComponent implements OnDestroy { export class SelfHostingPageComponent implements OnDestroy {
public pricingUrl =
`https://ghostfol.io/${document.documentElement.lang}/` +
$localize`:snake-case:pricing`;
private unsubscribeSubject = new Subject<void>(); private unsubscribeSubject = new Subject<void>();
public ngOnDestroy() { public ngOnDestroy() {

19
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html

@ -140,6 +140,25 @@
providers are considered experimental.</mat-card-content providers are considered experimental.</mat-card-content
> >
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3">
<mat-card-header>
<mat-card-title
>Can I get access to a professional data provider?</mat-card-title
>
</mat-card-header>
<mat-card-content
>Yes, access to a professional data provider is included with a
<a
class="align-items-center d-inline-flex"
target="_blank"
[href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
subscription via an API key.</mat-card-content
>
</mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
<mat-card-header> <mat-card-header>
<mat-card-title>How do I set up a benchmark?</mat-card-title> <mat-card-title>How do I set up a benchmark?</mat-card-title>

9
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts

@ -1,3 +1,5 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card'; import { MatCardModule } from '@angular/material/card';
@ -7,7 +9,12 @@ import { SelfHostingPageComponent } from './self-hosting-page.component';
@NgModule({ @NgModule({
declarations: [SelfHostingPageComponent], declarations: [SelfHostingPageComponent],
imports: [CommonModule, MatCardModule, SelfHostingPageRoutingModule], imports: [
CommonModule,
GfPremiumIndicatorComponent,
MatCardModule,
SelfHostingPageRoutingModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}) })
export class SelfHostingPageModule {} export class SelfHostingPageModule {}

Loading…
Cancel
Save