Projects

A selection of full-stack projects I've built and shipped end to end. Each one links to its source code or a live demo.

RealMon GO

Full-stack

Location-based nature-observation game · Solo full-stack project · 2025–2026

Java 17 Spring Boot 3 MySQL React Native (Expo) TypeScript OpenAI API iNaturalist API Docker

A Pokémon-GO-style game played in the real world: players photograph plants and animals, a computer-vision pipeline identifies the species, and every catch is geotagged and collected into a personal deck — driving daily quests, in-game coins, a community feed, and push notifications.

  • Built both halves solo: a multi-module Spring Boot REST API (JWT auth, MapStruct/Lombok, Swagger/OpenAPI contract) and an Expo/React Native client in strict TypeScript, which I migrated from JavaScript mid-project once the API contracts stabilised.
  • Integrated three external services: iNaturalist for species data and computer-vision identification, OpenAI for AI-generated "creature lore" (cache-aside design so the paid API call runs at most once per species), and Expo Push for notifications dispatched only after the database transaction commits.
  • Engineered the scan pipeline end to end: camera capture → server-side JPEG recompression to ≤300 KB → CV identification → find-or-create persistence keyed by taxon ID to eliminate duplicate species rows.
  • Implemented geospatial discovery with Haversine distance filtering, merging local observations with live iNaturalist sightings, and throttled map refetching on the client.
  • Ran it like a team project: ~30 merged PRs with templates, Dependabot, a Dockerised local stack, Railway deployment, and full technical documentation including an honest security audit with a prioritised remediation roadmap.

DineFlex

Live demo

Restaurant discovery & booking platform · Solo full-stack project · 2025–2026

Java 17 Spring Boot 3 PostgreSQL React 18 TypeScript Vite TanStack Query Tailwind CSS Docker GitHub Actions

A restaurant-discovery and table-reservation platform for Ireland built around Early Bird and Last Minute dining deals: browse and filter venues, check slot availability by date on an interactive calendar, book a table, and receive a confirmation code.

  • Designed a decoupled production deployment: a Dockerised Spring Boot API on Render (PostgreSQL) and a React/TypeScript SPA on Vercel, bridged by a strict CORS allow-list and a stateless JWT scheme.
  • Implemented three authentication paths: email/password with BCrypt hashing, a backend-driven Google OAuth2 flow with automatic account provisioning, and a one-click demo login so the live demo works without credentials.
  • Built the booking engine to consume availability slots server-side as the anti-double-booking mechanism, and documented the remaining race condition with the locking strategies (pessimistic lock / conditional update / unique constraint) to close it.
  • Established a real test culture: JUnit 5 / Mockito / MockMvc suites across controllers, services, and security components with JaCoCo coverage on the backend, and Vitest + Testing Library specs covering the API layer, interceptors, and key components on the frontend.
  • Set up CI/CD with GitHub Actions (migrated from Jenkins) and externalised all environment-specific configuration so the same artifacts run locally and in production.
© 2026 Chang He
Built with Astro and the Astrofy template.