Feature/add blog post 1000 stars on GitHub (#1804)

* Add blog post: 1000 Stars on GitHub

* Add breadcrumb navigation

* Update changelog
pull/1807/head
Thomas Kaul 2 years ago committed by GitHub
parent 0c85380dbf
commit 93d082afbb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Added
- Added a blog post: _Ghostfolio reaches 1000 Stars on GitHub_
- Added a breadcrumb navigation to the blog post pages
### Changed
- Refactored the calculation of the chart

@ -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/1000-stars-on-github.jpg';
title = `Ghostfolio reaches 1000 Stars on GitHub - ${title}`;
}
if (

@ -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: () =>

@ -197,6 +197,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Hallo Ghostfolio
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -177,6 +177,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Hello Ghostfolio
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -174,6 +174,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Ghostfolio: First months in Open Source
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -177,6 +177,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Ghostfolio meets Internet Identity
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -203,6 +203,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
How do I get my finances in order?
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -186,6 +186,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
500 Stars on GitHub
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -172,6 +172,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Hacktoberfest 2022
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -132,6 +132,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Black Friday 2022
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -162,6 +162,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
The importance of tracking your personal finances
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -172,6 +172,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Ghostfolio auf Sackgeld.com vorgestellt
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -194,6 +194,16 @@
</li>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Ghostfolio meets Umbrel
</li>
</ol>
</nav>
</article>
</div>
</div>

@ -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 1000 Stars on GitHub'
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class ThousandStarsOnGitHubRoutingModule {}

@ -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 {}

@ -0,0 +1,201 @@
<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 reaches 1000 Stars on GitHub</h1>
<div class="mb-3 text-muted"><small>2023-03-25</small></div>
<img
alt="1000 Stars on GitHub Teaser"
class="rounded w-100"
src="../assets/images/blog/1000-stars-on-github.jpg"
title="1000 Stars on GitHub"
/>
</div>
<section class="mb-4">
<p>
<a href="https://ghostfol.io">Ghostfolio</a>, the open-source
personal finance management software, has hit a major milestone by
reaching 1000 stars on
<a href="https://github.com/ghostfolio/ghostfolio">GitHub</a>. This
blog post reflects on Ghostfolios recent achievements, highlighting
its open-source community collaboration, platform expansions, and
future developments.
</p>
</section>
<section class="mb-4">
<h2 class="h4">Open Source community collaboration</h2>
<p>
Since its launch in 2021, the project has accumulated over 100000
pulls from
<a href="https://hub.docker.com/r/ghostfolio/ghostfolio"
>Docker Hub</a
>
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
<a href="https://ghostfolio.slack.com">Slack</a> community, where
they can connect and share ideas.
</p>
<p></p>
<p>
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.
</p>
<p>
Ghostfolios open-source code allows anyone to contribute to its
development, review its progress, and suggest improvements. The
platforms clean and intuitive graphical interface guides users
through the process of
<a href="https://ghostfol.io/en/features">tracking their assets</a>,
such as stocks, ETFs, or cryptocurrencies.
</p>
</section>
<section class="mb-4">
<h2 class="h4">Platform integrations and internationalization</h2>
<p>
Thanks to the work and dedication of the open-source community,
Ghostfolio has expanded onto platforms like
<a href="https://apps.umbrel.com/app/ghostfolio">Umbrel</a> and
<a href="https://unraid.net/community/apps?q=ghostfolio">Unraid</a>.
</p>
<p>
These self-hosting platforms allow users to run applications on
their own hardware rather than rely on
<a href="https://ghostfol.io/en/pricing">SaaS offerings</a>. As a
result, Ghostfolio has become accessible to an even wider range of
users who would like to take control of their financial management.
</p>
<p>
Additionally, the application has been translated into Dutch,
French, German, Italian and Spanish for users who prefer to use
Ghostfolio in their native language.
</p>
</section>
<section class="mb-4">
<h2 class="h4">Whats next for Ghostfolio?</h2>
<p>
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.
</p>
<p>
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
<a href="https://ghostfolio.slack.com">Slack</a> channel or connect
with <a href="https://twitter.com/ghostfolio_">@ghostfolio_</a> on
Twitter. We are happy to discuss ideas and get you involved.
</p>
<p>Thank you for all your feedback and support.</p>
<p>
Heres to many more stars!<br />
Thomas from Ghostfolio
</p>
</section>
<section class="mb-4">
<ul class="list-inline">
<li class="list-inline-item">
<span class="badge badge-light">Achievement</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Asset</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">BuildInPublic</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">Cryptocurrency</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Development</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">GitHub</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">i18n</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Innovation</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">Milestone</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">Progress</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">Software</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Tool</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Umbrel</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Unraid</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>
</ul>
</section>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a i18n [routerLink]="['/blog']">Blog</a>
</li>
<li aria-current="page" class="breadcrumb-item active">
Ghostfolio reaches 1000 Stars on GitHub
</li>
</ol>
</nav>
</article>
</div>
</div>
</div>

@ -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 {}

@ -2,6 +2,32 @@
<div class="mb-5 row">
<div class="col">
<h3 class="d-none d-sm-block mb-3 text-center" i18n>Blog</h3>
<mat-card appearance="outlined" class="mb-3">
<mat-card-content>
<div class="container p-0">
<div class="flex-nowrap no-gutters row">
<a
class="d-flex overflow-hidden w-100"
href="../en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github"
>
<div class="flex-grow-1 overflow-hidden">
<div class="h6 m-0 text-truncate">
Ghostfolio reaches 1000 Stars on GitHub
</div>
<div class="d-flex text-muted">2023-03-25</div>
</div>
<div class="align-items-center d-flex">
<ion-icon
class="chevron text-muted"
name="chevron-forward-outline"
size="small"
></ion-icon>
</div>
</a>
</div>
</div>
</mat-card-content>
</mat-card>
<mat-card appearance="outlined" class="mb-3">
<mat-card-content>
<div class="container p-0">

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

@ -6,98 +6,102 @@
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>https://ghostfol.io</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/blog</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/blog/2021/07/hallo-ghostfolio</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/pricing</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/about</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/about/changelog</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2021/07/hello-ghostfolio</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/01/ghostfolio-first-months-in-open-source</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/07/ghostfolio-meets-internet-identity</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/07/how-do-i-get-my-finances-in-order</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/08/500-stars-on-github</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/10/hacktoberfest-2022</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/11/black-friday-2022</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/12/the-importance-of-tracking-your-personal-finances</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2023/02/ghostfolio-meets-umbrel</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github</loc>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/demo</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/faq</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/features</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/markets</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/pricing</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/register</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/resources</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
<lastmod>2023-03-25T00:00:00+00:00</lastmod>
</url>
</urlset>

@ -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;

@ -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';

Loading…
Cancel
Save