Skip to content

Grade: 82%. My COMP3000 final year university project that allows you to manage nearly every facet of your finances with an open-source web, mobile, and desktop application, along with a self-hosted GraphQL API.

License

Xtrendence/CryptoShare

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CryptoShare

Thumbnail

Screenshot

Screenshot

Disclaimer

This is a piece of university coursework as part of my final year project.

Brief Demo

A brief video has been recorded to show the application running.

Setup Instructions

Please see the following file for setup instructions.

Project Supervisor

The supervisor for this project is Shirley Atkinson.

Project Vision

Contrived for investors and the financially diligent, who lack the ability to manage their finances privately and securely, CryptoShare is a self-hosted and open-source solution that allows them to track their income and investments through a unified interface featuring a website, cross-platform desktop app, and Android mobile app. User data is encrypted on the client-side using military-grade AES-256 encryption.

Users can utilize the app to budget their monthly income, record everyday transactions, track their stock and cryptocurrency investments, record their trading activity, and easily manage or backup their data through intuitive import and export functionalities. Furthermore, users can discover new assets they may want to invest in, and keep track of ones they’re interested in.

Poster

Security

One of CryptoShare's main priorities is data protection and security. While most software encrypts data on the server-side, CryptoShare does it on the client-side no matter what. When you register an account, an encryption key is locally generated for you before being encrypted using your password. The encrypted key is then sent to the server, along with an RSA encrypted version of your password. The server then stores the encrypted key, and hashes your password. This means that even if the data stored on the server is stolen, the hackers cannot access any of your data unless they were to modify the API's code to decrypt your password during login, and use it to access your encryption key and subsequently your data.

User data such as activities, holdings, transactions, budget data, settings etc. are all encrypted with AES-256. Passwords are hashed using bcrypt. When logging in or creating an account, user details are encrypted using RSA, so even if the API doesn't support SSL/HTTPS, data is still encrypted when being sent.

Tech Stack

  • Database: SQLite

  • App API: Node.js, TypeScript, GraphQL

  • Chat Bot API: Node.js, TypeScript, Socket.IO, Natural Language Processing

  • Web App: HTML, CSS, JavaScript

  • Desktop App: Electron, EJS, HTML, CSS, JavaScript

  • Mobile App: React Native, TypeScript

Do you accept donations?

If you'd like to donate, then please feel free to do so, it'd be much appreciated. However, I don't want you to feel obliged to do so, and there are no perks for it. If you decide to donate, please contact me afterwards so I can actually thank you, and I'd love to hear about any ideas you may have for CryptoShare. If they're within the scope of the project, I'll probably implement them.

Click on the collapsible items in the list below to view the corresponding donation address.

ADA
addr1qyh9ejp2z7drzy8vzpyfeuvzuej5t5tnmjyfpfjn0vt722zqupdg44rqfw9fd8jruaez30fg9fxl34vdnncc33zqwhlqn37lz4
XMR
49wDQf83p5tHibw9ay6fBvcv48GJynyjVE2V8EX8Vrtt89rPyECRm5zbBqng3udqrYHTjsZStSpnMCa8JRw7cfyGJwMPxDM
ETH
0x40E1452025d7bFFDfa05d64C2d20Fb87c2b9C0be
BCH
qrvyd467djuxtw5knjt3d50mqzspcf6phydmyl8ka0
BTC
bc1qdy5544m2pwpyr6rhzcqwmerczw7e2ytjjc2wvj
LTC
ltc1qq0ptdjsuvhw6gz9m4huwmhq40gpyljwn5hncxz
DOT
12nGqTQsgEHwkAuHGNXpvzcfgtQkTeo3WCZgwrXLsiqs3KyA
NANO
nano_3ed4ip7cjkzkrzh9crgcdipwkp3h49cudxxz4t8x7pkb8rad7bckqfhzyadg

Screenshots

Please note that the screenshots below were taken when development was initially finished; as such, they may differ from the current app as the UI could have changed since then. The screenshots also show the app's regular backgrounds rather than the alternate colorful one (which is enabled by default and can be disabled through the "Settings" page).

Web App & Desktop App

Login
Chat Bot
Dashboard
Transactions
Market
Market Chart
Holdings
Holding Chart
Activity
Settings

Mobile App

Login
Chat Bot
Dashboard
Transactions
Market
Market Chart
Holdings
Holding Chart
Activity
Settings

Attributions

APIs

Cryptocurrency Market Data: CoinGecko

Stock Market Data: Yahoo Finance

Web App & Desktop App

Resource URL
Arkhip DaFont Website
Background Website
Chart.js Website
CryptoJS Website
Electron Website
Flatpickr Website
Fingerprint Icon SVG Repo Website
Font Awesome Website
Forge GitHub
Inter Website
JQuery Website
Popper Website
Pop Sound FreeSound Website
QR Code Styling Website
SHA256 GitHub
Socket.IO Website
Switch Sound FreeSound Website
Tippy.js Website

Mobile App

Dependencies
Resource URL
@eliav2/react-native-collapsible-view NPM
@react-native-async-storage/async-storage NPM
@react-native-clipboard/clipboard NPM
@react-native-community/art NPM
@react-native-community/blur NPM
@react-native-community/masked-view NPM
@react-native-firebase/app NPM
@react-native-firebase/messaging NPM
@react-native-picker/picker NPM
@react-navigation/native NPM
@react-navigation/native-stack NPM
@react-navigation/stack NPM
@reduxjs/toolkit NPM
atob NPM
btoa NPM
metro-config NPM
moment NPM
react NPM
react-content-loader NPM
react-dom NPM
react-native NPM
react-native-aes-crypto NPM
react-native-background-actions NPM
react-native-bubble-tabbar NPM
react-native-camera NPM
react-native-chart-kit NPM
react-native-crypto-js NPM
react-native-device-info NPM
react-native-document-picker NPM
react-native-fast-image NPM
react-native-flash-message NPM
react-native-fs NPM
react-native-fusioncharts NPM
react-native-gesture-handler NPM
react-native-hold-menu NPM
react-native-image-blur-shadow NPM
react-native-keyboard-aware-scroll-view NPM
react-native-linear-gradient NPM
react-native-modal NPM
react-native-modals NPM
react-native-modern-datepicker NPM
react-native-navigation-bar-color NPM
react-native-permissions NPM
react-native-pie NPM
react-native-qrcode-scanner NPM
react-native-reanimated NPM
react-native-render-html NPM
react-native-restart NPM
react-native-rsa-native NPM
react-native-safe-area-context NPM
react-native-screens NPM
react-native-sha256 NPM
react-native-sound NPM
react-native-svg NPM
react-native-svg-animations NPM
react-native-table-component NPM
react-native-toggle-element NPM
react-native-transparent-status-and-navigation-bar NPM
react-native-unimodules NPM
react-native-vector-icons NPM
react-native-web NPM
react-redux NPM
socket.io-client NPM
Dev Dependencies
Resource URL
@babel/core NPM
@babel/runtime NPM
@react-native-community/eslint-config NPM
@types/jest NPM
@types/react NPM
@types/react-native NPM
@types/react-redux NPM
@types/react-test-renderer NPM
babel-jest NPM
eslint NPM
jest NPM
metro-react-native-babel-preset NPM
patch-package NPM
postinstall-postinstall NPM
react-test-renderer NPM
typescript NPM