Full-stack software engineer with a product mindset, working across web platforms, mobile apps, applied AI, games, XR, and performance-minded systems.
I turn product ideas into working software across modern web applications, reliable backend systems, mobile products, production AI pipelines, real-time game systems, and interactive 3D experiences. My background includes model training and quantization, inference API delivery, full-stack product development, FiveM server infrastructure, React and TypeScript applications, Lua gameplay systems, database-backed tools, and performance-minded engineering across client and server environments.
- Build full-stack web applications with React, TypeScript, and modern frontend tooling
- Develop backend systems, APIs, database-driven features, and production workflows
- Train, fine-tune, quantize, and deploy AI models through reliable inference APIs
- Build cross-platform mobile apps and on-device machine-learning experiences
- Create FiveM resources, NUI interfaces, server systems, and gameplay infrastructure
- Design interactive experiences using 3D, motion, and game-focused technologies
- Improve performance, reliability, maintainability, and developer experience
This portfolio highlights selected projects across software, web, and game development, including:
- Lead development for FiveM roleplay and infrastructure projects
- Open-source React Three Fiber physics libraries
- Mobile and web applications with modern UI systems
- Game tooling, server systems, and experimental software projects
React, TypeScript, JavaScript, Svelte, Lua, SQL, C#, C++, Rust, Python, Go, Tailwind CSS, Three.js, React Native, Node.js, TensorFlow, YOLO, MariaDB, MongoDB, PostgreSQL, and FiveM/NUI development.
I am interested in opportunities where strong engineering and thoughtful product development overlap. I enjoy roles that involve ownership, problem solving, system design, performance optimization, and building tools or experiences that people actually use.
I am especially well-suited for work involving:
- Full-stack application development
- AI/ML engineering, model optimization, and inference systems
- Mobile application development and on-device ML
- Frontend engineering and interface architecture
- Game, XR, or real-time interactive systems
- Backend and database-driven product features
- Developer tools, internal platforms, and technical product work
Email: jaystack.dev@gmail.com
GitHub: https://github.com/HyperExtendedReality
Install dependencies with bun install, then run bun run dev and open
http://localhost:8080/jaystack.dev/. The existing GitHub Pages base path is retained.
Run bun run build for a production build, bun run lint for lint checks, and
bunx tsc -p tsconfig.app.json --noEmit for type checking.
src/pages/portfolio.cssdefines the editorial layout, responsive sizing, and 2D artwork.src/components/AssemblyLine.tsxbuilds the Three.js software factory. Scroll or select Design / Connect / Ship to move a product through articulated robot arms. It supports pointer tilt, pause, reduced motion, off-screen rendering suspension and GPU cleanup.src/components/Projects.tsxcontains project copy and links, plus the keyboard-accessible FungEye demo dialog. The demo uses sample screens rather than live camera inference.src/components/Skills.tsxcontains the expandable expertise panels.src/components/Contact.tsxretains the existing EmailJS contact integration. Local verification does not send real messages.- Optimized WebP screenshots live alongside the original PNG assets.
Pip is the waving robot in the factory and the floating chat launcher. Its native chat dialog supports keyboard focus, Escape, source links, short multi-turn conversations and cancellation. Without an AI connection it explicitly shows saved portfolio notes; those cards are not generated AI answers.
src/data/portfolio-knowledge.json is the reviewed knowledge supplied to the model
on every request. Update it when project descriptions or availability change.
facts is visible in reference cards; optional constraints guides the model.
Unknown salary, work authorization, dates, credentials and project metrics must
be referred to Jay. Prompt instructions reduce hallucinations but cannot guarantee
factual correctness; live model answers still need evaluation.
- Use Node 22 or newer for the chat commands. Install the existing dependencies.
- Copy
.env.exampleto.env.localand setOPENAI_API_KEYlocally. Never put the key in aVITE_variable or commit it. No new dependency is required. - Run
npm run chat:devin one terminal andnpm run devin another. Vite proxies/api/chatto port 8787. Open Pip; the header should say “AI connected”. npm run test:chattests validation, source mapping, errors and limits using a stubbed provider. It does not spend API credits or verify live answer quality.
The backend uses OpenAI's Responses API
with structured output,
gpt-4.1-mini by default, and store: false. The server holds the API key; the
browser receives only answer text and allowlisted source links. It does not log
or persist conversations. Messages are still sent to OpenAI for generation;
provider retention rules apply. Conversation state is held in the current tab.
GitHub Pages continues to serve the static site. Deploy server/chat.mjs and the
knowledge JSON with the project dependencies to a Node-capable HTTPS host, using
npm run chat:start. Set server environment variables:
OPENAI_API_KEYand optionallyOPENAI_MODEL.HOST=0.0.0.0and the hosting platform'sPORT.CHAT_ALLOWED_ORIGINSto the exact portfolio origin(s), separated by commas, with no path or trailing slash. The default only permits local development.
Set the GitHub repository variable VITE_CHAT_API_URL to the deployed HTTPS URL
ending in /api/chat, then rebuild the frontend. The workflow passes this public
URL into Vite. Do not add the API key to GitHub Pages build variables. Leave the
URL unset to retain reference-only mode.
The endpoint has 24 KB body limits, 1,200-character questions, a 20-second provider timeout, four concurrent requests, 12 requests per 10 minutes per socket IP, and 120 total requests per hour per process. Forwarding headers are not trusted; a reverse proxy therefore shares one IP quota. These are modest single-instance limits, not authentication: configure provider spend limits and host-level abuse protection before public use, and shared quotas if scaling to multiple replicas.
Before publishing, test real questions about FungEye, full-stack work, XR, follow-up references, and unknown details such as salary. Confirm that it cites supporting projects and does not invent a commercial XR release or credentials.