mirror of https://github.com/ghostfolio/ghostfolio
committed by
GitHub
70 changed files with 9168 additions and 1284 deletions
@ -0,0 +1,44 @@ |
|||
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; |
|||
import { HttpException, Inject, Injectable } from '@nestjs/common'; |
|||
import { Prisma } from '@prisma/client'; |
|||
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|||
|
|||
@Injectable() |
|||
export class DataEnhancerService { |
|||
public constructor( |
|||
@Inject('DataEnhancers') |
|||
private readonly dataEnhancers: DataEnhancerInterface[] |
|||
) {} |
|||
|
|||
public async enhance(aName: string) { |
|||
const dataEnhancer = this.dataEnhancers.find((dataEnhancer) => { |
|||
return dataEnhancer.getName() === aName; |
|||
}); |
|||
|
|||
if (!dataEnhancer) { |
|||
throw new HttpException( |
|||
getReasonPhrase(StatusCodes.NOT_FOUND), |
|||
StatusCodes.NOT_FOUND |
|||
); |
|||
} |
|||
|
|||
try { |
|||
const assetProfile = await dataEnhancer.enhance({ |
|||
response: { |
|||
assetClass: 'EQUITY', |
|||
assetSubClass: 'ETF' |
|||
}, |
|||
symbol: dataEnhancer.getTestSymbol() |
|||
}); |
|||
|
|||
if ( |
|||
(assetProfile.countries as unknown as Prisma.JsonArray)?.length > 0 && |
|||
(assetProfile.sectors as unknown as Prisma.JsonArray)?.length > 0 |
|||
) { |
|||
return true; |
|||
} |
|||
} catch {} |
|||
|
|||
return false; |
|||
} |
|||
} |
@ -1,3 +1,9 @@ |
|||
:host { |
|||
display: block; |
|||
|
|||
.mat-mdc-card { |
|||
&:hover { |
|||
border-color: var(--gf-theme-primary-500); |
|||
} |
|||
} |
|||
} |
|||
|
@ -0,0 +1,14 @@ |
|||
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-joins-oss-friends-page', |
|||
standalone: true, |
|||
templateUrl: './ghostfolio-joins-oss-friends-page.html' |
|||
}) |
|||
export class GhostfolioJoinsOssFriendsPageComponent { |
|||
public routerLinkAboutOssFriends = ['/' + $localize`about`, 'oss-friends']; |
|||
} |
@ -0,0 +1,167 @@ |
|||
<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 joins OSS Friends</h1> |
|||
<div class="mb-3 text-muted"><small>2023-08-23</small></div> |
|||
<img |
|||
alt="Ghostfolio joins OSS Friends Teaser" |
|||
class="rounded w-100" |
|||
src="../assets/images/blog/ghostfolio-joins-oss-friends.png" |
|||
title="Ghostfolio joins OSS Friends" |
|||
/> |
|||
</div> |
|||
<section class="mb-4"> |
|||
<p> |
|||
We are excited to announce that Ghostfolio is now part of the |
|||
<a [routerLink]="routerLinkAboutOssFriends">OSS Friends</a>. This |
|||
new initiative is all about helping open source projects grow and |
|||
become more popular. |
|||
</p> |
|||
</section> |
|||
<section class="mb-4"> |
|||
<h2 class="h4">The Story of OSS Friends</h2> |
|||
<p> |
|||
OSS Friends started as a simple |
|||
<a |
|||
href="https://twitter.com/formbricks/status/1660735970281508878" |
|||
target="_blank" |
|||
>post</a |
|||
> |
|||
on X (formerly known as <i>Twitter</i>). The idea came from |
|||
<a href="https://formbricks.com" target="_blank">Formbricks</a>, an |
|||
open source experience management platform to create surveys in |
|||
minutes, and is all about giving open source projects a boost. |
|||
</p> |
|||
<p> |
|||
If you are excited about the OSS Friends movement and want to bring |
|||
your own open source project along, just take a moment to fill out |
|||
<a |
|||
href="https://app.formbricks.com/s/clhys1p9r001cpr0hu65rwh17" |
|||
target="_blank" |
|||
>this form</a |
|||
>. Let’s work and learn together – all the open source way. |
|||
</p> |
|||
</section> |
|||
<section class="mb-4"> |
|||
<h2 class="h4"> |
|||
Ghostfolio – Next Generation Software for your Personal Finances |
|||
</h2> |
|||
<p> |
|||
Money management can be tricky, especially when you have various |
|||
investments like cryptocurrencies, ETFs and stocks in your |
|||
portfolio. But guess what? There are cooler ways than staring at |
|||
boring spreadsheets. Say hello to Ghostfolio, a privacy-first, open |
|||
source dashboard for your personal finances. |
|||
</p> |
|||
</section> |
|||
<section class="mb-4 py-3"> |
|||
<h2 class="h4 mb-0 text-center"> |
|||
Would you like to simplify asset tracking? |
|||
</h2> |
|||
<p class="lead mb-2 text-center"> |
|||
Ghostfolio empowers you to make informed investment decisions. |
|||
</p> |
|||
<div class="text-center"> |
|||
<a color="primary" href="https://ghostfol.io" mat-flat-button> |
|||
Get Started |
|||
</a> |
|||
</div> |
|||
</section> |
|||
<section class="mb-4"> |
|||
<ul class="list-inline"> |
|||
<li class="list-inline-item"> |
|||
<span class="badge badge-light">Asset</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">Cryptocurrency</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">Dashboard</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">Initiative</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">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">OSS Friends</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">Privacy</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">Technology</span> |
|||
</li> |
|||
<li class="list-inline-item"> |
|||
<span class="badge badge-light">Tracking</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="active breadcrumb-item text-truncate" |
|||
> |
|||
Ghostfolio joins OSS Friends |
|||
</li> |
|||
</ol> |
|||
</nav> |
|||
</article> |
|||
</div> |
|||
</div> |
|||
</div> |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 282 B |
@ -0,0 +1,126 @@ |
|||
{ |
|||
"createdAt": "2023-09-02T07:02:24.422Z", |
|||
"data": [ |
|||
{ |
|||
"name": "Appsmith", |
|||
"description": "Build build custom software on top of your data.", |
|||
"href": "https://www.appsmith.com" |
|||
}, |
|||
{ |
|||
"name": "BoxyHQ", |
|||
"description": "BoxyHQ’s suite of APIs for security and privacy helps engineering teams build and ship compliant cloud applications faster.", |
|||
"href": "https://boxyhq.com" |
|||
}, |
|||
{ |
|||
"name": "Cal.com", |
|||
"description": "Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.", |
|||
"href": "https://cal.com" |
|||
}, |
|||
{ |
|||
"name": "Crowd.dev", |
|||
"description": "Centralize community, product, and customer data to understand which companies are engaging with your open source project.", |
|||
"href": "https://www.crowd.dev" |
|||
}, |
|||
{ |
|||
"name": "Documenso", |
|||
"description": "The Open-Source DocuSign Alternative. We aim to earn your trust by enabling you to self-host the platform and examine its inner workings.", |
|||
"href": "https://documenso.com" |
|||
}, |
|||
{ |
|||
"name": "Erxes", |
|||
"description": "The Open-Source HubSpot Alternative. A single XOS enables to create unique and life-changing experiences that work for all types of business.", |
|||
"href": "https://erxes.io" |
|||
}, |
|||
{ |
|||
"name": "Formbricks", |
|||
"description": "Survey granular user segments at any point in the user journey. Gather up to 6x more insights with targeted micro-surveys. All open-source.", |
|||
"href": "https://formbricks.com" |
|||
}, |
|||
{ |
|||
"name": "Ghostfolio", |
|||
"description": "Ghostfolio is a privacy-first, open source dashboard for your personal finances. Designed to simplify asset tracking and empower informed investment decisions.", |
|||
"href": "https://ghostfol.io" |
|||
}, |
|||
{ |
|||
"name": "GitWonk", |
|||
"description": "GitWonk is an open-source technical documentation tool, designed and built focusing on the developer experience.", |
|||
"href": "https://gitwonk.com" |
|||
}, |
|||
{ |
|||
"name": "Hanko", |
|||
"description": "Open-source authentication and user management for the passkey era. Integrated in minutes, for web and mobile apps.", |
|||
"href": "https://www.hanko.io" |
|||
}, |
|||
{ |
|||
"name": "HTMX", |
|||
"description": "HTMX is a dependency-free JavaScript library that allows you to access AJAX, CSS Transitions, WebSockets, and Server Sent Events directly in HTML.", |
|||
"href": "https://htmx.org" |
|||
}, |
|||
{ |
|||
"name": "Infisical", |
|||
"description": "Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.", |
|||
"href": "https://infisical.com" |
|||
}, |
|||
{ |
|||
"name": "Mockoon", |
|||
"description": "Mockoon is the easiest and quickest way to design and run mock REST APIs.", |
|||
"href": "https://mockoon.com" |
|||
}, |
|||
{ |
|||
"name": "Novu", |
|||
"description": "The open-source notification infrastructure for developers. Simple components and APIs for managing all communication channels in one place.", |
|||
"href": "https://novu.co" |
|||
}, |
|||
{ |
|||
"name": "OpenBB", |
|||
"description": "Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.", |
|||
"href": "https://openbb.co" |
|||
}, |
|||
{ |
|||
"name": "Rivet", |
|||
"description": "Open-source solution to deploy, scale, and operate your multiplayer game.", |
|||
"href": "https://rivet.gg" |
|||
}, |
|||
{ |
|||
"name": "Sniffnet", |
|||
"description": "Sniffnet is a network monitoring tool to help you easily keep track of your Internet traffic.", |
|||
"href": "https://www.sniffnet.net" |
|||
}, |
|||
{ |
|||
"name": "Tolgee", |
|||
"description": "Software localization from A to Z made really easy.", |
|||
"href": "https://tolgee.io" |
|||
}, |
|||
{ |
|||
"name": "Trigger.dev", |
|||
"description": "Create long-running Jobs directly in your codebase with features like API integrations, webhooks, scheduling and delays.", |
|||
"href": "https://trigger.dev" |
|||
}, |
|||
{ |
|||
"name": "Typebot", |
|||
"description": "Typebot gives you powerful blocks to create unique chat experiences. Embed them anywhere on your apps and start collecting results like magic.", |
|||
"href": "https://typebot.io" |
|||
}, |
|||
{ |
|||
"name": "Twenty", |
|||
"description": "A modern CRM offering the flexibility of open-source, advanced features and sleek design.", |
|||
"href": "https://twenty.com" |
|||
}, |
|||
{ |
|||
"name": "Webiny", |
|||
"description": "Open-source enterprise-grade serverless CMS. Own your data. Scale effortlessly. Customize everything.", |
|||
"href": "https://www.webiny.com" |
|||
}, |
|||
{ |
|||
"name": "Webstudio", |
|||
"description": "Webstudio is an open source alternative to Webflow", |
|||
"href": "https://webstudio.is" |
|||
}, |
|||
{ |
|||
"name": "Spark.NET", |
|||
"description": "The .NET Web Framework for Makers. Build production ready, full-stack web applications fast without sweating the small stuff.", |
|||
"href": "https://spark-framework.net" |
|||
} |
|||
], |
|||
"source": "https://formbricks.com/api/oss-friends" |
|||
} |
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
Loading…
Reference in new issue