diff --git a/CHANGELOG.md b/CHANGELOG.md index 1024336b3..ad8f2f70e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added a close holding button to the holding detail dialog +- Added the _Sponsors_ section to the about page - Extended the user detail dialog in the users section of the admin control panel ### Changed +- Refactored the generation of the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental) +- Refactored the generation of the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental) - Improved the language localization for German (`de`) ### Fixed diff --git a/README.md b/README.md index 82d5710d1..1a5cc6e95 100644 --- a/README.md +++ b/README.md @@ -297,7 +297,18 @@ Ghostfolio is **100% free** and **open source**. We encourage and support an act Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. -If you like to support this project, get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). +If you like to support this project, become a [**Sponsor**](https://github.com/sponsors/ghostfolio), get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). + +## Sponsors + +
+

+ Browser testing via
+ + LambdaTest Logo + +

+
## Analytics diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts index 4cc4fde65..d07768d69 100644 --- a/apps/api/src/app/endpoints/ai/ai.service.ts +++ b/apps/api/src/app/endpoints/ai/ai.service.ts @@ -14,6 +14,27 @@ import type { ColumnDescriptor } from 'tablemark'; @Injectable() export class AiService { + private static readonly HOLDINGS_TABLE_COLUMN_DEFINITIONS: ({ + key: + | 'ALLOCATION_PERCENTAGE' + | 'ASSET_CLASS' + | 'ASSET_SUB_CLASS' + | 'CURRENCY' + | 'NAME' + | 'SYMBOL'; + } & ColumnDescriptor)[] = [ + { key: 'NAME', name: 'Name' }, + { key: 'SYMBOL', name: 'Symbol' }, + { key: 'CURRENCY', name: 'Currency' }, + { key: 'ASSET_CLASS', name: 'Asset Class' }, + { key: 'ASSET_SUB_CLASS', name: 'Asset Sub Class' }, + { + align: 'right', + key: 'ALLOCATION_PERCENTAGE', + name: 'Allocation in Percentage' + } + ]; + public constructor( private readonly portfolioService: PortfolioService, private readonly propertyService: PropertyService @@ -59,14 +80,10 @@ export class AiService { userId }); - const holdingsTableColumns: ColumnDescriptor[] = [ - { name: 'Name' }, - { name: 'Symbol' }, - { name: 'Currency' }, - { name: 'Asset Class' }, - { name: 'Asset Sub Class' }, - { align: 'right', name: 'Allocation in Percentage' } - ]; + const holdingsTableColumns: ColumnDescriptor[] = + AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.map(({ align, name }) => { + return { name, align: align ?? 'left' }; + }); const holdingsTableRows = Object.values(holdings) .sort((a, b) => { @@ -78,17 +95,45 @@ export class AiService { assetClass, assetSubClass, currency, - name, + name: label, symbol }) => { - return { - Name: name, - Symbol: symbol, - Currency: currency, - 'Asset Class': assetClass ?? '', - 'Asset Sub Class': assetSubClass ?? '', - 'Allocation in Percentage': `${(allocationInPercentage * 100).toFixed(3)}%` - }; + return AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.reduce( + (row, { key, name }) => { + switch (key) { + case 'ALLOCATION_PERCENTAGE': + row[name] = `${(allocationInPercentage * 100).toFixed(3)}%`; + break; + + case 'ASSET_CLASS': + row[name] = assetClass ?? ''; + break; + + case 'ASSET_SUB_CLASS': + row[name] = assetSubClass ?? ''; + break; + + case 'CURRENCY': + row[name] = currency; + break; + + case 'NAME': + row[name] = label; + break; + + case 'SYMBOL': + row[name] = symbol; + break; + + default: + row[name] = ''; + break; + } + + return row; + }, + {} as Record + ); } ); diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.html b/apps/client/src/app/pages/about/overview/about-overview-page.html index 4085498a9..72c054170 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.html +++ b/apps/client/src/app/pages/about/overview/about-overview-page.html @@ -175,7 +175,7 @@ -
+
}
+ +
+
+

Sponsors

+
+ Browser testing via +
+ + LambdaTest Logo + +
+
+
diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html index b65054bba..fa74cd084 100644 --- a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html +++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html @@ -5,7 +5,7 @@
-

Buy and Hold

+

Buy and Hold

Buy and hold is a passive investment strategy where you buy assets and hold them for a long period regardless of fluctuations in the @@ -22,7 +22,7 @@
-

Deflation

+

Deflation

Deflation is a decrease of the general price level for goods and services in an economy over a period of time. @@ -38,7 +38,7 @@
-

Dollar-Cost Averaging (DCA)

+

Dollar-Cost Averaging (DCA)

Dollar-cost averaging is an investment strategy where you split the total amount to be invested across periodic purchases of a @@ -56,7 +56,7 @@
-

Financial Independence

+

Financial Independence

Financial independence is the status of having enough income, for example with a passive income like dividends, to cover your living @@ -73,7 +73,7 @@
-

FIRE

+

FIRE

FIRE is a movement that promotes saving and investing to achieve financial independence and early retirement. @@ -85,7 +85,7 @@
-

Inflation

+

Inflation

Inflation is an increase of the general price level for goods and services in an economy over a period of time. @@ -102,7 +102,7 @@ @if (hasPermissionForSubscription) {
-

Personal Finance Tools

+

Personal Finance Tools

Personal finance tools are software applications that help manage your money, track expenses, set budgets, monitor @@ -118,7 +118,7 @@ }
-

Stagflation

+

Stagflation

Stagflation describes a situation in which there is a stagnant economy with high unemployment and high inflation. @@ -134,7 +134,7 @@
-

Stealth Wealth

+

Stealth Wealth

Stealth wealth is a lifestyle choice where you don’t openly show off your wealth, but instead live quietly to maintain privacy and diff --git a/apps/client/src/app/pages/resources/guides/resources-guides.component.html b/apps/client/src/app/pages/resources/guides/resources-guides.component.html index 3bd8efec6..54b3d1f3e 100644 --- a/apps/client/src/app/pages/resources/guides/resources-guides.component.html +++ b/apps/client/src/app/pages/resources/guides/resources-guides.component.html @@ -5,7 +5,7 @@
-

Boringly Getting Rich

+

Boringly Getting Rich

The Boringly Getting Rich guide supports you to get started with investing. It introduces a strategy utilizing a broadly @@ -21,7 +21,7 @@
-

How do I get my finances in order?

+

How do I get my finances in order?

Before you can think of long-term investing, you have to get your finances in order. Learn how you can reach your financial goals diff --git a/apps/client/src/app/pages/resources/markets/resources-markets.component.html b/apps/client/src/app/pages/resources/markets/resources-markets.component.html index 74d4bb82b..ce780aedf 100644 --- a/apps/client/src/app/pages/resources/markets/resources-markets.component.html +++ b/apps/client/src/app/pages/resources/markets/resources-markets.component.html @@ -3,7 +3,7 @@
-

Crypto Coins Heatmap

+

Crypto Coins Heatmap

With the Crypto Coins Heatmap you can track the daily market movements of cryptocurrencies as a visual snapshot. @@ -17,7 +17,7 @@
-

Fear & Greed Index

+

Fear & Greed Index

The fear and greed index was developed by CNNMoney to measure the primary emotions (fear and greed) that influence how much @@ -32,7 +32,7 @@
-

Inflation Chart

+

Inflation Chart

Inflation Chart helps you find the intrinsic value of stock markets, stock prices, goods and services by adjusting them to the @@ -48,7 +48,7 @@
-

Stock Heatmap

+

Stock Heatmap

With the Stock Heatmap you can track the daily market movements of stocks as a visual snapshot. diff --git a/apps/client/src/app/pages/resources/overview/resources-overview.component.html b/apps/client/src/app/pages/resources/overview/resources-overview.component.html index 39d7c1e62..3a6f18d40 100644 --- a/apps/client/src/app/pages/resources/overview/resources-overview.component.html +++ b/apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -5,7 +5,7 @@
@for (item of overviewItems; track item) {
-

{{ item.title }}

+

{{ item.title }}

{{ item.description }}

Explore {{ item.title }} →