[{"data":1,"prerenderedAt":209},["ShallowReactive",2],{"portfolio-grid":3,"portfolio-case-study":149,"portfolio-dialog":179},{"id":4,"extension":5,"meta":6,"projects":7,"stem":147,"__hash__":148},"portfolio\u002Fportfolio.json","json",{},[8,55,83,94,105,121,134],{"id":9,"slug":10,"title":11,"client":11,"category":12,"thumbnail":13,"liveUrl":14,"shortDesc":15,"description":16,"technologies":17,"year":29,"featured":30,"published":30,"status":31,"highlights":32,"deliverables":39,"roadmap":51},1,"sportsmania","SportsMania","saas","sportsmania.jpeg","https:\u002F\u002Fsportsmania.locationtechnologies.io","Full-stack sports venue booking platform — web, NestJS API, and React Native app with OTP auth and real-time slot locking.","SportsMania connects players with bookable sports 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.",[18,19,20,21,22,23,24,25,26,27,28],"TypeScript","Next.js","React","NestJS","PostgreSQL","Prisma","React Native","Expo","AWS S3","Twilio","JWT",2025,true,"in-progress",[33,34,35,36,37,38],"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",[40,44,48],{"name":41,"stack":42,"status":43},"Web Frontend","Next.js 16, React 19, Tailwind CSS v4, TypeScript","foundation",{"name":45,"stack":46,"status":47},"API Backend","NestJS, PostgreSQL, Prisma, AWS S3, Twilio","shipped",{"name":49,"stack":50,"status":47},"Mobile App","React Native, Expo Router, NativeWind, Reanimated",[52,53,54],"Live match dashboard (WebSocket scores & commentary)","Player & team profile pages","Fantasy league auth and state management",{"id":56,"slug":57,"title":58,"client":58,"category":12,"thumbnail":59,"liveUrl":60,"shortDesc":61,"description":62,"technologies":63,"year":29,"featured":69,"published":30,"status":47,"highlights":70,"deliverables":77},3,"travelista","Travelista","travellista.jpeg","https:\u002F\u002Ftravelista.locationtechnologies.io","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.",[20,64,65,66,67,22,26,28,68],"Vite","Redux Toolkit","Django","Django REST Framework","Stripe",false,[71,72,73,74,75,76],"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",[78,81],{"name":79,"stack":80,"status":47},"Agency Dashboard","React 19, Vite, Tailwind CSS 4, RTK Query",{"name":45,"stack":82,"status":47},"Django 5, DRF, PostgreSQL, AWS S3",{"id":84,"slug":85,"title":86,"client":86,"category":12,"thumbnail":87,"shortDesc":88,"description":89,"technologies":90,"year":29,"featured":69,"published":69},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.",[18,91,92,93],"Vue.js","PostGIS","Node.js",{"id":95,"slug":96,"title":97,"client":97,"category":98,"thumbnail":99,"shortDesc":100,"description":101,"technologies":102,"year":29,"featured":69,"published":69},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.",[103,91,93,104],"JavaScript","MySQL",{"id":106,"slug":107,"title":108,"client":108,"category":109,"thumbnail":110,"liveUrl":111,"shortDesc":112,"description":113,"technologies":114,"year":29,"featured":30,"published":30,"status":47,"highlights":116},7,"maplytics","MapLytics","mapping","maplytics.jpeg","https:\u002F\u002Fmaplytics.locationtechnologies.io","Geospatial analytics workspace — interactive maps, spatial KPIs, and dashboard insights for location-driven decisions.","MapLytics turns raw geospatial data into actionable analytics. Teams explore layers on interactive maps, filter by region and time, and surface KPIs that connect place to performance.\n\nThe product pairs a modern web mapping UI with a PostGIS-backed analytics pipeline so operators can inspect coverage, demand, and operational patterns without exporting data into separate BI tools. Role-aware access and shareable views keep stakeholders aligned on the same spatial picture.",[20,115,66,67,22,92,18],"Mapbox GL JS",[117,118,119,120],"Interactive map workspace with layered geospatial views","Spatial KPIs and filters for region- and time-based analysis","PostGIS-backed analytics pipeline for location insights","Shareable dashboard views for stakeholder alignment",{"id":122,"slug":123,"title":124,"client":124,"category":109,"thumbnail":125,"shortDesc":126,"description":127,"technologies":128,"year":29,"featured":69,"published":30,"status":47,"highlights":129},8,"geoguard","GeoGuard","geoguard.png","Location safety platform — geofences, live tracking, and alert workflows across web and mobile.","GeoGuard helps organizations monitor people and assets with geofenced zones, live location updates, and configurable alert workflows. Operators manage zones and responders from the web console while field users stay connected through a React Native mobile app.\n\nThe Django REST \u002F PostGIS backend stores spatial boundaries and event history, issues JWT-secured APIs, and triggers Twilio notifications when crossings or safety thresholds are breached. React dashboards surface live maps, incident timelines, and response status so teams can act quickly.",[67,92,20,24,28,27],[130,131,132,133],"Geofence management with PostGIS spatial boundaries","Live tracking dashboards for operators and responders","JWT-secured APIs across web and React Native clients","Twilio-powered alert and notification workflows",{"id":135,"slug":136,"title":137,"client":137,"category":12,"thumbnail":138,"shortDesc":139,"description":140,"technologies":141,"year":29,"featured":69,"published":30,"status":47,"highlights":142},9,"personal-finance-tracker","Personal Finance Tracker","personalfinancetracker.png","Personal finance SaaS — budgets, expense tracking, and clear spending insights in one web app.","Personal Finance Tracker helps individuals organize income, expenses, and budgets with a clean dashboard and category-level insights. Users log transactions, set monthly targets, and review trends so spending decisions stay grounded in real data.\n\nBuilt as a modern SaaS web app, it emphasizes fast entry flows, readable charts, and secure account access — giving households a lightweight alternative to spreadsheet sprawl without sacrificing clarity.",[18,20,93,22],[143,144,145,146],"Budget targets with category-level expense tracking","Dashboard insights for spending trends over time","Fast transaction entry and readable financial summaries","Secure multi-user SaaS account model","portfolio","KWPgHYktJ4hVZiGMNedyOp4JmlVt0pS6IZW16lqvz-c",{"id":4,"extension":5,"meta":150,"projects":151,"stem":147,"__hash__":148},{},[152,160,166,168,170,173,176],{"id":9,"slug":10,"title":11,"client":11,"category":12,"thumbnail":13,"liveUrl":14,"shortDesc":15,"description":16,"technologies":153,"year":29,"featured":30,"published":30,"status":31,"highlights":154,"deliverables":155,"roadmap":159},[18,19,20,21,22,23,24,25,26,27,28],[33,34,35,36,37,38],[156,157,158],{"name":41,"stack":42,"status":43},{"name":45,"stack":46,"status":47},{"name":49,"stack":50,"status":47},[52,53,54],{"id":56,"slug":57,"title":58,"client":58,"category":12,"thumbnail":59,"liveUrl":60,"shortDesc":61,"description":62,"technologies":161,"year":29,"featured":69,"published":30,"status":47,"highlights":162,"deliverables":163},[20,64,65,66,67,22,26,28,68],[71,72,73,74,75,76],[164,165],{"name":79,"stack":80,"status":47},{"name":45,"stack":82,"status":47},{"id":84,"slug":85,"title":86,"client":86,"category":12,"thumbnail":87,"shortDesc":88,"description":89,"technologies":167,"year":29,"featured":69,"published":69},[18,91,92,93],{"id":95,"slug":96,"title":97,"client":97,"category":98,"thumbnail":99,"shortDesc":100,"description":101,"technologies":169,"year":29,"featured":69,"published":69},[103,91,93,104],{"id":106,"slug":107,"title":108,"client":108,"category":109,"thumbnail":110,"liveUrl":111,"shortDesc":112,"description":113,"technologies":171,"year":29,"featured":30,"published":30,"status":47,"highlights":172},[20,115,66,67,22,92,18],[117,118,119,120],{"id":122,"slug":123,"title":124,"client":124,"category":109,"thumbnail":125,"shortDesc":126,"description":127,"technologies":174,"year":29,"featured":69,"published":30,"status":47,"highlights":175},[67,92,20,24,28,27],[130,131,132,133],{"id":135,"slug":136,"title":137,"client":137,"category":12,"thumbnail":138,"shortDesc":139,"description":140,"technologies":177,"year":29,"featured":69,"published":30,"status":47,"highlights":178},[18,20,93,22],[143,144,145,146],{"id":4,"extension":5,"meta":180,"projects":181,"stem":147,"__hash__":148},{},[182,190,196,198,200,203,206],{"id":9,"slug":10,"title":11,"client":11,"category":12,"thumbnail":13,"liveUrl":14,"shortDesc":15,"description":16,"technologies":183,"year":29,"featured":30,"published":30,"status":31,"highlights":184,"deliverables":185,"roadmap":189},[18,19,20,21,22,23,24,25,26,27,28],[33,34,35,36,37,38],[186,187,188],{"name":41,"stack":42,"status":43},{"name":45,"stack":46,"status":47},{"name":49,"stack":50,"status":47},[52,53,54],{"id":56,"slug":57,"title":58,"client":58,"category":12,"thumbnail":59,"liveUrl":60,"shortDesc":61,"description":62,"technologies":191,"year":29,"featured":69,"published":30,"status":47,"highlights":192,"deliverables":193},[20,64,65,66,67,22,26,28,68],[71,72,73,74,75,76],[194,195],{"name":79,"stack":80,"status":47},{"name":45,"stack":82,"status":47},{"id":84,"slug":85,"title":86,"client":86,"category":12,"thumbnail":87,"shortDesc":88,"description":89,"technologies":197,"year":29,"featured":69,"published":69},[18,91,92,93],{"id":95,"slug":96,"title":97,"client":97,"category":98,"thumbnail":99,"shortDesc":100,"description":101,"technologies":199,"year":29,"featured":69,"published":69},[103,91,93,104],{"id":106,"slug":107,"title":108,"client":108,"category":109,"thumbnail":110,"liveUrl":111,"shortDesc":112,"description":113,"technologies":201,"year":29,"featured":30,"published":30,"status":47,"highlights":202},[20,115,66,67,22,92,18],[117,118,119,120],{"id":122,"slug":123,"title":124,"client":124,"category":109,"thumbnail":125,"shortDesc":126,"description":127,"technologies":204,"year":29,"featured":69,"published":30,"status":47,"highlights":205},[67,92,20,24,28,27],[130,131,132,133],{"id":135,"slug":136,"title":137,"client":137,"category":12,"thumbnail":138,"shortDesc":139,"description":140,"technologies":207,"year":29,"featured":69,"published":30,"status":47,"highlights":208},[18,20,93,22],[143,144,145,146],1788598623108]