Skip to content

Latest commit

 

History

65 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistem Manajemen Tugas Terintegrasi

Aplikasi web manajemen tugas untuk mahasiswa D3 Manajemen Informatika PSDKU Polinema Kediri. Mengintegrasikan Google Classroom, Telegram Bot, Google Gemini AI, dengan klasifikasi prioritas otomatis menggunakan Matriks Eisenhower.

Production: https://todosxai.ninja/

Stack

  • Backend: Laravel 12, PHP 8.2+
  • Database: MySQL 8.0
  • Frontend: Blade + Alpine.js 3.4 + Tailwind CSS 3.1 + Vite 7
  • Visualisasi: Chart.js 4
  • Drag-drop: SortableJS
  • AI: Google Gemini API (gemini-2.5-flash default, REST native)
  • Auth: Laravel Socialite + Google OAuth (no email/password login)
  • Export PDF: barryvdh/laravel-dompdf 3

Fitur

  • Manajemen Tugas — CRUD dengan kuadran Eisenhower otomatis (Q1 Lakukan Sekarang, Q2 Jadwalkan, Q3 Delegasikan, Q4 Eliminasi), prioritas, deadline, drag-drop reorder, filter, paginasi
  • Kategori — default Kuliah, Pekerjaan, Daily Activity per user, tanpa warna/ikon
  • Google Classroom Sync — ambil mata kuliah & tugas via API, auto setiap 6 jam (production) atau manual
  • Asisten AI — chat multi-session berbasis Google Gemini, parsing instruksi → konfirmasi tugas, daily planning
  • Kalender Tugas — tampilan bulanan dengan event dot per kuadran
  • Arsip Tugas — riwayat tugas selesai per mata kuliah, export PDF portofolio
  • Laporan & Analitik — ringkasan total/aktif/selesai/terlambat, distribusi status/prioritas/kuadran/kategori/sumber, export PDF
  • Telegram Bot — webhook 2-arah, 9 command (/start, /help, /tugas, /hari_ini, /mendesak, /selesai, /statistik, /planning, /baru), pesan bebas → AI
  • Notifikasi — pengingat tenggat, peringatan terlambat, rangkuman harian via Telegram (production scheduler)

Prasyarat

Tools Versi minimal Catatan
PHP 8.2+ Extensi: pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json, bcmath, fileinfo, gd
Composer 2.x https://getcomposer.org
Node.js 18+ Termasuk npm
MySQL 8.0 XAMPP / Laragon / MySQL standalone
Akun Google Cloud — OAuth client untuk login + (opsional) Classroom API
Gemini API Key — https://aistudio.google.com/apikey
Telegram Bot opsional @BotFather

Tutorial Menjalankan (Local)

1. Clone repository

git clone https://github.com/shuriza/todos.git
cd todos

2. Install dependencies

composer install
npm install

3. Siapkan environment

# Windows (PowerShell / CMD)
copy .env.example .env

# Linux / macOS
cp .env.example .env

php artisan key:generate

4. Konfigurasi .env

Minimal yang harus diisi:

APP_NAME="Todo AI"
APP_URL=http://localhost:8000

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=todos_ai
DB_USERNAME=root
DB_PASSWORD=

# Google OAuth (wajib — login hanya lewat Google)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI="${APP_URL}/auth/google/callback"

# Gemini AI (wajib untuk Asisten AI)
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.5-flash

# Telegram (opsional di local)
TELEGRAM_BOT_TOKEN=
TELEGRAM_BOT_USERNAME=
TELEGRAM_WEBHOOK_SECRET=

Setup Google OAuth (ringkas)

  1. Buka Google Cloud Console
  2. Buat project → APIs & Services → Credentials → Create OAuth client ID (Web application)
  3. Authorized redirect URIs: http://localhost:8000/auth/google/callback
  4. Salin Client ID & Client Secret ke .env
  5. (Opsional Classroom) enable Google Classroom API di project yang sama

Setup Gemini

  1. Buka https://aistudio.google.com/apikey
  2. Buat API key → paste ke GEMINI_API_KEY

5. Buat database & migrasi

Pastikan MySQL sudah jalan, lalu:

# Opsi A: helper (XAMPP/Laragon root tanpa password)
php create-database.php

# Opsi B: manual di MySQL
# CREATE DATABASE todos_ai CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

php artisan migrate

6. Jalankan aplikasi

Cara cepat (disarankan) — server + queue + log + Vite sekaligus:

composer dev

Akses: http://localhost:8000

Cara terpisah (jika butuh kontrol manual):

# Terminal 1
php artisan serve

# Terminal 2
npm run dev

# Terminal 3 (opsional — job queue)
php artisan queue:listen --tries=1

7. Login

Buka http://localhost:8000 → klik "Masuk dengan Google".

Tidak ada form email/password. Login hanya via Google OAuth.


Setup Alternatif Sekali Jalan

composer setup

Perintah ini menjalankan: composer install → salin .env jika belum ada → key:generate → migrate → npm install → npm run build.

Setelah itu tetap isi kredensial Google/Gemini di .env, lalu composer dev.


Build Produksi (Frontend)

npm run build

Verifikasi

composer test     # PHPUnit / Pest
npm run build     # pastikan aset frontend build sukses

Perintah Artisan Berguna

# Sync Google Classroom (user id tertentu)
php artisan classroom:sync --user=1

# Recalculate kuadran Eisenhower (dry-run dulu)
php artisan todos:recalculate-kuadran --dry-run

# Kirim notifikasi (local: manual / dry-run)
php artisan notification:send-reminders --type=deadline --dry-run
php artisan notification:send-reminders --type=overdue --dry-run

# Set webhook Telegram — JANGAN di local tanpa URL ngrok eksplisit
# php artisan telegram:set-webhook https://xxxx.ngrok-free.app/api/telegram/webhook

Scheduler Production

Hanya berjalan di environment production (lihat routes/console.php). Local dev: scheduler tidak jalan otomatis.

Command Interval Fungsi
notification:send-reminders --type=deadline 1 menit Pengingat tenggat tugas
notification:send-reminders --type=overdue 1 menit Peringatan tugas terlambat
notification:send-reminders --type=daily 1 menit Rangkuman harian (cek preferensi waktu user)
classroom:sync 6 jam Ambil tugas baru dari Google Classroom
todos:recalculate-kuadran 1 jam Update kuadran Eisenhower berdasarkan sisa waktu

Di production, pastikan cron:

* * * * * cd /path/to/todos && php artisan schedule:run >> /dev/null 2>&1

Troubleshooting

Gejala Solusi
Error koneksi DB Pastikan MySQL jalan, cek DB_* di .env, database todos_ai sudah dibuat
Login Google gagal / redirect mismatch Samakan APP_URL + redirect URI di Google Console dengan GOOGLE_REDIRECT_URI
Halaman tanpa CSS Jalankan npm run dev atau npm run build
AI tidak merespons Cek GEMINI_API_KEY valid di .env, lalu php artisan config:clear
Queue tidak jalan Pastikan composer dev atau php artisan queue:listen aktif
Classroom sync gagal Enable Classroom API, pastikan user sudah re-login Google dengan scope yang cukup

Konvensi Ringkas

  • Controller orchestrate, business logic ke app/Services/
  • Validation di app/Http/Requests/{Domain}/ — pakai rule OwnedByUser untuk FK sensitif (cegah lintas user)
  • Authorization via Policy + $this->authorize()
  • Response JSON pakai App\Support\ApiResponse
  • Konstanta di config/ (todos, ai, telegram, services)
  • UI Bahasa Indonesia, kode English, commit prefix English (feat:, fix:, refactor:, UI:, docs:)
  • Database: MySQL only. Raw SQL pakai CURDATE(), TIMESTAMPDIFF(). Jangan SQLite-specific
  • Telegram input: selalu escape via htmlspecialchars(...) lewat $this->esc() helper

About

AI-assisted task manager with Google Classroom sync, Gemini, Telegram reminders, and Eisenhower prioritization.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages