A college assignment reminder app with task, GPA, and schedule tracking, Siakang sync, and notifications.
- Task management with priority flags and due-date tracking
- Course content CRUD with Excel import and template download
- Weekly schedule with overlap detection and multi-week navigation
- Monthly task calendar with status badges and overdue highlighting
- Dashboard analytics with bar chart and semester overview
- Assessment and GPA tracking per semester and cumulative
- Custom grade scale management
- Siakang sync for grades and schedules via siakang-scrapling
- Notification channels: email, telegram, or both with test button
- Queued email delivery and Telegram MarkdownV2 formatting
- User settings for profile, password, and notification preferences
- Theme support: light, dark, and system
- Responsive design for mobile, tablet, and desktop
- Sanctum SPA auth with email verification and password reset
- Frontend: React 19, Vite 8, Tailwind 4, shadcn/ui, React Router 7, Zustand, Chart.js
- Backend: Laravel 13 (PHP 8.3), Sanctum, Octane, Excel 4.0, Pest 5
- Bridge: Python 3.11 +
uv+siakang-scrapling
Prerequisites: PHP 8.3+, Composer, Node 20+, pnpm 11+, Python 3.11 + uv, MySQL
# Backend
cd server
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate
cd siakang-sync && uv sync && cd ..
# Frontend
cd client
pnpm installKey env: DB_DATABASE, QUEUE_CONNECTION=database, FRONTEND_URL, TELEGRAM_BOT_TOKEN (see .env.example)
# Terminal 1 — API :8000 + queue + logs
cd server && composer run dev
# Terminal 2 — SPA :5173
cd client && pnpm devcd server && php artisan test # 218 tests (Feature + Unit)
cd server && php artisan test --testsuite=Feature
cd server && php artisan test --testsuite=Unit
cd server && php artisan queue:listen --tries=1
cd server && php artisan notifications:reminder
cd server && ./vendor/bin/pint
cd client && pnpm lint && pnpm build
cd client && pnpm test # 97 tests Vitest + jsdom + Testing Library- Settings → Siakang → enter Siakang email and password (encrypted, validated first)
- Open Assessments or Course Contents → Sync from Siakang → pick a Siakang semester
- Data is imported into the semester currently viewed in the app
