A full-stack project management platform I built for Kellett Communications, covering the complete agency workflow — projects, billing, estimates, invoicing, time tracking, and hosting management.














Lighthouse is a purpose-built project management platform I designed and built for Kellett Communications, the agency I work for. It consolidates the full agency workflow into one internal tool — from client intake and project delivery through billing, invoicing, and payment collection.
The codebase has grown over several years of daily use into a mature Laravel monolith with a Blade/Vue frontend, 40+ models, and integrations with Stripe, Harvest, and Google.
The home dashboard is built around an Active Priorities system. Each team member maintains their own ranked list of what they're actively working on — each priority is tied to a project, can have specific deliverables assigned, and supports its own tasklists. The dashboard surfaces every team member's priorities simultaneously, giving the whole team a live view of who is working on what without a separate standup process. Priorities can be reordered along two independent axes: by project (shared across the team) and by personal rank.
Projects are broken into deliverables — discrete work items with configurable statuses, priorities, deadlines, and activity logs. Status types are not hardcoded; admins can define and manage the available workflow states system-wide. Projects have a discussion thread with file attachments; attachments can be downloaded individually or as a ZIP.
Tasklists are available on projects, deliverables, and active priorities. Each list has drag-to-reorder items, completion tracking, cloning, and import. They're a lightweight task layer that sits below the deliverable level without requiring a full sub-project structure.
A CRM layer on client profiles covers the account relationship: a health indicator bar (active project count, last invoice date, open invoices), pinnable spotlight notes with Markdown and image upload, follow-up tasks with assignees and scheduled email reminders, and an opportunity pipeline. The pipeline tracks pre-project work from prospecting through to won/lost and surfaces all open opportunities on a dedicated dashboard view with drag-to-reorder across status stages.
Estimates are built against project deliverables, previewed internally, and shared with clients via token-based links — no login required to view or approve. Client approval triggers an automated confirmation email to the client and an internal notification to staff, both with the PDF attached. Estimates can be cloned as a starting point for similar projects.
A dedicated billing workflow for media buying tracks advertising placements across publications. Each insertion order captures gross and net pricing per publication and ad size, follows the same send/preview/PDF/approve lifecycle as estimates and invoices, and is managed through its own publication and ad size reference data.
Invoices follow the same lifecycle as estimates: internal preview, token-based client access, PDF export, and email delivery. Online payment is handled via Stripe — clients pay directly from the invoice preview page, which triggers a payment receipt email to the client and an internal payment notification to staff. Invoices can also be marked paid manually or voided. A fiscal report view covers all invoices with CSV and Excel export.
Client hosting records track domains and billing plans. A bulk invoicing workflow generates renewal invoices for multiple hosting clients at once, with optional email delivery per client.
Lighthouse provides a full time-tracking interface backed by the Harvest API. Time entries are created, edited, and managed directly within the app — Harvest is the source of truth, but all interaction happens in Lighthouse. This includes features not available natively in Harvest, such as resuming a prior entry: cloning a time entry from a previous day to the current day with its task and notes intact, so ongoing work can be continued without re-entering context. Entries are mapped to billable/non-billable Harvest task categories per deliverable and feed directly into billing calculations.
Authentication & access control uses Laravel Fortify with Google OAuth and two-factor authentication support. Four roles — admin, staff, contractor, and client — are enforced through Laravel Policies throughout. Clients can log in to view their own projects, estimates, and invoices, or access documents directly via token-based links without a login. Contractors are scoped to their assigned work only.
Billing abstraction: estimates, invoices, and insertion orders share a common send/preview/PDF lifecycle implemented via a Paperwork trait used across three controllers. This keeps the shared logic in one place while allowing each document type to have its own line-item model, approval flow, and PDF layout.
Email system: 10 Mailable classes cover the full transactional surface — account invitations, paperwork delivery, payment receipts, client task reminders, project comment notifications, and internal alerts. Client-facing emails use a branded layout with the agency logo and footer; internal notifications use a stripped-down layout. Several actions trigger two simultaneous emails (one to the client, one to staff), coordinated from a single controller action.
Web push notifications alert team members to project activity in real time.
PDF export runs via DomPDF across estimates, invoices, insertion orders, and fiscal reports.