/* global React, TextReveal, SectionHead, Img */ const { useState: useStateOp, useEffect: useEffectOp } = React; /* ============================================================ OPPORTUNITY — Software Developer Internship (Live Project) Not linked in navbar. Reachable via #opportunity hash. ============================================================ */ function Opportunity({ setRoute }) { const [data, setData] = useStateOp({ firstName: "", lastName: "", email: "", mobile: "", address: "", }); const [touched, setTouched] = useStateOp(false); const [sent, setSent] = useStateOp(false); const [sending, setSending] = useStateOp(false); const [error, setError] = useStateOp(""); const update = (k, v) => setData((d) => ({ ...d, [k]: v })); const isFilled = data.firstName.trim() && data.lastName.trim() && data.email.trim() && /^\S+@\S+\.\S+$/.test(data.email) && data.mobile.trim().length >= 7 && data.address.trim(); const onSubmit = async (e) => { e.preventDefault(); setTouched(true); setError(""); if (!isFilled || sending) return; setSending(true); // ---------------------------------------------------------- // POST to PrintBala internship API // ---------------------------------------------------------- const endpoint = "https://api2.printbala.in:2026/api/OpenForms/ApplyInternsip"; const payload = { FirstName: data.firstName.trim(), LastName: data.lastName.trim(), Email: data.email.trim(), Mobile: data.mobile.trim(), Address: data.address.trim(), }; try { const res = await fetch(endpoint, { method: "POST", headers: { "Content-Type": "application/json", Accept: "application/json", }, body: JSON.stringify(payload), }); const text = await res.text(); let json = {}; try { json = text ? JSON.parse(text) : {}; } catch (_) { /* non-JSON body is fine */ } // API returns { StatusCode: 1, Message: "...", Data: {...} } on success const apiOk = json.StatusCode === 1 || json.statusCode === 1 || json.success === true || json.Success === true; if (res.ok && (apiOk || json.StatusCode === undefined)) { setSent(true); } else { throw new Error( json.Message || json.message || `Server responded with ${res.status}` ); } } catch (err) { setError( "We couldn't submit your application right now. Please try again in a minute, or email your details to hr@printbala.com directly." ); console.error("[Opportunity] application submit failed:", err); } finally { setSending(false); } }; const scrollToApply = () => { const el = document.getElementById("apply"); if (el) el.scrollIntoView({ behavior: "smooth", block: "start" }); }; return (
{/* HERO */}
Home / Opportunity
Now hiring · Internship
Posted 22 May 2026
Software Developer Intern — work on a live PrintBala project.

Hands-on internship building real features that ship to thousands of businesses. Remote-friendly, 4–5 hours a day, daily standup with the engineering team.

View role details
{/* Quick facts */}
{[ { k: "Role", v: "Software Developer Intern" }, { k: "Type", v: "Internship · Unpaid" }, { k: "Location", v: "Remote" }, { k: "Commitment", v: "4–5 hours / day" }, ].map((f) => (
{f.k}
{f.v}
))}
{/* HIGHLIGHTS */}
{[ { ic: ( ), h: "Live project", b: "Ship real features to the PrintBala platform — order flows, partner portal, internal tooling. Your commits go to production.", }, { ic: ( ), h: "Remote opportunity", b: "Work from anywhere in India. We give you the brief, the codebase, and the support — you bring the laptop and the focus.", }, { ic: ( ), h: "Daily standup", b: "Join a 15-min standup every morning with the engineering team. Share what you shipped, what's next, where you're stuck.", }, ].map((c) => (
{c.ic}

{c.h}

{c.b}

))}
{/* HONEST EXPECTATIONS */}
Before you apply

Be honest about your fit.

We're upfront about the terms so we both save time. Apply only if every point below is a yes.

    {[ "This is an unpaid internship. There is no stipend.", "Only serious candidates — we expect you to treat it like a real job.", "4–5 hours of focused work every day, on weekdays.", "You join the daily standup on time, with your update ready.", "You ship a daily task to your engineering lead.", "Strong performers are offered a paid full-time role at the end.", ].map((p) => (
  • {p}
  • ))}
{/* DAILY RHYTHM */}
{[ { t: "10:00", h: "Daily standup", b: "15-min sync. Share yesterday's progress, today's plan, any blockers. Cameras on.", }, { t: "10:15", h: "Focused build", b: "Pick up your assigned daily task — feature work, bug fix, or polish. Code, test, push a PR.", }, { t: "01:00", h: "Review & pairing", b: "Get your PR reviewed by your lead. Quick pairing if you're stuck. Push fixes.", }, { t: "02:30", h: "Wrap-up", b: "Ship a short end-of-day update in the team channel. Hand off, log learnings, sign off.", }, ].map((s, i) => (
{String(i + 1).padStart(2, "0")} · {s.t}

{s.h}

{s.b}

))}
{/* WHAT WE LOOK FOR */}
What we look for

The basics

  • Comfortable in at least one of: JavaScript / TypeScript, Angular, React, or .NET / C#.
  • You can read existing code and ask the right questions.
  • You write clean, readable code — and clear commit messages.
  • You communicate proactively, especially when stuck.
  • You're available on weekdays, on time, every day.
Bonus

Nice to have

  • A side project, GitHub profile, or college project you can walk us through.
  • Familiarity with Git, branching, and pull requests.
  • Exposure to SQL (we use MS SQL Server).
  • Curiosity about the print and manufacturing industry.
  • Bias toward shipping over over-engineering.
{/* APPLY FORM */}
{!sent ? (
update("firstName", v)} invalid={touched && !data.firstName.trim()} placeholder="Aarav" /> update("lastName", v)} invalid={touched && !data.lastName.trim()} placeholder="Sharma" />
update("email", v)} invalid={touched && !/^\S+@\S+\.\S+$/.test(data.email)} placeholder="aarav@example.com" /> update("mobile", v)} invalid={touched && data.mobile.trim().length < 7} placeholder="+91 98xxxxxxxx" />
update("address", v)} invalid={touched && !data.address.trim()} placeholder="City, State, PIN" />

By submitting, you confirm you can commit 4–5 hours daily and join the daily standup. Your details are sent directly to PrintBala HR.

{touched && !isFilled && (
Please complete all fields with valid information.
)} {error && (
{error}
)} ) : (

Application submitted.

Thanks — your details are with PrintBala HR. We review every application and will get back within 3–5 working days at the email you provided.

)}
); } function Field({ label, value, onChange, required, type = "text", placeholder, invalid, textarea }) { return (
{textarea ? (