Full Stack Software Engineer (Next.js + Supabase)

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

TYPE OF WORK

Full Time

WAGE / SALARY

$1,500 / month

HOURS PER WEEK

55

DATE UPDATED

May 5, 2026

JOB OVERVIEW

Full Stack Software Engineer - Metal America

We are a growing US company in the steel building industry with a small engineering team of 5. You will build and maintain web applications that run our sales, quoting, order fulfillment, and partner operations. Your work ships fast and matters immediately.

This is a long-term role. We are not looking for a freelancer or someone between gigs. We want someone who will grow with us.

What You Will Work On
- Build and maintain full-stack web apps using Next.js, React, and TypeScript
- Design database schemas, write queries, and run migrations in Supabase (PostgreSQL) and Firebase/Firestore
- Develop API routes, server-side logic, and integrations with third-party services
- Create responsive UIs with Tailwind CSS and Shadcn/Radix UI
- Implement auth flows, role-based access control, and row-level security
- Generate PDFs, handle file uploads, and build email notification systems
- Collaborate daily with a US-based team through messages, calls, and code reviews on Slack

Required Tech Stack
- Next.js (App Router, API Routes)
- React (Hooks, Context, Server Components)
- TypeScript (strict mode)
- Tailwind CSS
- Supabase (PostgreSQL, Auth, Storage, RLS)
- Firebase / Firestore
- Zustand (state management)
- Zod (validation)
- Git and GitHub
- Vercel

Nice to Have
- Radix UI / Shadcn component libraries
- PDF generation (React PDF, pdf-lib)
- Transactional email (Resend, SendGrid)
- SQL migrations and database design
- REST APIs and webhook integrations
- Retool or similar internal tool builders

Requirements
- 3 to 5 years of professional software engineering experience
- You actively use AI coding tools (Claude Code) to write, debug, and review code
- Strong understanding of modern JavaScript/TypeScript and the React ecosystem
- Experience with PostgreSQL and Firestore
- Comfortable working independently with minimal supervision

How to Apply Please include in your application:
1. Your updated resume or CV
2. A link to your GitHub profile (required)
3. A project you are currently working on or recently finished that you are genuinely proud of. Tell us what it does and why it matters to you. (2 to 4 sentences is fine)
We review every application. If your GitHub and experience are a strong match, we will reach out within a few days.

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.1433
Total Execution Time  0.1447
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,533,760 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Full-Stack-Software-Engineer-Nextjs-Supabase-1617323
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.1377 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0018   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1617323
 LIMIT 1 
0.0008   SELECT *
FROM `employers`
WHERE `employer_id` = 921316
 LIMIT 1 
0.1245   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` = 1617323
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-06-21',ej.date_added) duration_daysDATEDIFF('2026-06-21',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-21',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1617323' 
0.0007   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1617323 
0.0015   UPDATE employer_jobs SET hit_counts '***Apr-05-2026=327***Apr-06-2026=254***Apr-07-2026=105***Apr-08-2026=68***Apr-09-2026=37***Apr-10-2026=34***Apr-11-2026=5***Apr-12-2026=19***Apr-13-2026=27***Apr-14-2026=20***Apr-15-2026=14***Apr-16-2026=12***Apr-17-2026=15***Apr-18-2026=6***Apr-19-2026=9***Apr-20-2026=9***Apr-21-2026=10***Apr-22-2026=5***Apr-23-2026=13***Apr-24-2026=9***Apr-25-2026=3***Apr-26-2026=4***Apr-27-2026=4***Apr-28-2026=5***Apr-29-2026=7***Apr-30-2026=7***May-01-2026=4***May-03-2026=6***May-04-2026=6***May-05-2026=99***May-06-2026=49***May-07-2026=29***May-08-2026=26***May-09-2026=8***May-10-2026=20***May-11-2026=23***May-12-2026=26***May-13-2026=19***May-14-2026=14***May-15-2026=22***May-16-2026=16***May-17-2026=14***May-18-2026=11***May-19-2026=16***May-20-2026=34***May-21-2026=29***May-22-2026=16***May-23-2026=7***May-24-2026=2***May-25-2026=6***May-26-2026=8***May-27-2026=10***May-28-2026=4***May-29-2026=6***May-30-2026=4***May-31-2026=9***Jun-01-2026=9***Jun-02-2026=26***Jun-03-2026=6***Jun-04-2026=2***Jun-05-2026=2***Jun-06-2026=8***Jun-07-2026=6***Jun-08-2026=10***Jun-09-2026=5***Jun-10-2026=10***Jun-11-2026=2***Jun-12-2026=3***Jun-13-2026=4***Jun-14-2026=4***Jun-15-2026=12***Jun-16-2026=9***Jun-17-2026=2***Jun-18-2026=2***Jun-19-2026=9***Jun-20-2026=7***Jun-21-2026=2' WHERE job_id'1617323'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Apr-2026=1028***May-2026=543***Jun-2026=140' WHERE job_id'1617323'  
0.0055   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1617323' 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` = 1617323 
0.0008   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '921316'
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)