/* global React, TextReveal, Ph, Img, PHOTOS, SectionHead, Counter */ const { useState: useStateC, useEffect: useEffectC } = React; /* ============================================================ CAREERS ============================================================ */ function Careers({ setRoute }) { const [team, setTeam] = useStateC("all"); const [loc, setLoc] = useStateC("all"); const [activeJob, setActiveJob] = useStateC(null); const [applyFor, setApplyFor] = useStateC(null); const jobs = [ { id: 1, title: "Operations Executive", team: "ops", loc: "Etawah, UP", type: "Full-time", desc: "Run day-to-day press operations at our Etawah facility. Coordinate jobs, dispatch, and quality checks across the production floor." }, { id: 2, title: "Delivery Manager", team: "ops", loc: "Etawah, UP", type: "Full-time", desc: "Own end-to-end delivery — from press dispatch to customer doorstep. Manage logistics partners and on-time SLA performance." }, { id: 3, title: "QC Inspector", team: "ops", loc: "Etawah, UP", type: "Full-time", desc: "Inspect press output before dispatch. Print-trade background preferred. Run two QC checks on every job — colour accuracy, registration, cut, finish." }, { id: 4, title: "Graphic Designer", team: "design", loc: "Etawah, UP", type: "Full-time", desc: "Polish customer artwork for press. Prepress checks, colour profiles, dieline corrections. Also support PrintBala's marketing visuals." }, { id: 5, title: "Junior Prepress Designer", team: "design", loc: "Etawah, UP", type: "Full-time", desc: "Entry-level prepress role. Handle imposition, bleeds, colour separation, and final-art handoff. Adobe Suite mandatory." }, { id: 6, title: "Software Developer", team: "tech", loc: "Etawah, UP / Remote", type: "Full-time", desc: "Build and maintain the PrintBala order and partner platform. Full-stack — Angular on the front, .NET / MS SQL Server on the back." }, { id: 7, title: "Frontend Developer (Angular)", team: "tech", loc: "Remote", type: "Full-time", desc: "Own customer-facing flows in Angular. Strong on TypeScript, RxJS, and reactive forms. You'll ship the order experience used by 12,000+ businesses." }, { id: 8, title: "Backend Developer (.NET)", team: "tech", loc: "Etawah, UP / Remote", type: "Full-time", desc: "Build the order routing, billing, and partner-portal APIs. C#, .NET 8, MS SQL Server, Azure. Familiarity with SignalR / queues a plus." }, { id: 9, title: "Operations Intern", team: "ops", loc: "Etawah, UP", type: "Internship", desc: "2-6-month internship on the production floor. Learn press operations, QA, and dispatch hands-on. Full-time conversion path." }, { id: 10, title: "Developer Intern", team: "tech", loc: "Etawah, UP / Remote", type: "Internship", desc: "2-6-month internship with the engineering team. Ship real features in Angular + .NET and MS SQL Server. Full-time conversion path." }, { id: 11, title: "Design Intern", team: "design", loc: "Etawah, UP / Remote", type: "Internship", desc: "2-6-month internship with the design team. Work on real customer artwork, prepress, and marketing collateral. Adobe Suite required." }, { id: 12, title: "Marketing Intern", team: "ops", loc: "Etawah, UP / Remote", type: "Internship", desc: "2-6-month internship supporting brand, content, and B2B outreach. Strong writing, comfortable on LinkedIn + Instagram." }, ]; const teams = [ { id: "all", label: "All teams" }, { id: "ops", label: "Operations" }, { id: "tech", label: "Engineering" }, { id: "design", label: "Design" }, ]; const locs = [ { id: "all", label: "All locations" }, { id: "Etawah, UP", label: "Etawah" }, { id: "Etawah, UP / Remote", label: "Remote" }, ]; const filtered = jobs.filter( (j) => (team === "all" || j.team === team) && (loc === "all" || j.loc === loc) ); return (
Home / Careers
Help us print India's future.

We're hiring across operations, engineering, and design — for our HQ in Etawah, with select roles open to remote.

See open roles Our culture
{/* Culture strip */}
{[ { span: 7, h: "Make + ship", b: "We're builders. Every team — including marketing and people — ships measurable work every week. Talkers don't last.", img: "https://images.unsplash.com/photo-1581291518857-4e27b48ff24e?w=1400&q=85&auto=format&fit=crop", hs: 320 }, { span: 5, h: "Press-first", b: "If you can't explain it to a press operator, you don't understand it.", img: "https://images.unsplash.com/photo-1601225612051-9c08ea3a87bf?w=1400&q=85&auto=format&fit=crop", hs: 320 }, { span: 5, h: "Learn the craft", b: "Hands-on access to offset, digital, finishing, dispatch. You leave a stronger generalist than you came in.", img: "https://images.unsplash.com/photo-1572044162444-ad60f128bdea?w=1400&q=85&auto=format&fit=crop", hs: 280 }, { span: 7, h: "Slow growth, deep roots", b: "We hire carefully. We invest deeply in your growth. Most of our senior team has been here 4+ years.", img: "https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=1400&q=85&auto=format&fit=crop", hs: 280 }, ].map((c, i) => (
{c.h}

{c.h}

{c.b}

))}
{/* Perks */}
{[ { i: "✦", h: "Mission-driven work", b: "You'll help digitise India's print supply chain. Real impact on real businesses, every single day." }, { i: "◇", h: "Strong culture", b: "Press operators, designers, and engineers — sharing one floor in Etawah. No silos, no politics." }, { i: "↗", h: "Learn on the job", b: "Hands-on access to the full print stack: offset, digital, finishing, dispatch. Mentorship from people who've shipped at scale." }, { i: "✸", h: "Ownership from day one", b: "Small team, big surface area. Your decisions ship. Your voice counts in roadmap discussions." }, { i: "✶", h: "Stability + growth", b: "An established, profitable business with a long runway. The average tenure of our senior team is 4+ years." }, { i: "⌂", h: "Etawah-first, remote-friendly", b: "Engineering and design roles open to remote. Operations and dispatch roles are on the floor in Etawah." }, ].map((p, i) => (
{p.i}

{p.h}

{p.b}

))}
{/* Open roles */}
{teams.map((t) => ( ))}
{locs.map((l) => ( ))}
{filtered.length} role{filtered.length !== 1 ? "s" : ""} matching filters
{filtered.length === 0 && (
No roles match those filters. Try another team or location.
)} {filtered.map((j) => (
setActiveJob(activeJob === j.id ? null : j.id)}>

{j.title}

{j.loc}
{j.type}
{activeJob === j.id && (

{j.desc}

)}
))}

Don't see your role? We'd still love to hear from you.

{applyFor && setApplyFor(null)} />}
); } /* ============================================================ APPLY MODAL — separate career application form ============================================================ */ function ApplyModal({ job, onClose }) { const [data, setData] = useStateC({ name: "", email: "", phone: "", linkedin: "", experience: "", noticePeriod: "", cover: "", resumeFileName: "", }); const [sent, setSent] = useStateC(false); const [step, setStep] = useStateC(1); // Lock scroll while modal open + escape closes useEffectC(() => { const prev = document.body.style.overflow; document.body.style.overflow = "hidden"; const onKey = (e) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", onKey); return () => { document.body.style.overflow = prev; window.removeEventListener("keydown", onKey); }; }, [onClose]); const set = (k, v) => setData((d) => ({ ...d, [k]: v })); const next = (e) => { e.preventDefault(); setStep(2); }; const submit = (e) => { e.preventDefault(); setSent(true); }; return (
e.stopPropagation()} style={{ width: "min(680px, 100%)", background: "var(--bg)", borderRadius: "var(--radius-lg)", border: "1px solid var(--line)", boxShadow: "var(--shadow-3)", overflow: "hidden", animation: "applyRise 0.4s var(--ease-spring)", }} > {/* Header */}
APPLY · {job.team !== "—" ? job.type.toUpperCase() : "OPEN APPLICATION"}

{job.title}

{job.team !== "—" && (
{job.loc} · {job.type}
)}
{!sent && (
= 1 ? "var(--accent)" : "var(--line)" }} />
= 2 ? "var(--accent)" : "var(--line)" }} />
)}
{/* Body */}
{sent ? (

Application received.

Thanks {data.name?.split(" ")[0] || "—"}. We've logged your application for {job.title}.

Our talent team reviews every application. If there's a fit, we'll reach out on {data.email || "your email"} within 5 working days.

) : step === 1 ? (
set("name", e.target.value)} placeholder="Anika Rao" required autoFocus />
set("phone", e.target.value)} placeholder="+91 98xxx xxxxx" required />
set("email", e.target.value)} placeholder="you@example.com" required />
set("linkedin", e.target.value)} placeholder="https://linkedin.com/in/yourname" />
) : (
) : (

Message sent.

Thanks — someone from our team will get back to you within one business day.

)}