2nth.ai Concept
Same brand. New architecture: Sanity + Astro + Cloudflare
Sanity Schema paton-personnel / production
siteSettings singleton
defineType({ name: 'siteSettings', type: 'document', fields: [ { name: 'navLinks', type: 'array' }, { name: 'ctaLabel', type: 'string' }, { name: 'footerColumns', type: 'array' }, { name: 'socialLinks', type: 'array' }, ] })
heroSlide
defineType({ name: 'heroSlide', type: 'document', fields: [ { name: 'headline', type: 'string' }, { name: 'subheadline', type: 'text' }, { name: 'image', type: 'image', options: { hotspot: true } }, { name: 'ctaLabel', type: 'string' }, { name: 'ctaUrl', type: 'string' }, ] })
clientLogo
defineType({ name: 'clientLogo', type: 'document', fields: [ { name: 'name', type: 'string' }, { name: 'logo', type: 'image' }, { name: 'order', type: 'number' }, { name: 'url', type: 'url' }, ] })
jobPosting
defineType({ name: 'jobPosting', type: 'document', fields: [ { name: 'title', type: 'string', validation: R => R.required() }, { name: 'industry', type: 'reference', to: [{ type: 'industry' }] }, { name: 'location', type: 'string' }, { name: 'type', type: 'string', options: { list: [ 'Permanent','Contract','Executive' ]} }, { name: 'description', type: 'array', of: [{ type: 'block' }] // Portable Text }, { name: 'isActive', type: 'boolean', initialValue: true }, { name: 'publishedAt', type: 'datetime' }, ] })
service
defineType({ name: 'service', type: 'document', fields: [ { name: 'name', type: 'string' }, { name: 'description', type: 'text' }, { name: 'order', type: 'number' }, ] })
teamMember
defineType({ name: 'teamMember', type: 'document', fields: [ { name: 'name', type: 'string' }, { name: 'role', type: 'string' }, { name: 'photo', type: 'image', options: { hotspot: true } }, { name: 'bio', type: 'text' }, ] })
heroSlide → headline, subheadline, image, ctaLabel

Your trusted recruitment partner
to South Africa's top employers

Paton Personnel connects exceptional talent with leading organisations across Financial Services, Banking, Fintech, Actuarial, Legal, and more — for over 30 years.

siteSettings → statsBar[]
30+
Years Experience
30+
Specialist Recruiters
14
Industry Desks
19+
Major Client Brands
clientLogo documents (ordered by order field)

Our Clients

AF
:alexforbes
insight · advice · impact
C
CAPITEC
BANK
DBSA
D
Discovery
FNB
FNB
First National Bank
A
ABSA
N
Nedbank
SB
Standard Bank

Our Services

service documents (ordered)
01
Permanent Recruitment
End-to-end search and placement for permanent roles across all seniority levels.
02
Talent Mapping
Strategic intelligence on available talent in your sector before you advertise.
03
Executive Search
Confidential, research-led search for C-suite and senior leadership appointments.
04
Psychometric Assessments
Validated assessments ensuring cultural and technical fit beyond the interview.
05
Contract Recruitment
Flexible specialist resourcing for project-based and interim management needs.

Latest Opportunities

View all jobs →
jobPosting — *[_type=="jobPosting" && isActive==true] | order(publishedAt desc)
Position Industry Location Type
Head of Actuarial — Life Insurance Actuarial Johannesburg Permanent
Senior Credit Risk Analyst Banking Sandton Permanent
Compliance Officer — Fintech Fintech Cape Town Permanent
Agricultural Economist Agriculture Pretoria Contract
HR Business Partner — Financial Services HR Johannesburg Permanent
Why rebuild the architecture

Same brand. Completely different engine.

Visitors see no change. But behind the scenes: every piece of content becomes structured data — queryable by your team, your integrations, and your AI agents — without a developer in the loop.

🔒 Current — Legacy CMS
Content locked in the database
No API. Job listings, services, team bios — all trapped. Any integration needs a developer to build custom endpoints.
AI agents can't read your content
Claude, ChatGPT, or your own automation tools have no standard way to query job postings or update content without middleware.
Schema lives in a black box
Content structure is unversioned and undocumented. Changes require CMS admin access, not a pull request.
No webhooks
Publishing a job does nothing downstream. Cache purges, alerts, and integrations are manual and error-prone.
One editor at a time
Traditional save model. Concurrent edits overwrite each other with no conflict resolution.
New — Sanity + Astro + Cloudflare
Every document is a queryable API
GROQ gives any system — your site, a mobile app, an analytics tool — instant access to jobs, services, and team data.
AI agents read and write content
MCP server at /api/mcp. Claude can list active jobs, create new postings, or bulk-update content in plain English — no developer needed.
Schema as TypeScript in Git
Content structure is a PR, reviewed, auditable. Every field change has a history. No accidental schema drift.
Webhooks on every publish
Post a job → Cloudflare cache purges → page is live in seconds. Extend to Slack alerts, email campaigns, CRM updates.
Real-time collaboration
Multiple recruiters edit the same posting simultaneously — Google Docs style. No overwrites, no "last save wins."
Agent-Native Content

Your jobs board,
queryable by any AI agent

Connect Claude Desktop, Claude Code, or any MCP-compatible agent to your Sanity project. Recruiters can ask "create a Senior Risk Analyst posting in Cape Town" and it's live — no CMS login required.

🔌
MCP server built in
Sanity exposes /api/mcp. Any AI tool with MCP support connects directly to your content without custom middleware.
🔍
GROQ — content-first query language
More expressive than REST for content queries. AI can generate GROQ from natural language and get structured results instantly.
Publish → live in seconds
Webhook fires on every content change. Cloudflare edge cache purges automatically. No manual steps.
claude — paton-personnel (MCP)
// Claude Code connected via Sanity MCP server $ claude "list active actuarial roles in JHB" // Agent auto-generates GROQ query: *[_type == "jobPosting" && isActive == true && location match "Johannesburg" && industry->name == "Actuarial" ] { title, location, type, publishedAt } // Result: 2 active roles found [ { title: "Head of Actuarial — Life Insurance", location: "Johannesburg", type: "Permanent" }, ... ] $ claude "create: Senior Risk Analyst, Cape Town, Permanent" // Agent writes to Sanity via MCP — no CMS login needed Job created: Senior Risk Analyst · Cape Town Webhook fired: Cloudflare cache purged Live: patonpersonnel.co.za/jobs/senior-risk-analyst
2nth.ai Concept

Same Paton brand. Architecture rebuilt on Sanity + Astro + Cloudflare.