{"data":{"featured":{"edges":[{"node":{"frontmatter":{"title":"WaveLens","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAACaUlEQVQoz02S62vTYBTGM5ekadI2l7W5NE2bNOmb25ukSdc2zWXdjVFkc7IpOME5hW0yUccYqBSE+cG/W9q4TjgfzvPy/jic5zkILpq4aGIC4MFQtMeFxEWTaNq1jk+1vUrbe3qULNqItOlzcbRT9SfICq4qkFZ9QrKIpk007bLsUAosGkwAGN8rilRgfZBzUVbzkyUsAEK2y3q/pAfrTRth1TVOQxgVbRglycIEQLQcUg1INaA6QVnxaDemg5QOEqQkWc/qhuSMX5x/2n99cfrhJp29mhyc7p+86/gZwmpow5CD/Ojy1ts7AflhzYr5zV3GmzzCDUOwRhef769uf97/+nN2+e36bn59Nz+/uXfTGcJ0OHNkbh0JwZT3tzZgxtgTsg2JtltM1mWYfPz6/cuPh7dXt4qfyTDh9EiGCauH63W90g1ZN5UHu2p8oE1mfH+baEGs0UMKtyoKbIJRXe3Xu9HSJ4dqeyXRQvmFVVUtrPs57+dSuC32tzfctKxAXAAILgKU05h+6s/nwe8HaXbMa2G146F8718QfI/SQs7LaXtSs+KaGbMwJzs+JgCEUCNchhVzqJ2c6W/O+fFuteUSTXuVLSYAUoEsGFW7IaUGlBpUewNCdhaTSTMjzaysx+sbYK3SQus6tgRWcMGjDWMVNdow8OUHhARpuZdUnC1uOGO9rCzbxZ3goll6PJiFlKz/ZUmynuCaM9XyY3FwwHYjthvSaiDBhAebjNZnuyGj9XlrzJujQnJ6RLXcxc4FTDvTzcP3ev5SglnTTVg9MoZ73WhHtGMZppwxaHuZPtgR7FhyE8mZFPBfHk5wwYTmpeQAAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/63646d74976926d86c49a09038122fc0/d2194/wavelens-homepage.png","srcSet":"/static/63646d74976926d86c49a09038122fc0/cebcc/wavelens-homepage.png 175w,\n/static/63646d74976926d86c49a09038122fc0/272cf/wavelens-homepage.png 350w,\n/static/63646d74976926d86c49a09038122fc0/d2194/wavelens-homepage.png 700w,\n/static/63646d74976926d86c49a09038122fc0/b50c4/wavelens-homepage.png 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/63646d74976926d86c49a09038122fc0/9aa63/wavelens-homepage.avif 175w,\n/static/63646d74976926d86c49a09038122fc0/e6db6/wavelens-homepage.avif 350w,\n/static/63646d74976926d86c49a09038122fc0/f47db/wavelens-homepage.avif 700w,\n/static/63646d74976926d86c49a09038122fc0/8fee6/wavelens-homepage.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/63646d74976926d86c49a09038122fc0/240e7/wavelens-homepage.webp 175w,\n/static/63646d74976926d86c49a09038122fc0/faefe/wavelens-homepage.webp 350w,\n/static/63646d74976926d86c49a09038122fc0/d5dc4/wavelens-homepage.webp 700w,\n/static/63646d74976926d86c49a09038122fc0/e2f1a/wavelens-homepage.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":438}}},"tech":["TypeScript","React Native","Expo","Supabase","PostgreSQL","GitHub Actions"],"github":"https://github.com/jabinx92/surf-app","external":"https://wavelens.expo.app"},"html":"<p>WaveLens is a cross-platform marketplace for booking local surf photographers and videographers. I built the product end to end, including authentication, creator onboarding and approvals, editable profiles and portfolios, availability, booking requests, messaging, notifications, reporting, and admin moderation. The backend uses Supabase with PostgreSQL migrations, row-level security, storage, and an Edge Function, while Expo powers the responsive web, iOS, and Android experience.</p>"}},{"node":{"frontmatter":{"title":"Rift Scout","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAABxElEQVQoz4WS227TQBCGQ1N713s+r9drO7ET0nCIME2jKo2LhITEbZ+Aa16BS16nT1k5hkDVIKSRdma138w/MztJJVfzSjdV5g1UEuUWR0/qgjUlW1SsrWhd4OhRbqHVQHCoJLYGSgEEn6SCY2do7qCWUAnkDA4ORz+kiB4Xg4MKh7yBWg6wFEirXzAQPOUsZQxwnjD6iqCpYIkSWR3IcigOlEw4SylNKQWCj+9HZzIe49W6+7DZbZu3b677u9svn7v7ve5Woe/Mdu33G9tdjQVP9gdOGC3aZnffv9ted/vb3ad+d7irbjax/1gduvLQ6c0ScH4eBoJfYDTJ4JSRC4ymBGdaQs4ThFJMBkwKoOQZOGUMOx2WTb6Ys8KLMogy8JjrWanryGN+8+Pb18ef778/TGF2Ev8bHvQwpFWmJJQCG02sIVZTZ6gzmZI4OFIFlNthtC9lp5wljCaMDsMf5k/TY5iwIUwoTTA5DfxMz38nAoIjZ6ASp8W8tGfw2AzS6qjZsMITZ7DRSKv/wcdPckmJCD4uWldXtiqLtonLVoT8kpJ/w5xhb2frVd7MoRSZUfH1or5aUWuBFKFt/KzOtMyer+oJY3A5WjrkOKoAAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/17dd03d42df20f6e143de122eea6149f/d2194/rift-scout.png","srcSet":"/static/17dd03d42df20f6e143de122eea6149f/cebcc/rift-scout.png 175w,\n/static/17dd03d42df20f6e143de122eea6149f/272cf/rift-scout.png 350w,\n/static/17dd03d42df20f6e143de122eea6149f/d2194/rift-scout.png 700w,\n/static/17dd03d42df20f6e143de122eea6149f/b50c4/rift-scout.png 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/17dd03d42df20f6e143de122eea6149f/9aa63/rift-scout.avif 175w,\n/static/17dd03d42df20f6e143de122eea6149f/e6db6/rift-scout.avif 350w,\n/static/17dd03d42df20f6e143de122eea6149f/f47db/rift-scout.avif 700w,\n/static/17dd03d42df20f6e143de122eea6149f/8fee6/rift-scout.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/17dd03d42df20f6e143de122eea6149f/240e7/rift-scout.webp 175w,\n/static/17dd03d42df20f6e143de122eea6149f/faefe/rift-scout.webp 350w,\n/static/17dd03d42df20f6e143de122eea6149f/d5dc4/rift-scout.webp 700w,\n/static/17dd03d42df20f6e143de122eea6149f/e2f1a/rift-scout.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":438}}},"tech":["React","TypeScript","Riot Games API","REST API"],"github":null,"external":"https://rift-scout-jabinx92.jabinx92.chatgpt.site/"},"html":"<p>Rift Scout turns a League of Legends Riot ID into an easy-to-read snapshot of a player's ranked journey. Search by player and region to explore rank, wins and losses, recent form, and champion performance—all in one focused dashboard.</p>"}},{"node":{"frontmatter":{"title":"Multi Mini Projects","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAP/aAAwDAQACEAMQAAAB2FaMrICf/8QAGhAAAgIDAAAAAAAAAAAAAAAAAQIAEhETM//aAAgBAQABBQIZsrG8HRANs//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABoQAAICAwAAAAAAAAAAAAAAAAABAhARIXH/2gAIAQEABj8Cexqnwk8V/8QAGhABAQACAwAAAAAAAAAAAAAAAREAECExQf/aAAgBAQABPyFTvDwmI851xoFYWMEYC9s1/9oADAMBAAIAAwAAABAIP//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/EGf/xAAWEQADAAAAAAAAAAAAAAAAAAABEBH/2gAIAQIBAT8QFX//xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhEEExgaH/2gAIAQEAAT8QcAT4JnvvEPCbE/bwMlFGbduDhtgBd9vH/9k="},"images":{"fallback":{"src":"/static/0868e19af9d79bc334ae343e84bb8c37/5a7a9/menu.jpg","srcSet":"/static/0868e19af9d79bc334ae343e84bb8c37/81770/menu.jpg 175w,\n/static/0868e19af9d79bc334ae343e84bb8c37/0b3a5/menu.jpg 350w,\n/static/0868e19af9d79bc334ae343e84bb8c37/5a7a9/menu.jpg 700w,\n/static/0868e19af9d79bc334ae343e84bb8c37/9a6e2/menu.jpg 1400w","sizes":"(min-width: 700px) 700px, 100vw"},"sources":[{"srcSet":"/static/0868e19af9d79bc334ae343e84bb8c37/96e31/menu.avif 175w,\n/static/0868e19af9d79bc334ae343e84bb8c37/c7b75/menu.avif 350w,\n/static/0868e19af9d79bc334ae343e84bb8c37/90158/menu.avif 700w,\n/static/0868e19af9d79bc334ae343e84bb8c37/2cc46/menu.avif 1400w","type":"image/avif","sizes":"(min-width: 700px) 700px, 100vw"},{"srcSet":"/static/0868e19af9d79bc334ae343e84bb8c37/37045/menu.webp 175w,\n/static/0868e19af9d79bc334ae343e84bb8c37/589aa/menu.webp 350w,\n/static/0868e19af9d79bc334ae343e84bb8c37/7140c/menu.webp 700w,\n/static/0868e19af9d79bc334ae343e84bb8c37/11091/menu.webp 1400w","type":"image/webp","sizes":"(min-width: 700px) 700px, 100vw"}]},"width":700,"height":367}}},"tech":["React","Javascript","HTML","CSS","Github Pages"],"github":"https://github.com/jabinx92/react-projects-master-final","external":"https://jabinx92.github.io/react-projects-master-final/"},"html":"<p>A culmination of mini projects I have completed in one page. These projects were heavily focused on functionality, as I found these mini-project excercises to be good for me to better my coding skills.\nHosted on <a href=\"https://pages.github.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Github Pages</a>.</p>"}}]}}}