[{"data":1,"prerenderedAt":190},["ShallowReactive",2],{"portfolio-grid":3,"portfolio-case-study":138,"portfolio-dialog":164},{"id":4,"extension":5,"meta":6,"projects":7,"stem":136,"__hash__":137},"portfolio\u002Fportfolio.json","json",{},[8,54,81,103,113,124],{"id":9,"slug":10,"title":11,"client":11,"category":12,"thumbnail":13,"shortDesc":14,"description":15,"technologies":16,"year":28,"featured":29,"published":29,"status":30,"highlights":31,"deliverables":38,"roadmap":50},1,"cricketmania","CricketMania","saas","\u002Fimages\u002Fportfolio\u002Fcricketmania.jpg","Full-stack cricket venue booking platform — web, NestJS API, and React Native app with OTP auth and real-time slot locking.","CricketMania connects cricket players with bookable venues and gives venue owners a complete digital operations hub. Players browse venues by city, compare pitch availability and hourly rates, and book time slots. Owners onboard venues with multiple pitches, set day-specific operating hours, manage image galleries, and handle bookings through a secure role-based system.\n\nThe platform spans three deliverables: a Next.js 16 web frontend (App Router, React 19, Tailwind CSS v4), a production NestJS backend with PostgreSQL\u002FPrisma (booking engine, S3 media, Twilio OTP, JWT RBAC), and a React Native Expo mobile app with glassmorphic UI for both Player and Owner roles.\n\nThe backend implements concurrent slot locking, booking lifecycle states (PENDING → CONFIRMED → COMPLETED), pricing snapshots, guest bookings, and owner-scoped venue management. The mobile app delivers venue discovery feeds, owner dashboards, gallery upload\u002Freorder, and secure token storage via Expo Secure Store.",[17,18,19,20,21,22,23,24,25,26,27],"TypeScript","Next.js","React","NestJS","PostgreSQL","Prisma","React Native","Expo","AWS S3","Twilio","JWT",2025,true,"in-progress",[32,33,34,35,36,37],"Concurrent booking engine with slot locking to prevent double-booking","Multi-pitch venues with per-day operating hours","Dual-role RBAC: Player vs Venue Owner with ownership verification","Twilio OTP authentication and JWT sessions","S3-backed media gallery with upload, reorder, and batch delete","React Native app with cinematic animations and owner management flows",[39,43,47],{"name":40,"stack":41,"status":42},"Web Frontend","Next.js 16, React 19, Tailwind CSS v4, TypeScript","foundation",{"name":44,"stack":45,"status":46},"API Backend","NestJS, PostgreSQL, Prisma, AWS S3, Twilio","shipped",{"name":48,"stack":49,"status":46},"Mobile App","React Native, Expo Router, NativeWind, Reanimated",[51,52,53],"Live match dashboard (WebSocket scores & commentary)","Player & team profile pages","Fantasy league auth and state management",{"id":55,"slug":56,"title":57,"client":58,"category":59,"thumbnail":60,"shortDesc":61,"description":62,"technologies":63,"year":28,"featured":29,"published":29,"status":46,"highlights":74},2,"map-builder","Map Builder","Internal Tool","mapping","\u002Fimages\u002Fportfolio\u002Fmap-builder.jpg","Enterprise geospatial platform — Mapbox frontend, Django\u002FPostGIS backend, GeoServer automation, and AI-assisted spatial tools.","Map Builder is a full-stack geospatial application for interactive mapping, dataset management, and spatial analysis. Users upload vector and raster data, visualize layers on high-performance Mapbox GL maps, draw and annotate geometries, and save project workspaces.\n\nThe Django backend processes shapefiles and GeoTIFFs via GDAL\u002FRasterio, stores geometries in PostGIS, and automatically provisions GeoServer workspaces and WMS\u002FWFS layers. An OpenAI-powered assistant interprets natural-language spatial queries. Stripe handles subscriptions and usage-based billing behind JWT-protected APIs.",[19,64,65,66,67,68,21,69,70,71,25,72,73],"Vite","Redux Toolkit","Mapbox GL JS","Django","Django REST Framework","PostGIS","GeoServer","GDAL","Stripe","OpenAI",[75,76,77,78,79,80],"End-to-end geospatial ETL pipeline (GDAL, Rasterio → PostGIS)","Automated GeoServer layer publishing via REST API","Mapbox GL JS + Draw + Fabric.js for mapping and annotations","AI spatial assistant (OpenAI \u002F pydantic-ai)","Stripe subscription and secure JWT access","Project workspaces with persisted layers, zoom, and drawings",{"id":82,"slug":83,"title":84,"client":84,"category":12,"thumbnail":85,"shortDesc":86,"description":87,"technologies":88,"year":28,"featured":89,"published":29,"status":46,"highlights":90,"deliverables":97},3,"travelista","Travelista","\u002Fimages\u002Fportfolio\u002Ftravelista.jpg","B2B travel agency platform — React dashboard, Django multi-tenant API, and mobile app for packages, groups, bookings, and payments.","Travelista streamlines travel agency operations: company onboarding, itinerary packaging, group tour administration, customer CRM, booking workflows, and payment reconciliation. The React 19 dashboard uses Redux Toolkit and RTK Query with cookie-based JWT auth, silent token refresh, and a mandatory company setup wizard before dashboard access.\n\nThe Django 5 backend implements multi-tenant company profiles, a hierarchical package engine (countries → cities → accommodations with dynamic pricing JSON), group capacity tracking, customer profiling with agency links, booking status workflows, and offline\u002Fgateway payment verification with S3 proof uploads. OpenAPI docs are generated via drf-spectacular.",[19,64,65,67,68,21,25,27,72],false,[91,92,93,94,95,96],"Multi-tenant B2B company onboarding and verification workflow","Hierarchical package builder with destinations, accommodations, and galleries","Group tour capacity management and member assignment","Booking engine with walk-in vs company-customer source tracking","Payment ledger: offline proofs, Stripe gateway hooks, status verification","Protected routes, silent JWT refresh, Redux Persist state",[98,101],{"name":99,"stack":100,"status":46},"Agency Dashboard","React 19, Vite, Tailwind CSS 4, RTK Query",{"name":44,"stack":102,"status":46},"Django 5, DRF, PostgreSQL, AWS S3",{"id":104,"slug":105,"title":106,"client":106,"category":12,"thumbnail":107,"shortDesc":108,"description":109,"technologies":110,"year":28,"featured":89,"published":89},4,"spatial-estate","Spatial Estate","\u002Fimages\u002Fportfolio\u002Fspatial-estate.jpg","Real estate marketing application with map-based property discovery.","Built a real estate marketing platform with an interactive map interface for property discovery, radius-based filtering, neighborhood insights, and agent lead management. Combines spatial data with modern property listing workflows.",[17,111,69,112],"Vue.js","Node.js",{"id":114,"slug":115,"title":116,"client":116,"category":117,"thumbnail":118,"shortDesc":119,"description":120,"technologies":121,"year":28,"featured":89,"published":89},5,"tailorme","TailorMe","ecommerce","\u002Fimages\u002Fportfolio\u002Ftailorme.jpg","Custom tailoring management system with online ordering and appointment booking.","Developed an end-to-end tailoring management system covering customer measurement profiles, online order placement, appointment scheduling, and order status tracking. Designed for small-to-medium tailoring businesses moving operations online.",[122,111,112,123],"JavaScript","MySQL",{"id":125,"slug":126,"title":127,"client":128,"category":12,"thumbnail":129,"shortDesc":130,"description":131,"technologies":132,"year":28,"featured":89,"published":29,"status":46},6,"location-tech-portfolio","Location Tech Portfolio","Location Technologies","\u002Fimages\u002Fportfolio\u002Fportfolio.jpg","Company portfolio website built with Nuxt 3, Tailwind CSS v4, and GSAP.","Designed and built the company's own portfolio website using Nuxt 3, Tailwind CSS v4, @nuxt\u002Fcontent, and GSAP animations. Features scroll-reveal effects, animated stats, filterable portfolio grid, project detail pages, and a fully responsive layout from mobile to desktop.",[111,133,134,135],"Nuxt 3","Tailwind CSS","GSAP","portfolio","EQTxojK3sPaft3VAi-prRI4RtkY94Ph1etDg9Zfk2AU",{"id":4,"extension":5,"meta":139,"projects":140,"stem":136,"__hash__":137},{},[141,149,152,158,160,162],{"id":9,"slug":10,"title":11,"client":11,"category":12,"thumbnail":13,"shortDesc":14,"description":15,"technologies":142,"year":28,"featured":29,"published":29,"status":30,"highlights":143,"deliverables":144,"roadmap":148},[17,18,19,20,21,22,23,24,25,26,27],[32,33,34,35,36,37],[145,146,147],{"name":40,"stack":41,"status":42},{"name":44,"stack":45,"status":46},{"name":48,"stack":49,"status":46},[51,52,53],{"id":55,"slug":56,"title":57,"client":58,"category":59,"thumbnail":60,"shortDesc":61,"description":62,"technologies":150,"year":28,"featured":29,"published":29,"status":46,"highlights":151},[19,64,65,66,67,68,21,69,70,71,25,72,73],[75,76,77,78,79,80],{"id":82,"slug":83,"title":84,"client":84,"category":12,"thumbnail":85,"shortDesc":86,"description":87,"technologies":153,"year":28,"featured":89,"published":29,"status":46,"highlights":154,"deliverables":155},[19,64,65,67,68,21,25,27,72],[91,92,93,94,95,96],[156,157],{"name":99,"stack":100,"status":46},{"name":44,"stack":102,"status":46},{"id":104,"slug":105,"title":106,"client":106,"category":12,"thumbnail":107,"shortDesc":108,"description":109,"technologies":159,"year":28,"featured":89,"published":89},[17,111,69,112],{"id":114,"slug":115,"title":116,"client":116,"category":117,"thumbnail":118,"shortDesc":119,"description":120,"technologies":161,"year":28,"featured":89,"published":89},[122,111,112,123],{"id":125,"slug":126,"title":127,"client":128,"category":12,"thumbnail":129,"shortDesc":130,"description":131,"technologies":163,"year":28,"featured":89,"published":29,"status":46},[111,133,134,135],{"id":4,"extension":5,"meta":165,"projects":166,"stem":136,"__hash__":137},{},[167,175,178,184,186,188],{"id":9,"slug":10,"title":11,"client":11,"category":12,"thumbnail":13,"shortDesc":14,"description":15,"technologies":168,"year":28,"featured":29,"published":29,"status":30,"highlights":169,"deliverables":170,"roadmap":174},[17,18,19,20,21,22,23,24,25,26,27],[32,33,34,35,36,37],[171,172,173],{"name":40,"stack":41,"status":42},{"name":44,"stack":45,"status":46},{"name":48,"stack":49,"status":46},[51,52,53],{"id":55,"slug":56,"title":57,"client":58,"category":59,"thumbnail":60,"shortDesc":61,"description":62,"technologies":176,"year":28,"featured":29,"published":29,"status":46,"highlights":177},[19,64,65,66,67,68,21,69,70,71,25,72,73],[75,76,77,78,79,80],{"id":82,"slug":83,"title":84,"client":84,"category":12,"thumbnail":85,"shortDesc":86,"description":87,"technologies":179,"year":28,"featured":89,"published":29,"status":46,"highlights":180,"deliverables":181},[19,64,65,67,68,21,25,27,72],[91,92,93,94,95,96],[182,183],{"name":99,"stack":100,"status":46},{"name":44,"stack":102,"status":46},{"id":104,"slug":105,"title":106,"client":106,"category":12,"thumbnail":107,"shortDesc":108,"description":109,"technologies":185,"year":28,"featured":89,"published":89},[17,111,69,112],{"id":114,"slug":115,"title":116,"client":116,"category":117,"thumbnail":118,"shortDesc":119,"description":120,"technologies":187,"year":28,"featured":89,"published":89},[122,111,112,123],{"id":125,"slug":126,"title":127,"client":128,"category":12,"thumbnail":129,"shortDesc":130,"description":131,"technologies":189,"year":28,"featured":89,"published":29,"status":46},[111,133,134,135],1784198675860]