Back to jobs

Full Stack Developer (Headless CMS/Sanity.IO)

Manila

Own a full-stack Sanity/Next.js platform for a growing MedSpa: design schemas, ship features end-to-end, embrace async work, and own the deployment — no handholding.

About the role

The headless CMS space has matured — but most developers who say they’ve built headless architectures have stitched together a tutorial stack, not designed one from scratch. The difference shows when the content model needs to evolve, when third-party APIs behave unexpectedly, or when the business asks for something the original schema can’t handle. We’re building the digital platform for a growing MedSpa — and we need someone who knows the difference between setting up Sanity and actually owning it.

This is a full ownership role. You’ll design the content architecture in Sanity.io, build the Next.js frontend that consumes it, and wire the integrations that make it operational — booking flows, service pages, provider profiles, and the content engine behind it all. You’ll work lean, make architectural calls without waiting for a spec, and ship real features in a real production environment. If your best work has been in a large team with a dedicated design system and a PM sequencing your tickets, this probably isn’t the right fit.

What you’ll do

Own the content architecture

  • Design the full content schema in Sanity.io from the ground up — services, treatments, providers, booking flows, blog, FAQs — with clean document types, structured portable text, and a model that non-technical editors can actually use.

  • Make the schema decisions that will matter 18 months from now: how content is related, how it’s reused, how it scales as the business adds locations, services, and providers.

  • Build custom Sanity Studio configurations and input components where the default UI doesn’t serve the editorial workflow.

  • Write content migrations cleanly — no cowboy schema changes that break downstream consumers.

Build the frontend

  • Develop the Next.js frontend consuming Sanity’s GROQ API — with a deliberate ISR/SSR strategy, image optimization, and SEO fundamentals built in from the start, not bolted on later.

  • Translate design intent into clean, maintainable component code in TypeScript — you don’t need to be a designer, but you notice when spacing is wrong and you fix it.

  • Implement performance budgets and Core Web Vitals targets that matter for a service business where page speed is directly tied to conversion.

  • Own the deployment pipeline on Vercel — preview environments, CI checks, and rollback capability.

Build and maintain integrations

  • Connect the CMS to third-party booking and scheduling platforms — API-first, cleanlyabstracted, and resilient to the inevitable upstream changes.

  • Integrate any e-commerce or payment flows needed for service packages, gift cards, or memberships.

  • Build for failure: error handling, retry logic, and observability so issues surface before clients notices them.

Work independently and communicate clearly

  • Manage your own delivery — you’ll have context, goals, and access to stakeholders, not a Jira board of pre-scoped tickets.

  • Flag blockers early and propose solutions, not just problems. Async-first communication in English at a level that builds trust with non-technical stakeholders.

  • Document your architectural decisions so the codebase can be handed off, extended, or reviewed without a tribal knowledge transfer.

Who you are

  • A full stack developer who has shipped a production Sanity.io project — not a courseproject, not a portfolio piece that lives on localhost. A live URL you’re proud to share.

  • Someone who understands headless architecture at the decision level: you can explain why you chose GROQ over GraphQL, when to use ISR vs SSR, and how you’d structure a schema to support multi-location content without duplication.

  • Comfortable making calls when the spec is incomplete. You ask the right questions to close the ambiguity, then build — you don’t stall waiting for perfect requirements.

  • Experienced working remotely and offshore, which means you already know what good async communication looks like and why it matters more than timezone overlap.

  • Someone with enough UI sensibility to deliver work that looks intentional — even if design isn’t your primary skill.

Required qualifications

  • 3+ years building full stack web applications in production environments.

  • Demonstrable, hands-on experience with Sanity.io — content modeling, GROQ queries, Studio customization. Contentful or Strapi experience is noted; Sanity is still the

  • requirement.

  • Strong Next.js and TypeScript — not “familiar with.” You use these daily and you have opinions about how to use them well.

  • Experience designing and building headless architectures end-to-end, not just consuming a CMS someone else configured.

  • Proven ability to work independently in a remote/offshore engagement — async communication, proactive status updates, self-managed delivery.

  • Upper-intermediate English proficiency or above, written and verbal.

Good to have

  • Experience integrating booking, scheduling, or e-commerce APIs in a service-based business context.

  • Exposure to healthcare, beauty, wellness, or any industry where trust and content accuracy are load-bearing.

  • Familiarity with Nuxt or Vue if Next.js isn’t your primary — we can flex on framework if the Sanity and headless depth is strong.

  • Experience setting up monitoring, alerting, or error tracking on Jamstack/serverless deployments.

Position Details

  • Remote: Fully-remote
  • Location: Manila, Philippines

Your partner for AI, consulting, software development, and nearshore staffing.

Create a Job Alert

Interested in building your career at Total Performance Consulting? Get future opportunities sent straight to your email.

Apply for this job

*

indicates a required field

Phone
Resume/CV

Accepted file types: pdf, doc, docx, txt, rtf

Cover Letter

Accepted file types: pdf, doc, docx, txt, rtf


Select...
Select...
Select...

Please share your response via Loom or Google Drive with sharing permissions set to "Anyone with the link."