Experienced Full Stack Developer for Self-Hosted E-Mail Server Needed

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

TYPE OF WORK

Full Time

WAGE / SALARY

1000

HOURS PER WEEK

40

DATE UPDATED

Nov 6, 2025

JOB OVERVIEW

We’re an experienced US-based team building production-grade AI web apps in business, finance, and productivity. We’re looking for an experienced full stack developer who enjoys taking on responsibility for a wide variety of projects, and who can ship features, fix errors quickly, while also keep systems secure and reliable.

You’ll design, build, and operate a multi-tenant, self-hosted email/CRM MVP centered on listmonk + PostgreSQL, integrating an outbound MTA stack (Postfix or ZoneMTA) with Rspamd, OpenDKIM, and OpenDMARC to ensure deliverability and compliance.

Responsibilities include wiring APIs and a lightweight tenancy gateway, implementing automated domain/IP warm-up and provider-aware throttling, automating DNS (SPF/DKIM/DMARC, tracking CNAMEs) and TLS/ACME, and handling bounce/FBL ingest via webhooks into global/tenant suppressions.

You’ll craft segments (partial SQL), templates (Go templates/MJML pipeline), and the end-to-end send path (render, track, rate-limit), plus a small admin UI for quotas, pools, and health. You’ll setup observability (Prometheus/Grafana/Loki), logs and alerts for bounces/complaints/deferrals, security of keys/secrets, and List-Unsubscribe/one-click compliance. Strong Docker/Compose, Postgres performance, and Go and/or Node for services are expected, along with clear documentation and readiness to troubleshoot deliverability at the ISP/provider level.

We are looking for experienced candidates for this role. If this sounds like a good fit for you, please apply with:

1. Your name and background

2. Links to your related email work (repos, shipped apps, references/case studies)

3. Your availability and hourly rate

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0011
Controller Execution Time ( Jobseekers / Job )  0.0220
Total Execution Time  0.0236
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,500,176 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Experienced-Full-Stack-Developer-for-Self-Hosted-E-Mail-Server-Needed-1507652
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0157 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0009   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1507652
 LIMIT 1 
0.0007   SELECT *
FROM `employers`
WHERE `employer_id` = 623890
 LIMIT 1 
0.0065   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` = 1507652
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-06-20',ej.date_added) duration_daysDATEDIFF('2026-06-20',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-20',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1507652' 
0.0009   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1507652 
0.0007   UPDATE employer_jobs SET hit_counts '***Nov-06-2025=130***Nov-07-2025=6***Nov-08-2025=2***Nov-09-2025=7***Nov-10-2025=3***Nov-11-2025=2***Nov-12-2025=5***Nov-13-2025=3***Nov-14-2025=2***Nov-16-2025=1***Nov-17-2025=2***Nov-18-2025=3***Nov-19-2025=3***Nov-22-2025=2***Nov-23-2025=2***Nov-24-2025=1***Nov-25-2025=1***Nov-26-2025=1***Nov-28-2025=2***Dec-01-2025=3***Dec-02-2025=1***Dec-04-2025=1***Dec-06-2025=1***Dec-07-2025=3***Dec-08-2025=2***Dec-09-2025=2***Dec-10-2025=1***Dec-13-2025=1***Dec-16-2025=1***Dec-17-2025=2***Dec-19-2025=1***Dec-20-2025=1***Dec-23-2025=1***Dec-24-2025=1***Dec-26-2025=1***Dec-27-2025=1***Dec-30-2025=1***Jan-01-2026=1***Jan-02-2026=1***Jan-06-2026=2***Jan-09-2026=1***Jan-12-2026=3***Jan-15-2026=1***Jan-20-2026=1***Jan-24-2026=3***Jan-28-2026=1***Jan-30-2026=1***Feb-01-2026=2***Feb-02-2026=2***Feb-12-2026=2***Feb-13-2026=1***Feb-16-2026=2***Feb-21-2026=1***Feb-22-2026=1***Feb-24-2026=1***Feb-28-2026=1***Mar-04-2026=1***Mar-07-2026=1***Mar-16-2026=1***Mar-18-2026=1***Mar-20-2026=2***Mar-26-2026=2***Mar-27-2026=2***Mar-30-2026=1***Apr-03-2026=1***Apr-05-2026=2***Apr-06-2026=1***Apr-10-2026=1***Apr-20-2026=1***Apr-22-2026=2***Apr-23-2026=2***Apr-24-2026=1***Apr-26-2026=4***Apr-27-2026=1***Apr-30-2026=1***May-01-2026=2***May-02-2026=1***May-03-2026=2***May-04-2026=1***May-05-2026=4***May-07-2026=3***May-09-2026=2***May-11-2026=3***May-12-2026=1***May-13-2026=3***May-16-2026=2***May-20-2026=1***May-23-2026=2***May-26-2026=1***May-27-2026=1***Jun-02-2026=1***Jun-03-2026=1***Jun-10-2026=2***Jun-12-2026=1***Jun-20-2026=1' WHERE job_id'1507652'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Nov-2025=178***Dec-2025=25***Jan-2026=15***Feb-2026=13***Mar-2026=11***Apr-2026=17***May-2026=29***Jun-2026=6' WHERE job_id'1507652'  
0.0008   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1507652' 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` = 1507652 
0.0030   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '623890'
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)