Full-Stack TypeScript Developer (NestJS + Next.js)

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

TYPE OF WORK

Any

WAGE / SALARY

7$/hour

HOURS PER WEEK

40

DATE UPDATED

May 15, 2026

JOB OVERVIEW

We are hiring a full-stack developer to work on Boekie, a multi-tenant SaaS platform for automated bookkeeping aimed at the Dutch market.

You will work across two codebases: a NestJS backend (TypeORM, PostgreSQL) and a Next.js frontend (App Router, React, TypeScript). The product handles real money, so correctness matters. You will touch Stripe billing, accounting integrations (eBoekhouden, ExactOnline, KVK), AI document processing, job queues, and realtime features.

What you will do:

Build and maintain backend modules following our controller, service, repository structure
Write safe PostgreSQL migrations and design indexes for read-heavy workloads
Implement frontend features in the App Router with correct Server and Client Component boundaries
Integrate third party APIs with idempotency, retries, and proper webhook handling
Wire up LLM features and treat model output as untrusted input
What we expect:

Strong TypeScript, daily driver level
Production experience with NestJS or a similar opinionated framework
Solid PostgreSQL beyond basic CRUD: transactions, locking, query plans
Experience with multi-tenant systems and tenant isolation as a security concern
You read existing patterns before inventing new ones, and you push back on bad requirements
Nice to have: Stripe, Bull or BullMQ on Redis, ---------- , next-intl, Google Cloud APIs, accounting or fintech background, Dutch market knowledge (KVK, BTW, IBAN).

Dutch language is a plus but not required. The codebase and domain are Dutch-centric.

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.0599
Total Execution Time  0.0613
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,495,008 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Full-Stack-TypeScript-Developer-NestJS-Nextjs-1647490
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0547 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1647490
 LIMIT 1 
0.0008   SELECT *
FROM `employers`
WHERE `employer_id` = 929988
 LIMIT 1 
0.0475   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` = 1647490
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 '1647490' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1647490 
0.0010   UPDATE employer_jobs SET hit_counts '***May-15-2026=667***May-16-2026=105***May-17-2026=58***May-18-2026=45***May-19-2026=25***May-20-2026=11***May-21-2026=16***May-22-2026=18***May-23-2026=11***May-24-2026=3***May-25-2026=8***May-26-2026=8***May-27-2026=6***May-28-2026=5***May-29-2026=4***May-30-2026=2***May-31-2026=5***Jun-01-2026=8***Jun-02-2026=11***Jun-03-2026=4***Jun-04-2026=1***Jun-05-2026=2***Jun-08-2026=5***Jun-09-2026=8***Jun-10-2026=4***Jun-11-2026=4***Jun-13-2026=1***Jun-20-2026=1' WHERE job_id'1647490'  
0.0006   UPDATE employer_jobs SET monthly_hits '***May-2026=997***Jun-2026=49' WHERE job_id'1647490'  
0.0014   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1647490' 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` = 1647490 
0.0013   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '929988'
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)