{"id":16317068,"url":"https://github.com/leftmove/wallstreetlocal","last_synced_at":"2025-04-08T04:14:12.478Z","repository":{"id":216245184,"uuid":"591803521","full_name":"leftmove/wallstreetlocal","owner":"leftmove","description":"Free and open-source stock tracking website for America's biggest money managers.","archived":false,"fork":false,"pushed_at":"2025-03-01T20:32:23.000Z","size":50259,"stargazers_count":452,"open_issues_count":7,"forks_count":41,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-01T03:35:10.069Z","etag":null,"topics":["13f","celery","collaborate","docker","fastapi","investment","javascript","meilisearch","mongodb","nextjs","nginx-proxy-manager","public-data","python","redis","redux","sec"],"latest_commit_sha":null,"homepage":"https://wallstreetlocal.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leftmove.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"anonyon","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"custom":null}},"created_at":"2023-01-21T23:03:29.000Z","updated_at":"2025-03-25T13:41:03.000Z","dependencies_parsed_at":"2024-07-11T17:51:14.949Z","dependency_job_id":"d53cb9ff-3c7f-4d9e-922a-6a60959307d9","html_url":"https://github.com/leftmove/wallstreetlocal","commit_stats":{"total_commits":603,"total_committers":8,"mean_commits":75.375,"dds":0.5091210613598673,"last_synced_commit":"cbc28c0944dcc12f901f5ee798996ad186e57f6e"},"previous_names":["bruhbruhroblox/wallstreetlocal"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leftmove%2Fwallstreetlocal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leftmove%2Fwallstreetlocal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leftmove%2Fwallstreetlocal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leftmove%2Fwallstreetlocal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leftmove","download_url":"https://codeload.github.com/leftmove/wallstreetlocal/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247773719,"owners_count":20993639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["13f","celery","collaborate","docker","fastapi","investment","javascript","meilisearch","mongodb","nextjs","nginx-proxy-manager","public-data","python","redis","redux","sec"],"created_at":"2024-10-10T22:06:30.437Z","updated_at":"2025-04-08T04:14:12.436Z","avatar_url":"https://github.com/leftmove.png","language":"JavaScript","readme":"\u003cp align=\"center\"\u003e\r\n  \u003ca href=\"https://wallstreetlocal.com\" target=\"_blank\"\u003e\r\n    \u003cpicture\u003e\r\n      \u003cimg alt=\"wallstreetlocal\" src=\"https://i.ibb.co/Fb8wgTw/Wallstreetlocal-logo.png\" style=\"max-width: 100%;\"\u003e\r\n    \u003c/picture\u003e\r\n  \u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n  A website that allows you to view the investments of America's largest investors.\r\n\u003c/p\u003e\r\n\r\n\u003c!-- \u003ch1 align=\"center\" color=\"red\"\u003e\r\n  The site may be down currently due to excessive traffic.\r\n\u003c/h1\u003e --\u003e\r\n\r\nThe Securities and Exchange Commission (SEC) keeps record of every company in the United States. Companies whose holdings surpass $100 million though, are required to file a special type of form: the 13F form. This form, filed quarterly, discloses the filer's holdings, providing transparency into their investment activities and allowing the public and other market participants to monitor them.\r\n\r\nThe problem though, is that these holdings are often cumbersome to access, and valuable analysis is often hidden behind a paywall. Through **wallstreetlocal**, the SEC's 13F filers become more accessible and open.\r\n\r\n- **Large:** With over 850,000 companies archived, any filer registered with the SEC can be queried. Download the database [here](https://drive.google.com/file/d/1LT4xiFJkh6YlAPQDcov8YIKqcvevFlEE/view).\r\n- **Recent:** View thousands of cached stocks in the database, with accurate and recent data.\r\n- **Historical:** View filer holdings going back 30+ years in the explorer, or visit the SEC directly.\r\n- **On-Demand:** Data is queried and stored on user request, and is progressively available for download.\r\n\r\n---\r\n\r\n- [Introduction](#introduction)\r\n- [Getting Started](#getting-started)\r\n- [Self-Hosting](#self-hosting)\r\n  - [Frontend](#frontend)\r\n  - [Backend](#backend)\r\n    - [Third Party APIs](#third-party-apis)\r\n    - [Telemetry](#telemetry)\r\n    - [Development](#development)\r\n    - [Production](#production)\r\n- [Contributing](#contributing)\r\n- [License](#license)\r\n- [Code of Conduct](#code-of-conduct)\r\n\r\n## Getting Started\r\n\r\nThis repository holds the [backend](./backend/) and [frontend](./frontend/) for wallstreetlocal.\r\n\r\nTo visit wallstreetlocal, you can go to [`wallstreetlocal.com`](https://wallstreetlocal.com).\r\n\r\nYou can also see important resources used to create the site at the [resources](https://www.wallstreetlocal.com/about/resources) page, or view the OpenAPI documentation at the [API](https://content.wallstreetlocal.com/docs) page.\r\n\r\nFor more information, see the documentation for wallstreetlocal's development stack below.\r\n\r\n- [FastAPI](https://fastapi.tiangolo.com/) for the backend.\r\n- [NextJS](https://nextjs.org/) for the frontend.\r\n- [Celery](https://docs.celeryq.dev/en/stable/getting-started/introduction.html) for long-running, asychronous backend tasks.\r\n- [Docker](https://docs.docker.com/) for all the different microservices.\r\n- [MongoDB](https://www.mongodb.com/docs/) for the database.\r\n- [Redis](https://redis.io/) for caching.\r\n- [Meilisearch](https://www.meilisearch.com/docs) for search.\r\n- [NGINX Proxy Manager](https://nginxproxymanager.com/) for the reverse-proxy.\r\n- [Sentry](https://sentry.io/) for telemetry.\r\n\r\n## Self-Hosting\r\n\r\nA production version of the site is hosted at [`wallstreetlocal.com`](https://wallstreetlocal.com), but it is also possible to self-host.\r\n\r\n### Frontend\r\n\r\n1. Navigate to the frontend folder.\r\n\r\n   ```bash\r\n   cd frontend\r\n   ```\r\n\r\n2. Install dependencies.\r\n\r\n   ```bash\r\n   npm install\r\n   ```\r\n\r\n3. Deploy.\r\n\r\n   ```bash\r\n   npm run dev\r\n   ```\r\n\r\n   Or for a production build, run\r\n\r\n   ```bash\r\n   npm run build\r\n   npm run start\r\n   ```\r\n\r\nOnce the above steps are completed, the frontend should be hosted at [`localhost:3000`](http://localhost:3000), with the backend automatically configured to [`content.wallstreetlocal.com`](https://content.wallstreetlocal.com).\r\n\r\nHosting the frontend alone is the recommended way to self-host, but if you want to self-host the backend too, see [below](#backend).\r\n\r\n### Backend\r\n\r\n#### Third Party APIs\r\n\r\nTo run both the development and production builds, you will need to have environment variables for third party APIs. Most of the environment variables in the provided example files you can keep as is, but for the API keys you will need to visit the following services.\r\n\r\n- [Alpha Vantage](https://www.alphavantage.co/)\r\n- [OpenFIGI](https://www.openfigi.com/)\r\n- [Finnhub](https://finnhub.io/)\r\n\r\nThese three different services allow for the most up-to-date and accurate data, while also avoiding rate-limiting.\r\n\r\n#### Telemetry\r\n\r\nAlthough it is recommended that you turn off telemetry for self-hosting, you can enable telemetry through the `TELEMETRY` environment variable.\r\n\r\nFor telemetry/tracing/logs, wallstreetlocal uses [Sentry](https://sentry.io/). You can sign up [here](https://sentry.io/signup/), or self-host that too.\r\n\r\n#### Development\r\n\r\nThe development build is mainly made for testing, so it is ideal for self-hosting.\r\n\r\nTo run the full app, you need the microservices running through Docker, and the main application running seperately.\r\n\r\nYou can find the development compose file [here](./backend/docker-compose.dev.yaml). You will also need a `.env` file that can be found [here](./backend/.env.example).\r\n\r\nOnce you have all the configuration files ready, to start the app, run the following.\r\n\r\n1. Navigate to the backend directory.\r\n\r\n   ```bash\r\n   cd backend\r\n   ```\r\n\r\n2. Run the microservices by calling the development compose file.\r\n\r\n   ```bash\r\n   docker compose -f docker-compose.dev.yaml up -d\r\n   ```\r\n\r\n   **Note:** You should stop these microservices after you're done using them (otherwise they will waste resources indefinitely). To stop them, run the following.\r\n\r\n   ```\r\n   docker compose -f docker-compose.dev.yaml down # Run after you've finished\r\n   ```\r\n\r\n3. Install dependencies with [uv](https://docs.astral.sh/uv/getting-started/installation/).\r\n\r\n   ```bash\r\n  pipx install uv # More options at https://docs.astral.sh/uv/getting-started/installation/\r\n  uv sync\r\n   ```\r\n\r\n4. Create and edit the `.env` file using `.env.example`.\r\n\r\n5. Run the main application.\r\n\r\n   ```bash\r\n   uv run python main.py\r\n   ```\r\n\r\n#### Production\r\n\r\nThe production build is made for deploying at scale, so running it will be more cumbersome.\r\n\r\nYou can find the compose file [here](./backend/docker-compose.prod.yaml). There is no `.env` file though, as all the environment variables are included in the compose file.\r\n\r\nUnless you are running the production build for many people, you should change the following settings.\r\n\r\n- Run on a single worker\r\n- Disable telemetry\r\n- Map all Docker ports to `localhost`\r\n\r\nOnce you have all the configuration files ready, to start the app, run the following.\r\n\r\n1. Navigate to the backend directory.\r\n\r\n   ```bash\r\n   cd backend\r\n   ```\r\n\r\n2. Run the entire application with one command.\r\n\r\n   ```bash\r\n   docker compose -f docker-compose.prod.yaml up\r\n   ```\r\n\r\n## Contributing\r\n\r\nIf you feel you can contribute to this project, or you've found a bug, create an issue or pull request.\r\n\r\nThis project is solely maintained so it is prone to bugs and anti-patterns, please call them out where you see them. [All contributions are highly appreciated!](./CONTRIBUTING.md)\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n  \u003cimg src=\"https://api.star-history.com/svg?repos=leftmove/wallstreetlocal,leftmove/pinestreetlocal\u0026type=Date)](https://star-history.com/#leftmove/wallstreetlocal\u0026leftmove/pinestreetlocal\u0026Date\" /\u003e\r\n\u003c/div\u003e\r\n\r\n## License\r\n\r\n[MIT License](./LICENSE)\r\n\r\n[Code of Conduct](./CODE_OF_CONDUCT.MD)\r\n","funding_links":["https://ko-fi.com/anonyon"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleftmove%2Fwallstreetlocal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleftmove%2Fwallstreetlocal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleftmove%2Fwallstreetlocal/lists"}