MagangTracking adalah aplikasi fullstack (Go + Next.js + Supabase PostgreSQL) yang dirancang untuk membantu mahasiswa dan fresh graduate mencari, menyaring, menganalisis, serta melacak lamaran magang dari portal resmi MagangHub Kemnaker.
- 🔍 Filter Cerdas & Multi-Kriteria: Filter lowongan berdasarkan Program Studi, Provinsi, Kabupaten/Kota, Jenis Instansi (Pemerintah/Swasta), dan Kata Kunci Posisi.
- 🧮 Kalkulasi Peluang Lolos: Indikator visual otomatis (Hijau ≥70%, Kuning 40–69%, Merah <40%) berbasis rasio Kuota vs Jumlah Pendaftar (
min(1.0, Kuota / (Pendaftar + 1))). - 📋 Pelacak Status Lamaran (Personal Tracker): Kelola status lamaran Anda (
Belum Melamar➔Terkirim➔Shortlist➔Ditolak) lengkap dengan catatan pribadi & tanggal melamar. - 🔑 Account Linking (Token Sync): Hubungkan data lamaran Anda secara aman antardepositori/browser tanpa perlu registrasi rumit.
- 📊 Dashboard Analitik:
- Analitik Filter Jurusan: Statistik khusus yang disesuaikan dengan program studi pengguna.
- Widget Peluang Emas: Deteksi otomatis lowongan sepi pendaftar dengan kuota besar.
- Top Perusahaan: Daftar 5 instansi/perusahaan pembuka kuota terbanyak.
- Grafik Tren Lowongan & Persaingan: Visualisasi tren publikasi lowongan dan sebaran persaingan.
- ⚙️ Panel Super Admin:
- Pilihan Sumber Data: API Resmi Kemnaker atau API Wrapper Komunitas.
- Fitur Scrape Now manual + Manajemen Konfigurasi Delay & Limit.
- Log Scraping Real-time.
- 🛡️ Operasional & Keamanan:
- Security Headers & Rate Limiting (600 req/menit global untuk kenyamanan UI search, 5 req/menit login untuk proteksi brute-force).
- Admin Session Auth + Opsional Cloudflare Zero Trust Access.
| Layer | Teknologi / Tool |
|---|---|
| Backend | Go (Gin Framework v1.12, GORM ORM v1.31) |
| Database | Supabase PostgreSQL (Cloud Pooler, Port 6543) / SQLite Fallback |
| Frontend | Next.js 16 (App Router), React 19, TypeScript 5 |
| Styling & UI | Tailwind CSS v4, Lucide Icons, Radix UI Avatar |
| Scraper & CLI | Go Client ke API Publik MagangHub & Synchronizer Prodi Kemnaker (cmd/sync_kemnaker_prodi) |
| Auth | Ephemeral Admin Session Token + User Sync Token |
magangtracking/
├── backend-go/ # Backend API (Go + Gin)
│ ├── cmd/
│ │ ├── main.go # Entrypoint utama server backend
│ │ └── sync_kemnaker_prodi/ # CLI script sinkronisasi data prodi Kemnaker
│ ├── config/ # Environment loader & Inisialisasi Database (Supabase PostgreSQL / SQLite)
│ ├── dto/ # Request & Response Data Transfer Objects
│ ├── handlers/ # Admin, Application, Dashboard, Scrape, & Vacancy handlers
│ ├── middleware/ # Security headers, User Auth, & Rate Limiter
│ ├── models/ # GORM Data Models (Application, Scrape, Vacancy)
│ └── router/ # Registrasi endpoint REST API
├── frontend/ # Web Dashboard (Next.js 16 + Tailwind v4)
│ └── src/
│ ├── app/ # Next.js App Router (Admin, Applications, Vacancies, Settings)
│ ├── components/ # UI Components (Sidebar, Modals, Widgets, Badges, CommandBar)
│ ├── lib/ # Utility & API Client (Axios/Fetch wrappers)
│ └── types/ # Definitions type TypeScript
├── prd.md # Product Requirement Document
└── README.md # Dokumentasi Project
- Go (v1.22 atau lebih baru)
- Node.js (v20 atau lebih baru) & npm
cd backend-go
# Salin konfigurasi environment
cp .env.example .env
# Edit .env dan sesuaikan SUPABASE_DB_URL
# USE_SUPABASE=true
# SUPABASE_DB_URL=postgresql://postgres:[PASSWORD]@db.[PROJECT-REF].supabase.co:6543/postgres?prefer_simple_protocol=true
# Jalankan server Backend (Port 8080)
go run cmd/main.goBackend REST API akan aktif di http://localhost:8080 dan terhubung langsung ke database Cloud Supabase PostgreSQL.
cd frontend
# Install dependensi
npm install
# Jalankan dev server (Port 3000)
npm run devBuka browser Anda di http://localhost:3000.
| Method | Endpoint | Deskripsi | Access |
|---|---|---|---|
GET |
/health |
Healthcheck server & database | Publik |
GET |
/api/dashboard |
Ringkasan statistik total lowongan & lamaran | Publik |
GET |
/api/dashboard/analytics |
Data analitik jurusan, peluang emas, & top perusahaan | Publik |
GET |
/api/vacancies |
Mengambil daftar lowongan dengan filter & paginasi | Publik |
GET |
/api/vacancies/:id |
Mengambil detail lowongan spesifik | Publik |
GET |
/api/applications |
Mengambil daftar lamaran pengguna | User Auth |
GET |
/api/applications/summary |
Ringkasan statistik status lamaran pengguna | User Auth |
POST |
/api/applications |
Menambah lamaran baru | User Auth |
PATCH |
/api/applications/:id |
Memperbarui status / catatan lamaran | User Auth |
DELETE |
/api/applications/:id |
Menghapus lamaran | User Auth |
POST |
/api/applications/connect-account |
Generasi / sinkronisasi token akun pengguna | User Auth |
POST |
/api/admin/login |
Login super admin menggunakan PIN | Admin Auth |
GET |
/api/scrape/config |
Mengambil konfigurasi scraping | Super Admin |
POST |
/api/scrape/config |
Memperbarui konfigurasi scraping | Super Admin |
POST |
/api/scrape/trigger |
Trigger scraping lowongan baru secara manual | Super Admin |
GET |
/api/scrape/logs |
Mengambil histori log scraping | Super Admin |
- Sumber Data: Data lowongan diperoleh melalui API publik resmi MagangHub Kementerian Ketenagakerjaan (Kemnaker) Republik Indonesia.
- Atribusi: Seluruh data nama instansi, deskripsi posisi, dan kuota milik Kementerian Ketenagakerjaan RI.
- Privasi: Data status & catatan lamaran pribadi Anda disimpan secara aman di Supabase PostgreSQL / lokal DB dan tidak dikirimkan ke pihak ketiga mana pun.
Project ini dilisensikan di bawah MIT License.