Browse Source

Merge 72d472f11c into a87a3044da

pull/6678/merge
Thomas Kaul 10 hours ago
committed by GitHub
parent
commit
b32b55bc79
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      CHANGELOG.md
  2. 4
      apps/api/src/app/endpoints/sitemap/sitemap.service.ts
  3. 4
      apps/api/src/middlewares/html-template.middleware.ts
  4. 21
      apps/client/src/app/pages/blog/2026/04/ghostfolio-3/ghostfolio-3-page.component.ts
  5. 286
      apps/client/src/app/pages/blog/2026/04/ghostfolio-3/ghostfolio-3-page.html
  6. 26
      apps/client/src/app/pages/blog/blog-page.html
  7. 9
      apps/client/src/app/pages/blog/blog-page.routes.ts
  8. BIN
      apps/client/src/assets/images/blog/ghostfolio-3.jpg

4
CHANGELOG.md

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Next
### Added
- Added a blog post: _Announcing Ghostfolio 3.0_
### Changed
- Migrated from _Material Design_ 2 to _Material Design_ 3

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

@ -120,6 +120,10 @@ export class SitemapService {
{
languageCode: 'en',
routerLink: ['2025', '11', 'black-weeks-2025']
},
{
languageCode: 'en',
routerLink: ['2026', '04', 'ghostfolio-3']
}
]
.map(({ languageCode, routerLink }) => {

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

@ -83,6 +83,10 @@ const locales = {
'/en/blog/2025/11/black-weeks-2025': {
featureGraphicPath: 'assets/images/blog/black-weeks-2025.jpg',
title: `Black Weeks 2025 - ${title}`
},
'/en/blog/2026/04/ghostfolio-3': {
featureGraphicPath: 'assets/images/blog/ghostfolio-3.jpg',
title: `Announcing Ghostfolio 3.0 - ${title}`
}
};

21
apps/client/src/app/pages/blog/2026/04/ghostfolio-3/ghostfolio-3-page.component.ts

@ -0,0 +1,21 @@
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { RouterModule } from '@angular/router';
@Component({
host: { class: 'page' },
imports: [MatButtonModule, RouterModule],
selector: 'gf-ghostfolio-3-page',
templateUrl: './ghostfolio-3-page.html'
})
export class Ghostfolio3PageComponent {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
public routerLinkAbout = publicRoutes.about.routerLink;
public routerLinkAboutChangelog =
publicRoutes.about.subRoutes.changelog.routerLink;
public routerLinkBlog = publicRoutes.blog.routerLink;
public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkMarkets = publicRoutes.markets.routerLink;
}

286
apps/client/src/app/pages/blog/2026/04/ghostfolio-3/ghostfolio-3-page.html

@ -0,0 +1,286 @@
<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">Ghostfolio 3.0</h1>
<div class="mb-3 text-muted"><small>2026-04-03</small></div>
<img
alt="Ghostfolio 3.0 Teaser"
class="border rounded w-100"
src="../assets/images/blog/ghostfolio-3.jpg"
title="Announcing Ghostfolio 3.0"
/>
</div>
<section class="mb-4">
<p>
A lot has happened since the
<a href="../en/blog/2023/09/ghostfolio-2">last major version</a> of
<a [routerLink]="routerLinkAbout">Ghostfolio</a>, with over 250
releases shipped since then. The project has grown to 275+
contributors from around the globe and surpassed 2’300’000 pulls on
Docker Hub. These achievements emphasize the growing recognition for
our project and the path we are on, simplifying investment tracking
while prioritizing user privacy.
</p>
<p>
Today, we are proud to present Ghostfolio 3.0, another milestone in
our Open Source Software (OSS) journey.
</p>
</section>
<section class="mb-4">
<h2 class="h4">Introducing Ghostfolio 3.0</h2>
<p>
Ghostfolio 3.0 is the evolution of our
<a [routerLink]="routerLinkFeatures"
>open source wealth management software</a
>, elevating both user and developer experiences. We have refreshed
the user interface, added comprehensive analytics, increased
stability, added more languages, and utilized the latest technology
to deliver these improvements. Here is a closer look at a selection
of the improvements you can expect from this
<a [routerLink]="routerLinkAboutChangelog">release</a>, alongside
uncounted smaller additions and enhancements.
</p>
<h3 class="h5">Refreshed User Interface</h3>
<p>
Ghostfolio 3.0 comes with a refreshed user interface that modernizes
the visual appearance of the application. The updated design brings
a cleaner look with refined components and improved visual
consistency across the platform.
</p>
<h3 class="h5">Comprehensive Analytics</h3>
<p>
This release provides a broad set of tools to help you understand
your wealth. Ghostfolio X-ray uses static analysis to uncover
potential issues and risks in your portfolio, with rules that can
now be customized to match your personal investment strategy.
</p>
<h3 class="h5">Extended Multilanguage Support</h3>
<p>
Largely driven by contributions from the community, Ghostfolio now
supports more languages than ever. The application is now available
in a growing number of languages, making it accessible to a broader
audience of investors around the world.
</p>
<h3 class="h5">Reliable Stability</h3>
<p>
A wealth management platform needs to be reliable. With Ghostfolio
3.0, we have further strengthened the robustness of our
architecture, so you can rely on Ghostfolio regardless of the
<a [routerLink]="routerLinkMarkets">market conditions</a>.
</p>
<h3 class="h5">Empowering Self-Hosting</h3>
<p>
This release simplifies and extends the self-hosting experience. A
major addition is that self-hosters can now fully benefit from
<a target="_blank" [href]="pricingUrl">Ghostfolio Premium</a> to
make use of a professional data provider. This gives you full
control over your infrastructure while still having access to
high-quality market data for your portfolio analytics.
</p>
<h3 class="h5">Cutting-Edge Technology Stack</h3>
<p>
Under the hood, Ghostfolio 3.0 has been upgraded to
<a href="https://angular.io" target="_blank">Angular 21</a>,
<a href="https://nestjs.com" target="_blank">Nest.js 11</a>,
<a href="https://www.prisma.io" target="_blank">Prisma 7</a>, and
<a href="https://nx.dev" target="_blank">Nx 22</a>. Keeping the
technology stack up to date ensures a solid foundation for users and
developers.
</p>
</section>
<section class="mb-4">
<h2 class="h4">Thriving Ghostfolio Community</h2>
<p>
Ghostfolio is built in public, and its community plays a central
role in shaping the open source project. Here are some highlights of
the community growth:
</p>
<ul>
<li>
Ghostfolio has accumulated <strong>8’000+ stars</strong> on
<a
href="https://github.com/ghostfolio/ghostfolio"
target="_blank"
title="Find Ghostfolio on GitHub"
>GitHub</a
>, reflecting the growing interest and trust in the project.
</li>
<li>
The
<a
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"
target="_blank"
title="Join the Ghostfolio Slack community"
>Slack</a
>
community has grown to over <strong>1’250 members</strong>, where
investors exchange ideas and help each other.
</li>
<li>
Over
<strong>700 investors and personal finance enthusiasts</strong>
follow Ghostfolio on
<a href="https://x.com/ghostfolio_" target="_blank">X</a>
(formerly Twitter) for updates and discussions.
</li>
</ul>
<p>
There is much more to come. If you are not part of the community
yet, we would love to have you on board.
</p>
<p>
<strong>Join our Slack community</strong>: Connect with fellow
investors, share your insights, and stay updated on the latest news
by joining our
<a
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"
target="_blank"
title="Join the Ghostfolio Slack community"
>Slack</a
>
community. It is a dynamic space where you can learn, collaborate,
and grow together with us.
</p>
<p>
<strong>Follow us on X</strong>: For release updates and market
insights, follow
<a href="https://x.com/ghostfolio_" target="_blank"
>Ghostfolio on X</a
>. It is the perfect place to stay informed and connect with our
team.
</p>
<p>
<strong>Give us a Star</strong>: If you have found value in
Ghostfolio or appreciate our commitment to simplifying investment
tracking, please consider giving us a star on
<a
href="https://github.com/ghostfolio/ghostfolio"
target="_blank"
title="Find Ghostfolio on GitHub"
>GitHub</a
>. Your support helps us reach a wider audience and make a
difference in the world of wealth management.
</p>
<p>
<strong>Become a contributor</strong>: If you are a developer
passionate about open source projects and personal finance, we
welcome your contributions.
<a href="https://github.com/ghostfolio/ghostfolio" target="_blank"
>Join our developer community</a
>, collaborate with like-minded people, and help shape the future of
Ghostfolio.
</p>
</section>
<section>
<p>
Ghostfolio 3.0 is the result of countless contributions, feedback,
and shared passion for open source and personal finance. Whether you
have been with us from the start or are just discovering the
project, thank you for being part of this community.
</p>
<p>Thomas from Ghostfolio</p>
</section>
<section class="mb-4">
<ul class="list-inline">
<li class="list-inline-item">
<span class="badge badge-light">Angular</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Announcement</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Collaboration</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Community</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Contribution</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Evolution</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 3.0</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">Internationalization</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">Nest.js</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Nx</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">Platform</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">Prisma</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Privacy</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Release</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Self-Hosting</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">Stack</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Technology</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Wealth Management</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"
>
Announcing Ghostfolio 3.0
</li>
</ol>
</nav>
</article>
</div>
</div>
</div>

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

@ -8,6 +8,32 @@
finance</small
>
</h1>
<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/2026/04/ghostfolio-3"
>
<div class="flex-grow-1 overflow-hidden">
<div class="h6 m-0 text-truncate">
Announcing Ghostfolio 3.0
</div>
<div class="d-flex text-muted">2026-04-03</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>
@if (hasPermissionForSubscription) {
<mat-card appearance="outlined" class="mb-3">
<mat-card-content class="p-0">

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

@ -218,5 +218,14 @@ export const routes: Routes = [
(c) => c.BlackWeeks2025PageComponent
),
title: 'Black Weeks 2025'
},
{
canActivate: [AuthGuard],
path: '2026/04/ghostfolio-3',
loadComponent: () =>
import('./2026/04/ghostfolio-3/ghostfolio-3-page.component').then(
(c) => c.Ghostfolio3PageComponent
),
title: 'Ghostfolio 3.0'
}
];

BIN
apps/client/src/assets/images/blog/ghostfolio-3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Loading…
Cancel
Save