FULL-STACK DEVELOPER — SAAS PRODUCT BUILD

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

TYPE OF WORK

Full Time

SALARY

$1,200 – $1,800/mo USD

HOURS PER WEEK

40

DATE UPDATED

Apr 11, 2026

JOB OVERVIEW

About the Product
Quartermaster is a SaaS platform built specifically for chiropractic practices. It connects to clients'
QuickBooks accounts, pulls weekly financial data, runs it through an AI engine (Claude API), and
generates personalized CFO advisory scripts — giving financial advisors everything they need to run
high-value weekly client calls.
The core app is already built: dashboard, P&L analysis, forecasting, CFO script viewer, action item
tracker, and admin panel. You are joining to own the codebase long-term — adding features,
connecting live APIs, and making it production-grade.
React +
TypeScript
Node.js /
Express
SQLite + Drizzle
ORM
Tailwind +
shadcn/ui Claude AI API QuickBooks API
What You Will Build
Connect QuickBooks Online API
Implement OAuth2 flow so each client connects their QB account. Pull weekly P&L; reports, AR aging,
and balance sheet data automatically.
Wire Up Google Ads & Facebook Ads ----------
Pull campaign spend, ROAS, and conversion data from both platforms and display them on the
marketing attribution dashboard.
Make AI Script Generation Production-Ready
The Claude API integration is scaffolded. You will test it with real data, handle edge cases, tune the
prompts, and add a regenerate/edit workflow.
Build User Authentication
JWT login so each chiropractic practice logs in and sees only their data. Admin view shows all
clients.
Weekly Automated Reports
Schedule a Monday morning cron job that pulls QB data, generates the CFO script, and sends a
summary email to the practice owner.
Quartermaster CFO Platform — Job Posting Page 1
Ongoing Features & Improvements
Once live with first clients, you will add features based on user feedback, fix bugs, improve
performance, and help scale to more clients.
Requirements
MUST HAVE NICE TO HAVE
• 3+ years of full-stack JavaScript experience
• React (hooks, context, TypeScript)
• Node.js + Express API development
• REST API integration (OAuth2 flows)
• Git — can commit, branch, and PR cleanly
• Communicates clearly in English (written)
• Can work independently with minimal hand-holding
• Reliable internet + backup connection
• QuickBooks API or Intuit OAuth experience
• Drizzle ORM or any SQLite experience
• Tailwind CSS + shadcn/ui component library
• Experience with AI/LLM API calls (Claude, OpenAI)
• Google Ads API or Facebook Marketing API
• Previous SaaS product experience
• Experience with Railway, Render, or Vercel
Why This Role Is Worth Your Time
Long-term stability
This is not a short project. We are building a product business. Once you prove yourself, you are the
developer for years, not months.
Real ownership
You will have full access to the codebase. No micro-management. You get a task, you ship it.
Grow with the business
As we add clients, revenue grows. Compensation reviews happen every 6 months. Performance is
rewarded.
Interesting work
You are connecting AI, accounting software, and ad platforms into one dashboard. Not a boring
CRUD app.
Flexible schedule
Core overlap hours: 9am–12pm EST. Outside that, work when you work best. Results matter, not
hours logged.
How to Apply
Quartermaster CFO Platform — Job Posting Page 2
Read this carefully. We will filter out anyone who does not follow these instructions.
Send your application message with ALL of the following:
1. Your resume or a link to your LinkedIn/portfolio.
2. Links to 2–3 projects you built (GitHub repos preferred, live sites also great). Briefly explain
what each one is.
3. Answer this question in 3–5 sentences: "Tell me about a time you integrated a third-party
API that had confusing documentation. What was the API, what was the challenge, and how
did you solve it?"
4. Include the word CHIROPRACTOR somewhere in your message. This tells us you read the
full posting. Applications without it will not be reviewed.
5. Your expected monthly rate in USD.
Applications that are generic copy-paste messages will be ignored. We read every application that follows
these steps.
What Happens After You Apply
A small, realistic task from the actual codebase. Paid at your hourly rate
Review (2–3 days) We review all applications that followed the instructions above.
Short Video Call (30
min)
Quick intro call. We will discuss the project, your experience, and
answer your questions.
Paid Test Task (3–5 hrs) regardless of outcome.
Offer If it is a great fit on both sides, we move to an offer and start date.
Questions? Include them in your application message. We look forward to meeting our next tea ---------- mber.

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0030
Controller Execution Time ( Jobseekers / Job )  0.0158
Total Execution Time  0.0196
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,507,504 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/FULL-STACK-DEVELOPER-SAAS-PRODUCT-BUILD-1621725
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0082 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1621725
 LIMIT 1 
0.0003   SELECT *
FROM `employers`
WHERE `employer_id` = 674650
 LIMIT 1 
0.0009   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1621725
AND `misc`.`idIS NULL 
0.0004   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-17',ej.date_added) duration_daysDATEDIFF('2026-04-17',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-17',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1621725' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1621725 
0.0013   UPDATE employer_jobs SET hit_counts '***Apr-11-2026=822***Apr-17-2026=1' WHERE job_id'1621725'  
0.0009   UPDATE employer_jobs SET monthly_hits '***Apr-2026=822' WHERE job_id'1621725'  
0.0009   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1621725' 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` = 1621725 
0.0010   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '674650'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0010   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)