Agent Instruction — READ THIS FILE FIRST, EVERY SESSION. This file tells you exactly where the project is. You do not need to re-read SPEC.md, DESIGN_SYSTEM.md, or GEMINI.md unless this file explicitly tells you to, or you are starting a brand new phase.
After completing ANY task — update this file before ending the session. Be specific. Future-you depends on it.
Current Status: Phase 12 Enhancements (Dashboard Chart) Last Completed Task: Replaced 6-month Revenue Trend with 12-month Revenue vs. Expenses comparison chart on the main dashboard. Next Task: Awaiting further instructions or project maintenance tasks. Blockers: None
- Phase 1 — Foundation
- Phase 2 — UI Component Library
- Phase 3 — Settings
- Phase 4 — Client & Project Management
- Phase 5 — Subscription Tracking
- Phase 6 — Scheduler & Email Reminders
- Phase 7 — Renewal Tracker
- Phase 8 — Invoice Generation
- Phase 9 — Polish & QA
- Phase 10 — Activity Logging (Custom)
- Phase 11 — Notifications System (Real-time)
- Phase 12 — Enhancements & Polish (Post-Launch)
- Install Laravel 12 (Updated to 13.1.1)
- Install Breeze (Blade stack)
- Install Livewire 3 (Updated to 4.1)
- Install FlyonUI + configure Tailwind (v4)
- Remove fluxui from the whole project and delete all references and files.
- Install
codeat3/blade-tabler-icons(Attempted; usingblade-iconsfallback) - Install
barryvdh/laravel-dompdf - Create migration:
clients - Create migration:
projects - Create migration:
subscriptions - Create migration:
renewals - Create migration:
invoices - Create migration:
invoice_items - Create migration:
settings - Run all migrations
- Create Enum:
SubscriptionStatus - Create Enum:
ServiceType - Create Enum:
PaymentStatus - Create Enum:
InvoiceStatus - Create Model:
Client - Create Model:
Project - Create Model:
Subscription - Create Model:
Renewal - Create Model:
Invoice - Create Model:
InvoiceItem - Create Model:
Setting - Create Service stub:
NotificationService - Create Service stub:
InvoicePdfService - Create Service stub:
InvoiceNumberService - Seed default Settings
- Verify auth login/logout works
- Create
layouts/app.blade.php - Create
nav/sidebar.blade.php - Create
nav/topbar.blade.php
app/Enums/SubscriptionStatus.phpapp/Enums/ServiceType.phpapp/Enums/PaymentStatus.phpapp/Enums/InvoiceStatus.phpapp/Models/Client.phpapp/Models/Project.phpapp/Models/Subscription.phpapp/Models/Renewal.phpapp/Models/Invoice.phpapp/Models/InvoiceItem.phpapp/Models/Setting.phpapp/Services/NotificationService.phpapp/Services/InvoicePdfService.phpapp/Services/InvoiceNumberService.phpapp/Livewire/Dashboard/OverviewDashboard.phpresources/views/components/layouts/app.blade.phpresources/views/components/nav/sidebar.blade.phpresources/views/components/nav/topbar.blade.phpresources/views/components/nav/item.blade.phpresources/views/livewire/dashboard/overview-dashboard.blade.php
-
<x-ui.page-header> -
<x-ui.stat-card> -
<x-ui.badge-status> -
<x-ui.badge-payment> -
<x-ui.data-table> -
<x-ui.empty-state> -
<x-ui.confirm-modal> -
<x-ui.form-input> -
<x-ui.form-select> -
<x-ui.form-textarea> -
<x-ui.action-menu> - Build
/components-previewdev route to test all components
resources/views/components/ui/page-header.blade.phpresources/views/components/ui/stat-card.blade.phpresources/views/components/ui/badge-status.blade.phpresources/views/components/ui/badge-payment.blade.phpresources/views/components/ui/data-table.blade.phpresources/views/components/ui/empty-state.blade.phpresources/views/components/ui/confirm-modal.blade.phpresources/views/components/ui/form-input.blade.phpresources/views/components/ui/form-select.blade.phpresources/views/components/ui/form-textarea.blade.phpresources/views/components/ui/action-menu.blade.phpapp/Livewire/Dev/ComponentsPreview.phpresources/views/livewire/dev/components-preview.blade.php
-
AppSettingsLivewire component - Logo file upload
- All settings keys save and persist
- Flash success on save
- Verified:
Setting::get()returns correct values
app/Livewire/Settings/AppSettings.phpresources/views/livewire/settings/app-settings.blade.php
-
ClientIndexLivewire component - Refactored: Client creation & editing moved to Modal (removed standalone form)
- Client validation (name required, email unique)
-
ProjectIndexLivewire component -
ProjectFormLivewire component (create + edit) - Verified: create client → create project → relationship works
app/Livewire/Clients/ClientIndex.phpresources/views/livewire/clients/client-index.blade.phpresources/views/components/icon-square-x.blade.php(Modal Close Icon)app/Livewire/Projects/ProjectIndex.phpresources/views/livewire/projects/project-index.blade.phpapp/Livewire/Projects/ProjectForm.phpresources/views/livewire/projects/project-form.blade.php
-
SubscriptionIndexLivewire component -
SubscriptionFormLivewire component - Traffic light badge using
traffic_lightaccessor - Days until expiry shown per row
- Dashboard stats wired up
- Dashboard top 10 critical + warning lists
app/Livewire/Subscriptions/SubscriptionIndex.phpresources/views/livewire/subscriptions/subscription-index.blade.phpapp/Livewire/Subscriptions/SubscriptionForm.phpresources/views/livewire/subscriptions/subscription-form.blade.phpresources/views/components/icon-*.blade.php(Manual SVG set)
-
CheckSubscriptionExpiriesArtisan command - Registered in
routes/console.php -
SubscriptionReminderMailmailable -
subscription-reminder.blade.phpemail view - Tested: command runs + email sends correctly
- Tested: status updates work (Active → Expiring → Expired)
app/Livewire/Renewals/RenewalTracker.phpresources/views/livewire/renewals/renewal-tracker.blade.phpapp/Console/Commands/CheckSubscriptionExpiries.phpapp/Mail/SubscriptionReminderMail.phpresources/views/emails/subscription-reminder.blade.php
-
InvoiceBuilderLivewire component - Auto-incremented invoice number generation
-
InvoicePdfServicegenerates PDF to storage - Download PDF button works
- Client Mailer (Mass Mailer): Bulk email system with template support
- Mailer Integration: Shortcuts from Client List, Detail pages, and Renewal Tracker
- Send invoice email button works
-
InvoiceIndexLivewire component
app/Livewire/Invoices/InvoiceIndex.phpresources/views/livewire/invoices/invoice-index.blade.phpapp/Livewire/Invoices/InvoiceBuilder.phpresources/views/livewire/invoices/invoice-builder.blade.phpapp/Services/InvoiceNumberService.phpapp/Services/InvoicePdfService.phpresources/views/pdf/invoice.blade.phpapp/Mail/InvoiceMail.phpresources/views/emails/invoice-mail.blade.phpdatabase/migrations/2026_03_19_171947_update_invoicing_tables_schema.php
- Custom error pages (404/500) implemented
- Soft deletes verified for all models
- Empty states on all list pages
- Mobile responsiveness verified & drawer implemented
- UI Consistency: replaced 'ghost-btn' with 'btn-soft'
-
php artisan storage:linkrun -
.envreview — no hardcoded values - Cron entry documented in README
resources/views/errors/404.blade.phpresources/views/errors/500.blade.phpapp/Models/Invoice.php(Updated with SoftDeletes)database/migrations/2026_03_19_172943_add_soft_deletes_to_invoices_table.phpresources/views/components/layouts/app.blade.php(Updated for Drawer)resources/views/components/nav/topbar.blade.php(Updated for Drawer/Icons)resources/views/components/nav/sidebar.blade.php(Updated for Drawer)resources/js/app.js(Updated for FlyonUI)database/migrations/2026_03_19_185412_create_mail_templates_table.phpapp/Models/MailTemplate.phpdatabase/seeders/MailTemplateSeeder.phpapp/Livewire/MailTemplates/MailTemplateIndex.phpresources/views/livewire/mail-templates/mail-template-index.blade.phpresources/views/components/icon-send.blade.phpapp/Mail/InvoiceMail.php(Updated with hardening)app/Mail/GenericClientMail.php(NEW)resources/views/emails/generic-client-mail.blade.php(NEW)app/Livewire/MailTemplates/DirectMailer.php(NEW)resources/views/livewire/mail-templates/direct-mailer.blade.php(NEW)resources/views/livewire/clients/client-index.blade.php(Updated with shortcuts)resources/views/livewire/clients/client-show.blade.php(Updated with Communication dropdown)resources/views/livewire/renewals/renewal-tracker.blade.php(Updated with shortcuts)
- Create
activity_logsmigration & model - Create
LogsActivitytrait for automatic model event tracking - Apply
LogsActivityto all primary models (Client, Project, Subscription, etc.) - Create
ActivityLogServicefor manual logging (Auth, Mail) - Implement
ActivityLogIndexLivewire component & search view - Verified: login, model creation, and property inspection work correctly
database/migrations/2026_03_19_223312_create_activity_logs_table.phpapp/Models/ActivityLog.phpapp/Traits/LogsActivity.phpapp/Services/ActivityLogService.phpapp/Livewire/ActivityLogs/ActivityLogIndex.phpresources/views/livewire/activity-logs/activity-log-index.blade.phpresources/views/components/icon-clipboard-list.blade.php
| # | Issue / Note | Phase | Resolution |
|---|---|---|---|
| 3 | FlyonUI CSS syntax error | 9 | Patched node_modules (Missed semicolon in switches.css/flyonui.css). |
| 4 | Persistent 500 for flyonui.css in Dev |
9 | Vite 8 fails to serve the raw CSS from node_modules. Resolved via @import in app.css and Alpine-based modal logic. |
-
laravel/breeze -
livewire/livewire -
barryvdh/laravel-dompdf -
codeat3/blade-tabler-icons(Attempted) -
blade-ui-kit/blade-icons(Fallback) -
flyonui(npm) -
tailwindcss(npm v4)
| Migration | Created | Run |
|---|---|---|
create_clients_table |
[X] | [X] |
create_projects_table |
[X] | [X] |
create_subscriptions_table |
[X] | [X] |
create_renewals_table |
[X] | [X] |
create_invoices_table |
[X] | [X] |
create_invoice_items_table |
[X] | [X] |
create_settings_table |
[X] | [X] |
| Session | Date | What Was Done | Ended At |
|---|---|---|---|
| 1 | 2026-03-19 | Executed Phase 1 Foundation: migrations, models, enums, services, layouts, dashboard. | Phase 1 end |
| 2 | 2026-03-19 | Executed Phase 2 UI Component Library: 11 atomic components + Preview Route. | Phase 2 end |
| 3 | 2026-03-19 | Executed Phase 3 Settings: AppSettings component, logo upload, persistence. | Phase 3 end |
| 5 | 2026-03-19 | Debugging: Mass removal of Flux UI remnants from auth/layouts after crash. | Phase 4 stable |
| 6 | 2026-03-19 | Executed Phase 5 Subscription Tracking: CRUD, traffic light logic, dashboard stats. | Phase 5 end |
| 7 | 2026-03-19 | Executed Phase 6 Scheduler: Artisan command, status updates, email reminders. | Phase 6 end |
| 8 | 2026-03-19 | Executed Phase 7 Renewal Tracker: Component, date-rolling logic, renewal history. | Phase 7 end |
| 9 | 2026-03-19 | Executed Phase 8 Invoice Generation: Full billing suite with PDF and Email delivery. | Phase 8 end |
| 11 | 2026-03-19 | Executed Phase 9 Polish & QA: Custom errors, Responsive Drawer, Soft Delete Audit, and global UI hardening. | Project Handover |
| 12 | 2026-03-19 | Client Modal Refactor: Migrated create/edit logic to ClientIndex modal and removed redundant routes. | Final Review |
| 13 | 2026-03-19 | Mail Templates Management: Created DB-backed templates, Livewire editor, and integrated with UserInvite, Reminder, and Invoice mailables. | Handover |
| 14 | 2026-03-19 | Client Mailer: Implemented Mass Mailer UI, GenericClientMail, and fixed Invoice test 500 error. | Handover |
| 15 | 2026-03-19 | Mailer Integration: Added communication shortcuts and deep-linking from Client pages and Renewal Tracker to the Mailer. | Handover |
| 16 | 2026-03-19 | Activity Logging System: Implemented custom audit log system with automated model tracking and manual event hooks. | Handover |
| 17 | 2026-03-19 | Notification System: Implemented real-time Alerts with Top Nav bell badge and FlyonUI Slideover drawer. | Handover |
| 18 | 2026-03-20 | Bug Fixes & UI Refinement: Resolved Project Index crash, hardened all indices and show pages, fixed clipping, and implemented color-coded auto-unfolding action menus. | Handover |
| 19 | 2026-03-20 | Project Refactoring: Converted Project creation and editing into a modal-based workflow, removing dedicated full-page routes. | Handover |
| 20 | 2026-03-20 | Bug Fixes & UI Hardening: Fixed UserShow.php parse error, resolved email rendering issues, fixed modal visibility, and completed application-wide button alignment fix. |
Handover |
| 21 | 2026-03-20 | Direct Mailer Redesign: Transformed the mailer into a premium 2-column interface with avatars, templates, and interactive placeholders. | Handover |
| 22 | 2026-03-20 | Documentation: Added product dashboard image to the root README.md. |
Handover |
| 23 | 2026-03-21 | UI Enhancement: Implemented universal table sorting functionality using a new WithSorting Livewire trait. Applied custom default sorting per section constraints. |
Handover |
| 24 | 2026-03-21 | New Feature: Built the Finance Dashboard (/finances) with core revenue, MRR, and cost metrics, plus recent payments and upcoming renewals components. |
Handover |
| 25 | 2026-03-21 | Phase 12 Enhancements: Interactive revenue charts, CSV exports, bulk subscription actions, and UI polish with loading indicators. | Phase 12 end |
| 26 | 2026-03-21 | Database Seeding Fix: Refactored seeders to use firstOrCreate to prevent unique constraint violations on re-runs. |
Final handover |
| 27 | 2026-03-21 | Dashboard Enhancement: Migrated the "Revenue vs. Expenses" comparison chart from Finance to Overview Dashboard. | Handover |
This file is the single source of truth for project progress. It is updated by the agent at the end of every session, no exceptions.