Interested in joining the team?

Colossus is always looking for hardworking bakers, cooks, baristas/servers and farmers market staff.

It is our mission to foster a positive team of individuals who work well together devoid of the ego and role divisions that we have experienced in other businesses in the F&B industry.

We are most encouraged by a candidates’ enthusiasm for our product, community, and company culture and seek individuals who take pride in their work and strive to constantly learn and improve.

Colossus Benefits:

  • Competitive wage

  • Weekly loaf

  • Coffee to keep you energized

  • Health Care and Dental (50% employer contribution)

  • Generous discounts

If interested in applying for a position, please email careers@colossusbread.com with your resume and a short cover letter telling us what role you are applying for and why you are interested in joining the team.

 
import { useState, useRef } from "react";

const POSITIONS = [
  {
    id: "baker",
    title: "Baker",
    folderId: "1PTClOSw8xhRJwkDBvaiNT8_fyBXuh88E",
    type: "Full-Time / Part-Time",
    location: "Commissary — Los Angeles, CA",
    description:
      "Join our production bakery team. You'll be mixing, shaping, and baking artisan breads and pastries in a high-volume, craft-focused environment.",
    requirements: ["Early morning availability required", "Experience with laminated doughs a plus", "Team-oriented mindset"],
  },
  {
    id: "barista",
    title: "Barista",
    folderId: "1kz3XiS3ZQSlo6nOGxKCCUI0Yd53xnnLR",
    type: "Full-Time / Part-Time",
    location: "Cafe Locations — Los Angeles, CA",
    description:
      "Craft exceptional coffee experiences for our guests. We're looking for someone who takes their craft seriously and thrives in a fast-paced, hospitality-driven environment.",
    requirements: ["Specialty coffee experience preferred", "Warm, guest-first attitude", "Weekend availability"],
  },
  {
    id: "cafe-lead",
    title: "Cafe Lead",
    folderId: "1tpGIhTcaskTyaFwNSBr-mfni1lCGABwo",
    type: "Full-Time",
    location: "Cafe Locations — Los Angeles, CA",
    description:
      "Lead daily cafe operations, support your team, and help maintain the standards that make Colossus exceptional. This is a hands-on leadership role.",
    requirements: ["2+ years cafe experience", "Prior supervisory experience", "Strong communication skills"],
  },
  {
    id: "sous-chef",
    title: "Sous Chef",
    folderId: "1YQUerGEjiSB9w85LcwiIBmiOuhguqq93",
    type: "Full-Time",
    location: "Commissary — Los Angeles, CA",
    description:
      "Partner with our Pastry Chef to lead the bakery team. Own scheduling, quality control, and daily production flow while mentoring the next generation of bakers.",
    requirements: ["3+ years professional baking experience", "Leadership and scheduling experience", "Strong organizational skills"],
  },
];

const AVAILABILITY_OPTIONS = ["Weekdays", "Weekends", "Mornings", "Afternoons", "Evenings", "Overnight / Early Morning"];

export default function JobsPage() {
  const [selectedPosition, setSelectedPosition] = useState(null);
  const [step, setStep] = useState("listings"); // listings | form | success
  const [availability, setAvailability] = useState([]);
  const [resumeFile, setResumeFile] = useState(null);
  const [submitting, setSubmitting] = useState(false);
  const [error, setError] = useState("");
  const fileRef = useRef();

  const [form, setForm] = useState({
    name: "",
    email: "",
    phone: "",
    experience: "",
    whyUs: "",
    startDate: "",
    hoursPerWeek: "",
  });

  function toggleAvailability(opt) {
    setAvailability((prev) =>
      prev.includes(opt) ? prev.filter((o) => o !== opt) : [...prev, opt]
    );
  }

  function handleApply(position) {
    setSelectedPosition(position);
    setStep("form");
    setForm({ name: "", email: "", phone: "", experience: "", whyUs: "", startDate: "", hoursPerWeek: "" });
    setAvailability([]);
    setResumeFile(null);
    setError("");
    window.scrollTo({ top: 0, behavior: "smooth" });
  }

  async function fileToBase64(file) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.onload = () => resolve(reader.result.split(",")[1]);
      reader.onerror = reject;
      reader.readAsDataURL(file);
    });
  }

  async function handleSubmit() {
    if (!form.name || !form.email || !form.experience || !form.whyUs || !resumeFile) {
      setError("Please fill out all required fields and attach your resume.");
      return;
    }
    setError("");
    setSubmitting(true);

    try {
      const prompt = `You are a Google Drive file upload assistant. The user wants to upload application materials for a job applicant to Google Drive.

Applicant Details:
- Name: ${form.name}
- Email: ${form.email}
- Phone: ${form.phone || "Not provided"}
- Position Applied: ${selectedPosition.title}
- Years of Experience: ${form.experience}
- Availability: ${availability.join(", ") || "Not specified"}
- Desired Hours/Week: ${form.hoursPerWeek || "Not specified"}
- Earliest Start Date: ${form.startDate || "Not specified"}
- Why Colossus: ${form.whyUs}

Please create a text file in Google Drive with the folder ID "${selectedPosition.folderId}" containing all the above application information. Name the file "${form.name} - Application - ${new Date().toLocaleDateString()}". Return confirmation when done.`;

      const base64Resume = await fileToBase64(resumeFile);

      // Upload summary doc via Claude API with Google Drive MCP
      const summaryResponse = await fetch("https://api.anthropic.com/v1/messages", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          model: "claude-sonnet-4-20250514",
          max_tokens: 1000,
          messages: [{ role: "user", content: prompt }],
          mcp_servers: [{ type: "url", url: "https://drivemcp.googleapis.com/mcp/v1", name: "google-drive" }],
        }),
      });

      const summaryData = await summaryResponse.json();
      if (!summaryResponse.ok) throw new Error(summaryData.error?.message || "Upload failed");

      // Upload resume via Claude API with Google Drive MCP
      const resumePrompt = `Please upload a file to Google Drive with the following details:
- Parent folder ID: "${selectedPosition.folderId}"
- File name: "${form.name} - Resume.${resumeFile.name.split(".").pop()}"
- Content: base64 encoded content below
- Content MIME type: "${resumeFile.type}"
- Set disable_conversion_to_google_type to true

Base64 content: ${base64Resume}

Confirm when the resume has been uploaded.`;

      const resumeResponse = await fetch("https://api.anthropic.com/v1/messages", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          model: "claude-sonnet-4-20250514",
          max_tokens: 1000,
          messages: [{ role: "user", content: resumePrompt }],
          mcp_servers: [{ type: "url", url: "https://drivemcp.googleapis.com/mcp/v1", name: "google-drive" }],
        }),
      });

      const resumeData = await resumeResponse.json();
      if (!resumeResponse.ok) throw new Error(resumeData.error?.message || "Resume upload failed");

      setStep("success");
      window.scrollTo({ top: 0, behavior: "smooth" });
    } catch (err) {
      setError("Something went wrong. Please try again or email us directly.");
      console.error(err);
    } finally {
      setSubmitting(false);
    }
  }

  return (
    <div style={styles.page}>
      <style>{css}</style>

      {/* Header */}
      <header style={styles.header}>
        <div style={styles.headerInner}>
          <div style={styles.wordmark}>COLOSSUS</div>
          <div style={styles.headerSub}>Bakery & Cafe · Los Angeles</div>
        </div>
      </header>

      {step === "listings" && (
        <main style={styles.main}>
          <div style={styles.heroBlock}>
            <p style={styles.eyebrow}>We're Hiring</p>
            <h1 style={styles.heroTitle}>Come bake<br />with us.</h1>
            <p style={styles.heroBody}>
              We're building something worth showing up for. If you care about craft,
              take pride in your work, and want to be part of a team that does too — we'd love to meet you.
            </p>
          </div>

          <div style={styles.listingsGrid}>
            {POSITIONS.map((pos) => (
              <div key={pos.id} className="card" style={styles.card}>
                <div style={styles.cardTop}>
                  <span style={styles.cardType}>{pos.type}</span>
                  <h2 style={styles.cardTitle}>{pos.title}</h2>
                  <p style={styles.cardLocation}>{pos.location}</p>
                </div>
                <p style={styles.cardDesc}>{pos.description}</p>
                <ul style={styles.reqList}>
                  {pos.requirements.map((r, i) => (
                    <li key={i} style={styles.reqItem}>
                      <span style={styles.bullet}>—</span> {r}
                    </li>
                  ))}
                </ul>
                <button className="applyBtn" style={styles.applyBtn} onClick={() => handleApply(pos)}>
                  Apply for this role
                </button>
              </div>
            ))}
          </div>
        </main>
      )}

      {step === "form" && (
        <main style={styles.main}>
          <button style={styles.backBtn} onClick={() => setStep("listings")}>← All Positions</button>
          <div style={styles.formHeader}>
            <p style={styles.eyebrow}>Application</p>
            <h1 style={styles.formTitle}>{selectedPosition.title}</h1>
            <p style={styles.formLocation}>{selectedPosition.location}</p>
          </div>

          <div style={styles.formCard}>
            <Section label="About You">
              <div style={styles.row}>
                <Field label="Full Name *" value={form.name} onChange={v => setForm(f => ({ ...f, name: v }))} placeholder="Jane Smith" />
                <Field label="Email Address *" value={form.email} onChange={v => setForm(f => ({ ...f, email: v }))} placeholder="jane@email.com" type="email" />
              </div>
              <div style={styles.row}>
                <Field label="Phone Number" value={form.phone} onChange={v => setForm(f => ({ ...f, phone: v }))} placeholder="(323) 000-0000" type="tel" />
                <Field label="Earliest Available Start Date" value={form.startDate} onChange={v => setForm(f => ({ ...f, startDate: v }))} type="date" />
              </div>
            </Section>

            <Section label="Experience">
              <TextArea
                label={`Relevant experience for the ${selectedPosition.title} role *`}
                value={form.experience}
                onChange={v => setForm(f => ({ ...f, experience: v }))}
                placeholder="Tell us about your background — previous roles, skills, anything relevant..."
                rows={5}
              />
              <Field label="How many hours per week are you looking for?" value={form.hoursPerWeek} onChange={v => setForm(f => ({ ...f, hoursPerWeek: v }))} placeholder="e.g. 30–40" />
            </Section>

            <Section label="Availability">
              <p style={styles.fieldLabel}>When are you generally available? (Select all that apply)</p>
              <div style={styles.availGrid}>
                {AVAILABILITY_OPTIONS.map((opt) => (
                  <button
                    key={opt}
                    className="availChip"
                    style={{
                      ...styles.chip,
                      ...(availability.includes(opt) ? styles.chipActive : {}),
                    }}
                    onClick={() => toggleAvailability(opt)}
                  >
                    {opt}
                  </button>
                ))}
              </div>
            </Section>

            <Section label="Why Colossus?">
              <TextArea
                label="Why do you want to work with us? *"
                value={form.whyUs}
                onChange={v => setForm(f => ({ ...f, whyUs: v }))}
                placeholder="What draws you to Colossus specifically? What are you hoping to find in your next role?"
                rows={5}
              />
            </Section>

            <Section label="Resume">
              <p style={styles.fieldLabel}>Upload your resume * (PDF, DOC, or DOCX)</p>
              <div
                className="dropzone"
                style={styles.dropzone}
                onClick={() => fileRef.current.click()}
                onDragOver={e => e.preventDefault()}
                onDrop={e => {
                  e.preventDefault();
                  const f = e.dataTransfer.files[0];
                  if (f) setResumeFile(f);
                }}
              >
                <input
                  ref={fileRef}
                  type="file"
                  accept=".pdf,.doc,.docx"
                  style={{ display: "none" }}
                  onChange={e => setResumeFile(e.target.files[0])}
                />
                {resumeFile ? (
                  <div>
                    <div style={styles.fileName}>📄 {resumeFile.name}</div>
                    <div style={styles.fileSize}>{(resumeFile.size / 1024).toFixed(0)} KB · Click to replace</div>
                  </div>
                ) : (
                  <div>
                    <div style={styles.dropzoneIcon}>↑</div>
                    <div style={styles.dropzoneText}>Drag & drop or click to upload</div>
                    <div style={styles.dropzoneSub}>PDF, DOC, or DOCX</div>
                  </div>
                )}
              </div>
            </Section>

            {error && <p style={styles.error}>{error}</p>}

            <button
              className="submitBtn"
              style={{ ...styles.submitBtn, ...(submitting ? styles.submitBtnDisabled : {}) }}
              onClick={handleSubmit}
              disabled={submitting}
            >
              {submitting ? "Submitting..." : "Submit Application"}
            </button>
          </div>
        </main>
      )}

      {step === "success" && (
        <main style={{ ...styles.main, ...styles.successMain }}>
          <div style={styles.successBlock}>
            <div style={styles.successMark}>✓</div>
            <h1 style={styles.successTitle}>Application received.</h1>
            <p style={styles.successBody}>
              Thanks, {form.name.split(" ")[0]}. We've got your application for the <strong>{selectedPosition?.title}</strong> position.
              If your background is a good fit, someone from our team will reach out.
            </p>
            <button
              style={styles.successBtn}
              onClick={() => { setStep("listings"); setSelectedPosition(null); }}
            >
              View other openings
            </button>
          </div>
        </main>
      )}

      <footer style={styles.footer}>
        <span>© Colossus Bakery</span>
        <span>Los Angeles, CA</span>
      </footer>
    </div>
  );
}

function Section({ label, children }) {
  return (
    <div style={styles.section}>
      <div style={styles.sectionLabel}>{label}</div>
      <div style={styles.sectionBody}>{children}</div>
    </div>
  );
}

function Field({ label, value, onChange, placeholder, type = "text" }) {
  return (
    <div style={styles.fieldWrap}>
      <label style={styles.fieldLabel}>{label}</label>
      <input
        type={type}
        value={value}
        onChange={e => onChange(e.target.value)}
        placeholder={placeholder}
        style={styles.input}
        className="formInput"
      />
    </div>
  );
}

function TextArea({ label, value, onChange, placeholder, rows = 4 }) {
  return (
    <div style={styles.fieldWrap}>
      <label style={styles.fieldLabel}>{label}</label>
      <textarea
        value={value}
        onChange={e => onChange(e.target.value)}
        placeholder={placeholder}
        rows={rows}
        style={{ ...styles.input, ...styles.textarea }}
        className="formInput"
      />
    </div>
  );
}

const styles = {
  page: { minHeight: "100vh", background: "#F5F0E8", fontFamily: "'Georgia', serif", color: "#1A1410" },
  header: { borderBottom: "1px solid #D4C9B4", padding: "20px 40px", background: "#F5F0E8", position: "sticky", top: 0, zIndex: 10 },
  headerInner: { maxWidth: 900, margin: "0 auto", display: "flex", alignItems: "baseline", gap: 16 },
  wordmark: { fontSize: 18, fontWeight: 700, letterSpacing: "0.2em", fontFamily: "'Georgia', serif" },
  headerSub: { fontSize: 12, color: "#7A6E5F", letterSpacing: "0.05em" },
  main: { maxWidth: 900, margin: "0 auto", padding: "60px 40px" },
  heroBlock: { marginBottom: 64 },
  eyebrow: { fontSize: 11, letterSpacing: "0.2em", textTransform: "uppercase", color: "#7A6E5F", marginBottom: 12, margin: "0 0 12px" },
  heroTitle: { fontSize: "clamp(48px, 8vw, 80px)", fontWeight: 400, lineHeight: 1.05, margin: "0 0 24px", fontFamily: "'Georgia', serif" },
  heroBody: { fontSize: 17, lineHeight: 1.7, color: "#4A3F35", maxWidth: 540, margin: 0 },
  listingsGrid: { display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(380px, 1fr))", gap: 24 },
  card: { background: "#FBF8F2", border: "1px solid #D4C9B4", borderRadius: 4, padding: 32, display: "flex", flexDirection: "column", gap: 16, transition: "transform 0.2s, box-shadow 0.2s" },
  cardTop: { display: "flex", flexDirection: "column", gap: 4 },
  cardType: { fontSize: 11, letterSpacing: "0.15em", textTransform: "uppercase", color: "#8B7355" },
  cardTitle: { fontSize: 26, fontWeight: 400, margin: 0, fontFamily: "'Georgia', serif" },
  cardLocation: { fontSize: 13, color: "#7A6E5F", margin: 0 },
  cardDesc: { fontSize: 14, lineHeight: 1.65, color: "#4A3F35", margin: 0, flexGrow: 1 },
  reqList: { listStyle: "none", padding: 0, margin: 0, display: "flex", flexDirection: "column", gap: 6 },
  reqItem: { fontSize: 13, color: "#4A3F35", display: "flex", gap: 8 },
  bullet: { color: "#8B7355", flexShrink: 0 },
  applyBtn: { marginTop: 8, padding: "12px 24px", background: "#1A1410", color: "#F5F0E8", border: "none", borderRadius: 2, fontSize: 13, letterSpacing: "0.08em", cursor: "pointer", fontFamily: "'Georgia', serif", transition: "background 0.2s" },
  backBtn: { background: "none", border: "none", cursor: "pointer", fontSize: 13, color: "#7A6E5F", padding: 0, marginBottom: 40, letterSpacing: "0.05em", fontFamily: "'Georgia', serif" },
  formHeader: { marginBottom: 48 },
  formTitle: { fontSize: "clamp(36px, 6vw, 56px)", fontWeight: 400, margin: "8px 0 8px", fontFamily: "'Georgia', serif" },
  formLocation: { fontSize: 14, color: "#7A6E5F", margin: 0 },
  formCard: { background: "#FBF8F2", border: "1px solid #D4C9B4", borderRadius: 4, padding: 48, display: "flex", flexDirection: "column", gap: 0 },
  section: { borderBottom: "1px solid #E8E0D0", paddingBottom: 40, marginBottom: 40 },
  sectionLabel: { fontSize: 11, letterSpacing: "0.2em", textTransform: "uppercase", color: "#8B7355", marginBottom: 24 },
  sectionBody: { display: "flex", flexDirection: "column", gap: 20 },
  row: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 20 },
  fieldWrap: { display: "flex", flexDirection: "column", gap: 8 },
  fieldLabel: { fontSize: 13, color: "#4A3F35", fontFamily: "'Georgia', serif" },
  input: { padding: "12px 14px", border: "1px solid #D4C9B4", borderRadius: 2, fontSize: 14, background: "#F5F0E8", color: "#1A1410", fontFamily: "'Georgia', serif", outline: "none", width: "100%", boxSizing: "border-box", transition: "border-color 0.2s" },
  textarea: { resize: "vertical", lineHeight: 1.6 },
  availGrid: { display: "flex", flexWrap: "wrap", gap: 10 },
  
  chip: { padding: "8px 18px", border: "1px solid #D4C9B4", borderRadius: 100, fontSize: 13, background: "#F5F0E8", color: "#4A3F35", cursor: "pointer", fontFamily: "'Georgia', serif", transition: "all 0.15s" },
  chipActive: { background: "#1A1410", color: "#F5F0E8", borderColor: "#1A1410" },
  dropzone: { border: "1.5px dashed #C4B9A4", borderRadius: 4, padding: "40px 24px", textAlign: "center", cursor: "pointer", background: "#F5F0E8", transition: "background 0.2s" },
  dropzoneIcon: { fontSize: 28, marginBottom: 8, color: "#8B7355" },
  dropzoneText: { fontSize: 14, color: "#4A3F35", marginBottom: 4 },
  dropzoneSub: { fontSize: 12, color: "#8B7355" },
  fileName: { fontSize: 15, color: "#1A1410", marginBottom: 4 },
  fileSize: { fontSize: 12, color: "#8B7355" },
  error: { color: "#C0392B", fontSize: 13, background: "#FDE8E8", border: "1px solid #F5C6C6", borderRadius: 2, padding: "10px 14px", margin: "0 0 8px" },
  submitBtn: { padding: "16px 40px", background: "#1A1410", color: "#F5F0E8", border: "none", borderRadius: 2