Parsed Structured
{
"language": "en",
"location": {
"raw": null,
"city": null,
"region": null,
"country": null,
"is_remote": false,
"confidence": null
},
"salary_max": null,
"salary_min": null,
"inferred_at": "2026-06-06T10:22:10.634Z",
"launch_scope": {
"reason": "bamboohr_production_catalog",
"included": true,
"location": {
"raw": null,
"city": null,
"region": null,
"country": null,
"is_remote": false,
"confidence": null
},
"countries": []
},
"remote_policy": null,
"salary_period": null,
"workplace_type": null,
"salary_currency": null
}Native Structured
{
"list_job": {
"id": "45",
"isRemote": null,
"location": {
"city": null,
"state": null
},
"atsLocation": {
"city": null,
"state": null,
"country": null,
"province": null
},
"departmentId": "18561",
"locationType": "1",
"jobOpeningName": "Senior Full-Stack Engineer",
"departmentLabel": "Engineer/Developer",
"employmentStatusLabel": "Contractor"
},
"detail_errors": [],
"detail_job_opening": {
"location": {
"city": null,
"state": null,
"postalCode": null,
"addressCountry": null
},
"datePosted": "2026-03-12",
"atsLocation": {
"city": null,
"state": null,
"country": null,
"countryId": null
},
"description": "<p><span style=\"font-weight: bold\">About Hairball<br><br></span></p>\n<p>Hairball.io is an Inc. 5000 e-commerce integration consultancy with 550+ client relationships in</p>\n<p>the Shopify, NetSuite, and Celigo ecosystem. We are building a new AI-powered SaaS product</p>\n<p>for our market. Details about the product will be shared during the interview process.<br><br></p>\n<p><span style=\"font-weight: bold\">The Role<br><br></span></p>\n<p>We need a senior full-stack engineer to build the multi-tenant platform foundation for a new</p>\n<p>SaaS product over a 6-month contract engagement. You will be the primary architect and</p>\n<p>builder of the core infrastructure. A junior JavaScript developer on the team will work alongside</p>\n<p>you, learning the stack and eventually owning day-to-day development after your engagement</p>\n<p>ends.<br><br></p>\n<p>This is a founding-level role. You are not joining a team — you are building the platform that a</p>\n<p>team will grow around. The architecture decisions you make in the first 8 weeks will shape this</p>\n<p>product for years.<br><br></p>\n<p><span style=\"font-weight: bold\">What You Will Build<br><br></span></p>\n<p>Months 1-2: Platform Spine<br><br></p>\n<p>• Multi-tenant database schema with PostgreSQL Row-Level Security (RLS) enforcement</p>\n<p>on every tenant-scoped table</p>\n<p>• Authentication integration with Clerk, including multi-organization switching (one user,</p>\n<p>many tenants)</p>\n<p>• Role-based access control for six user roles with JSONB-based extensible permissions</p>\n<p>and ABAC extensions</p>\n<p>• API call logging pipeline with full attribution chain (tenant → service → execution →</p>\n<p>result)</p>\n<p>• Super Admin and Tenant Admin interfaces<br><br></p>\n<p>Months 3-4: Billing & Integrations<br><br></p>\n<p>• Stripe Billing integration: subscriptions, metered usage-based pricing, Customer Portal</p>\n<p>•External API integration pipeline with encrypted credential storage per tenant</p>\n<p>•Connection management UI for tenant-managed third-party credentials</p>\n<p>•Configuration inheritance system: platform defaults → tenant overrides → user</p>\n<p>preferences</p>\n<p>•Feature flag and module entitlement system for gating product capabilities per plan<br><br></p>\n<p>Months 5-6: Hardening & Handoff<br><br></p>\n<p>•Security hardening: immutable audit trails, environment separation (sandbox +</p>\n<p>production per tenant)</p>\n<p>•Performance optimization and production readiness review</p>\n<p>•Architecture Decision Records (ADRs) and documentation for the team inheriting the</p>\n<p>codebase</p>\n<p>•Code review and mentoring of the junior developer to ensure smooth transition<br><br></p>\n<p><span style=\"font-weight: bold\">Technology Stack<br><br></span><br></p>\n<p><span>Layer </span></p>\n<p><span>Technology </span></p>\n<p><span>Notes</span></p>\n<p><span>Framework </span></p>\n<p><span>Next.js 14 App Router + TypeScript </span></p>\n<p><span>Hosted on Vercel</span></p>\n<p><span>Database </span></p>\n<p><span>PostgreSQL 16+ (Neon) </span></p>\n<p><span>Drizzle ORM. RLS is non-negotiable.</span></p>\n<p><span>Cache / Queue </span></p>\n<p><span>Upstash Redis </span></p>\n<p><span>Job queuing, rate limiting</span></p>\n<p><span>Auth </span></p>\n<p><span>Clerk </span></p>\n<p><span>Multi-organization support required</span></p>\n<p><span>AI </span></p>\n<p><span>Anthropic Claude (primary) </span></p>\n<p><span>Multi-LLM gateway planned</span></p>\n<p><span>Billing </span></p>\n<p><span>Stripe Billing</span></p>\n<p><span>Subscriptions + usage-based</span></p>\n<p><span>metering</span></p>\n<p><span>CI/CD </span></p>\n<p><span>GitHub + Vercel </span></p>\n<p><span>Branch-based deploys, PR workflow</span></p>\n<p><br><br></p>\n<p><span style=\"font-weight: bold\">Required Experience<br><br></span></p>\n<p>These are non-negotiable. If you have not done these things in production, this is not the right</p>\n<p>role.<br><br></p>\n<p>• <span style=\"font-weight: bold\">Multi-tenant SaaS architecture: </span>You have personally built (not just contributed to) a</p>\n<p>multi-tenant application with tenant data isolation. You understand the difference</p>\n<p>between application-level tenant filtering and database-level enforcement.</p>\n<p><br></p>\n<p><span style=\"font-weight: bold\">PostgreSQL Row-Level Security: </span>You have implemented RLS policies in production.</p>\n<p>You know how to set tenant context per transaction and test for cross-tenant data</p>\n<p>leakage.<br><br></p>\n<p><span style=\"font-weight: bold\">Next.js 14+ App Router: </span>You are current with App Router (not Pages Router). You</p>\n<p>understand server components, server actions, route handlers, and middleware.</p>\n<p><span style=\"font-weight: bold\"><br>TypeScript: </span>You write TypeScript fluently, not JavaScript with type annotations bolted</p>\n<p>on.</p>\n<p><span style=\"font-weight: bold\"><br>Stripe Billing integration: </span>You have wired up subscriptions, handled webhooks with</p>\n<p>signature verification, and implemented metered/usage-based billing.</p>\n<p><span style=\"font-weight: bold\"><br>Multi-org authentication: </span>You have implemented multi-organization auth (Clerk, Auth0,</p>\n<p>or similar) in a SaaS product. You understand session scoping per organization.</p>\n<p><span style=\"font-weight: bold\"><br>Strongly Preferred</span></p>\n<p><br></p>\n<p>Experience with Drizzle ORM (or Prisma with willingness to learn Drizzle)</p>\n<p>AI/LLM application development — calling LLM APIs, streaming responses, token</p>\n<p>tracking</p>\n<p>Vercel deployment and optimization</p>\n<p>Experience mentoring junior developers</p>\n<p>Prior work in e-commerce, fintech, or financial data platforms</p>\n<p><span style=\"font-weight: bold\"><br>What We Provide</span></p>\n<p><br></p>\n<p><span style=\"font-weight: bold\">Complete architecture spec: </span>A detailed specification covering every subsystem you</p>\n<p>will build. You are implementing a well-defined plan, not designing from scratch.</p>\n<p><span style=\"font-weight: bold\">Deep domain expertise: </span>The product owner has deep expertise in the target market.</p>\n<p>You will never be guessing about business requirements.</p>\n<p><span style=\"font-weight: bold\">Working prototype: </span>The backend pipeline and database schema already exist. You are</p>\n<p>building on a foundation, not from zero.</p>\n<p><span style=\"font-weight: bold\">AI development tooling: </span>Claude Code is available as a pair programmer. The spec</p>\n<p>documents are structured for AI-assisted implementation.</p>\n<p><span style=\"font-weight: bold\">Autonomy: </span>You make the technical decisions within architectural boundaries. No</p>\n<p>micromanagement. Weekly video check-in, daily async on Slack.</p>\n<p><span style=\"font-weight: bold\"><br>How We Evaluate<br><br></span></p>\n<p><span><span style=\"font-weight: bold\">Step 1 — Portfolio review (async). </span></span>Send links to multi-tenant SaaS products you have built.</p>\n<p>We want to see architecture decisions, not algorithm skills.<br><br></p>\n<p><span style=\"font-weight: bold\">Step 2 — Architecture conversation (60 min). </span><span>We share the product spec and ask you to</span></p>\n<p>walk through how you would implement the multi-tenant isolation layer. We are looking for</p>\n<p>awareness of edge cases and honest assessment of complexity.<br><br></p>\n<p><span><span style=\"font-weight: bold\">Step 3 — Paid trial task (8-10 hours). </span></span>Implement a specific piece of the platform against the</p>\n<p>actual codebase. Compensated at your hourly rate.<br><br></p>\n<p><span style=\"font-weight: bold\">Logistics</span></p>\n<p><br></p>\n<p><span style=\"font-weight: bold\">Schedule: </span>30-35 hours/week, flexible. Overlap with US Eastern for 3-4 hours daily.</p>\n<p><span style=\"font-weight: bold\">Communication: </span>Slack (daily async), weekly 30-minute video check-in, GitHub PRs for</p>\n<p>all code.<br></p>\n<p><span style=\"font-weight: bold\">Documentation: </span>Every architectural decision gets a brief ADR in the repo.</p>\n<p><span style=\"font-weight: bold\">Payment: </span>Biweekly invoicing, Net-15. Rate negotiable based on experience</p>",
"compensation": null,
"departmentId": "18561",
"locationType": "1",
"seekPromoted": false,
"jobCategoryId": null,
"jobOpeningName": "Senior Full-Stack Engineer",
"departmentLabel": "Engineer/Developer",
"jobOpeningStatus": "Open",
"minimumExperience": "Experienced",
"jobOpeningShareUrl": "https://hairball.bamboohr.com/careers/45",
"employmentStatusLabel": "Contractor"
}
}