Feature/add first months in open source blog post (#616)

* Add blog post

* Update changelog
pull/617/head
Thomas Kaul 2 years ago committed by GitHub
parent 69c9e259b1
commit 5882b7914d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -10,10 +10,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Added the _Top 3_ and _Bottom 3_ performers to the analysis page
- Added a blog post
### Fixed
- Fixed the routing of the create activity dialog
- Fixed the link color in the blog posts
## 1.99.0 - 01.01.2022

@ -59,6 +59,13 @@ const routes: Routes = [
'./pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.module'
).then((m) => m.HelloGhostfolioPageModule)
},
{
path: 'en/blog/2022/01/ghostfolio-first-months-in-open-source',
loadChildren: () =>
import(
'./pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.module'
).then((m) => m.FirstMonthsInOpenSourcePageModule)
},
{
path: 'home',
loadChildren: () =>

@ -1,6 +1,6 @@
<div class="blog container">
<div class="row">
<div class="col">
<div class="col-md-8 offset-md-2">
<article>
<div class="mb-4 text-center">
<h1 class="mb-1" i18n>Hallo Ghostfolio 👋</h1>
@ -141,58 +141,59 @@
</section>
<section class="mb-4">
<ul class="list-inline">
<li class="h5">
<span class="badge badge-light font-weight-normal mr-2"
>Aktie</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Altersvorsorge</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Anlage</span
>
<span class="badge badge-light font-weight-normal mr-2">App</span>
<span class="badge badge-light font-weight-normal mr-2"
>Cryptocurrency</span
>
<span class="badge badge-light font-weight-normal mr-2">ETF</span>
<span class="badge badge-light font-weight-normal mr-2"
>Feedback</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Fintech</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Ghostfolio</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Investition</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Open Source</span
>
<span class="badge badge-light font-weight-normal mr-2">OSS</span>
<span class="badge badge-light font-weight-normal mr-2"
>Portfolio</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Software</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Strategie</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Trading</span
>
<span class="badge badge-light font-weight-normal mr-2"
>TypeScript</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Vermögen</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Wealth Management</span
>
<li class="list-inline-item">
<span class="badge badge-light">Aktie</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Altersvorsorge</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Anlage</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">App</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">Feedback</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">Investition</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">Portfolio</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">Strategie</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Trading</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">TypeScript</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Vermögen</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Wealth Management</span>
</li>
</ul>
</section>

@ -7,9 +7,7 @@ import { HalloGhostfolioPageComponent } from './hallo-ghostfolio-page.component'
@NgModule({
declarations: [HalloGhostfolioPageComponent],
exports: [],
imports: [CommonModule, HalloGhostfolioPageRoutingModule, RouterModule],
providers: [],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class HalloGhostfolioPageModule {}

@ -1,6 +1,6 @@
<div class="blog container">
<div class="row">
<div class="col">
<div class="col-md-8 offset-md-2">
<article>
<div class="mb-4 text-center">
<h1 class="mb-1" i18n>Hello Ghostfolio 👋</h1>
@ -136,42 +136,44 @@
</section>
<section class="mb-4">
<ul class="list-inline">
<li class="h5">
<span class="badge badge-light font-weight-normal mr-2"
>Cryptocurrency</span
>
<span class="badge badge-light font-weight-normal mr-2">ETF</span>
<span class="badge badge-light font-weight-normal mr-2"
>Fintech</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Ghostfolio</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Investment</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Open Source</span
>
<span class="badge badge-light font-weight-normal mr-2">OSS</span>
<span class="badge badge-light font-weight-normal mr-2"
>Portfolio</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Software</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Stock</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Strategy</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Wealth</span
>
<span class="badge badge-light font-weight-normal mr-2"
>Wealth Management</span
>
<li class="list-inline-item">
<span class="badge badge-light">Cryptocurrency</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">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">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">Portfolio</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">Strategy</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>
</ul>
</section>

@ -7,9 +7,7 @@ import { HelloGhostfolioPageComponent } from './hello-ghostfolio-page.component'
@NgModule({
declarations: [HelloGhostfolioPageComponent],
exports: [],
imports: [CommonModule, HelloGhostfolioPageRoutingModule, RouterModule],
providers: [],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class HelloGhostfolioPageModule {}

@ -0,0 +1,19 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { FirstMonthsInOpenSourcePageComponent } from './first-months-in-open-source-page.component';
const routes: Routes = [
{
path: '',
component: FirstMonthsInOpenSourcePageComponent,
canActivate: [AuthGuard]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class FirstMonthsInOpenSourceRoutingModule {}

@ -0,0 +1,9 @@
import { Component } from '@angular/core';
@Component({
host: { class: 'mb-5' },
selector: 'gf-first-months-in-open-source-page',
styleUrls: ['./first-months-in-open-source-page.scss'],
templateUrl: './first-months-in-open-source-page.html'
})
export class FirstMonthsInOpenSourcePageComponent {}

@ -0,0 +1,185 @@
<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" i18n>
👻 Ghostfolio
<span class="text-nowrap">First months in Open Source</span>
</h1>
<div class="text-muted"><small>05.01.2022</small></div>
</div>
<section class="mb-4">
<p>
In this article I would like to recap the first months running the
open source project <a href="https://ghostfol.io">Ghostfolio</a>, a
web-based personal finance management software.
</p>
</section>
<section class="mb-4">
<h2 class="h4">From 1* to 100 stars on GitHub</h2>
<p>
When I decided to
<a [routerLink]="['/en', 'blog', '2021', '07', 'hello-ghostfolio']"
>publish</a
>
the project as
<a href="https://github.com/ghostfolio/ghostfolio"
>open source software</a
>
(OSS), I did not know what exactly to expect. In the worst case,
nobody would care. And in the best case, the repository would be
overrun with contributions. The truth is probably somewhere in
between.
</p>
<p>
In the beginning, it felt quite weird to develop in public where
anyone can observe the progress. Stupid mistakes remain visible
forever. But this feeling, fortunately, quickly settled. I believe
the benefits like all the learning clearly outweigh the drawbacks
when you just do it.
</p>
<p>
At the end of 2021, Ghostfolio reached an important milestone:
<a href="https://twitter.com/ghostfolio_/status/1470075774640218121"
>100 stars</a
>
on GitHub. This is really exciting with almost no marketing. I am a
technical founder, so I prefer writing code over anything else. But
there is so much more to make this project happen: writing
documentation, maintaining bug reports and feature requests,
supporting users and managing the community, keeping the SaaS
running, etc.
</p>
<p>
Reaching 100 stars will not only attract very early adopters, but
also the early adopters. At the same time, the demands and
expectations are also increasing.
</p>
</section>
<section class="mb-4">
<h2 class="h4">What is new?</h2>
<p>
During the last months, Ghostfolio has transformed from a one man
project into a prospering wealth management application with 9
contributors and counting. User feedback has directly shaped the
direction of the product development.
</p>
<p>These are some selected key features:</p>
<ul>
<li>
Simplified self-hosting with an
<a href="https://hub.docker.com/r/ghostfolio/ghostfolio"
>official Ghostfolio docker image</a
>
on Docker Hub
</li>
<li>Improved import for activities (transactions and dividend)</li>
<li>Enriched market data for ETFs (region and industries)</li>
</ul>
</section>
<section class="mb-4">
<h2 class="h4">What is coming?</h2>
<p>Here is a brief overview of what I am planning in 2022.</p>
<p>
The goal remains to offer a simple and solid software to manage
personal finances. Thus, the main focus is on the core
functionality.
</p>
<p>
My personal goal is to reach break-even with the Saas offering (<a
[routerLink]="['/pricing']"
>Ghostfolio Premium</a
>) and regularly report about the progress and my learnings on this
exciting journey.
</p>
<p>
I have already started to build a
<a
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"
>community</a
>
of users. In the future, I would like to involve more contributors
to further extend the functionality of Ghostfolio (e.g. with new
reports). Get in touch with me by email at
<a href="mailto:hi@ghostfol.io">hi@ghostfol.io</a> or on Twitter
<a href="https://twitter.com/ghostfolio_">@ghostfolio_</a> if you
are interested, Im happy to discuss ideas.
</p>
<p>
I would like to say thank you for all your feedback and support
during the last months.
</p>
<p>
Have a great start into the new year and happy investing<br />
Thomas from Ghostfolio
</p>
</section>
<section class="mb-4">
<p>* Pro Tip: add the first star to your own open source project</p>
</section>
<section class="mb-4">
<ul class="list-inline">
<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">Docker</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">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">Image</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">Portfolio</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">Stock</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Strategy</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>
</ul>
</section>
</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 { FirstMonthsInOpenSourceRoutingModule } from './first-months-in-open-source-page-routing.module';
import { FirstMonthsInOpenSourcePageComponent } from './first-months-in-open-source-page.component';
@NgModule({
declarations: [FirstMonthsInOpenSourcePageComponent],
imports: [CommonModule, FirstMonthsInOpenSourceRoutingModule, RouterModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class FirstMonthsInOpenSourcePageModule {}

@ -5,6 +5,26 @@
<mat-card class="blog-container">
<mat-card-content>
<div class="container p-0">
<div class="flex-nowrap mb-3 no-gutters row">
<a
class="d-flex w-100"
[routerLink]="['/en', 'blog', '2022', '01', 'ghostfolio-first-months-in-open-source']"
>
<div class="flex-grow-1">
<div class="h6 m-0 text-truncate">
First months in Open Source
</div>
<div class="d-flex text-muted">05.01.2021</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 class="flex-nowrap mb-3 no-gutters row">
<a
class="d-flex w-100"

@ -28,6 +28,10 @@
<loc>https://ghostfol.io/en/blog/2021/07/hello-ghostfolio</loc>
<lastmod>2022-01-01T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/01/ghostfolio-first-months-in-open-source</loc>
<lastmod>2022-01-05T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/pricing</loc>
<lastmod>2022-01-01T00:00:00+00:00</lastmod>

@ -38,7 +38,7 @@ body {
.blog {
a {
color: rgba(var(--palette-primary-500), 1);
color: rgba(var(--palette-primary-500), 1) !important;
font-weight: 500;
&:hover {

Loading…
Cancel
Save