From 5d65d98a3b24b033b68978ab00a70adc29069d90 Mon Sep 17 00:00:00 2001 From: Taesu <166604494+bytaesu@users.noreply.github.com> Date: Sun, 3 May 2026 08:53:25 +0900 Subject: [PATCH] docs(careers): replace hardcoded roles with gem job board api (#9426) --- docs/app/careers/careers-client.tsx | 534 ++++++++-------------------- docs/app/careers/page.tsx | 9 +- docs/lib/gem.ts | 92 +++++ 3 files changed, 240 insertions(+), 395 deletions(-) create mode 100644 docs/lib/gem.ts diff --git a/docs/app/careers/careers-client.tsx b/docs/app/careers/careers-client.tsx index 0409a13683..59882ee73a 100644 --- a/docs/app/careers/careers-client.tsx +++ b/docs/app/careers/careers-client.tsx @@ -1,250 +1,14 @@ "use client"; -import { AnimatePresence, motion } from "framer-motion"; -import { useState } from "react"; +import { motion } from "framer-motion"; import Footer from "@/components/landing/footer"; import { HalftoneBackground } from "@/components/landing/halftone-bg"; +import type { GemJobPost } from "@/lib/gem"; +import { formatGemEnum } from "@/lib/gem"; -const roles = [ - { - title: "Founding Design Engineer", - type: "Full-time", - location: "San Francisco", - description: - "Craft the visual identity and UI of Better Auth's products โ€” dashboard, docs, landing pages. You'll own design end-to-end.", - requirements: [ - "Strong portfolio with shipped product work", - "React / Next.js proficiency", - "CSS mastery and responsive design", - "Eye for detail and micro-interactions", - "Experience shipping design systems", - ], - }, - { - title: "Senior Developer Relations", - type: "Full-time", - location: "San Francisco", - description: - "Be the bridge between Better Auth and its developer community. Create content, speak at events, build demos, and shape the developer experience.", - requirements: [ - "Developer background with public repos or OSS contributions", - "Content creation experience (blogs, videos, tutorials)", - "Public speaking and conference experience", - "Community building track record", - "Familiarity with auth / security space", - ], - }, -]; +type Role = Omit; -function ApplyDialog({ - role, - onClose, -}: { - role: (typeof roles)[number]; - onClose: () => void; -}) { - const [submitted, setSubmitted] = useState(false); - - return ( - - {/* Backdrop */} -
- - {/* Dialog */} - e.stopPropagation()} - className="relative w-full max-w-md overflow-hidden border border-foreground/[0.14] bg-background/95 shadow-2xl shadow-black/12 ring-1 ring-black/5 backdrop-blur dark:border-white/[0.08] dark:bg-[#050505]/95 dark:shadow-black/65 dark:ring-white/[0.04]" - > - {/* Corner marks */} - - + - - - + - - - + - - - + - - -
- {/* Close button */} - - - {submitted ? ( - -

- Application sent -

-

- Thanks for applying for {role.title}. We'll review your - application and get back to you soon. -

- -
- ) : ( - <> -
-

- # Apply -

-

- {role.title} -

-
- - {role.type} - - - {role.location} - -
-
- -
{ - e.preventDefault(); - setSubmitted(true); - }} - className="space-y-4" - > -
- - -
- -
- - -
- -
- - -
- -
- -