diff --git a/CHANGELOG.md b/CHANGELOG.md index 51ae02bdd..8105a407e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Introduced support for automatically gathering required exchange rates, exposed as an environment variable (`ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES`) +- Added a blog post: _Black Weeks 2025_ ### Changed diff --git a/apps/api/src/app/endpoints/sitemap/sitemap.service.ts b/apps/api/src/app/endpoints/sitemap/sitemap.service.ts index 359a29531..e7e05330f 100644 --- a/apps/api/src/app/endpoints/sitemap/sitemap.service.ts +++ b/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 }) => { diff --git a/apps/api/src/middlewares/html-template.middleware.ts b/apps/api/src/middlewares/html-template.middleware.ts index 892b1ab5e..c958718f6 100644 --- a/apps/api/src/middlewares/html-template.middleware.ts +++ b/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}` } }; diff --git a/apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.component.ts b/apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.component.ts new file mode 100644 index 000000000..c5947abf4 --- /dev/null +++ b/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; +} diff --git a/apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.html b/apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.html new file mode 100644 index 000000000..e10a64de7 --- /dev/null +++ b/apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.html @@ -0,0 +1,159 @@ +
+
+
+
+
+

Black Weeks 2025

+
2025-11-15
+ Black Week 2025 Teaser +
+
+

+ Save 25% on the + Ghostfolio Premium + + + annual plan and get 3 extra months on top with our + exclusive Black Weeks offer. +

+
+
+

+ Ghostfolio + unifies your finances in one place and gives you a clear overview of + your portfolio across stocks, ETFs, cryptocurrencies or other + assets. Real time analytics and smart evaluations help you + understand your financial situation quickly and make confident + decisions. +

+
+
+

+ Grab this limited Black Weeks deal to optimize your financial + future. +

+

+ Get the offer +

+

+ More details are available on the + pricing page. +

+
+
+
    +
  • + 2025 +
  • +
  • + Black Friday +
  • +
  • + Black Weeks +
  • +
  • + Cryptocurrency +
  • +
  • + Deal +
  • +
  • + Discount +
  • +
  • + ETF +
  • +
  • + Finance +
  • +
  • + Fintech +
  • +
  • + Ghostfolio +
  • +
  • + Ghostfolio Premium +
  • +
  • + Investment +
  • +
  • + Open Source +
  • +
  • + OSS +
  • +
  • + Personal Finance +
  • +
  • + Portfolio +
  • +
  • + Portfolio Tracker +
  • +
  • + Pricing +
  • +
  • + Promotion +
  • +
  • + SaaS +
  • +
  • + Sale +
  • +
  • + Savings +
  • +
  • + Software +
  • +
  • + Stock +
  • +
  • + Subscription +
  • +
  • + Wealth +
  • +
  • + Wealth Management +
  • +
+
+ +
+
+
+
diff --git a/apps/client/src/app/pages/blog/blog-page.html b/apps/client/src/app/pages/blog/blog-page.html index 88b685d33..e84cb303d 100644 --- a/apps/client/src/app/pages/blog/blog-page.html +++ b/apps/client/src/app/pages/blog/blog-page.html @@ -8,6 +8,32 @@ finance + @if (hasPermissionForSubscription) { + + + + + + }
diff --git a/apps/client/src/app/pages/blog/blog-page.routes.ts b/apps/client/src/app/pages/blog/blog-page.routes.ts index 2b5a4be64..36d111c19 100644 --- a/apps/client/src/app/pages/blog/blog-page.routes.ts +++ b/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' } ]; diff --git a/apps/client/src/assets/images/blog/black-weeks-2025.jpg b/apps/client/src/assets/images/blog/black-weeks-2025.jpg new file mode 100644 index 000000000..c71827c5e Binary files /dev/null and b/apps/client/src/assets/images/blog/black-weeks-2025.jpg differ