/* 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
Posted22 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.
{[
{
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 ? (
) : (
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 (