Browse Source

Add Black Weeks 2025 blog post

pull/5942/head
Thomas Kaul 1 month ago
parent
commit
8d9663230f
  1. 4
      apps/api/src/app/endpoints/sitemap/sitemap.service.ts
  2. 4
      apps/api/src/middlewares/html-template.middleware.ts
  3. 18
      apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.component.ts
  4. 180
      apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.html
  5. 26
      apps/client/src/app/pages/blog/blog-page.html
  6. 9
      apps/client/src/app/pages/blog/blog-page.routes.ts
  7. BIN
      apps/client/src/assets/images/blog/black-weeks-2025.jpg

4
apps/api/src/app/endpoints/sitemap/sitemap.service.ts

@ -116,6 +116,10 @@ export class SitemapService {
{
languageCode: 'en',
routerLink: ['2025', '09', 'hacktoberfest-2025']
},
{
languageCode: 'en',
routerLink: ['2025', '11', 'black-weeks-2025']
}
]
.map(({ languageCode, routerLink }) => {

4
apps/api/src/middlewares/html-template.middleware.ts

@ -79,6 +79,10 @@ const locales = {
'/en/blog/2025/09/hacktoberfest-2025': {
featureGraphicPath: 'assets/images/blog/hacktoberfest-2025.png',
title: `Hacktoberfest 2025 - ${title}`
},
'/en/blog/2025/11/black-weeks-2025': {
featureGraphicPath: 'assets/images/blog/black-weeks-2025.jpg',
title: `Black Weeks 2025 - ${title}`
}
};

18
apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.component.ts

@ -0,0 +1,18 @@
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { RouterModule } from '@angular/router';
@Component({
host: { class: 'page' },
imports: [GfPremiumIndicatorComponent, MatButtonModule, RouterModule],
selector: 'gf-black-weeks-2025-page',
templateUrl: './black-weeks-2025-page.html'
})
export class BlackWeeks2025PageComponent {
public routerLinkBlog = publicRoutes.blog.routerLink;
public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkPricing = publicRoutes.pricing.routerLink;
}

180
apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.html

@ -0,0 +1,180 @@
<div class="blog container">
<div class="row">
<div class="col-md-8 offset-md-2">
<article>
<div class="mb-4 text-center">
<h1 class="mb-1">Black Weeks 2025</h1>
<div class="mb-3 text-muted"><small>2025-11-15</small></div>
<img
alt="Black Week 2025 Teaser"
class="rounded w-100"
src="../assets/images/blog/black-weeks-2025.jpg"
title="Black Weeks 2025"
/>
</div>
<section class="mb-4">
<p>
Take advantage of our exclusive <strong>Black Weeks</strong> offer
and save <strong>25%</strong> on your annual
<span class="align-items-center d-inline-flex"
>Ghostfolio Premium
<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/>
</span>
subscription, plus get <strong>3 months extra</strong> for free!
</p>
</section>
<section class="mb-4">
<p>
<a
href="https://ghostfol.io"
title="Open Source Wealth Management Software"
>Ghostfolio</a
>
is a powerful personal finance dashboard, designed to simplify your
investment journey. With this Open Source Software (OSS) platform,
you can:
</p>
<ul class="list-unstyled">
<li>
<strong>Unify your assets</strong>: Track your financial
portfolio, including stocks, ETFs, cryptocurrencies, etc.
</li>
<li>
<strong>Gain deeper insights</strong>: Access real-time analytics
and data-driven insights.
</li>
<li>
<strong>Make informed decisions</strong>: Empower yourself with
actionable information.
</li>
</ul>
</section>
<section class="mb-4">
<p>
Don’t miss this limited-time offer to optimize your financial
future.
</p>
<p class="text-center">
<a color="primary" mat-flat-button [routerLink]="routerLinkPricing"
>Get the Deal</a
>
</p>
<p class="mt-5">
For more information, visit our
<a [routerLink]="routerLinkPricing">pricing page</a>.
</p>
</section>
<section class="mb-4">
<ul class="list-inline">
<li class="list-inline-item">
<span class="badge badge-light">2025</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Black Friday</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Black Weeks</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Cryptocurrency</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Dashboard</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Deal</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">DeFi</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">ETF</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Finance</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Fintech</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Ghostfolio</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Ghostfolio Premium</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Hosting</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Investment</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Open Source</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">OSS</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Personal Finance</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Portfolio</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Portfolio Tracker</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Pricing</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Promotion</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">SaaS</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Sale</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Software</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Stock</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Subscription</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Wealth</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Wealth Management</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Web3</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Web 3.0</span>
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="routerLinkBlog">Blog</a>
</li>
<li
aria-current="page"
class="active breadcrumb-item text-truncate"
>
Black Weeks 2025
</li>
</ol>
</nav>
</article>
</div>
</div>
</div>

26
apps/client/src/app/pages/blog/blog-page.html

@ -8,6 +8,32 @@
finance</small
>
</h1>
@if (hasPermissionForSubscription) {
<mat-card appearance="outlined" class="mb-3">
<mat-card-content class="p-0">
<div class="container p-0">
<div class="flex-nowrap no-gutters row">
<a
class="d-flex overflow-hidden p-3 w-100"
href="../en/blog/2025/11/black-weeks-2025"
>
<div class="flex-grow-1 overflow-hidden">
<div class="h6 m-0 text-truncate">Black Weeks 2025</div>
<div class="d-flex text-muted">2025-11-15</div>
</div>
<div class="align-items-center d-flex">
<ion-icon
class="chevron text-muted"
name="chevron-forward-outline"
size="small"
/>
</div>
</a>
</div>
</div>
</mat-card-content>
</mat-card>
}
<mat-card appearance="outlined" class="mb-3">
<mat-card-content class="p-0">
<div class="container p-0">

9
apps/client/src/app/pages/blog/blog-page.routes.ts

@ -209,5 +209,14 @@ export const routes: Routes = [
'./2025/09/hacktoberfest-2025/hacktoberfest-2025-page.component'
).then((c) => c.Hacktoberfest2025PageComponent),
title: 'Hacktoberfest 2025'
},
{
canActivate: [AuthGuard],
path: '2025/11/black-weeks-2025',
loadComponent: () =>
import('./2025/11/black-weeks-2025/black-weeks-2025-page.component').then(
(c) => c.BlackWeeks2025PageComponent
),
title: 'Black Weeks 2025'
}
];

BIN
apps/client/src/assets/images/blog/black-weeks-2025.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Loading…
Cancel
Save