A social adventure platform for discovering, creating, and sharing outdoor experiences.
RouteMate is a mobile app where people can discover outdoor destinations, create their own routes, and share their adventures with others. Think of it as a social layer on top of outdoor exploration — you can browse experiences shared by other users, log your own, and find new places worth going to.
It's a monorepo containing a Spring Boot REST API (api/) and a React Native mobile app built with Expo (mobile/).
This is a personal learning project — deliberately chosen to push me into two technologies I wanted to get more comfortable with: Spring Boot on the backend and React Native with Expo on the mobile side.
Jenventory (my other project) solved a real problem for someone I know, but I built it already knowing roughly how the pieces fit together. RouteMate is intentionally more ambitious — it's where I'm learning to think in mobile-first UX, work with maps and geolocation, and structure a Spring Boot API from a different angle than a store management tool.
⚠️ This project is a work in progress. Core features are partially built and the codebase is actively evolving.
- User Authentication — register, log in, and manage sessions via JWT
- Route / Destination Discovery — browse outdoor experiences shared by other users
Planned:
- Create & Share — post your own routes and adventures for others to find
- Social Feed — see what other adventurers are sharing
- Maps integration (Google Maps / Mapbox) for visual route display and exploration
- Location-based discovery — find routes near you
| Layer | Technology |
|---|---|
| Framework | Spring Boot |
| Language | Java 21 |
| Database | PostgreSQL |
| ORM | Spring Data JPA (Hibernate) |
| Auth | Spring Security + JWT |
| Build Tool | Maven |
| Layer | Technology |
|---|---|
| Framework | React Native + Expo |
| Routing | Expo Router |
| Language | TypeScript |
| Server State | TanStack Query |
| Maps (planned) | Google Maps / Mapbox |
routemate/
├── api/ # Spring Boot REST API
│ └── src/main/java/com/routemate/
│ ├── adventure/ # Adventure/route domain (controller, dto, entity, enums, mapper, repository, service)
│ ├── auth/ # JWT authentication and authorization
│ ├── common/ # Shared utilities (annotation, dto/response, entity, exception, mapper, pagination, storage, tag, util, validation)
│ ├── config/ # App configuration (CORS, JPA, Security, Web, Properties)
│ ├── user/ # User management
│ └── RoutemateApiApplication.java
│
└── mobile/ # React Native + Expo app
└── src/
├── api/ # API client and request functions
├── app/ # Expo Router app directory (screens/routes)
├── assets/ # Images, fonts, icons
├── components/ # Reusable UI components
├── constants/ # App-wide constants
├── context/ # React context providers
├── hooks/ # Custom React hooks
├── lib/ # Utilities and helpers
├── mock/ # Mock data used during UI development
├── queries/ # TanStack Query hooks
├── schema/ # Validation schemas
├── scripts/ # Build/dev scripts
├── styles/ # Shared styles
└── types/ # TypeScript type definitions
- Java 21+
- PostgreSQL
- Node.js 18+
- Expo CLI (
npm install -g expo-cli)
-
Navigate to the API directory:
cd api -
Create a PostgreSQL database:
CREATE DATABASE routemate_db;
-
Configure
application.propertieswith your credentials:spring.datasource.url=jdbc:postgresql://localhost:5432/routemate_db spring.datasource.username=your_username spring.datasource.password=your_password app.jwt.secret=your_jwt_secret app.jwt.expiration=86400000
-
Run the API:
./mvnw spring-boot:run
-
Navigate to the mobile directory:
cd mobile -
Install dependencies:
npm install
-
Set up your environment variables:
cp .env.example .env
EXPO_PUBLIC_API_BASE_URL=http://localhost:8080
-
Start the Expo dev server:
npx expo start