Mid-Level Full Stack Developer

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

TYPE OF WORK

Full Time

SALARY

TBD

HOURS PER WEEK

40

DATE UPDATED

Feb 17, 2025

JOB OVERVIEW

We are looking for a mid-level full-stack developer with experience in NestJS, PostgreSQL, and React.js to build a cloud-based print shop management system. The project is already planned out, and we need someone who can take the backend and admin dashboard from concept to a functional MVP.

If you have experience building business applications, handling API integrations, and working with scalable database architectures, this project is for you.

Responsibilities
The selected developer will be responsible for the following:

1. Backend Development (NestJS + PostgreSQL)
Set up a NestJS project following best practices.
Design and implement a scalable database schema in PostgreSQL.
Develop REST & GraphQL APIs for order management, CRM, inventory tracking, and proof approvals.
Implement authentication and role-based access control (RBAC) (Admin, Sales Rep, Production Team).
Optimize API performance using caching (Redis) and indexing in PostgreSQL.
Integrate third-party services (Google Maps API for business auto-fill, payment gateways).
Write unit tests to ensure stability and reliability.
2. Frontend Development (React.js + Next.js)
Develop a responsive admin dashboard using React.js (with Next.js for SSR).
Build a customer portal where users can request quotes, approve proofs, and pay invoices.
Integrate with the backend API using GraphQL or REST.
Create an intuitive UI/UX for order management and tracking.
Implement real-time updates (WebSockets or polling).
3. Database & Infrastructure (PostgreSQL, Redis, Hetzner)
Deploy PostgreSQL on Hetzner Cloud VPS (or managed service).
Design an efficient schema that supports inventory tracking, commissions, and order statuses.
Implement scheduled backups and redundancy strategies for data safety.
Set up Redis caching for performance improvements.
4. DevOps & Deployment (Docker, Kubernetes, GitHub Actions)
Containerize the application using Docker.
Deploy the backend and frontend to Hetzner Cloud.
Set up CI/CD pipelines using GitHub Actions.
Configure monitoring and logging tools (Prometheus, Grafana).
Requirements
? 3+ years of experience in full-stack development
? Proficiency in NestJS, PostgreSQL, and React.js (Next.js)
? Experience with REST & GraphQL API development
? Familiarity with authentication and role-based access control
? Experience with Redis, Docker, and CI/CD pipelines
? Strong understanding of database optimization and indexing
? Ability to work independently and deliver high-quality code
? Excellent problem-solving skills

Bonus Skills (Highly Preferred):
? Experience with AI/ML for automation and reporting
? Background in print shop management software or order tracking systems
? Knowledge of payment gateway integration (Stripe, PayPal, etc.)
? Familiarity with Hetzner Cloud and AWS migration strategies

Project Scope & Timeline
Phase 1 (MVP Development)

Backend API (NestJS + PostgreSQL)
Admin Dashboard (React.js + Next.js)
Order & Quote Management
CRM with AI-generated follow-ups
Inventory Tracking System
Phase 2 (Advanced Features) (To be determined)

Live order tracking, RFID integration, and AI-powered reporting
Mobile app development (React Native)
???? We are looking for someone who can start immediately.

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.0141
Total Execution Time  0.0159
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,511,472 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Mid-Level-Full-Stack-Developer-1316960
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0076 seconds)  (Hide)
0.0016   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1316960
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 88908
 LIMIT 1 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1316960
AND `misc`.`idIS NULL 
0.0004   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-19',ej.date_added) duration_daysDATEDIFF('2026-04-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-04-19',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1316960' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1316960 
0.0021   UPDATE employer_jobs SET hit_counts '***Feb-17-2025=139***Feb-18-2025=38***Feb-19-2025=29***Feb-20-2025=12***Feb-21-2025=8***Feb-22-2025=2***Feb-23-2025=4***Feb-24-2025=12***Feb-25-2025=8***Feb-27-2025=2***Feb-28-2025=3***Mar-02-2025=2***Mar-03-2025=5***Mar-05-2025=3***Mar-06-2025=5***Mar-07-2025=1***Mar-09-2025=1***Mar-10-2025=3***Mar-11-2025=2***Mar-13-2025=1***Mar-16-2025=1***Mar-18-2025=2***Mar-19-2025=1***Mar-20-2025=2***Mar-21-2025=2***Mar-22-2025=1***Mar-24-2025=1***Mar-25-2025=2***Apr-02-2025=1***Apr-07-2025=2***Apr-08-2025=2***Apr-09-2025=1***Apr-11-2025=2***Apr-13-2025=2***Apr-14-2025=1***Apr-15-2025=1***Apr-16-2025=1***Apr-22-2025=3***Apr-24-2025=3***Apr-27-2025=2***Apr-30-2025=2***May-01-2025=1***May-03-2025=2***May-08-2025=1***May-09-2025=3***May-12-2025=5***May-14-2025=3***May-23-2025=1***May-25-2025=1***May-28-2025=3***May-29-2025=1***May-30-2025=1***Jun-02-2025=1***Jun-03-2025=1***Jun-04-2025=1***Jun-28-2025=1***Jul-11-2025=1***Jul-17-2025=1***Jul-19-2025=1***Aug-03-2025=1***Aug-14-2025=2***Aug-18-2025=3***Aug-19-2025=1***Aug-20-2025=2***Aug-21-2025=1***Aug-29-2025=1***Sep-05-2025=2***Sep-12-2025=1***Sep-13-2025=2***Sep-17-2025=1***Sep-18-2025=1***Sep-21-2025=1***Sep-23-2025=1***Sep-28-2025=1***Oct-01-2025=1***Oct-03-2025=1***Oct-05-2025=1***Oct-08-2025=1***Oct-13-2025=1***Oct-18-2025=1***Oct-20-2025=1***Oct-24-2025=1***Oct-25-2025=1***Nov-02-2025=1***Nov-04-2025=1***Nov-05-2025=1***Nov-24-2025=3***Dec-08-2025=2***Dec-11-2025=1***Dec-15-2025=2***Dec-23-2025=1***Dec-28-2025=1***Jan-07-2026=1***Jan-25-2026=1***Jan-26-2026=1***Feb-19-2026=1***Feb-24-2026=1***Feb-25-2026=1***Mar-05-2026=1***Mar-06-2026=4***Mar-07-2026=1***Mar-09-2026=1***Mar-13-2026=1***Mar-14-2026=1***Mar-15-2026=1***Mar-19-2026=1***Mar-21-2026=1***Mar-22-2026=1***Mar-27-2026=2***Mar-30-2026=1***Apr-05-2026=2***Apr-06-2026=2***Apr-08-2026=1***Apr-09-2026=1***Apr-10-2026=1***Apr-19-2026=2' WHERE job_id'1316960'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Feb-2025=257***Mar-2025=35***Apr-2025=23***May-2025=22***Jun-2025=4***Jul-2025=3***Aug-2025=11***Sep-2025=10***Oct-2025=9***Nov-2025=6***Dec-2025=7***Jan-2026=3***Feb-2026=3***Mar-2026=16***Apr-2026=9' WHERE job_id'1316960'  
0.0003   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1316960' AND status LIKE 'sent%' ORDER BY id DESC  
0.0002   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1316960 
0.0004   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '88908'
AND `date_added` >= '2022-06-08' 
0.0005   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)