diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts index ea860b0e1..3ab8b9584 100644 --- a/apps/api/src/app/frontend.middleware.ts +++ b/apps/api/src/app/frontend.middleware.ts @@ -87,6 +87,13 @@ export class FrontendMiddleware implements NestMiddleware { ) { featureGraphicPath = 'assets/images/blog/ghostfolio-x-umbrel.png'; title = `Ghostfolio meets Umbrel - ${title}`; + } else if ( + request.path.startsWith( + '/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github' + ) + ) { + featureGraphicPath = 'assets/images/blog/100-stars-on-github.jpg'; + title = `Ghostfolio reaches 1’000 Stars on GitHub - ${title}`; } if ( diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index b3623e339..dd5ba3c50 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -130,6 +130,13 @@ const routes: Routes = [ './pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module' ).then((m) => m.GhostfolioMeetsUmbrelPageModule) }, + { + path: 'blog/2023/03/ghostfolio-reaches-1000-stars-on-github', + loadChildren: () => + import( + './pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.module' + ).then((m) => m.ThousandStarsOnGitHubPageModule) + }, { path: 'demo', loadChildren: () => diff --git a/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page-routing.module.ts b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page-routing.module.ts new file mode 100644 index 000000000..f5d2fca4f --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page-routing.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { ThousandStarsOnGitHubPageComponent } from './1000-stars-on-github-page.component'; + +const routes: Routes = [ + { + canActivate: [AuthGuard], + component: ThousandStarsOnGitHubPageComponent, + path: '', + title: 'Ghostfolio reaches 1’000 Stars on GitHub' + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ThousandStarsOnGitHubRoutingModule {} diff --git a/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts new file mode 100644 index 000000000..331752224 --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + host: { class: 'page' }, + selector: 'gf-1000-stars-on-github-page', + styleUrls: ['./1000-stars-on-github-page.scss'], + templateUrl: './1000-stars-on-github-page.html' +}) +export class ThousandStarsOnGitHubPageComponent {} diff --git a/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.html b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.html new file mode 100644 index 000000000..2738d0ec7 --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.html @@ -0,0 +1,201 @@ +
+
+
+
+
+

Ghostfolio reaches 1’000 Stars on GitHub

+
2023-03-25
+ 1000 Stars on GitHub Teaser +
+
+

+ Ghostfolio, the open-source + personal finance management software, has hit a major milestone by + reaching 1’000 stars on + GitHub. This + blog post reflects on Ghostfolio’s recent achievements, highlighting + its open-source community collaboration, platform expansions, and + future developments. +

+
+
+

Open Source community collaboration

+

+ Since its launch in 2021, the project has accumulated over 100’000 + pulls from + Docker Hub + and received contributions from 38 developers and counting. These + efforts have resulted in a robust and user-friendly platform that + empowers busy people to take control of their personal finances. In + addition, Ghostfolio has attracted over 250 members from around the + world to its + Slack community, where + they can connect and share ideas. +

+

+

+ The adoption of Ghostfolio highlights the power of open-source + software and the value of community-driven development, which has + definitely exceeded all our expectations. +

+

+ Ghostfolio’s open-source code allows anyone to contribute to its + development, review its progress, and suggest improvements. The + platform’s clean and intuitive graphical interface guides users + through the process of + tracking their assets, + such as stocks, ETFs, or cryptocurrencies. +

+
+
+

Platform integrations and internationalization

+

+ Thanks to the work and dedication of the open-source community, + Ghostfolio has expanded onto platforms like + Umbrel and + Unraid. +

+

+ These self-hosting platforms allow users to run applications on + their own hardware rather than rely on + SaaS offerings. As a + result, Ghostfolio has become accessible to an even wider range of + users who would like to take control of their financial management. +

+

+ Additionally, the application has been translated into Dutch, + French, German, Italian and Spanish for users who prefer to use + Ghostfolio in their native language. +

+
+
+

What’s next for Ghostfolio?

+

+ As the project continues to evolve, we can expect to see even more + exciting developments and innovations around Ghostfolio in the areas + of data import and portfolio analysis. +

+

+ We are honored to be a part of this vibrant and growing community, + and we look forward to collaborating and learning together. If you + are a web developer and interested in personal finance, please join + our + Slack channel or connect + with @ghostfolio_ on + Twitter. We are happy to discuss ideas and get you involved. +

+

Thank you for all your feedback and support.

+

+ Here’s to many more stars!
+ Thomas from Ghostfolio +

+
+
+
    +
  • + Achievement +
  • +
  • + Asset +
  • +
  • + BuildInPublic +
  • +
  • + Community +
  • +
  • + Cryptocurrency +
  • +
  • + Development +
  • +
  • + ETF +
  • +
  • + Finance +
  • +
  • + Fintech +
  • +
  • + Ghostfolio +
  • +
  • + GitHub +
  • +
  • + i18n +
  • +
  • + Innovation +
  • +
  • + Internationalization +
  • +
  • + Investment +
  • +
  • + Milestone +
  • +
  • + Open Source +
  • +
  • + OSS +
  • +
  • + Personal Finance +
  • +
  • + Progress +
  • +
  • + SaaS +
  • +
  • + Software +
  • +
  • + Tool +
  • +
  • + Umbrel +
  • +
  • + Unraid +
  • +
  • + Wealth +
  • +
  • + Wealth Management +
  • +
  • + Web3 +
  • +
+
+ +
+
+
+
diff --git a/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.module.ts b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.module.ts new file mode 100644 index 000000000..132d35ec4 --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { ThousandStarsOnGitHubRoutingModule } from './1000-stars-on-github-page-routing.module'; +import { ThousandStarsOnGitHubPageComponent } from './1000-stars-on-github-page.component'; + +@NgModule({ + declarations: [ThousandStarsOnGitHubPageComponent], + imports: [CommonModule, ThousandStarsOnGitHubRoutingModule, RouterModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class ThousandStarsOnGitHubPageModule {} diff --git a/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.scss b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/apps/client/src/app/pages/blog/blog-page.html b/apps/client/src/app/pages/blog/blog-page.html index 0349eb168..e0808556e 100644 --- a/apps/client/src/app/pages/blog/blog-page.html +++ b/apps/client/src/app/pages/blog/blog-page.html @@ -2,6 +2,32 @@

Blog

+ + + + +
diff --git a/apps/client/src/assets/images/blog/1000-stars-on-github.jpg b/apps/client/src/assets/images/blog/1000-stars-on-github.jpg new file mode 100644 index 000000000..0aa91b9a7 Binary files /dev/null and b/apps/client/src/assets/images/blog/1000-stars-on-github.jpg differ diff --git a/apps/client/src/assets/sitemap.xml b/apps/client/src/assets/sitemap.xml index 341181346..110254e0e 100644 --- a/apps/client/src/assets/sitemap.xml +++ b/apps/client/src/assets/sitemap.xml @@ -6,98 +6,102 @@ http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> https://ghostfol.io - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/de/blog - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/de/blog/2021/07/hallo-ghostfolio - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/de/pricing - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/about - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/about/changelog - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2021/07/hello-ghostfolio - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2022/01/ghostfolio-first-months-in-open-source - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2022/07/ghostfolio-meets-internet-identity - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2022/07/how-do-i-get-my-finances-in-order - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2022/08/500-stars-on-github - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2022/10/hacktoberfest-2022 - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2022/11/black-friday-2022 - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2022/12/the-importance-of-tracking-your-personal-finances - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/blog/2023/02/ghostfolio-meets-umbrel - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 + + + https://ghostfol.io/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/demo - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/faq - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/features - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/markets - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/pricing - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/register - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 https://ghostfol.io/en/resources - 2023-02-25T00:00:00+00:00 + 2023-03-25T00:00:00+00:00 diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 76038a167..df4c9f912 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -331,6 +331,17 @@ ngx-skeleton-loader { visibility: hidden; } +.breadcrumb { + background-color: unset; + padding: unset; +} + +.breadcrumb-item { + &.active { + color: unset; + } +} + .cdk-overlay-container { .cdk-overlay-pane { max-width: 95vw !important; diff --git a/apps/client/src/styles/bootstrap.scss b/apps/client/src/styles/bootstrap.scss index 4c13e7978..5e49e3e99 100644 --- a/apps/client/src/styles/bootstrap.scss +++ b/apps/client/src/styles/bootstrap.scss @@ -25,7 +25,7 @@ // @import 'node_modules/bootstrap/scss/nav'; // @import 'node_modules/bootstrap/scss/navbar'; // @import 'node_modules/bootstrap/scss/card'; -// @import 'node_modules/bootstrap/scss/breadcrumb'; +@import 'node_modules/bootstrap/scss/breadcrumb'; // @import 'node_modules/bootstrap/scss/pagination'; @import 'node_modules/bootstrap/scss/badge'; // @import 'node_modules/bootstrap/scss/jumbotron';