Skip to content

v1.1.0 — Safer Profiles, Richer Identity, and Better Visibility

Latest

Choose a tag to compare

@SignalByNick SignalByNick released this 22 Jul 01:16
1b955a1

Laravel Persona v1.1.0 🎉

Laravel Persona v1.1.0 adds safer profile tooling, richer profile metadata, username history, profile badges, detailed view tracking, validation helpers, and expanded documentation.

This release builds on the stable v1.0.0 foundation while keeping the existing package structure and public API intact.

✨ New Features

  • Detailed profile view records
  • Profile view pruning command
  • Username history tracking
  • Reserved username protection
  • Safe profile URL validation
  • Profile badges
  • Badge awarding and revocation helpers
  • Active badge checks
  • Profile completeness scoring
  • Profile completion checklist
  • Last viewed timestamp support
  • Featured links support
  • SEO title support
  • SEO description support
  • Social sharing metadata helper
  • Optional enhanced Persona model
  • Persona manager service
  • Persona facade
  • Visibility middleware
  • Username-changed event
  • Badge-awarded event
  • Comment-created event
  • Additional PHPUnit coverage
  • Expanded PHPStan-friendly typing
  • Updated release guidance
  • Expanded documentation

📊 Profile Views

Persona now supports detailed profile view records.

In addition to the existing profile view counter, applications can store more context about profile visits, including:

  • Profile ID
  • Viewer ID
  • Session ID
  • Hashed IP address
  • Hashed user agent
  • Referrer
  • Source
  • Metadata
  • Viewed timestamp

Example:

$profile->recordDetailedView(
    request: request(),
    viewer: auth()->user(),
    metadata: [
        'source' => 'profile-page',
    ],
);

Old profile view records can be pruned with:

php artisan persona:prune-views --days=365 --dry-run
php artisan persona:prune-views --days=365 --force

🪪 Username History

Persona can now preserve username history when users change their public slug.

This helps applications support redirects from old usernames to the current profile URL.

$profile->changeUsernameWithHistory(
    username: 'signal-nick',
    changedBy: auth()->user(),
    reason: 'User requested username change.',
);

🚫 Reserved Usernames

Persona now includes reserved username protection for names that should not be used as public profile slugs.

Examples include:

  • admin
  • administrator
  • api
  • app
  • billing
  • dashboard
  • login
  • register
  • settings
  • staff
  • support
  • system

Validation example:

use EloquentWorks\Persona\Rules\ReservedPersonaUsername;

'slug' => [
    'required',
    'string',
    new ReservedPersonaUsername(),
],

🔗 Safe Profile URLs

Persona now includes a validation rule for safer public profile URLs.

This helps block unsafe URL schemes while allowing normal http and https links.

use EloquentWorks\Persona\Rules\SafeProfileUrl;

'website_url' => [
    'nullable',
    'url',
    new SafeProfileUrl(),
],

🏅 Profile Badges

Persona now supports profile badges.

Applications can use badges for verified users, staff, founders, contributors, creators, and other profile awards.

$profile->awardBadge('verified');

$profile->hasActiveBadge('verified');

$profile->revokeBadge('verified');

✅ Profile Completeness

Persona now includes helpers for calculating profile completeness.

$score = $profile->refreshCompleteness();

$checklist = $profile->completionChecklist();

This can be used to encourage users to finish setting up their profile.

🧾 SEO and Sharing

Persona now includes helpers for SEO and social sharing metadata.

$profile->safeSeoTitle();

$profile->safeSeoDescription();

$profile->socialShareMeta();

This makes it easier to build clean public profile pages with Open Graph and social preview support.

💬 Profile Comments

Documentation has been expanded to include how to retrieve comments, not just create them.

Examples now cover:

  • Retrieving all comments
  • Retrieving approved comments
  • Retrieving top-level comments
  • Loading replies
  • Paginating comments
  • Counting comments
  • Rendering comments in Blade

Example:

$comments = $profile->comments()
    ->approved()
    ->topLevel()
    ->with([
        'replies' => fn ($query) => $query
            ->approved()
            ->oldest(),
    ])
    ->latest()
    ->paginate(15);

🗃️ Database Changes

Laravel Persona v1.1.0 adds new additive migrations.

Existing v1.0.0 migrations are not renamed or modified.

New migrations include:

2026_07_11_000002_create_persona_views_table.php
2026_07_11_000003_create_persona_username_histories_table.php
2026_07_11_000004_create_persona_badges_table.php
2026_07_11_000005_add_persona_v1_1_profile_columns.php

New profile columns include:

  • featured_links
  • seo_title
  • seo_description
  • profile_completeness_score
  • profile_completed_at
  • last_viewed_at

📚 Documentation

Documentation has been expanded in the docs/ directory and includes:

  • Installation
  • Configuration
  • Usage
  • Routes
  • Profile Comments
  • Retrieving Comments
  • Customization
  • Testing
  • Profile Views
  • Username History
  • Reserved Usernames
  • Safe URLs
  • Profile Badges
  • Profile Completeness
  • SEO and Sharing
  • Security
  • Upgrade Guide

✅ Supported Versions

  • PHP 8.2+
  • Laravel 12
  • Laravel 13

🚀 Installation

Install Laravel Persona:

composer require eloquent-works/persona

Then install the package:

php artisan persona:install

Run migrations:

php artisan migrate

⬆️ Upgrading from v1.0.0

Update the package:

composer require eloquent-works/persona:^1.1

Publish the new migrations:

php artisan vendor:publish --tag=persona-migrations

Run migrations:

php artisan migrate

Clear cached configuration:

php artisan optimize:clear

🧰 Quality Checks

Before deploying, run:

composer validate --strict
composer format
composer analyse
composer test

Or run the complete quality suite:

composer quality

❤️ Thank You

Thank you for using Laravel Persona.

Feedback, feature requests, bug reports, documentation improvements, and pull requests are always welcome.