← Back to blog

March 8, 2026

How I Built a Lead Capture System Using Laravel and Filament

In 2026, I decided to rebuild my developer portfolio with a clear goal: turn it into more than just a showcase website. I wanted it to act as a lead generation system—capable of capturing leads, scoring them automatically, initiating follow-ups, and providing a dashboard for management. This article details how I built the system step by step, including architecture, tools, and automation strategies.

How I Built a Lead Capture System Using Laravel and Filament

The Problem: Most Portfolios Don’t Capture Leads

Most developer portfolios suffer from the same problem:

  • They display projects.

  • They have a contact form.

  • But they don’t generate actionable leads.

A typical scenario:

  1. Someone submits a message.

  2. It arrives in your inbox.

  3. You reply manually.

  4. No tracking, scoring, or follow-up occurs.

I wanted to solve this by creating a mini CRM directly in my portfolio, where leads are automatically categorized and nurtured.


Tech Stack: Choosing Speed and Maintainability

The stack was selected for quick development and ease of maintenance:

Backend:

  • Laravel 12

  • SQLite (development)

  • Jobs and queues for automation

Admin Panel:

  • Filament 5

Frontend:

  • Blade templates

  • Tailwind CSS v4

  • Alpine.js

  • Livewire

Build Tools:

  • Vite for asset compilation

This setup allowed me to build a fully functional app without heavy frontend frameworks.


System Architecture

The portfolio is divided into three main layers:

1️⃣ Frontend: Lead Capture

The landing page includes multiple sections:

  • Hero

  • Problem statement

  • Case studies

  • Portfolio

  • Blog

  • Contact

The contact form is the entry point of the funnel.

2️⃣ Backend: Lead Management

When a user submits a contact form:

A Lead record is created:

| Field | Description |

|-------|-------------|

| project_type | Type of project |

| budget_range | Budget range |

| urgency | Urgency level |

| score | Calculated lead score |

| status | Pipeline stage (new, contacted, etc.) |

A ContactMessage record is also created to separate lead data from the user’s message.

3️⃣ Admin Panel: Filament Resources

All lead management happens through Filament, including:

  • Leads

  • Projects

  • Blog posts

  • Services

  • Skills

  • Contact messages

The dashboard includes widgets for visualizing lead metrics:

  • Leads this month

  • Hot leads

  • Conversion rate

  • Latest leads


The Livewire Lead Form

I implemented the form using Livewire, which enables reactive validation and logic without heavy JavaScript.

Form fields:

  • Name

  • Email

  • Project type

  • What they want to automate

  • Budget

  • Urgency

Workflow on submission:


Lead Scoring Automation

One of the most critical features is lead scoring, which helps prioritize high-value leads.

Each lead gets a score from 0–15 based on:

  • Budget

  • Urgency

  • Project type

Example scoring logic:

| Factor | Points |

|--------|--------|

| Budget > $5000 | +5 |

| Urgency High | +4 |

| Automation Project | +3 |

Leads are classified automatically as:

  • Cold

  • Warm

  • Hot

This enables quick prioritization in the admin dashboard.


Automated Follow-Up Sequence

Once a lead is created, the system triggers an automatic follow-up flow:

  • Immediate email to the client

  • Follow-up at +2 days

  • Follow-up at +5 days

  • Follow-up at +10 days

This is handled using Laravel jobs and the scheduler, ensuring no lead is left behind.

Main job: SendLeadFollowup


Email Provider Integration

The system can sync leads with an email marketing provider (Brevo) via a webhook.

Job: SyncLeadToEmailProvider

Environment variables in .env:

This allows:

  • CRM tracking

  • Adding leads to a mailing list

  • Automated email campaigns


Sales Pipeline

Each lead progresses through a simple pipeline:

  • New

  • Contacted

  • Meeting Scheduled

  • Proposal Sent

  • Won

  • Lost

This transforms the portfolio into a mini CRM for sales follow-ups.


SEO Integration

I also integrated basic SEO best practices:

  • Dynamic meta titles and descriptions

  • Open Graph tags

  • Sitemap.xml

  • robots.txt

  • Schema.org: Person and Website

The blog supports SEO-friendly content:


Results

The result is a fully functional lead generation system embedded in a portfolio, including:

  • Optimized landing page

  • Intelligent contact form

  • Lead scoring and classification

  • Automated email sequence

  • Admin panel with pipeline visualization

All built with Laravel + Filament + Livewire.


Next Steps and Improvements

Planned improvements:

  • Individual project pages for better SEO

  • Full blog index page

  • Project image galleries

  • Automated tests

  • Production deployment with queue workers


Conclusion

A portfolio doesn’t need to be static.

With Laravel, Livewire, and Filament, it’s possible to build a complete lead capture system that generates opportunities automatically.

This approach turns a simple portfolio into a business-generating machine.

Related articles