Full-Stack Developer (Next.js / TypeScript / Supabase)

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

TYPE OF WORK

Full Time

SALARY

Depends on the experience

HOURS PER WEEK

40

DATE UPDATED

Sep 13, 2026

JOB OVERVIEW

ClassJet (classjet.ai) is an AI class management SaaS for swim schools, dance studios, gymnastics, and music schools - enrollment, scheduling, attendance, and automated recurring billing through Stripe Connect. I am the founder and have written the product myself so far.

Stack: Next.js , TypeScript, Supabase, Vercel, Resend.

WHAT YOU WILL ACTUALLY WORK ON
This is a product that exists and works. The job is finishing it, not architecting it.

- UI polish and consistency across list views, detail pages, and forms: spacing, typography, alignment, empty states, loading states
- Fixing layout defects: horizontal overflow on data tables, responsive breakpoints, mobile behavior
- End-to-end and integration test coverage (Playwright preferred) for billing, enrollment, and attendance flows
- Bug triage and fixes from a running backlog
- Building out remaining screens and features: customer portal surfaces, registration forms, staff messaging, parts of billing, AI components, APIs
- Manual QA passes against a dedicated test environment, with written reproduction steps

REQUIREMENTS
- 3+ years building production web applications, with at least 1 year in React
- Real, demonstrable Next.js App Router experience: server components, server actions, route handlers. Pages Router only is not enough.
- Strong TypeScript. No "any" to make the build pass.
- Postgres competence: you can read a query plan, write a join, and understand what row-level security does
- Experience with Supabase, or a clear willingness to learn it quickly
- You test your work by running the application and clicking through it, not by reading the diff and declaring it done
- Written English good enough to write a clear bug report and a clear pull request description

NICE TO HAVE
- Supabase specifically (RLS, SECURITY DEFINER functions, migrations)
- Stripe, particularly Connect
- Experience in a scheduling, billing, or booking product

HOW WE WORK
- Small, scoped batches. Each one starts with a read-only audit of the relevant code and ends with behavioral verification before merge.
- Decisions are made before code is written. If a spec is ambiguous, ask first.
- Feature branches and pull requests. No direct commits to main.
- You will work against an isolated test environment. No access to production customer data.
- Daily written standup: what you finished, what you are on, what is blocking you.
- You should be available for at least 2-3 hours of overlap with Central Timezone

Database schema, row-level security policies, and the Stripe Connect integration are mine. You'll build against them and flag anything that looks wrong, but changes there go through me.

TO APPLY
Read this section carefully. Applications that skip it will not be reviewed.

Start your message with the word JETSTREAM on the first line.

Then answer these four questions directly. Short answers are fine.

1. Link to a production Next.js App Router application you built. Tell me which parts were yours.
2. In Postgres, how would you stop one customer's account from reading another customer's rows? Two or three sentences.
3. Describe a bug you found by running the application that you would not have found by reading the code.
4. Your GitHub profile, if you have one.

Do not send a generic cover letter.

Strong candidates will be offered a paid two-week trial at the full rate on a defined scope of work, with an ongoing engagement after that if it goes well.

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.0166
Total Execution Time  0.0183
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,491,776 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Full-Stack-Developer-Nextjs-TypeScript-Supabase-1729498
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0096 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0009   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1729498
 LIMIT 1 
0.0011   SELECT *
FROM `employers`
WHERE `employer_id` = 974645
 LIMIT 1 
0.0010   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1729498
AND `misc`.`idIS NULL 
0.0007   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-09-24',ej.date_added) duration_daysDATEDIFF('2026-09-24',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-09-24',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1729498' 
0.0008   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1729498 
0.0007   UPDATE employer_jobs SET hit_counts '***Sep-13-2026=463***Sep-14-2026=587***Sep-15-2026=271***Sep-16-2026=160***Sep-17-2026=121***Sep-18-2026=59***Sep-19-2026=34***Sep-20-2026=1***Sep-24-2026=1' WHERE job_id'1729498'  
0.0005   UPDATE employer_jobs SET monthly_hits '***Sep-2026=1697' WHERE job_id'1729498'  
0.0007   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1729498' 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` = 1729498 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '974645'
AND `date_added` >= '2022-06-08' 
0.0005   select from teasers 
0.0017   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)