[{"_id":"6680eec7de9a1103d34b9002","name":"Portfolio Website","order":0,"description":"My portfolio website showcases my projects and skills","image":"images/website.png","link":"https://joshsj89.github.io","tech":["JavaScript","TypeScript","React","HTML","CSS"]},{"_id":"6680eec7de9a1103d34b9003","name":"My API","order":1,"description":"My API is connected to a database that stores files and information displayed on my portfolio website. It hosts a Content Management System, allowing me to add, edit, and delete projects and skills in a user-friendly manner","image":"images/api.png","link":"https://joshsapi.com","tech":["JavaScript","TypeScript","Node.js","Express.js","MongoDB","Mongoose","HTML","CSS"]},{"_id":"6680eec7de9a1103d34b9004","name":"ChordMemo","order":2,"description":"ChordMemo is your go-to app for noting down and organizing chord progressions, whether they're from your favorite songs or your own musical creations","image":"images/chordmemo-shortened.png","link":"https://joshsj89.github.io/ChordMemo","tech":["Flutter","Dart","JavaScript","TypeScript","React Native","Expo"]},{"_id":"689d8ca4cd0a0ce5d45f57d2","name":"Portuguese for Mozambican Mothers – A Language Empowerment App","order":3,"description":"This offline-first mobile app teaches Portuguese to non-literate mothers in rural Mozambique through visual and auditory learning, accommodating users with no reading or technology experience","image":"images/mozambique_app.png","link":"https://scholarcommons.scu.edu/cseng_senior/330/","tech":["Flutter","Dart","JavaScript","Firebase"]},{"_id":"6746f505ae4f3ddbba9caea2","name":"Littercator: The Litter Locator","order":4,"description":"Littercator is a web application that uses traffic cameras to monitor litter, aid cities in identifying trash hotspots, optimize trash bin locations, and improve waste management efficiency.","image":"images/littercator.png","link":"https://devpost.com/software/hilairy","tech":["JavaScript","React","Node.js","Express.js","HTML","CSS","Amazon EC2"]},{"_id":"6680eec7de9a1103d34b9005","name":"Roots: Plan(t) Your Routes","order":5,"description":"Roots is the ultimate solution for anyone on the quest for the perfect place to call home! Specify your preferred locations, and let Roots revolutionize your home-searching experience by mapping potential houses, apartments, and more with up-to-date information","image":"images/roots_2.png","link":"https://devpost.com/software/roots-q67mcu","tech":["JavaScript","Node.js","Express.js","HTML","CSS"]},{"_id":"6680eec7de9a1103d34b9006","name":"Power Soccer Nexus","order":6,"description":"Power Soccer Nexus is an online platform dedicated to empowering individuals with disabilities through power soccer","image":"images/power_soccer_nexus.png","link":"https://devpost.com/software/power-soccer-nexus","tech":["JavaScript","React","HTML","CSS","Firebase"]},{"_id":"689d62f6cd0a0ce5d45f574c","name":"Strings","order":7,"description":"Strings is a word-search-style game that similar to NYT Strands.","image":"images/strings.png","link":"https://strings.wuaze.com/","tech":["JavaScript","PHP","HTML","CSS","SQL"]},{"_id":"689d70d7cd0a0ce5d45f5798","name":"Human-AI Interactions Prisoner's Dilemma Game","order":8,"description":"This web app is for a research project on how human interact with AI chatbots with different personalities","image":"images/hai_web_app.png","link":"https://human-ai.netlify.app/","tech":["JavaScript","React","Node.js","Express.js","MongoDB","HTML","CSS","Figma"]},{"_id":"689dbc9fcd0a0ce5d45f583b","name":"ClassTrack","order":9,"description":"ClassTrack is an extension that populates your Google Calendar based on informmation from class syllabi","image":"images/classtrack.png","link":"https://github.com/joshsj89/ClassTrack","tech":["React","JavaScript","TypeScript","Python","Flask","Gemini API","Google Calendar API"]},{"_id":"669e5c573968f1b41b06053a","name":"SCUMyDegree","order":10,"description":"SCUMyDegree is a web application that helps students plan their courses and visualize their degree progress","image":"images/scumydegree.png","link":"https://scumydegree-f4ed8.web.app","tech":["JavaScript","React","Firebase","HTML","CSS","Figma"]},{"_id":"6680eec7de9a1103d34b9007","name":"Piecekeeper","order":11,"description":"Piecekeeper is a top-down 3D horror game with the goal of having one game mechanic influence another (i.e. the player's gun is a weapon and the bullets are a light source). One must rely on the dual-purpose mechanic along with sound to beat the game","image":"images/piecekeeper.png","link":"https://greenhouse-gamedev.itch.io/piecekeeper","tech":["Unity","C#"]},{"_id":"6680eec7de9a1103d34b9008","name":"Heartwood","order":12,"description":"Heartwood is a cozy 3D first-person walking simulator game based in the Pacific Northwest. The main mechanic is to take polaroid photos of viewpoints and see the said areas in the past","image":"images/heartwood2.png","link":"https://greenhouse-gamedev.itch.io/heartwood","tech":["Unity","C#"]},{"_id":"6680eec7de9a1103d34b9009","name":"Polaris","order":13,"description":"Polaris is a 2D game that teaches players about ocean pollution solutions through gameplay mechanics and messaging","image":"images/polaris.png","link":"https://greenhouse-gamedev.itch.io/polaris","tech":["Unity","C#"]},{"_id":"6680eec7de9a1103d34b900a","name":"Canvas Module PDF Downloader","order":14,"description":"A browser extension that can download all PDFs from a Canvas module either individually or as a combined file","image":"images/canvas-module-pdf-downloader.png","link":"https://github.com/joshsj89/Canvas-Module-PDF-Downloader","tech":["JavaScript","TypeScript","HTML"]},{"_id":"6680eec7de9a1103d34b900b","name":"Sunken Cost - Roblox Hack 1st Place Winner","order":15,"description":"Sunken Cost is a sinking ship survival game. With the hackathon theme being \"Time is Running Out\", the implicit timer is the rising water level. The player needs to keep the water level low, fix the ships, and keep as many crates as possible","image":"images/sunken_cost.png","link":"https://devpost.com/software/sunken-cost","tech":["Roblox Studio","Lua"]},{"_id":"6680eec7de9a1103d34b900c","name":"CSV Manager","order":16,"description":"Module that allows one to read from, write to, and manage a CSV file","image":"images/csv-manager.png","link":"https://github.com/joshsj89/CSV-Manager","tech":["JavaScript","TypeScript","Node.js"]},{"_id":"6680eec7de9a1103d34b900d","name":"JPEG Filename Date Stamper","order":17,"description":"Modifies the EXIF data of JPEG files by extracting the date/time from the filename and updating the EXIF tags","image":"images/jpeg-filename-date-stamper.png","link":"https://github.com/joshsj89/JPEG-Filename-Date-Stamper","tech":["JavaScript","TypeScript","Node.js"]},{"_id":"6680eec7de9a1103d34b900e","name":"JPEG Time Mismatch Fixer","order":18,"description":"Fixes the time discrepancy between the photo's time and real time","image":"images/jpeg-time-mismatch-fixer.png","link":"https://github.com/joshsj89/JPEG-Time-Mismatch-Fixer","tech":["JavaScript","Node.js"]},{"_id":"6680eec7de9a1103d34b900f","name":"Anchor: Endless Possibilities","order":19,"description":"Created a high school yearbook over the pandemic and served as the Editor-in-Chief and the main photographer","image":"images/yearbook_3.png","link":"","tech":["Adobe Photoshop","LumaPix FotoFusion"]}]