Now hiring

engineers wanted.

Disincentive is a small team shipping an iOS commitment-contract app that's weeks from the App Store. We use AI tooling to move faster than the size of our team should let us. We need people who do the same.

What's been built

one person. so far.

The codebase you'd inherit on day one. Imagine what we ship with two of you.

4,847
Lines of TypeScript
15
Production screens
140
SVG spirit variants
8
Database migrations

The craft

this is what the work looks like.

A real bundle on the left. A real piece of the streak engine on the right. No mystery box. If this kind of code looks like home, you're our person.

$ cd disincentive-app && yarn ios
# Resolving deps, compiling TS, building Spirit...

 Compiling 4,847 lines of TypeScript
 Resolving 247 dependencies
 Building Spirit (754 lines, 140 variants)
 Patching Stripe webhook handler
 Pushing migration 0008_support_messages.sql
 Running test suite (43 tests, 12 skipped)
 Creating archive (iPhone 15 Pro)

 Build ready in 47.2s.

# Now do this 200 more times before submission.
src/streak/engine.ts// derives the current tier from a rule's check-ins.
// time-zone aware, grace-day aware, idempotent.

export function computeStreakState(
  rule: Rule,
  checkIns: CheckIn[],
  now: Date = new Date(),
): StreakState {
  const days     = countKeptDays(checkIns, now);
  const tier     = tierFor(days);
  const graceMax = graceQuota(tier);

  return {
    tier,
    days,
    canUseGrace: graceUsed(checkIns) < graceMax,
    nextTier: nextTierAfter(tier),
  };
}

const TIERS = [
  { name: "Quiet",  from: 0   },
  { name: "Steady", from: 7   },
  { name: "Forged", from: 30  },
  { name: "Sworn",  from: 90  },
  { name: "Kept",   from: 365 },
] as const;

What you'd own

the actual work.

We're past prototype. Disincentive bundles cleanly, runs on real devices, and hits Supabase / Stripe end-to-end in a sandbox. What's left is the part that matters most: making it survive contact with real users, real money, and the App Store review process.

Concrete things on the next ninety days of the roadmap: the Stripe webhook for forfeit capture in production. Push notification scheduling across time zones with grace days and partial-completion logic. The Spirit growth pipeline — 140 SVG variants tied to streak state and rendered without jank. Edge Functions for daily streak calculations, run via Supabase cron. App Store §5.3 compliance for a financial-commitment device that isn't gambling, isn't a lottery, isn't a contest, but lives adjacent to all three. Real product engineering, not framework chasing.

AI tooling is part of the day, not a buzzword. We use Claude Code and Cursor in the loop continuously — for migrations, for refactors, for App Store copy, for legal drafting, for thinking. We expect anyone joining to bring their own sharpened tools and to make the team faster, not slower. If you've shipped real code in the last six months that you wrote alongside an LLM, you'll feel at home.

The stack

tools we actually use.

No buzzword bingo. No "we're considering rewriting in Rust." Just what's running, today, in production.

Mobile
Expo SDK 52
React Native 0.76
TypeScript 5.3
react-native-svg
Backend
Supabase Postgres
Supabase Auth
Supabase Edge Functions
Row-level security
Payments
Stripe Payments
Stripe Webhooks
Customer + Setup Intents
Off-session capture
Push
APNs (iOS)
FCM (Android)
Expo push tokens
Cron-driven scheduling
Build & Ship
EAS Build
EAS Submit
App Store Connect
TestFlight
AI in the loop
Claude Code (primary)
Cursor (paired)
Anthropic API direct
Custom agent flows
Quality
Vitest + RN Testing Library
Detox (E2E, in progress)
ESLint + Prettier
Sentry (planned)
Web
Static HTML/CSS
PHP form handler
SiteGround
No framework, no build

Open roles

two seats. two real ones.

Both are senior contracts to start, with a path to founding-team equity if it clicks. We don't post jobs we don't have. Pay is real, comp is transparent.

01 · Mobile

Founding mobile engineer

Own the iOS app end to end. You'd inherit a production-clean Expo / React Native codebase and ship it to the App Store with us, then iterate on the v2 surface area as users come in.

  • Ship the App Store launch (in weeks, not quarters)
  • Own the streak engine, push pipeline, and Stripe forfeit capture
  • Hold the line on craft: animation timing, accessibility, perf
  • Pair with the founder on every product decision that matters
Type: Contract → equity Rate: $130–180/hr USD Where: Remote (US tz preferred)
02 · AI / Automation

AI-native engineer

Build the agent and AI tooling that powers our internal workflow and (eventually) user-facing features. You ship code daily alongside Claude / Cursor and have strong opinions about where humans should stay in the loop.

  • Wire Anthropic API into back-office tooling and customer support
  • Build the rule-suggestion pipeline (predict good stake amounts from history)
  • Maintain our internal agent flows for migrations, copy review, QA
  • Help us figure out what AI in the product itself should look like
Type: Contract → equity Rate: $140–200/hr USD Where: Remote (US tz preferred)

The team

who you'd ship next to.

Small. Senior. No standups. We talk when we have something to say. The cards below get more real every quarter.

E

Eric Lee

Founder · Product · Code

Built Disincentive end to end — mobile, backend, payments, design system, App Store strategy. Comes from a product-engineering background. Spends most of his day in Claude Code, Cursor, and the iOS Simulator.

·

Open seat

Founding mobile engineer

The person who'll own the iOS app from launch through 1.0. Senior. Ships things. Cares about the streak counter being correct on a Friday at 11:58pm just as much as on a Tuesday at noon.

·

Open seat

AI-native engineer

The person who runs our AI tooling like an instrument. Production-grade Anthropic API work, internal agent flows, and a strong stomach for figuring out what AI in the product should look like.

The deal

what we'll commit to.

Pay is real. Contract rates above are honest market rates for senior engineers. We don't underpay because we're "early." If we can't pay you what your time is worth, we'll say so before you start.

Equity is on the table. If you ship with us through launch and the trajectory is right, founding-team equity is part of the conversation. We'll be specific about strike, vest, and dilution in writing — no hand-waving.

Hours are sane. No 60-hour weeks. No "we're a family" emails. The deal is the deal: ship good work on agreed timelines, communicate when something breaks, and we'll defend your time like we defend our own.

AI is part of the day. We expect you to ship with Claude / Cursor in the loop continuously. We pay for the tools. We expect you to have opinions about where they help and where they don't.

Common questions

before you ask.

What's the interview process?

One async writeup (a paragraph in your application email). One 60-minute conversation about a real engineering problem we're working on right now. One paid trial — typically 8–16 hours of real product work, billed at your rate. If everyone's still nodding by the end of the trial, we sign a contract. No leetcode, no take-home tests, no panel of strangers.

Do I need to already know your stack?

Helpful, not required. Senior engineers learn a stack quickly. We care more that you've shipped real things and can ramp up on whatever's in front of you. If you've never touched Expo or Supabase but you've built production iOS apps, you'll be fine. If you've never touched TypeScript, that's a harder sell.

What hours do you actually expect?

Forty hours a week, or whatever you and we agree on in writing. We don't care about timezone overlap as long as you ship and you're reachable for one or two stand-ins per week. We don't track keyboards. The deal is the deal: agreed scope on agreed dates.

Are you open to part-time or contract-only?

Yes to both. Most of us would rather have a great engineer for 20 hours a week than an okay one for 40. And contract-only is fine — equity is a separate conversation we'll only have if you want to have it.

What does the AI part actually mean day-to-day?

You ship code with Claude or Cursor open, basically all the time. You write prompts, you read diffs, you push back when the model's wrong, and you commit fast when it's right. We're not looking for "AI experts" — we're looking for engineers who already work this way and can show us where the model helps and where it gets in the way.

What does equity actually look like?

If you ship through launch and we're growing, founding-team equity is real. Specific percentages, vest schedule, strike price, and dilution math get put in writing before you commit. We don't dangle equity as a substitute for cash — cash comes first, and equity is on top of a market rate.

Why's this page so dark?

Because we wanted you to know the difference between a marketing page and a recruiting page without anyone having to say it.

think you're a fit?

Email us a paragraph about something you shipped recently and what you wrote next to an LLM to get there. No résumé needed. We'll read every one and reply within 48 hours, even if it's a no.

hello@disincentive.app →

No recruiters · No agencies · No coding tests for senior people