1. 27 Jul, 2026 10 commits
    • Mahmoud Aglan's avatar
      Mobile API Phase 8: Profile, photo upload, branches, health check, tests · 11ad998e
      Mahmoud Aglan authored
      - Profile view/edit (personal info + emergency contact)
      - Photo upload for profile and participant (multipart, 5MB max)
      - Branch locator endpoint (coordinates, operating hours, phone)
      - Health check endpoint (GET /health — no DB, instant response)
      - API response headers middleware (X-Request-Id, X-Api-Version)
      - Feature test suite: 17 tests covering auth, public access, rate
        limiting, and validation across all endpoint groups
      - 53 total API endpoints
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      11ad998e
    • Mahmoud Aglan's avatar
      Mobile API Phase 7: Evaluations, dashboard, service requests, receipts · 8504dd68
      Mahmoud Aglan authored
      - Evaluation list + detail with per-criterion scores and percentages
      - Dashboard endpoint: single-call home screen (all children, today's
        sessions, totals, announcement bar, unread counts)
      - Service requests: freeze/unfreeze/transfer/cancellation workflow
        with duplicate prevention and cancel-by-user
      - Invoice detail + payment receipt endpoints for mobile viewing
      - Fix: use correct column name `due_amount` (not `balance_due`) across
        all API controllers and PaymobService
      - 48 total API endpoints
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      8504dd68
    • Mahmoud Aglan's avatar
      Mobile API Phase 6: Wallet, installments, documents, events, orders + rate limiting · 30e19414
      Mahmoud Aglan authored
      - Wallet balance + transaction history per participant
      - Installment/payment plan tracking with progress percent
      - Document listing with expiry status summary
      - Event detail + registration from mobile (duplicate check)
      - Product order flow with Paymob fallback (graceful when unconfigured)
      - API rate limiting: 60/min general, 10/min auth, 3/min OTP, 5/min payments
      - Production-safe error responses (no stack traces when APP_DEBUG=false)
      - 40 total API endpoints
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      30e19414
    • Mahmoud Aglan's avatar
      Harden Paymob integration with 4-tier credential fallback · 0aea2391
      Mahmoud Aglan authored
      Credential resolution order: academy system_settings → current_academy
      setting → config/services.php → env variable. Callback endpoint now
      resolves academy from the payment record itself (no auth context needed).
      Failed payments are explicitly marked with failure reason. Added HTTP
      timeouts to all Paymob API calls.
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      0aea2391
    • Mahmoud Aglan's avatar
      Mobile API Phase 4+5: Paymob payments, absence reporting, messaging · ef15aa1b
      Mahmoud Aglan authored
      - Paymob gateway integration (auth→order→payment key→HMAC callback)
      - Payment initiation endpoint with pending record + iframe URL
      - Webhook callback with double-processing prevention
      - Guardian absence reporting (excused status for future sessions)
      - Contact messages (send + list with reply support)
      - System settings migration seeding all mobile/payment config keys
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      ef15aa1b
    • Mahmoud Aglan's avatar
      Mobile API Phase 3: Academy explore + shop endpoints · 40734561
      Mahmoud Aglan authored
      - Create AcademyController (public, no auth required):
        - GET academy/news — paginated news articles with images
        - GET academy/news/{uuid} — full article body
        - GET academy/programs — active training programs with activity info
        - GET academy/events — upcoming published events with registration status
        - GET academy/gallery — paginated media gallery
      - Create ShopController (auth required):
        - GET products — essential products with purchase history check
          (includes already_purchased_at per participant per year)
      - Total: 26 API endpoints
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      40734561
    • Mahmoud Aglan's avatar
      Mobile API Phase 2: Push notifications via Firebase Cloud Messaging · 0b2c6122
      Mahmoud Aglan authored
      - Install kreait/firebase-php SDK
      - Create PushNotificationService with 3-tier credential resolution
        (system_settings → storage file → env var, graceful degradation)
      - Auto-deactivate invalid/unregistered FCM tokens on send failure
      - Add Push case to NotificationChannel enum
      - Create 6 event listeners for push notifications:
        - AttendanceMarked → notify guardians (present/absent)
        - PaymentReceived → confirm payment to guardians
        - InvoiceCreated → alert guardians of new invoice
        - SessionCancelled → notify all group participants
        - EnrollmentCreated → confirm enrollment to guardians
        - EvaluationShared → notify guardians of new evaluation
      - Register all listeners in EventServiceProvider (queued)
      - Create NotificationController API endpoints:
        - GET notifications (paginated + unread count)
        - PATCH notifications/{id}/read
        - POST notifications/read-all
        - GET/POST notifications/preferences
      - Create scheduled push commands:
        - push:session-reminder (every minute, 30min before session)
        - push:installment-due (daily, 1 and 3 days before due)
      - Add channel_push column to notification_preferences
      - Total: 20 API endpoints now live
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      0b2c6122
    • Mahmoud Aglan's avatar
      Mobile API Phase 1: Sanctum auth, OTP flow, participant endpoints · 7a8a5594
      Mahmoud Aglan authored
      - Install Laravel Sanctum, add HasApiTokens to User model
      - Register API routes under /api/v1/ prefix in bootstrap/app.php
      - Create AppConfigController (public): academy branding, feature flags, auth mode
      - Create AuthOtpController: OTP request/verify with demo mode, rate limiting
      - Create DeviceController: FCM token register/refresh/delete
      - Create ParticipantController: children, show, summary, schedule, attendance, invoices, enrollments
      - Create API Resources (User, Participant, Session, Attendance, Invoice, Enrollment)
      - Create device_tokens migration with platform CHECK constraint
      - Create DeviceToken model with BelongsToAcademy trait
      - Add mobile API implementation plan document
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      7a8a5594
    • Mahmoud Aglan's avatar
      Rewrite mobile app plan — per-instance architecture + Firebase + demo auth · 0da841fd
      Mahmoud Aglan authored
      - One app per client: single instance.dart config file change = new build
      - Firebase: one project per client, service account JSON uploaded to system settings
      - Auth: demo mode (OTP=123456) for testing, real SMS when provider configured
      - Runtime branding: logo/colors fetched from /api/v1/app/config, not hardcoded
      - Full Firebase setup checklist, notification flow diagram, deployment checklist
      - New client deployment: Firebase (5min) + Flutter build (5min) + config (2min)
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      0da841fd
    • Mahmoud Aglan's avatar
      Add essential product duplicate warning in POS + update mobile app plan · 733ed4d3
      Mahmoud Aglan authored
      POS Terminal now checks if an essential product was already purchased by
      the selected participant this year. Shows amber warning with the purchase
      date — allows the sale to proceed, just warns the admin.
      
      Also expanded mobile app plan with: explore academy (news, gallery),
      shop for essential products from app, event registration, and the
      corresponding API endpoints needed on the system side.
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      733ed4d3
  2. 26 Jul, 2026 14 commits
  3. 25 Jul, 2026 14 commits
  4. 24 Jul, 2026 2 commits