Trading Wallet is a web application developed in Python using the Flask framework and a SQLite3 database to manage user profiles and investment portfolios. Minimalist UI developed with PicoCSS.
python -m venv .venv
. .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
export DEBUG="True"
export SQLALCHEMY_DATABASE_URI="sqlite:///trading-wallet.db"
export SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(16))")
python run.py
Go to http://127.0.0.1:5000/
import secrets
secrets.token_hex(16)
- Register, login and logout
- Flash messages
- Form validations
- Encrypted passwords
- See and update account username, email, password and profile picture
- See all the stocks available in the market (integration with Yahoo Finance API)
- Buy stocks and sell your holdings
- Historical of transactions
![home](https://private-user-images.githubusercontent.com/39955956/311117455-324fb235-b815-4ef4-83f3-e762325d5436.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA0NTg2NTIsIm5iZiI6MTcyMDQ1ODM1MiwicGF0aCI6Ii8zOTk1NTk1Ni8zMTExMTc0NTUtMzI0ZmIyMzUtYjgxNS00ZWY0LTgzZjMtZTc2MjMyNWQ1NDM2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA4VDE3MDU1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJjNmVhMGMxOTVkODc3NjczMzZkY2Y1MzczNzUzNDdhYzQxNzMyZDIzMDBiMzNmNzFjMDY0MWE1YTBlNTI4OTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.8rzDFctlPOBFH9L0b58ee85XNYZgguF1NpDnvICKZ3M)
![login](https://private-user-images.githubusercontent.com/39955956/311117520-07ebca51-d66e-4cc4-ad0c-079ea7cd89cc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA0NTg2NTIsIm5iZiI6MTcyMDQ1ODM1MiwicGF0aCI6Ii8zOTk1NTk1Ni8zMTExMTc1MjAtMDdlYmNhNTEtZDY2ZS00Y2M0LWFkMGMtMDc5ZWE3Y2Q4OWNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA4VDE3MDU1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZhMTQzZDA2Y2M4ZDc4MDRmZWUzOWU0ZDUxY2Y5ZDliNjAwNmNjMzhjNjQyM2EwMDk2MTRjYzBiODY3YjI4MDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0._ZXLvKSupGP9MdDfo086t15wrKld8fkXfDvxDYPuOqk)
![account-error](https://private-user-images.githubusercontent.com/39955956/311117618-7f78760a-fb63-4dc1-b0b2-1ea05c07e347.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA0NTg2NTIsIm5iZiI6MTcyMDQ1ODM1MiwicGF0aCI6Ii8zOTk1NTk1Ni8zMTExMTc2MTgtN2Y3ODc2MGEtZmI2My00ZGMxLWIwYjItMWVhMDVjMDdlMzQ3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA4VDE3MDU1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ3YmE0NTMxY2ZlZWZiOWVkMjFjZDg3NGQyMTlkNWUyYThjMmI5Nzk3N2JjZTQ0OWYzYTQ3NDFmY2U4MDAzYTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.hE-upo4cAfWaTRgh4tCbOJ77u8yc9POTDp9pWlYXZdU)
![account-success](https://private-user-images.githubusercontent.com/39955956/311117629-1875e3fe-169b-40ec-ac1a-ee232b30e062.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA0NTg2NTIsIm5iZiI6MTcyMDQ1ODM1MiwicGF0aCI6Ii8zOTk1NTk1Ni8zMTExMTc2MjktMTg3NWUzZmUtMTY5Yi00MGVjLWFjMWEtZWUyMzJiMzBlMDYyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA4VDE3MDU1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJmMGM5OWM2YTIwN2JjOTNmNTZmOTM3YjQ4MWM4OTYxOWQwOTU1ZTkzMjhjZmMzNWYzNGVjY2Q1NjA2Yzc3ODYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.0moxq06GqNfzK1OugulW0jOUtQ4-a1YzWpoxMmfznQ8)
![market](https://private-user-images.githubusercontent.com/39955956/311117642-970bd780-5f20-484e-a891-a138fba65921.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA0NTg2NTIsIm5iZiI6MTcyMDQ1ODM1MiwicGF0aCI6Ii8zOTk1NTk1Ni8zMTExMTc2NDItOTcwYmQ3ODAtNWYyMC00ODRlLWE4OTEtYTEzOGZiYTY1OTIxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA4VDE3MDU1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2NDkxNTdhNTQ4NmEwZmZhMWZlZGY1MWY2MDVkODkyYzRkYjQwZTkxOWZlNmE4ZjcwNmRlYThiOGUzYjgzNzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Rdvc2zlpqy1t2RonSWcQ0aKqdja62KO4Zx9-MQXRm8E)
![buy-error](https://private-user-images.githubusercontent.com/39955956/311117651-d3ea94b9-3ae0-4bd2-b695-8c4cb1b401bb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA0NTg2NTIsIm5iZiI6MTcyMDQ1ODM1MiwicGF0aCI6Ii8zOTk1NTk1Ni8zMTExMTc2NTEtZDNlYTk0YjktM2FlMC00YmQyLWI2OTUtOGM0Y2IxYjQwMWJiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA4VDE3MDU1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAzN2I0ZjJjMGE1MDRhNDZjMTkwMDQ4ODQ4MGI5MTBiNzI3YTY4ZGRmZDE5NTU0YjE0OGNjN2ExZjZiYTZmM2UmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.TbqJyiUwSQ1UZYmiky0QzYjEcplczlEriAH3LyZZSNY)
![buy-success](https://private-user-images.githubusercontent.com/39955956/311117664-519c51bb-1004-4ca4-a8e5-e807a0b3651c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA0NTg2NTIsIm5iZiI6MTcyMDQ1ODM1MiwicGF0aCI6Ii8zOTk1NTk1Ni8zMTExMTc2NjQtNTE5YzUxYmItMTAwNC00Y2E0LWE4ZTUtZTgwN2EwYjM2NTFjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA4VDE3MDU1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTkxZGVkYjQ2ZWFiZjc0ZTIxMWQwNzhkYzExMjQ4OGJlZWNlNjJjMTMzNjE4MTIyNTdjZmY0YmU5YTEwMDQ1MWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.eB8utgkBRxTF2gh1SVeZCm3huCPCwE6uCCFS-3p5qS0)
This project is licensed under the Apache License 2.0. See the LICENSE file for more details.