Senior Full-Stack TypeScript Developer (CRM System)

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

TYPE OF WORK

Part Time

SALARY

open for negotiation

HOURS PER WEEK

20

DATE UPDATED

Mar 31, 2026

JOB OVERVIEW

Role Overview
We are seeking a Senior Full-Stack TypeScript Developer to take ownership of a production-grade, custom-built CRM platform used in the mortgage industry.

This is a high-complexity system with multiple portals, deep backend architecture, and strict compliance/security requirements. The ideal candidate will manage, maintain, and improve the system, working alongside the current US-based developer for onboarding.

This is not a junior or mid-level role — seniority is critical due to the system’s complexity and risk exposure.

System Overview
• 3 Core Portals:
o Client Portal
o Employee/Staff Portal
o Referral/Partner Portal
• Additional: Public lead funnel
• Tech Stack:
o Frontend: Next.js 15 / React 18
o Backend: NestJS (TypeScript)
o Database: PostgreSQL / Supabase (with RLS)
o Queue System: BullMQ / Redis
• Scale: 350K+ lines of code (enterprise-level system)
• Integrations: SendGrid, Twilio, Gmail, Google Calendar, RingCentral, AWS Bedrock, etc.

Key Responsibilities
• Maintain and manage the full CRM system across all portals
• Take ownership of an existing large codebase (not greenfield)
• Troubleshoot bugs and ensure system stability
• Implement new features and enhancements
• Manage and update third-party integrations
• Handle database migrations and ensure data security
• Monitor background jobs (BullMQ) and system performance
• Work within existing architecture (no unnecessary rewrites)

Non-Negotiable Requirements
• Senior-level experience (MUST) – no junior or mid-level candidates
• Strong TypeScript (strict mode) experience
• Proven experience with NestJS (not just Node/Express)
• Experience with Next.js (App Router, SSR)
• Strong PostgreSQL + Supabase (especially Row-Level Security / RLS)
• Experience managing large, existing production codebases
• Familiarity with BullMQ / Redis job queues
• Experience with API integrations (email, SMS, CRM tools, etc.)
• Strong understanding of system architecture and security best practices
• Ability to communicate clearly and work autonomously

Ideal Candidate Profile
• Has taken over and maintained a large, complex system built by others
• Understands risk in modifying security layers (especially RLS)
• Strong problem solver with production-level debugging experience
• Comfortable working in async / remote environments
• Uses AI tools effectively in development workflows (preferred)

How to apply:
Please send your
1. Updated resume
2. Portfolio
3. Introduction video about your relevant work experiences
4. A short cover letter why you're the best fit for the role.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0010
Controller Execution Time ( Jobseekers / Job )  0.0197
Total Execution Time  0.0214
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,509,760 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Full-Stack-TypeScript-Developer-CRM-System-1614500
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0131 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1614500
 LIMIT 1 
0.0010   SELECT *
FROM `employers`
WHERE `employer_id` = 794862
 LIMIT 1 
0.0009   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1614500
AND `misc`.`idIS NULL 
0.0010   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-17',ej.date_added) duration_daysDATEDIFF('2026-04-17',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-04-17',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1614500' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1614500 
0.0015   UPDATE employer_jobs SET hit_counts '***Mar-31-2026=158***Apr-01-2026=246***Apr-02-2026=51***Apr-03-2026=18***Apr-04-2026=18***Apr-05-2026=20***Apr-06-2026=18***Apr-07-2026=21***Apr-08-2026=25***Apr-09-2026=17***Apr-10-2026=8***Apr-17-2026=1' WHERE job_id'1614500'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Mar-2026=158***Apr-2026=443' WHERE job_id'1614500'  
0.0003   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1614500' 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` = 1614500 
0.0061   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '794862'
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)