Senior Full Stack Engineer (Next.js, PostgreSQL) - Part-time - Overlap EST
- Discuss this with your agent
- Open in Claude
- Open in ChatGPT
Prepare application
- Draft this with your agent
- Open in Claude
- Open in ChatGPT
Role details
Tech stack
+6 more
Job description
Jane Cervantes is in direct contact with the company and can answer any questions you may have. Email Jane Cervantes, Recruiter
What we do
Client restores mid-century and modern furniture from our workshop. A customer sends us a chair; we quote the work, order the materials, do the restoration, and deliver it back. The craft end of that is people and hand tools. Everything else runs on a single application we build ourselves.
That application takes a customer from a photo of a worn-out chair to a priced quote, a paid deposit, ordered materials, a scheduled pickup, and an invoice in the accounting system - plus a materials and parts store, and an admin panel the workshop runs its day on. It is not a marketing site with a form on it. We are expanding our business to eCommerce by selling fabrics, leathers and parts for these very same pieces directly to the customers. This is our new business line we are very excited about.
What you would own
The quote funnel An eight-step wizard where a customer uploads photos, picks fabrics, chooses transport and transit cover, and pays a deposit. Every step is a place a real request can be lost.
Money paths Deposits, balances, refunds, processor fees and payouts, across Stripe and Shopify, each landing in QuickBooks as the book of record. Off-by-a-cent is a bug here.
Sales tax We are the tax authority for New York jurisdictions, down to the reporting code for a Yonkers delivery. Destination tax applies in the other states. A wrong rate is a filed return.
Purchasing Per-job purchase orders to vendors, freight and duty, vendor discounts, and the bills the bookkeeper makes from them in QuickBooks.
The admin panel What the workshop actually uses: quotes, line items and margins, messages to customers, media, roles and permissions, and an audit log behind it.
Getting it launched We are pre-launch, gated on the accounting cutover. There is a written checklist of blockers, and closing them is the job in front of us.
The stack, as it is today
Application Next.js (App Router, Server Components), React, TypeScript, Tailwind, Node 22. Deployed on Vercel.
Data Supabase - Postgres with row-level security on every public table, GoTrue for customer accounts, Storage for media. SQL migrations in the repo, applied per environment.
Commerce Shopify for the store (Storefront and Admin APIs, native checkout, per-brand delivery profiles, webhook order import) and Stripe for quote deposits and balances.
Accounting QuickBooks Online: invoices on jobs, sales receipts, payments, credit memos, purchase orders, one clearing account per processor. An outbox worker posts to it, with edit detection so a bookkeeper’s change is never overwritten.
Everything else Mailgun for transactional email and inbound customer replies, Slack for internal notifications, Google geocoding for transport pricing, Cloudflare Turnstile, Sentry.
Testing Vitest and Testing Library, plus smoke scripts that run against the real QuickBooks sandbox. Specs assert recorded state rather than mock calls.
Requirements
- Strong TypeScript and React, and enough comfort with the App Router to know what runs on the server and what ships to the browser.
- You write SQL and design schemas. Postgres is not hidden behind an ORM here. You should be able to read a migration, reason about an index, and think about who is allowed to read a row.
- You have integrated somebody else’s API and been burned by it - webhooks that arrive twice or out of order, an idempotency key that dedupes nothing, a sandbox that disagrees with production. That experience is most of this job.
- You are careful with money. Not anxious, careful: you reach for the boundary cases (a partial refund, a cancelled order, a tax-exempt customer) before you reach for the happy path.
- You test what you change, and you can tell the difference between a test that proves something and a test that restates the code.
- You write things down. Decisions live in the repo next to the code they explain. If you find reading and writing that kind of record tedious, this codebase will annoy you.
- You can work without a spec. The team is small; you will often be the person deciding what the right behaviour is, then going and asking the one question that actually needs an answer.
Useful, not required: QuickBooks or any double-entry accounting; Shopify or Stripe at depth; US sales tax; Supabase; anything you have shipped where being wrong cost real money.
Benefits & conditions
- Evidence outlives verdicts. “It passed” is not a result; the id the system returned is.
- AI does a lot of the typing. Much of this codebase is written with coding agents, and reviewing their work critically is part of the role. You do not need to love that, but you should not be at war with it.
- Small team, direct access. You will talk to the owner and to the people in the workshop who use what you build.
Apply for this position
This job is hosted externally. Click below to view the full posting and apply.
Prepare application
- Draft this with your agent
- Open in Claude
- Open in ChatGPT
Good distractions
Loading talks and stories from around this role…