{"id":546,"date":"2025-04-19T22:00:07","date_gmt":"2025-04-20T02:00:07","guid":{"rendered":"https:\/\/eportfolios.macaulay.cuny.edu\/rrahman\/?p=546"},"modified":"2025-04-19T22:00:07","modified_gmt":"2025-04-20T02:00:07","slug":"stock-portfolio-tracker-java-gui-spring-boot-api","status":"publish","type":"post","link":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/2025\/04\/19\/stock-portfolio-tracker-java-gui-spring-boot-api\/","title":{"rendered":"Stock Portfolio Tracker: Java GUI &amp; Spring Boot API"},"content":{"rendered":"<blockquote><p><strong>Github repository for JAVA GUI: <a href=\"https:\/\/github.com\/reazwrahman\/stock-manager-gui\">https:\/\/github.com\/reazwrahman\/stock-manager-gui<\/a><\/strong><\/p>\n<p><strong>Github repository for Spring Boot REST API: <a href=\"https:\/\/github.com\/reazwrahman\/stock-manager-api\">https:\/\/github.com\/reazwrahman\/stock-manager-api<\/a><\/strong><\/p>\n<p><strong>API is self-hosted at:<\/strong> <strong><a href=\"https:\/\/stock-manager.reaz-projects.uk\/usage\">https:\/\/stock-manager.reaz-projects.uk\/usage<\/a><\/strong><\/p>\n<p><b>A quick 2 minutes demo<\/b><span style=\"font-weight: 400\">: <\/span><strong><a href=\"https:\/\/youtu.be\/sXTsvaIcSoE?si=GExVt1zk8LA-qmLY\">https:\/\/youtu.be\/sXTsvaIcSoE?si=GExVt1zk8LA-qmLY<\/a><\/strong><\/p><\/blockquote>\n<p><span style=\"font-weight: 400\">I built this stock portfolio tracker to solve a problem that has been on my mind for a long time &#8211; trying to see all my investments in one place. Like many casual investors, I had stocks scattered across Robinhood, Vanguard, and other platforms, making it tough to get a complete picture of each stock\u2019s performance in comparison to others.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">My solution has two main parts: a Java desktop app with a simple GUI where I can manually enter my stock details, and a Spring Boot API that does the backend calculations. When I input a stock, the backend grabs real-time price data and calculates my returns. I added some features like an in-memory cache to avoid hammering external APIs and implemented multithreading to handle lots of stock requests simultaneously without slowing things down. <\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">I designed it with future expansion in mind: both components heavily use various creational, structural and behavioral design patterns. I am also planning to add a web UI later down the road that will easily integrate with the API.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>GUI Screenshots:\u00a0\u00a0<\/strong><\/span><\/p>\n<p><a href=\"https:\/\/eportfolios.macaulay.cuny.edu\/rrahman\/files\/2025\/04\/Screenshot-2025-04-19-at-9.58.05\u202fPM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-548 size-full\" src=\"https:\/\/eportfolios.macaulay.cuny.edu\/rrahman\/files\/2025\/04\/Screenshot-2025-04-19-at-9.58.05\u202fPM.png\" alt=\"\" width=\"2196\" height=\"1520\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center\"><strong>Spring Boot API:<\/strong><\/p>\n<p><a href=\"https:\/\/eportfolios.macaulay.cuny.edu\/rrahman\/files\/2025\/04\/Screenshot-2025-04-19-at-9.59.17\u202fPM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-549 size-full\" src=\"https:\/\/eportfolios.macaulay.cuny.edu\/rrahman\/files\/2025\/04\/Screenshot-2025-04-19-at-9.59.17\u202fPM.png\" alt=\"\" width=\"2394\" height=\"2004\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Github repository for JAVA GUI: https:\/\/github.com\/reazwrahman\/stock-manager-gui Github repository for Spring Boot REST API: https:\/\/github.com\/reazwrahman\/stock-manager-api API is self-hosted at: https:\/\/stock-manager.reaz-projects.uk\/usage A quick 2 minutes demo: https:\/\/youtu.be\/sXTsvaIcSoE?si=GExVt1zk8LA-qmLY I built this stock portfolio tracker to solve a problem that has been on my mind for a long time &#8211; trying to see all my investments in one place. [&hellip;]<\/p>\n","protected":false},"author":605,"featured_media":547,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"portfolio_post_id":0,"portfolio_citation":"","portfolio_annotation":"","openlab_post_visibility":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-546","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-projects"],"_links":{"self":[{"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/posts\/546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/users\/605"}],"replies":[{"embeddable":true,"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/comments?post=546"}],"version-history":[{"count":0,"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/posts\/546\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/media\/547"}],"wp:attachment":[{"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/media?parent=546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/categories?post=546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/openlab.macaulay.cuny.edu\/reazwrahman\/wp-json\/wp\/v2\/tags?post=546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}