AI Engineer for Saas
Worldwide
# 1. What we need from you ### Must have **Backend (primary)** - Strong TypeScript. Production Express (or equivalent Node backend) — middleware, auth, validation, error handling, background workers. - **Real database design skill.** Not "I've used an ORM." You should be able to argue normalized-vs-JSONB with reasons, write migrations that are reversible, index for the query you actually run, and reason about transactions and idempotency. We run Postgres with Drizzle + hand-written SQL, one schema per module, ~190 tables. If you can't defend a schema decision, this role will hurt. - Comfort with async job systems (BullMQ / ARQ / SQS-style), retries, idempotency keys, and callback contracts between services. - Python is not required on day one, but you must be willing to work in the FastAPI sidecar. If you're allergic to Python, this isn't the role. **Frontend** - Next.js App Router and React in production — server/client component boundaries, data fetching, caching pitfalls. - React Query (or equivalent) for server state; comfort with Tailwind + a Radix/shadcn-style component system. - Able to build a dense, data-heavy UI — virtualized tables, inline editing, PDF viewers — not just marketing pages. **Information extraction + LLM (the differentiator)** - You have shipped a document-extraction system to production, and you know that **OCR/layout comes before the LLM**. Experience with Textract, or an equivalent OCR/layout stack, and an opinion about what to feed the model: raw text, layout-preserved markdown, images, or all three. - **Structured output** as your default. Pydantic/Zod schemas as the contract, tool-use or JSON mode, and a considered answer to what happens when validation fails. - **Prompt caching** — not the marketing version. You should be able to explain the prefix rule, why cache-write costs more than a normal input token, why a 5-minute TTL changes how you order your fan-out, and how to read `cache_read_input_tokens` to prove the cache is working. - **Prompt engineering with the Anthropic API specifically** — system-vs-user placement, XML-tagged context, multimodal messages, `max_tokens` and streaming thresholds, and the difference between Bedrock and first-party Anthropic auth. - **Evaluation instincts.** You've built a golden set, measured a change, and rolled back a prompt because the numbers said so. - Token-cost awareness as a first-class engineering concern. ### Nice to have - AWS: Bedrock, Textract, S3, SQS, EC2, RDS. - Python/FastAPI, SQLAlchemy async, Alembic, ARQ. - PDF internals — PyMuPDF, pdfjs, pdf-lib, rasterization, coordinate spaces. - Docker Compose, pm2, nginx path-routing; you can deploy your own work to staging. - CASL / policy-based authorization; multi-tenant RBAC. - Construction domain knowledge (CSI MasterFormat, submittals, RFIs, SOV, pay applications) — genuinely valuable, but we can teach it. ### How we work — read this before applying - **Verify before you claim.** "It should work" is not a status. We check staging, read the logs, and quote the output. - **Docs are part of done.** A merged feature updates the relevant wiki standard and the sitemap. - **Separate authoring from review.** You don't approve your own work. - **Local-first.** Verify locally, then deploy deliberately. No surprise staging pushes. - **No placeholder completions.** A `TODO`, a skipped test, or an unimplemented branch is a blocker to be reported, not evidence of progress. --- ## 2. Stack summary | Layer | Tech | |---|---| | Frontend | Next.js (App Router), React, TypeScript, React Query, Tailwind, shadcn/Radix, Zustand, pdfjs/react-pdf, recharts, reactflow | | Backend | Node/TypeScript, Express, Drizzle ORM, Zod, Jest + Supertest; Python/FastAPI sidecar with SQLAlchemy (async), Alembic, Pydantic, ARQ | | Data | PostgreSQL (RDS), Redis, S3 | | AI | Claude via AWS Bedrock (Sonnet + Haiku), `instructor`, Anthropic prompt caching, AWS Textract, embeddings/Pinecone, LangSmith tracing; Gemini + OpenAI as alternate providers behind one client interface | | Infra | Docker Compose, pm2, nginx, EC2, SQS/NATS, GitHub |
- More than 30 hrs/weekHourly
- 6+ monthsDuration
- ExpertExperience Level
$25.00
-
$47.00
Hourly- Remote Job
- Ongoing projectProject Type
Skills and Expertise
Activity on this job
- Proposals:50+
- Interviewing:0
- Invites sent:0
- Unanswered invites:0
About the client
- USASheridan7:19 PM
- $45K total spent15 hires, 1 active
Explore similar jobs on Upwork
How it works
Create your free profileHighlight your skills and experience, show your portfolio, and set your ideal pay rate.
Work the way you wantApply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
Get paid securelyFrom contract to payment, we help you work safely and get paid securely.
About Upwork
- 4.9/5(Average rating of clients by professionals)
- G2 2021#1 freelance platform
- 49,000+Signed contract every week
- $2.3BFreelancers earned on Upwork in 2020
Find the best freelance jobs
Growing your career is as easy as creating a free profile and finding work like this that fits your skills.
Trusted by