Full-Stack Developer — Connect AI Pipeline for Trucking Operations App (Next.js / Supabase / Vercel)

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

TYPE OF WORK

Part Time

SALARY

$5 - $15

HOURS PER WEEK

20

DATE UPDATED

Sep 9, 2026

JOB OVERVIEW

FULL-STACK DEVELOPER — AI OPERATIONS DASHBOARD FOR TRUCKING BUSINESS (NEXT.JS / SUPABASE / VERCEL)

SUMMARY

I'm building a web app for a small auto-transport trucking operation. The app collects everything that happens in the business each day — voice/text notes, phone calls and texts, team chat, emails, tracking spreadsheets, TMS data, project tasks, and accounting — extracts what matters with an LLM, and turns it into a daily, weekly, and monthly view of how the business is doing.

The app already exists with a Notes tab and basic structure. The work is finishing the AI prompts, building the connectors to each platform, and delivering the health dashboard.

This will also be offered to other trucking companies we dispatch for, so it must be multi-tenant from the start: each company sees only its own data.

The full scope is still taking shape, so I'm open to hourly with a weekly cap, or fixed price per milestone if you prefer to bid that way.

STACK (ALREADY CHOSEN — NO CHANGES)

- Next.js (App Router) + TypeScript + Tailwind, deployed on Vercel
- Supabase: Postgres, Row Level Security (tenant isolation), Auth, Storage
- GitHub, PR-based workflow with Vercel preview deployments
- AI pipeline: Whisper (audio to text) -> low-cost LLM for extraction -> larger model for synthesis. Provider must be swappable (Anthropic / OpenAI / Google) behind one interface.

WHAT YOU'LL BUILD — FOUR MILESTONES

Milestone 1 — Notes pipeline
Voice or text note in (existing Notes tab) -> Whisper transcript -> LLM extracts structured JSON -> saved to Supabase. Validation, retries on malformed output, provider-switch config. Prompts are drafted; you finish and harden them. Multi-tenant schema and RLS set up here.

Milestone 2 — Unified events table + connector pattern
Every source below feeds one "events" table (tenant, source, timestamp, type, structured payload, raw text). Build one connector pattern and reuse it: API/webhook/bot/upload in -> normalize -> LLM extraction where content is unstructured -> write to events. Adding a new source later must mean writing one adapter, not touching the dashboard.

Milestone 3 — Connectors
All platforms in the list below, wired into the pattern from Milestone 2. Automated where the platform allows; manual upload path where it doesn't.

Milestone 4 — Business health dashboard
Daily, weekly, and monthly views built from the events and records tables: gross, net, cash in/out, cost per mile, revenue and loads per truck, driver pay owed and deductions, open issues, outreach activity, and a short AI-written summary of what changed and what needs attention. Metric definitions are documented; you implement them.

PLATFORMS TO CONNECT

Super Dispatch (carrier TMS)
Data: booked loads, drivers, statuses, BOLs, invoices
Method: REST API with bearer key; webhooks for status events

Quo (business phone)
Data: inbound/outbound call logs, call recordings and transcripts, SMS threads with brokers and drivers
Method: API and webhooks; recordings run through Whisper if Quo transcripts aren't available; LLM extracts commitments, rates, issues

Gmail (shared team inbox)
Data: broker emails, rate confirmations, claims, driver applicants
Method: Gmail API via OAuth on the shared account; LLM extracts loads, contacts, money, dates

Google Sheets (5–10 tracking sheets)
Data: driver pay, deductions, amounts owed, outreach/call tracking, load tracking, connections
Method: Sheets API via OAuth; read named tabs on a schedule; sheet list provided at kickoff

Zoho Projects
Data: tasks, project status, who owns what
Method: Zoho REST API via OAuth

---------- (team sessions)
Data: text channels plus voice sessions
Method: bot with read access to named channels; voice sessions recorded -> Whisper -> same notes pipeline

Telegram

Data: group and direct messages with drivers/brokers
Method: Telegram Bot API where the bot can be added to groups; manual export upload as fallback

WhatsApp
Data: group and direct messages
Method: manual upload only (chat export file uploaded daily by an assistant); parser handles the export format

Loom
Data: recorded walkthrough videos between team members
Method: Loom API for transcripts where available; otherwise upload video/transcript manually

QuickBooks + bank accounts (phase 2, design for it now)
Data: money in, money out, balances, AR/AP
Method: QuickBooks Online API via OAuth; bank data via Plaid or equivalent

Carrier payment/factoring platform (name confirmed at kickoff)
Data: load payments received, fees
Method: API if available, otherwise statement upload

OpenAI Whisper — voice notes, calls, ---------- , Loom to transcript — API
LLM providers (Anthropic / OpenAI / Google) — extraction and synthesis — single provider-agnostic adapter
Supabase / Vercel / GitHub — database, auth, storage, hosting, preview deploys, source control — native

Other sources may be added during the project. The Milestone 2 pattern must make that a one-adapter job.

REQUIREMENTS

- Production experience with Next.js + TypeScript and Supabase, including RLS for multi-tenant isolation
- Have built on at least one LLM API with structured/JSON output — you know what happens when the model returns bad JSON and how to handle it
- Have done multiple OAuth integrations (Google, Zoho, QuickBooks, or similar) and at least one webhook consumer
- Have built or worked with a chat bot ( ---------- or Telegram) — or can show you'll pick it up fast
- Comfortable building a clean, readable dashboard (charts, KPI cards) — clarity over polish
- Clear written English; async communication
- You work from a spec and ask precise questions, not "what should it do?"

Nice to have: Whisper/audio pipelines, background job queues, Plaid, any logistics or dispatch software.

HOW WE WORK

- GitHub repo, one PR per milestone, I test on the Vercel preview URL
- Milestone accepted when it passes my test on real data — not on your word, not on a video
- Short async updates; one call per milestone if needed
- Hourly with a weekly cap, or fixed per milestone — your choice, say which in your proposal

TO APPLY

1. Link to a production Next.js + Supabase app you built and what you personally owned
2. Two or three sentences: how would you structure the events table and connector pattern so adding a new platform later doesn't touch the dashboard?
3. Your hourly rate and estimated hours per milestone, or a fixed bid per milestone

Start your proposal with the word "trailer" so I know you read this.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0009
Controller Execution Time ( Jobseekers / Job )  0.0358
Total Execution Time  0.0372
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,519,040 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Full-Stack-Developer-Connect-AI-Pipeline-for-Trucking-Operations-App-Nextjs-Supabase-Vercel-1726958
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0286 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0008   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1726958
 LIMIT 1 
0.0008   SELECT *
FROM `employers`
WHERE `employer_id` = 321096
 LIMIT 1 
0.0013   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1726958
AND `misc`.`id` IS NULL 
0.0006   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-09-27',ej.date_added) duration_days, DATEDIFF('2026-09-27',e.rebill_date) duration_rebill, ej.*, e.deactivate FROM employers e, employer_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-27',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1726958' 
0.0008   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1726958 
0.0020   UPDATE employer_jobs SET hit_counts = '***Sep-09-2026=528***Sep-10-2026=438***Sep-11-2026=162***Sep-12-2026=90***Sep-13-2026=82***Sep-14-2026=60***Sep-15-2026=44***Sep-16-2026=41***Sep-17-2026=45***Sep-18-2026=31***Sep-19-2026=37***Sep-20-2026=25***Sep-21-2026=25***Sep-22-2026=15***Sep-23-2026=18***Sep-24-2026=29***Sep-25-2026=18***Sep-26-2026=16***Sep-27-2026=1' WHERE job_id= '1726958'  
0.0007   UPDATE employer_jobs SET monthly_hits = '***Sep-2026=1705' WHERE job_id= '1726958'  
0.0011   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1726958' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1726958 
0.0191   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '321096'
AND `date_added` >= '2022-06-08' 
0.0004   select * from teasers 
0.0003   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)