EG
Resume

my first internship project at DOT Indonesia. called the backoffice because... it monitors internal projects. not fancy but real work that people actually used. 💪

What is DOT Indonesia?

PT. Digdaya Olah Teknologi Indonesia - they're an IT company doing enterprise software. that's where I interned and eventually became their youngest Full Stack Engineer at 18. no big deal. 😎

The Need

Project managers needed a system to:

  • Track which projects were on track
  • Manage payment milestones
  • See team member allocation
  • Know when deliverables were due

Spreadsheets weren't cutting it anymore.

Features Built

1. Project Checklist Management

interface ChecklistItem {
  id: string;
  projectId: string;
  title: string;
  completed: boolean;
  dueDate: Date;
  assignee: TeamMember;
  priority: 'low' | 'medium' | 'high' | 'critical';
}

const ChecklistItem = ({ item, onToggle }: Props) => (
  <div className={`flex items-center gap-3 ${item.completed ? 'opacity-50' : ''}`}>
    <Checkbox
      checked={item.completed}
      onChange={() => onToggle(item.id)}
    />
    <span className={item.completed ? 'line-through' : ''}>
      {item.title}
    </span>
    <PriorityBadge priority={item.priority} />
    <span className="text-gray-500">
      Due: {formatDate(item.dueDate)}
    </span>
  </div>
);

2. Payment Milestones

Track payments across project phases:

interface Milestone {
  id: string;
  projectId: string;
  name: string; // e.g., "Phase 1 - Design"
  amount: number;
  dueDate: Date;
  status: 'pending' | 'invoiced' | 'paid';
  invoiceUrl?: string;
}

// payment progress bar
const PaymentProgress = ({ milestones }: { milestones: Milestone[] }) => {
  const total = milestones.reduce((sum, m) => sum + m.amount, 0);
  const paid = milestones
    .filter(m => m.status === 'paid')
    .reduce((sum, m) => sum + m.amount, 0);

  return (
    <div>
      <div className="flex justify-between mb-2">
        <span>Payment Progress</span>
        <span>{Math.round((paid / total) * 100)}%</span>
      </div>
      <ProgressBar value={(paid / total) * 100} />
    </div>
  );
};

3. Talent Management

See who's working on what:

interface TeamMember {
  id: string;
  name: string;
  role: string;
  skills: string[];
  availability: number; // hours per week
  currentProjects: Project[];
}

// allocation visualization
const TeamAllocation = ({ members }: { members: TeamMember[] }) => (
  <div className="space-y-4">
    {members.map(member => (
      <div key={member.id} className="border rounded-lg p-4">
        <div className="flex justify-between">
          <span className="font-semibold">{member.name}</span>
          <span>{member.availability}h available</span>
        </div>
        <div className="mt-2">
          Working on: {member.currentProjects.map(p => p.name).join(', ')}
        </div>
        <div className="flex gap-2 mt-2">
          {member.skills.map(skill => (
            <Badge key={skill}>{skill}</Badge>
          ))}
        </div>
      </div>
    ))}
  </div>
);

What I Learned

React Fundamentals

this was when React finally "clicked" for me:

  • useState, useEffect properly
  • Component composition
  • Lifting state appropriately
  • Not over-engineering

Working with Laravel Backend

my first time connecting to PHP/Laravel API:

  • Different REST conventions
  • Eloquent relationships
  • Authentication flow

Git Workflow

branching, commits, pull requests - actual code review:

  • Don't commit directly to main
  • Write meaningful commit messages
  • Respond to feedback professionally

Enterprise Code Standards

  • Consistent naming conventions
  • Proper file structure
  • Documentation (even if minimal)
  • Error handling

Impact

  • ✅ PMs could see all projects in one place
  • ✅ No more lost checklist items in spreadsheets
  • ✅ Payment tracking became automatic
  • ✅ Team allocation visible at a glance
  • ✅ System is still being used today

The Internship Experience

honest thoughts:

Good:

  • Real projects, real users
  • Senior devs who actually mentored
  • Code review culture
  • Flexible work from home

Challenging:

  • Learning Laravel (PHP was new)
  • Understanding business domain
  • Communicating with stakeholders
  • Impostor syndrome at 18 😅

Result:

  • Became Full Stack Engineer at 18
  • Continued working on real projects
  • Built confidence in my skills

internships are where theory becomes practice. grateful for DOT for giving me a chance when I was 17 and still in school.

Related Articles