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.