Laravel News Links
So much for billable hours!
Artificial intelligence (AI) is having some unexpected consequences, and they’re still shaking themselves out as the impact spreads. Jeff Childers reports:
The Financial Times reported that KPMG— one of the world’s Big Four accounting firms— bullied its own auditor into a 14% fee cut. Their argument was elegant in its simplicity: if your AI is doing the work, your people shouldn’t be billing for it. KPMG’s hapless auditor, Grant Thornton, tried to kick but quickly folded like a WalMart lawn chair, dropping its auditing fee from $416,000 to $357,000.
And now every CFO on Earth is reaching for a calculator.
Here’s the dark comedy. Grant Thornton’s UK audit leader bragged in a December blog post that AI was making their work “faster and smarter.” KPMG took note, and immediately asked why it was still paying the slower-and-dumber price. This is why lawyers tell their clients to stop posting on social media. The marketing department just became the billing department’s worst enemy.
As a lawyer who bills by the hour —and I suspect many of you work in professions that do the same— I can assure everyone that this story sent a terrifying chill racing through the spines of every white-collar professional who’s been out there cheerfully babbling about AI adoption at industry conferences.
The billable hour has survived the fax machine, personal computers, email, electronic filing, spreadsheets, and the entire internet. The billable hour has the survival instincts of a post-apocalyptic cockroach and the institutional momentum of a Senate tradition. But AI might finally be the dinosaur killer, and KPMG just showed everyone exactly how the asteroid hits: your client reads your own press release and demands a discount.
. . .
The billable hour won’t die overnight. But it just got a terminal diagnosis. Every professional services firm that’s spent the last two years bragging about AI efficiency is now staring at the same problem: you can’t brag to your clients you’re faster and also charge them for the same number of hours. As they say at KPMG, it doesn’t add up. Somewhere in a law firm right now, a partner is quietly deleting a LinkedIn post about how AI is “transforming their practice.” Smart move.
There’s more at the link.
It’s not just company-to-company billing, either. How many professional services do we, as consumers, use, and get charged by the hour?
- Service your car – hourly charge for the mechanic.
- File your taxes – hourly charge by the tax preparer.
- Domestic services such as plumber, electrician, etc. – hourly rate for labor, plus parts, etc.
How many of these services will be affected by AI? Quite a few, I’m guessing. A mechanic can use AI to finish his repairs more quickly, as the software guides him through the process on an unfamiliar vehicle. The tax preparer is almost certainly going to use AI to do his job, so the number of hours they spend on the job should go down – and so should your bill. Even domestic service calls should be quicker and easier if the technician or professional can look up a reference to what he’s doing, possibly on equipment on which he’s never been trained, and do the job faster and better.
I think AI can be considered the monkey wrench that just got tossed into the professional billing pool. This should be interesting . . .
Peter
Bayou Renaissance Man
Laravel Ingest: A configuration-driven data import framework
https://repository-images.githubusercontent.com/1085312500/6ec13265-eaca-4031-81af-e2b0afc2099d
Stop writing spaghetti code for imports.
Laravel Ingest is a robust, configuration-driven ETL (Extract, Transform, Load) framework for Laravel. It replaces
fragile, procedural import scripts with elegant, declarative configuration classes.
Whether you are importing 100 rows or 10 million, Laravel Ingest handles the heavy lifting: streaming, chunking,
queueing, validation, relationships, and error reporting.
Most import implementations suffer from the same issues: memory leaks, timeouts, lack of validation, and messy
controllers.
Laravel Ingest solves this by treating imports as a first-class citizen:
- ♾️ Infinite Scalability: Uses Generators and Queues to process files of any size with flat memory usage.
- 📝 Declarative Syntax: Define what to import, not how to loop over it.
- 🧪 Dry Runs: Simulate imports to find validation errors without touching the database.
- 🔗 Auto-Relations: Automatically resolves
BelongsToandBelongsToManyrelationships (e.g., finding IDs by
names). - 🛡️ Robust Error Handling: Tracks every failed row and allows you to download a CSV of only the failures to fix
and retry. - 🔌 API & CLI Ready: Comes with auto-generated API endpoints and Artisan commands.
Full documentation is available at zappzerapp.github.io/laravel-ingest.
composer require zappzerapp/laravel-ingest # Publish config & migrations php artisan vendor:publish --provider="LaravelIngest\IngestServiceProvider" # Create tables php artisan migrate
Create a class implementing IngestDefinition. This is the only code you need to write.
namespace App\Ingest; use App\Models\User; use LaravelIngest\Contracts\IngestDefinition; use LaravelIngest\IngestConfig; use LaravelIngest\Enums\SourceType; use LaravelIngest\Enums\DuplicateStrategy; class UserImporter implements IngestDefinition { public function getConfig(): IngestConfig { return IngestConfig::for(User::class) ->fromSource(SourceType::UPLOAD) ->keyedBy('email') // Identify records by email ->onDuplicate(DuplicateStrategy::UPDATE) // Update if exists // Map CSV columns to DB attributes ->map('Full Name', 'name') ->map(['E-Mail', 'Email Address'], 'email') // Supports aliases // Handle Relationships automatically ->relate('Role', 'role', Role::class, 'slug', createIfMissing: true) // Validate rows before processing ->validate([ 'email' => 'required|email', 'Full Name' => 'required|string|min:3' ]); } }
In App\Providers\AppServiceProvider:
use LaravelIngest\IngestServiceProvider; public function register(): void { $this->app->tag([UserImporter::class], IngestServiceProvider::INGEST_DEFINITION_TAG); }
You can now trigger the import via CLI or API.
Via Artisan (Backend / Cron):
php artisan ingest:run user-importer --file=users.csv
Via API (Frontend / Upload):
curl -X POST \ -H "Authorization: Bearer <token>" \ -F "file=@users.csv" \ https://your-app.com/api/v1/ingest/upload/user-importer
Want to see Laravel Ingest in action? Check out our Laravel Ingest Demo repository for a complete working example.
# Clone the demo git clone https://github.com/zappzerapp/Laravel-Ingest-Demo.git cd Laravel-Ingest-Demo # Start and benchmark docker compose up -d docker compose exec app php artisan benchmark:ingest
Ingest runs happen in the background. You can monitor and manage them easily:
| Command | Description |
|---|---|
ingest:list |
Show all registered importers. |
ingest:status {id} |
Show progress bar, stats, and errors for a run. |
ingest:cancel {id} |
Stop a running import gracefully. |
ingest:retry {id} |
Create a new run containing only the rows that failed previously. |
The package automatically exposes endpoints for building UI integrations (e.g., React/Vue progress bars).
GET /api/v1/ingest– List recent runs.GET /api/v1/ingest/{id}– Get status and progress.GET /api/v1/ingest/{id}/errors/summary– Get aggregated error stats (e.g., "50x Email invalid").GET /api/v1/ingest/{id}/failed-rows/download– Download a CSV of failed rows to fix & re-upload.
Hook into the lifecycle to send notifications (e.g., Slack) or trigger downstream logic.
LaravelIngest\Events\IngestRunStartedLaravelIngest\Events\ChunkProcessedLaravelIngest\Events\RowProcessedLaravelIngest\Events\IngestRunCompletedLaravelIngest\Events\IngestRunFailed
To keep your database clean, logs are prunable. Add this to your scheduler:
$schedule->command('model:prune', [ '--model' => [LaravelIngest\Models\IngestRow::class], ])->daily();
The IngestConfig fluent API handles complex scenarios with ease.
IngestConfig::for(Product::class) // Sources: UPLOAD, FILESYSTEM, URL, FTP, SFTP ->fromSource(SourceType::FTP, ['disk' => 'erp', 'path' => 'daily.csv']) // Performance ->setChunkSize(1000) ->atomic() // Wrap chunks in transactions // Logic ->keyedBy('sku') ->onDuplicate(DuplicateStrategy::UPDATE_IF_NEWER) ->compareTimestamp('last_modified_at', 'updated_at') // Transformation ->mapAndTransform('price_cents', 'price', fn($val) => $val / 100) ->resolveModelUsing(fn($row) => $row['type'] === 'digital' ? DigitalProduct::class : Product::class);
See the Documentation for all available methods.
We provide a Docker-based test environment to ensure consistency.
# Start Docker composer docker:up # Run Tests composer docker:test # Check Coverage composer docker:coverage
We welcome contributions! Please see CONTRIBUTING.md for details.
The MIT License (MIT). Please see License File for more information.
Laravel News Links
San Diego’s sheriff told Americans how to “legally” transport their blasters and the comments made me proud 🇺🇸
https://media.notthebee.com/articles/698a3c3b45340698a3c3b45341.jpg
Fudds gonna Fudd.
Not the Bee
Imperial Stormtrooper Once Again Finishes Dead Last In Olympic Biathlon
https://media.babylonbee.com/articles/698a2e47511f3698a2e47511f4.jpg
BOLZANO — The Galactic Empire was met with collective disappointment in its first chance at bringing home a medal at the 2026 Milano-Cortina Winter Olympic Games, as an Imperial stormtrooper once again finished dead last in the qualifying round of the men’s biathlon.
While insiders said that the Empire had high hopes for winning multiple events at the games, the opening days left leadership underwhelmed, as for the 13th consecutive Winter Olympics, the Imperial stormtrooper sent to compete in the biathlon put on a miserable performance.
"He didn’t hit a single target," said NBC commentator and former biathlon competitor Chad Salmela. "I know he spent months training for this event on Hoth, but it was almost like he couldn’t see anything at all with that helmet on. He would ski up to the shooting range, get into position with his blaster, and just not come anywhere near the target. It was embarrassing. I’m not sure why the Empire continues to send stormtroopers to compete in the biathlon. They’ve been trying since the 1980 games, but they finish last every time. They can’t hit anything."
Though other events still offered promise, sources close to the Imperial contingent revealed that stormtrooper biathletes regularly draw the ire of Emperor Palpatine. "We usually never see them again after we get back to Coruscant," said one Imperial athlete. "There’s usually a flash of blueish-purple lightning and some screams of agony, and the stormtrooper is gone. It’s a shame, because they’re actually really good at the cross-country skiing part of the event."
At publishing time, the Imperial ski jumping team had been hit with a cheating scandal alleging that the height and distance of their jumps were artificially aided by the Force abilities of Coach Darth Vader.
Coming soon to a Democrat-controlled city near you!
Babylon Bee
Bolt-together Millennium Falcon
https://theawesomer.com/photos/2026/02/3d_printed_bolt_together_millennium_falcon_t.jpg
Most large and complex 3D-printed models require glue for assembly. But Titan3D shows off a Millennium Falcon model that connects using 3D-printed bolts and threaded parts. Titan3D sells the STL files for printing the Falcon as well as a bolt-together Imperial Destroyer and TIE Fighter. We’d love to see a whole series of toys that assemble using this method.
The Awesomer
The New ‘Mandalorian and Grogu’ Teaser Is All About the Journey
https://gizmodo.com/app/uploads/2026/02/mandalorian-grogu-super-bowl-teaser-1280×853.jpg
It may be just four months or so away, but much of The Mandalorian and Grogu, the first Star Wars film since 2019’s The Rise of Skywalker, remains shrouded in mystery. But after we got a very broad teaser that leaned more on Star Wars familiarity than telling us what’s up with our titular heroes, people would’ve expected that our next look at the film would at least give us a little more of an inkling about what’s pulling Din and his ward back into the fight. But don’t expect that just yet.
During the Super Bowl, Lucasfilm released the latest teaser for The Mandalorian and Grogu. Set after the events of the streaming series’ third season, the movie follows up on Din Djarin (Pedro Pascal) and the youngling Grogu after their retirement to Navarro in the wake of the re-liberation of Mandalore, and Din’s newest job working as a freelance agent of the burgeoning New Republic. This teaser, however? It’s still vibes, it’s just this time it’s in the snow.
The new teaser comes after practically months of silence since the initial trailer, a tactic that The Mandalorian is more than familiar with, maintaining an air of secrecy for as much as possible in the run-up to each season’s debut on Disney+. Even as the new film draws even closer, it looks like we’re still going to have to wait and see what makes this film worth heading out to theaters for instead of a fourth season on Disney+.
The Mandalorian and Grogu, which also stars Sigourney Weaver as New Republic officer Colonel Ward, and Jeremy Allen White as Clone Wars character Rotta the Hutt, hits theaters May 22.
Want more io9 news? Check out when to expect the latest Marvel, Star Wars, and Star Trek releases, what’s next for the DC Universe on film and TV, and everything you need to know about the future of Doctor Who.
Gizmodo
Introducing VillageSQL: A New Path for MySQL in the Agentic AI Era
https://villagesql.com/blog/content/images/size/w1200/2026/02/VillageSQL_PrimaryLogo_Vert_Light–1-.png
MySQL is the world’s most popular open-source database by many measures but a persistent innovation gap has emerged. This gap causes developers to select other databases over MySQL for new application development, particularly when AI is involved. Today, we are launching VillageSQL to close that gap and empower the MySQL community by enabling permissionless innovation via extensions. VillageSQL is the innovation platform for MySQL and is focused on giving MySQL a new path for the agentic AI era.
VillageSQL Server for MySQL is an open-source tracking fork that is a drop-in replacement for MySQL. It introduces an extension framework that includes custom data types and custom functions (with custom indexes coming soon). This extension framework unlocks rapid innovation for existing MySQL installations. It also allows developers building AI, agentic, and enterprise applications to choose MySQL without waiting for new features in future releases.
Ready to try it out? VillageSQL Server is now available in alpha.
The MySQL Innovation Gap
In recent years, much of the innovation and community development with open-source databases has focused on the PostgreSQL ecosystem. PostgreSQL development is governed by predictable community guidelines and the database supports a robust extension framework. An extension, framework like those found in many open-source projects such as PostgreSQL, Jenkins, or Grafana, enables developers to implement and publish new functionality to extend and modify the core of the project. Extensions don’t require broader agreement of the community before publishing. This is a powerful, permissive dynamic that unlocks the creativity of the community.
At the same time, gaps exist in MySQL’s functionality that have hindered its relevance with AI-era workloads. For example, there is no built-in implementation of vector search that retrieval augmented generation (RAG) use cases require. MySQL supports limited extensibility via plug-ins and components, but their limitations have hindered innovation in the MySQL ecosystem.
Introducing the Extension Framework for MySQL
We founded VillageSQL with the mission to empower the MySQL community by enabling permissionless innovation. VillageSQL Server is a tracking fork of MySQL. It is a drop-in replacement and supports adding new functionality through extensions. While MySQL supports, and has benefited from, a plugin architecture and a component framework, we believe extensions offer a more holistic and structured approach to extending the database. Installing extensions is simple and MySQL-idiomatic (or, what we call, “Myonic”).
We are launching a handful of extensions we thought were interesting. These extensions enable AI prompting via SQL functions, along with support for UUIDs, network addresses (IPv6/MAC), cryptographic functions, and a complex number data type. Our roadmap includes new AI features like vector indexing and optimized vector search. We’ve designed VillageSQL so developers can build and share their own extensions, and we can’t wait to see what the community builds next.
How it Works: "Myonic" Extensions
We define an extension in VillageSQL as a single packaging of extended types, indexes (coming soon), and functions that work together as a cohesive logical unit. Developers deploy these logical units as external repos or compiled dynamic libraries. A database administrator can copy the extension file into the VillageSQL extensions directory and run the SQL command ‘INSTALL EXTENSION_NAME’ to add the extension’s functionality to the database engine.
# Install UUID extension
INSTALL EXTENSION ‘vsql_uuid’;# Create a users table with UUID primary key
CREATE TABLE users (
id UUID PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
This release is intended to provide developers with a preview for experimentation and feedback, not production workloads. For a look at where we are headed, including the path to a production-ready release, see the roadmap.
It Takes a Village
At VillageSQL, we believe in a community-driven approach. This means empowering and supporting contributors across developers and companies to allow self-directed implementations of extensions. Join the village today by writing and contributing extensions, reviewing documentation, submitting bugs, etc. on GitHub. Connect with us on Discord. Subscribe for updates over email here.
We are very excited to see where the MySQL community takes this project, but we already know “it takes a village” to be successful.
To get started or learn more, go to villagesql.com/.
Dominic Preuss (Village Steward/CEO) and Steve Schirripa (Village Architect/CTO) – Co-Founders
Planet for the MySQL Community
How to stream the 2026 Super Bowl for free: Patriots vs. Seahawks time, where to watch and more
https://www.yahoo.com/news/video/watching-super-bowl-sports-commercials-211907376.html?format=embed®ion=US&lang=en-US&site=news&player_autoplay=false
The 2026 Super Bowl between the New England Patriots and the Seattle Seahawks will air on NBC this Sunday, Feb. 8. The game will also stream on Peacock. If you don’t have NBC over the air and don’t subscribe to Peacock, there are still ways to watch Super Bowl LX — and Bad Bunny’s history-making halftime show — for free. Here’s how to tune in.
How to watch Super Bowl LX free:
Date: Sunday, Feb. 8
Time: 6:30 p.m. ET
Location: Levi’s Stadium in Santa Clara, Calif.
TV channel: NBC, Telemundo
Streaming: Peacock, DirecTV, NFL+ and more
2026 Super Bowl game channel
Super Bowl LX will air on NBC. A Spanish-language broadcast is available on Telemundo.
How to watch the 2026 Super Bowl for free
You can stream NBC and Telemundo on platforms like DirecTV and Hulu + Live TV; both offer free trials and are among Engadget’s choices for best streaming services for live TV. (Note that Fubo and NBC are currently in the midst of a contract dispute and NBC channels are not available on the platform.)
What time is the 2026 Super Bowl?
The 2026 Super Bowl kicks off at 6:30 p.m. ET/3:30 p.m. PT on Sunday, Feb. 8. Green Day will be performing a pre-game special starting at 6 p.m. ET.
Who is playing in the Super Bowl?
The AFC champions, the New England Patriots, will play the NFC champions, the Seattle Seahawks.
Where is the 2026 Super Bowl being played?
The 2026 Super Bowl will be held at Levi’s Stadium in Santa Clara, Calif., home of the San Francisco 49ers.
Who is performing at the 2026 Super Bowl halftime show?
Bad Bunny is headlining the 2026 Super Bowl halftime performance. You can expect that show to begin after the second quarter, likely between 8-8:30 p.m. ET. Green Day will perform a pre-game show starting at 6 p.m. ET. If you’re tuning in before the game, singer Charlie Puth will perform the National Anthem, Brandi Carlile is scheduled to sing "America the Beautiful," and Grammy winner Coco Jones will perform "Lift Every Voice and Sing."
More ways to watch Super Bowl LX
This article originally appeared on Engadget at https://www.engadget.com/entertainment/streaming/how-to-stream-the-2026-super-bowl-for-free-patriots-vs-seahawks-time-where-to-watch-and-more-124512202.html?src=rssEngadget
Vector: The easiest way to plug Vue in Blade
https://placeholderblog.netlify.app/assets/blog/vector.jpg?v=1
You know that feeling when you’re building a Laravel app and you just need a tiny bit of reactivity? A counter. A toggle. Something that feels overkill for a full Vue component but too annoying for vanilla JavaScript?
I kept reaching for Alpine.js, which is great, but I wanted Vue’s Composition API. The ref(), the computed(), the familiar syntax I already know. So I built Vector.
What Even Is This?
Vector is a Laravel package that lets you write Vue directly in your Blade templates with zero ceremony:
<script setup>
const i = ref(0);
</script>
<div>
<button @click="i++">Click Me</button>
<div>
Count: @
</div>
<div v-if="i > 5">Success!</div>
</div>
That’s the whole thing. No build step for your components. No separate .vue files. No special directives wrapping your code. Just a <script setup> tag and you’re done.
How It Works
The <script setup> tag gets transformed at compile time. Vector treats the element immediately after the script tag as your Vue template. Everything inside that element becomes reactive, and anything outside it remains regular Blade.
- Blade’s precompiler finds your
<script setup>blocks - Extracts your variable declarations
- Mounts Vue on the next sibling element
The key part is the variable extraction. It parses const, let, and var declarations and auto-returns them to the template. You write normal code, it figures out the rest.
Escaping Blade Syntax
Since Blade also uses for output, you need to prefix Vue’s mustache syntax with @ to prevent Blade from processing it:
@
Alternatively, use Vue directives like v-text which don’t conflict with Blade:
<span v-text="count"></span>
Installation
composer require brunoabpinto/vector
Add Vector to your Vite entry points in vite.config.js:
plugins: [
laravel({
input: [
"resources/css/app.css",
"resources/js/app.js",
"resources/js/vendor/vector.js",
],
// ...
}),
],
resolve: {
alias: {
'vue': 'vue/dist/vue.esm-bundler.js',
},
},
Add @vectorJs before your closing </body> tag in your layout:
<body>
@vectorJs
</body>
That’s it. Vector auto-publishes its runtime, and @vectorJs loads it where you need it.
The Trade-offs
Let’s be real about what this is:
Good for:
- Quick interactive elements
- Prototyping
- When you want Vue’s API without Vue’s ceremony
- Laravel apps that are mostly server-rendered with islands of reactivity
Not great for:
- Complex component hierarchies
- When you need proper SFC features (scoped styles, etc.)
- Large-scale SPAs (just use Inertia at that point)
Try It
The package is available on GitHub. Star it, fork it, tell me it’s an abomination. Whatever feels right.
composer require brunoabpinto/vector
Laravel News Links

