maybe-finance / maybe Goto Github PK
View Code? Open in Web Editor NEWThe OS for your personal finances
Home Page: https://maybe.co
License: GNU Affero General Public License v3.0
The OS for your personal finances
Home Page: https://maybe.co
License: GNU Affero General Public License v3.0
Running yarn install
for the first time after cloning the repository results in installation failures. The errors range from generic "failed with errors" messages to specific issues like @babel/runtime@npm:^7.20.13: No candidates found
. The resolution involved actions with the yarn.lock
file, suggesting potential issues with outdated packages or dependencies that may no longer be available or compatible. This was specifically observed on Ubuntu 22.04 but could also affect other systems.
Steps to reproduce the behavior:
yarn install
in the project directory.yarn.lock
.@babel/runtime
suggests an issue with resolving the correct package version.yarn.lock
file.yarn.lock
file.yarn install
again, which completes successfully after these steps.yarn install
should run without issues on the first attempt after cloning the repository, without needing to manipulate the yarn.lock
file.
This issue might not be isolated to Ubuntu 22.04 and could potentially affect other operating systems and development environments. The problem was encountered using Yarn version 4.0.2. To provide immediate assistance to other contributors who might encounter similar problems, I am willing to create a pull request to update the README with a set of temporary instructions. These instructions will guide developers on how to handle the yarn.lock
file if they face similar errors, ensuring a smoother initial setup process until a more permanent solution is implemented.
API request from client returns 204 (No Content) status with undefined data, but the same request directly to the server URL results in a 500 status and an error message.
Operating System: Windows 10
Node.js Version: v20.9.0
Execute yarn run dev to initiate the project's development server.
Successfully log in to the application using the provided credentials.
Upon entering the app after login, note the error message "Unable to load onboarding."
Utilize browser developer tools to examine the network tab.
Locate the API request associated with the onboarding data.
Verify that the response status is 204 (No Content) and the data is undefined.
Status: 204 No Content
Data: Undefined
Status: 500 Internal Server Error
Axios configuration: Suspecting potential issue with Axios instance configuration.
Note: You do not have to build the actual account outputs. This is primarily about stubbing out the frontend visuals.
Scope:
new_portfolio_path
)I think a lot of people would like to contribute to this project, including myself. Is there an established process to do so?
I am seeing these errors when running locally without any Ngrok setup (I never set an auth token for ngrok).
Errors:
[ ready ] on http://localhost:4200
error: server: unhandled promise rejection: [object Promise]: Error: connect ECONNREFUSED ::1:4551
error: server: unhandled promise rejection: [object Promise]: Error: connect ECONNREFUSED ::1:4551
error: server: unhandled promise rejection: [object Promise]: Error: connect ECONNREFUSED ::1:4551
error: [default-express-handler] connect ECONNREFUSED ::1:4551 {"request":{"method":"POST","url":"/v1/plaid/sandbox/quick-add"},"stackTrace":"Error: connect ECONNREFUSED ::1:4551\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16)","user":"clrdtjey40000wizwzyb7hdxo"}
Recording shows what was pointed out. Same happens even if you click on the "Debts" section.
We previously used ConvertKit for newsletters and users could subscribe from within the app.
We need to remove all mention/usage of ConvertKit as well as "newsletter subscription" functionality/UI.
In an effort to make it as easy as possible to get up and running with Maybe, we should have a "setup" script to run.
I'm not attached to any specific method for that (and realistically don't have a lot of experience in this area), so open to suggestions.
The big things that need to happen are around database setup, specifically with rails db:setup and :migrate and then creating a read-only role.
After database setup, a read-only ai_user
needs to be created:
CREATE ROLE ai_user WITH LOGIN PASSWORD 'YOUR_UNIQUE_PASSWORD';
GRANT SELECT ON balances TO ai_user;
GRANT SELECT ON accounts TO ai_user;
GRANT SELECT ON connections TO ai_user;
GRANT SELECT ON conversations TO ai_user;
GRANT SELECT ON holdings TO ai_user;
GRANT SELECT ON investment_transactions TO ai_user;
GRANT SELECT ON messages TO ai_user;
GRANT SELECT ON metrics TO ai_user;
GRANT SELECT ON securities TO ai_user;
GRANT SELECT ON security_prices TO ai_user;
GRANT SELECT ON transactions TO ai_user;
And then after that, READONLY_DATABASE_URL
needs to be set to postgres://ai_user:YOUR_UNIQUE_PASSWORD@localhost/maybe_ai_development
in the .env
file.
When you try to download the Maybe Card for your profile, an empty .png with size 0 kb file is downloaded. This happens both when it is shown for the first time after creating the profile and when you try to download it from the settings page.
Right now we're pretty heavily tied to Plaid (as can be seen by multiple sidekiq jobs all having "plaid" in the name).
Ideally we create a system where we can have infinite number of connector modules (that the community itself can build as needed) that just tie in to the overall data importing/syncing system.
In an effort to reduce dependencies and make it as easy as possible to get up and running, we should convert Sidekiq usage to GoodJob (through ActiveJob).
This will remove the need for Redis AND make cron/tim-based background jobs much easier.
As you won't need Intercom to support yourself, we don't need those bits in the app.
Is your feature request related to a problem? Please describe.
No.
Describe the solution you'd like
Update NX to use vite
instead of webpack
Describe alternatives you've considered
I guess an alternative would be esbuild
? I have less direct experience with other bundlers. Open to suggestions.
Additional context
Migrating here should improve the build time considerably. We made the shift at work and it saved us tons of time. This could be a good early improvement.
For development and for local self-hosting, we're defaulting to using Ngrok for HTTPS URLs (needed for basically any external data source).
We need to add instructions on how to set up an Ngrok account with a static domain and how to set the key + domain in .env.
Relevant discussion: #66
I just cloned the repo and launched the app.
I cannot understand how to add stocks to track my portfolio.
Is that feasible? Or does it only work with US institution integrations?
( I live in the UK, I want to manually add my stocks and just track their prices for my portfolio net worth )
We originally used LaunchDarkly for feature flag management. We need to remove that dependency as well as any feature-flagging functionality.
When a user creates an account, they're sent a link to 'confirm' their email address.
We currently allow them to access their account for 24 hours before confirming.
However, after that if they try to login and they haven't confirmed, then they won't be able to login and Devise doesn't show them an error.
So, we need to do two things...
send_confirmation_instructions
on the user object so it resend the confirmation emailCurrently we have the ability to manually enter the value of any asset (and then you can manually add updated values).
What need to add support for is entering a particular stock and then tracking the ongoing value of it.
For now, due to data sourcing, this would be restricted to the US stock market.
Data to input:
This will be the basis for allowing users to import CSV files of their various holdings, but that specific functionality is outside the scope of this issue.
The backend essentially already supports this as we were importing this data via Plaid, but there's a current Issue to clean this up specifically for manual usage: #166
So, a lot of this (maybe most?) is essentially building the UI/UX to input the individual stocks.
Here's a rough mockup of potential UI.
From there, Maybe would then track the value of that investment automatically.
Security
)There is a $250 bounty for this.
Description:
I propose adding an ๐๏ธ icon to the dashboard interface, which will allow users to toggle the visibility of numerical data for enhanced privacy. When the icon is clicked, it should hide or reveal the numbers as per the user's preference.
Preferred flow:
Adding the ๐๏ธ icon is a user-friendly way to enhance privacy and control over displayed data. It ensures that users can easily manage their data visibility preferences, thereby improving the overall user experience of the dashboard.
Currently the app can't be successfully built.
Originally you'd run the following to get things moving...
cp .env.example .env
yarn install
yarn prisma:migrate:dev
yarn prisma:seed
yarn dev
Current roadblock happens when running yarn prisma:migrate:dev
:
Error: P3006
Migration `20211203180216_security_pricing` failed to apply cleanly to the shadow database.
Error:
db error: ERROR: extension "timescaledb" is not available
DETAIL: Could not open extension control file "/Applications/Postgres.app/Contents/Versions/15/share/postgresql/extension/timescaledb.control": No such file or directory.
HINT: The extension must first be installed on the system where PostgreSQL is running.
0: migration_core::state::DevDiagnostic
at migration-engine/core/src/state.rs:264
Theoretically this should be addressed in Docker, but not sure how to debug further.
In the sidebar we show the email address of the user. We need to add a basic menu pop-up.
Scope:
destroy_user_session_path
Use Heroicon SVG files: https://heroicons.com
Current build from commit 447f598 fails at yarn install
, lots of warnings given and critically fails here when trying to download Cypress.
Yarn version 1.22.21
Exit code: 1
Command: node index.js --exec install
Arguments:
Directory: ....
Output:
Installing Cypress (version: 12.3.0)
URL: https://download.cypress.io/desktop/12.3.0?platform=win32&arch=x64
Error: Corrupted download
Expected downloaded file to have checksum: cc3a12a75acefc49263589d63e8a815d833c8ecaae3ffce5dffb7ea32a3c6b1216358962682f7280bf1c745862446c62dd812a3d76d56f373e919c1e876f91cf
Computed checksum: 08fb9790b9705d3ebcb325a0d2aba26cc66d0b850ffb3a7329c5746de42c63c9e31c320256ff62fc0a0402b5447034af990af09eeed98ca98359176b1f9c1fba
Expected downloaded file to have size: 179037094
Computed size: 171718440
Internet connection is fine. Download always fails and anti-virus is down to allow install/stop it interferring.
We need to convert the color palette to Tailwind color syntax (for use in tailwind.config.js).
Here's the Figma file with the colors: https://www.figma.com/file/rAn2k5U86nXZmBixAEsjdN/Shell?type=design&node-id=8%3A3495&mode=design&t=0q11JqWuYDnEcFDH-1
Tailwind color customization docs: https://tailwindcss.com/docs/customizing-colors
Tailwind config file: https://github.com/maybe-finance/maybe/blob/main/config/tailwind.config.js
Describe the bug
Test failure. Probably something with the test setup because component works perfectly otherwise. This is the only test that fails in the design-system
project.
To Reproduce
Steps to reproduce the behavior:
Run yarn jest /libs/design-system/src/lib/DatePicker/DatePicker.spec.tsx
Expected behavior
Test failure.
Desktop (please complete the following information):
Given we've now replaced Auth0, we should remove any references to it or unnecessary code.
The biggest thing there is likely the /auth0
directory.
Describe the bug
I was setup it step by step. And this app was started successfully. But when I open website, and press button "Admin login", it open an white page with error "Cannot GET /admin/login"
To Reproduce
Desktop (please complete the following information):
Should update project to use something like this - https://www.npmjs.com/package/cross-env to set env variables inside scripts.
Originally posted by @coltonehrman in #90 (comment)
The current tests use a lot of Auth0 helpers, we'll need to rip all of that out since we've moved to NextAuth. Guide here on how to set up cypress testing with NextAuth: Testing with Cypress
As part of this we should ensure there is some basic e2e test coverage for login and registration.
The original codebase required Auth0 for all auth-related actions. We need to rip that out and replace it with something that's not a third-party dependency.
Here are archived reference docs for how we used Auth0 initially: https://github.com/maybe-finance/maybe/wiki/Auth0
I'd like to see a tag added to the b500040
commit to represent the repository before any open source changes were added.
It's nice to come visit the repository at this point in the history to view the code as it was in production and to learn from what a SAAS codebase can look like.
Thanks!
Not sure if this is a priority or not, but I personally would like to have App router vs Pages.
The original app made extensive use of Plaid + Finicity for bank data. Unfortunately they both require enterprise contracts to make use of.
A much more human-friendly alternative is Teller. While they don't offer quite as much coverage on the bank connection front (yet), they do offer billing that's essentially free for a single user. So, this is likely the best option for a personal finance app like this that someone may run just for themselves.
We have the general concept/framework of multiple data providers already in the app where data from each gets cleaned up and distilled in to more common tables.
This project would mean adding Teller as another data provider and ultimately using whichever provider there are API keys for.
Ultimately this sets the stage for adding any data provider down the road (though that specifically is outside the scope of this).
This particular issue is about getting a banking provider added ASAP so Maybe can have utility without needing Plaid/Finicity accounts.
Rough deliverables:
I've added a $500 bounty on this but want to be clear: this is a very complex task that may very well require multiple people working together on it.
We won't outright assign this issue to anyone at this point and depending on the number of people involved, there's a decent chance we'll split the bounty between contributors.
EDIT: Teller (@stevegraham) has committed another $500 to this, bringing to total to $1000!
Is your feature request related to a problem? Please describe.
I struggled to finish the onboarding process since I was entering my birthdate as DD/MM/YYYY
instead of the MM/DD/YYYY
it was expecting. I also didn't receive any validation errors and was able to continue onto the next question in the form.
Describe the solution you'd like
Date inputs should respect the users local format for dates. Some countries like the US have month first, and others such as Australia have the date first.
Additionally, the birthdate question in the on-boarding form should not let you continue if you've entered an invalid birthdate.
I am not familiar with docker, will exe be released in the future?
Is your feature request related to a problem? Please describe.
Yes. This repo is currently using an outdated package manager.
Describe the solution you'd like
Yarn Classic (1.x) is ~4ish years old and needs an upgrade. The purpose of this issue is to upgrade the workspace to explore using the pnpm package manager rather than Yarn 1.x
Describe alternatives you've considered
As of now, it's best to use Yarn 1.x. We can configure package.json
to explicitly use the classic version of Yarn and add some documentation as to how developers can configure Yarn to use 1.x.
Additional context
pnpm home page
The original version of Maybe provided financial advice via CFP/CFAs, which required us to collect acknowledgement of a few legal agreements.
This can be removed now since we won't be providing that specific service.
You're basically looking for anything that talks about agreements, signAgreement, newestAgreement, feeAgreement, agreementType and the database columns associated with all of that.
It may be hard to thoroughly remove all of this until #16 is complete (since you won't be able to actually go through onboarding or anything associated with that), but I'm not opposed to a first pass being taken at this knowing some bits may be missed initially.
When NX_POSTMARK_API_TOKEN
is empty, an error is thrown:
error: uncaughtException: A valid API token must be provided.
PostmarkError: A valid API token must be provided.
We shouldn't require NX_POSTMARK_API_TOKEN
and instead should just ignore any email sending when that token is missing.
Postmark is already used pretty extensively throughout the app for email sending, however the environment variables for it are sprinkled all over the app.
We need to centralize all of those in to the main .env file and include them as part of setup.
We should be able to continue using it as the main email provider as they have a free plan (for up to 100 emails).
I have cloned the latest repository, set the NEXTAUTH_SECRET, and followed the commands given on https://github.com/maybe-finance/maybe?tab=readme-ov-file#building-the-app
these are the following errors i have encountered
along with that, i am also unable to make account on it, it works till sign up, takes in all the details and then gives out this error
these are my server specifications
AWS server
ubuntu 20.04
intel cpu
all ports are open but still was inaccessible directly through the ip so used ssh tunneling to access it using localhost
We need to build the ability for a user to delete their user account and purge the connected data.
Auth0 previously provided this functionality. We'll need to do a few things to replace that, off the top of my head:
This is low priority for right now.
Describe the bug
When I try to register an account I get the error:
Invalid `prisma.authUser.findUnique()` invocation: The table `public.auth_user` does not exist in the current database.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Signing up succesfully
Desktop (please complete the following information):
Additional context
event - compiled client and server successfully in 295 ms (2806 modules)
info: [job.active] Job{queue=sync-security id=repeat:5345ac4cff0751437f6fbbe527d36e4c:1705502700000 name=sync-all-securities ts=1705502556828 data={}} {"service":"BullQueueEventHandler"}
info: Starting a postgresql pool with 13 connections. {"service":"PrismaClient","target":"quaint::pooled","timestamp":"2024-01-17T14:45:00.024Z"}
error:
Invalid `prisma.security.findMany()` invocation:
The table `public.security` does not exist in the current database. {"service":"PrismaClient","target":"security.findMany","timestamp":"2024-01-17T14:45:00.194Z"}
error: [job.failed] Job{queue=sync-security id=repeat:5345ac4cff0751437f6fbbe527d36e4c:1705502700000 name=sync-all-securities ts=1705502556828 data={}} {"error":{"clientVersion":"5.8.0","code":"P2021","meta":{"modelName":"Security","table":"public.security"},"name":"PrismaClientKnownRequestError"},"service":"BullQueueEventHandler"}
info: [job.active] Job{queue=sync-security id=repeat:5345ac4cff0751437f6fbbe527d36e4c:1705503000000 name=sync-all-securities ts=1705502700011 data={}} {"service":"BullQueueEventHandler"}
moved to discussions
There are slew of AWS-specific bits...so many that I honestly don't recall what all they were used for. But ultimately we need to make this platform-agnostic so that AWS isn't a requirement.
Part of Maybe's original product offering included being able to work directly with a CFP/CFA. We built an entire UI for the Advisor side as well as a whole section of the user-facing app for asking questions and conversing with your advisor.
That's not necessary at this point, so we can remove those elements.
Things that likely need to be removed...
/apps/advisor
โ This is the advisor admin panelAs referenced in #60, we need to remove the blocker for folks outside the US.
When we built Maybe we offered financial advice and as such had a LOT more regulatory stuff to account for. So, that just meant we couldn't support non-US folks.
...
The problem will still be that we have to add data sources for folks outside North America, but otherwise you should still be able to actually create an account and manually add stuff.
There are some checks during signup/onboarding where it asks for location and then if you don't select United States it shows you a message about not being supported.
We need to remove that so there's no "location" limitation.
There are a couple of components that can be removed as we don't need "native" feedback buttons at this stage.
I think it's only FeedbackDialog
and FeedbackButton
(and any mention of them), but would love someone who's more versed in React to dig through it and make sure there's nothing else obvious.
This includes removing NEXT_PUBLIC_ZAPIER_FEEDBACK_HOOK_URL
from the .env.example file as it will no longer be needed either.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.