Senior Full-Stack Developer — iOS Swift + NestJS (AI-Powered Maternal Health App)

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

TYPE OF WORK

Full Time

WAGE / SALARY

1500

HOURS PER WEEK

40

DATE UPDATED

Apr 16, 2026

JOB OVERVIEW

About ProMom

ProMom (promom.ai) is an AI-powered maternal health platform helping women navigate every stage of motherhood — from fertility and preconception through pregnancy and postpartum. Our features include Maia, an AI assistant that answers real-time health questions; BellySafe, an instant food and medication safety checker; a Smart Calendar for tracking milestones and appointments; and AI Finds, a curated product recommendation engine. We're live on iOS and web, growing fast, and building the most trusted companion for maternal health. Android is next. This is early-stage, high-impact work.

The Role

We're looking for a Senior Full-Stack Developer who owns both the iOS (Swift) and backend (NestJS/Node.js) sides of the product. You won't be handed pixel-perfect specs — you'll work closely with the founding team to build real features that real moms use every day. You must be a confident, independent engineer who ships.

This role requires you to be a vibe coder. That means you use Claude CLI (Claude Code by Anthropic) as a core part of your development workflow — to write, refactor, scaffold, debug, and architect code. We don't want someone who dabbles with AI tools. We want someone who has genuinely integrated Claude CLI into how they think and build. This is non-negotiable.

What You'll Do

1. Build and maintain the ProMom iOS app using Swift and SwiftUI, owning architecture, performance, and UX quality
2. Develop and extend backend services using NestJS (Node.js/TypeScript), including REST APIs, authentication, and data pipelines
3. Integrate and maintain AI features — including the Maia assistant, BellySafe safety checks, and future LLM-powered workflows
4. Own the full feature lifecycle: design discussions -> implementation -> testing -> deployment
5. Work directly with the founders to prioritize, scope, and ship features on tight timelines
6. Maintain App Store submissions, versioning, and release processes
7. Write clean, well-structured code using Claude CLI as your primary AI development accelerator — and document your approach
8. Implement and maintain push notifications, background sync, and real-time data features on iOS
9. Contribute to API design decisions and data modeling for a health-sensitive, privacy-first product
10. Proactively catch and fix bugs before users report them — own quality, don't just close tickets
11. Collaborate asynchronously with a small, distributed team; communicate clearly in writing and on video calls

Hard Requirements

- Swift / SwiftUI — 4+ years building production iOS apps, with App Store releases you can point to
- NestJS / Node.js / TypeScript — 2+ years building production-grade backend APIs in NestJS
- Claude CLI (vibe coding) — You actively use Claude Code in your daily dev workflow. You can show us, on camera, how you use it to build real things. This is required, not nice-to-have.
- Full-stack ownership — Comfortable moving between iOS and backend in the same sprint
- PST overlap — Must be available and online during US Pacific time core hours (at minimum 9am-1pm PST Mon-Fri)
- English communication — Strong written English; can write clear messages, PR descriptions, and async updates without ambiguity
- Direct hire only — You must be applying as an individual, not through an agency

Nice to Haves

- Experience with health, wellness, or consumer subscription apps
- Familiarity with HealthKit, CoreData, or CoreML
- Exposure to OpenAI, Anthropic, or other LLM API integrations
- Knowledge of HIPAA-adjacent data privacy practices
- Experience with PostgreSQL, Prisma, or similar ORM in a NestJS stack
- Prior startup experience

What We Offer

- $1,500-$2,000/month USD — paid consistently, on time
- Fully remote — work from wherever you're most productive
- Meaningful product — you're building tools that support women during some of the most important ---------- nts of their lives
- Real ownership — small team, real autonomy, visible impact
- AI-forward culture — we use Claude CLI, we iterate fast
- Growth — as ProMom scales, this role scales with it

How to Apply

Your application MUST include:
1. A short Loom video (3-5 minutes) — introduce yourself AND show your Claude CLI workflow live (a real project, real usage). Applications without a Loom video showing Claude CLI usage will not be reviewed.
2. Links to at least two shipped iOS apps on the App Store
3. A link to backend code you've written (GitHub or live NestJS API)
4. Your PST availability hours

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.0668
Total Execution Time  0.0681
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,515,264 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Full-Stack-Developer-iOS-Swift-NestJS-AI-Powered-Maternal-Health-App-1609806
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0558 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0008   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1609806
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 917717
 LIMIT 1 
0.0479   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` = 1609806
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-06-19',ej.date_added) duration_daysDATEDIFF('2026-06-19',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-19',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1609806' 
0.0007   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1609806 
0.0007   UPDATE employer_jobs SET hit_counts '***Mar-25-2026=497***Mar-26-2026=12***Mar-27-2026=12***Mar-28-2026=3***Mar-29-2026=1***Mar-30-2026=38***Mar-31-2026=140***Apr-01-2026=89***Apr-02-2026=11***Apr-03-2026=29***Apr-04-2026=26***Apr-05-2026=13***Apr-06-2026=7***Apr-07-2026=16***Apr-08-2026=373***Apr-09-2026=67***Apr-10-2026=42***Apr-11-2026=20***Apr-12-2026=21***Apr-13-2026=18***Apr-14-2026=15***Apr-15-2026=11***Apr-16-2026=188***Apr-17-2026=106***Apr-18-2026=22***Apr-19-2026=21***Apr-20-2026=35***Apr-21-2026=23***Apr-22-2026=32***Apr-23-2026=11***Apr-24-2026=7***Apr-25-2026=9***Apr-26-2026=8***Apr-28-2026=5***Apr-29-2026=3***Apr-30-2026=6***May-01-2026=3***May-03-2026=8***May-04-2026=3***May-05-2026=7***May-06-2026=5***May-07-2026=4***May-08-2026=5***May-09-2026=4***May-10-2026=3***May-11-2026=5***May-13-2026=8***May-14-2026=2***May-15-2026=1***May-16-2026=2***May-17-2026=1***May-18-2026=1***May-19-2026=4***May-20-2026=3***May-21-2026=4***May-22-2026=3***May-23-2026=3***May-24-2026=2***May-25-2026=2***May-26-2026=4***May-27-2026=3***May-28-2026=2***May-30-2026=1***May-31-2026=1***Jun-01-2026=1***Jun-02-2026=5***Jun-03-2026=2***Jun-04-2026=5***Jun-05-2026=2***Jun-06-2026=1***Jun-07-2026=3***Jun-08-2026=2***Jun-09-2026=5***Jun-10-2026=2***Jun-11-2026=4***Jun-12-2026=4***Jun-13-2026=2***Jun-19-2026=1' WHERE job_id'1609806'  
0.0009   UPDATE employer_jobs SET monthly_hits '***Mar-2026=703***Apr-2026=1234***May-2026=94***Jun-2026=39' WHERE job_id'1609806'  
0.0017   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1609806' AND status LIKE 'sent%' ORDER BY id DESC  
0.0004   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1609806 
0.0008   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '917717'
AND `date_added` >= '2022-06-08' 
0.0004   select from teasers 
0.0003   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)