Cryptofolio
TopHat
Our great sponsors
Cryptofolio | TopHat | |
---|---|---|
9 | 4 | |
295 | 124 | |
- | - | |
0.0 | 0.8 | |
over 2 years ago | about 1 year ago | |
JavaScript | TypeScript | |
GNU Affero General Public License v3.0 | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Cryptofolio
- AMA: We are CoinGecko - a leading cryptocurrency data aggregator. Ask us anything!
- Self hosted cryptocurrency holdings tracker / financial manager
- cryptocurrency investing dashboard
-
Released V.2.1.0 of Cryptofolio, an open-source, self-hosted, cross-platform portfolio solution for tracking crypto holdings in a privacy-focused way.
Glad to hear it, if you have any suggestions or feedback, then please do provide it. I have a project board with upcoming features, so if you feel as though there's a useful feature (within the scope of the project) that could be added, then either just reply/message me here or open an issue on the GitHub repo. Thank you!
TopHat
- Self hosted cryptocurrency holdings tracker / financial manager
-
Show HN: TopHat Finance – free, open, and offline
* Basic analytics and budgeting - ideally not as rigid as YNAB and friends, but at least something lightweight to tell me where my money is going and how that's changing.
So over a few months during Covid, I put together TopHat for my own use: it's a SPA on GitHub Pages with no backend, where all data is stored in browser storage (plus a Dropbox sync option, which I wanted as a backup). It's a pretty standard stack (React, Redux, TS), and the code is all available on GitHub (https://github.com/Athenodoros/TopHat) - don't judge too harshly, my day job isn't software engineering! That said, I've found it very rewarding to use something which I enjoy and which I've built - not to mention finally "finishing" a project...
TopHat can load itself with some demo data, including an example bank statement for upload (check the notification on the top right). Hopefully this is interesting for folks - happy to answer any questions!
I definitely have a lot of opinions about this :D. The main one is that RTK was fantastic (as are the docs!), and createEntityAdapter was definitely better than the equivalent that I wrote before finding it... A few more specific thoughts though:
- createEntityAdapter was great, but one idea for an addition: I dislike having numbers as IDs (Will floating point precision bite me? Will I accidentally treat them as actual numbers? Do I need to cast them back for lookups or equality checks?), but I didn't get around to moving to strings, and preserving the sorting and ID generation with that in mind. Maybe RTK could bundle some utilities for managing this, like sorting functions and/or ascending ID generation to save others from my fate? I'll definitely start with these next time.
- I really liked the Slice API in RTK, but I felt like I wanted to run nested slices quite a lot - breaking up serialisable state (ie. user data) and page state, but then breaking down further into individual data types or pages respectively, so that pages could "own" their own state (and maybe get as far as something like a managed Mixin for a page state, like the recurring transaction table). I spent some time writing a way to compose Slices, but I found that it made things probably more complicated than it needed to be - even if you end up with a load of useAccountsPageState-style duplication which is maintained manually. (I'll admit this was a while ago, so my memory of why I decided against this is a little rusty...).
- I hadn't seen useAppDispatch and useAppSelector - I'll definitely swap over my copy of them in https://github.com/Athenodoros/TopHat/blob/main/src/state/sh... ...
- I definitely got that the expected pattern is createAsyncThunk (or useDispatch more broadly) rather than my separate functions using TopHatDispatch. I spent some time tooling about with migrating over, but I felt like it was an additional abstraction layer that I didn't really need. I eventually went with a fairly strict flow of "Types -> Storage Logic -> Store Definition -> Actions -> Components" which dealt with the circular imports. I'd be interested in other thoughts behind the best practice though - maybe they're more obvious with other people, or a larger project?
Looks very nice!
I see you're using Redux Toolkit and TypeScript, including some fairly heavy use of `createEntityAdapter`. Any feedback on using RTK? We're always interested in hearing how RTK is working for our users.
A couple quick suggestions on the code itself:
- I see a lot of custom hooks like `useAccountsPageState` [0], except that they're completely duplicating the `useSelector` signature. I think the right answer here is to start by defining the "pre-typed" `useAppSelector` hook we show in our TS usage docs [1]. Then, make sure your selectors have the correct `RootState` type. Finally, you can rewrite the hook as `const useAccountsPageState = () => useAppSelector(selectPageState)`.
- It looks like you're importing `TopHatDispatch` into some other files. That has the risk of causing circular import problems, since it's importing from the store itself. You may want to rework functions like `updateSyncedCurrencies` [2] to be a thunk. (In fact, looking at the code, this looks like a very good candidate for RTK's `createAsyncThunk` API.)
[0] https://github.com/Athenodoros/TopHat/blob/a916386edf/src/st...
[1] https://redux.js.org/tutorials/typescript-quick-start#define...
[2] https://github.com/Athenodoros/TopHat/blob/a916386edf/src/st...
What are some alternatives?
ccxt - A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges
rotki - A portfolio tracking, analytics, accounting and management application that protects your privacy
cryptofinance-google-sheets-add-on - CRYPTOFINANCE() — The easiest way to get cryptocurrencies prices and more in Google Sheets.
basic-hentai-video-downloader - A simple hentai video downloader. Electron Windows App
hodlwatch - Simple, yet powerful web app for automatic cryptocurrency portfolio tracking
reactjs-crypto-api-dashboard - Create a cryptocurrency dashboard using ReactJS and the Coinbase API
Sentry-Picam - A simple wildlife camera for Raspberry Pis.
Manta - 🎉 Flexible invoicing desktop app with beautiful & customizable templates.
twinkle-tray - Easily manage the brightness of your monitors in Windows from the system tray
Apexwallet - Get real time market information on your favorite crypto currencies, watch them to keep track and also trade virtually, risk free.
DeadHash-js - DeadHash - JS version
Lepton - 💻 Democratizing Snippet Management (macOS/Win/Linux)