Full Stack Developer - React Native / Expo / SpringBoot

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Full Time

WAGE / SALARY

58,000-68,000 Monthly

HOURS PER WEEK

40

DATE UPDATED

Jun 13, 2026

JOB OVERVIEW

> Location: Remote-friendly
> Contract: Full-time
> Salary: 58,000~68,000 Monthly

---

1. The Challenge

We're looking for a developer who can move seamlessly between our React Native mobile app (Expo SDK 55, Zustand stores) and our Spring Boot microservices backend.

You won't just "touch both sides" - you'll own features end-to-end.

---

2. What You'll Actually Build

Mobile Side (Expo / React Native)

- MMKV persistence, and type-safe component registries, push notification router, Deeplink & URL Routing

Backend Side (Spring Boot / Java)

- REST API Design: Clean, versioned endpoints for the mobile app to consume
- Authentication & Security: OAuth2 flows, JWT validation.
- Scheduled jobs and SFTP reconciliation
- Firebase Cloud Messaging orchestration
- Data Layer: SQL Server with Hibernate, QueryDSL, Liquibase migrations, JOIN FETCH optimization

---

3. Tech Stack

Mobile Stack

Framework: Expo SDK 55, React Native 0.83, React 19.2

Language: TypeScript 5.9 (strict mode)

Navigation: Expo Router (file-based)

State: Zustand 4.5, TanStack Query 5.50

HTTP: Axios 1.7 + custom fetch wrapper

Forms: React Hook Form + Yup/Zod

Storage: MMKV, AsyncStorage, expo-secure-store

Maps: react-native-maps 1.27, clustering

---------- 23.5

Backend Stack

Language: Java 17

Framework: Spring Boot 2.7, Spring Security, Spring Data JPA, WebFlux

Persistence: SQL Server (Azure), Hibernate, QueryDSL, Liquibase

Security: OAuth2, JWT

Messaging: Firebase Cloud Messaging, SendGrid

Resilience: Resilience4j (Circuit Breaker)

Testing: JUnit 5, Mockito, Jacoco

---

4. Must-Have Requirements

Hard Requirements

Equipment:

- Mac computer (MacBook, Mac mini, or iMac) required for iOS app development and compilation

Mobile Expertise:

- 3+ years professional React Native with at least 1 year on Expo (managed + bare workflows)
- Deep TypeScript fluency , discriminated unions, mapped types, strict generics
- Production Zustand + TanStack Query experience
- Native module debugging, reading iOS/Android crash logs
- Push notification architecture, Expo Notifications, FCM, iOS/Android payload differences

Backend Expertise:

- 3+ years professional Java backend development
- Strong Spring Boot, Spring Security, Spring Data JPA
- SQL proficiency, query optimization, indexing, JOIN FETCH, avoiding N+1
- REST API design, versioning, pagination, HTTP semantics, OpenAPI
- OAuth2/JWT, flows, token lifecycle, refresh strategies

Full Stack Judgment:

- Experience designing APIs you later consumed (or vice versa)
- Understanding of mobile-backend contract design: what to cache, what to paginate, how to handle offline scenarios
- Debugging distributed features (logs, correlation IDs, network inspection)

Critical Soft Skills

- Reads code before writing it, The mobile codebase has 30+ stores; the backend has 100+ service interfaces. You trace data flow before proposing changes.
- End-to-end ownership, You don't hand off "backend work" or "frontend work." You ship the feature.

---

5. Nice-to-Have (Separates Good from Great)

- Firebase expertise, Analytics funnels, Crashlytics, Cloud Messaging
- Open-source contributions to Expo, React Native, Spring Boot

---

6. What You Won't Do

- ? Use Expo Go. We use development builds with custom native modules
- ? Ignore the database. You'll write and optimize SQL
- ? Skip tests. JUnit + Jacoco on backend

---

7. Interview Process

Technical Test. We look for evidence of mobile depth

---

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0008
Controller Execution Time ( Jobseekers / Job )  0.0183
Total Execution Time  0.0197
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,510,128 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Full-Stack-Developer-React-Native-Expo-SpringBoot-1667232
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0113 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0008   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1667232
 LIMIT 1 
0.0003   SELECT *
FROM `employers`
WHERE `employer_id` = 944142
 LIMIT 1 
0.0057   SELECT COUNT(DISTINCT t.id) as cnt
FROM 
`t_thread` `t`
INNER JOIN `t_message` `mON `t`.`id` = `m`.`thread_id`
INNER JOIN `t_message_employer` `eON `m`.`id` = `e`.`message_id`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1667232
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-06-21',ej.date_added) duration_daysDATEDIFF('2026-06-21',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-06-21',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1667232' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1667232 
0.0008   UPDATE employer_jobs SET hit_counts '***Jun-12-2026=2***Jun-13-2026=197***Jun-15-2026=15***Jun-16-2026=74***Jun-17-2026=61***Jun-18-2026=38***Jun-19-2026=24***Jun-20-2026=5***Jun-21-2026=1' WHERE job_id'1667232'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Jun-2026=417' WHERE job_id'1667232'  
0.0008   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1667232' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1667232 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '944142'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)