Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Everything Is Showbiz: Lessons from a PHP + AI ...

Everything Is Showbiz: Lessons from a PHP + AI Side Project

This talk grew out of a side project that got wildly out of hand. I set out to build a quick Laravel app to make one of my favourite podcasts searchable - just a weekend hack, a bit of "vibe coding" to scratch an itch. Instead, it became EverythingIsShowbiz.com, a fully fledged PHP + AI transcript engine with semantic search. What started as an experiment turned into a practical crash course in where AI actually fits into PHP workflows: from managing GPU-heavy transcription jobs, to cleaning up potentially-libellous misheard phrases, making AI output trustworthy at scale, and all on a side project budget!

Along the way, I learned a lot about the gap between AI hype and engineering reality. We'll explore the messy middle - where Laravel pipelines replace notebooks, admin tools become sanity savers, and side projects quietly teach us the same lessons as production systems. This talk is for anyone who's ever been asked, "can you do that... but add AI in?" and wants to know what that really looks like in PHP.

A small reminder that PHP still belongs in the future - even when that future comes wrapped in AI.

Avatar for Paul Conroy

Paul Conroy

February 19, 2026
Tweet

More Decks by Paul Conroy

Other Decks in Programming

Transcript

  1. Paul Conroy From Dublin, Ireland Started playing with the web

    30+ years ago (Notepad, Frontpage & Geocities!) CTO at Square1 conroyp.com / @conroyp 👴 🌍 🇮🇪
  2. • Some kind of episode transcription
 • Searchable
 • Easily

    share specific parts
 • That’s it! What do I want?
  3. • Some kind of episode transcription
 • Searchable
 • Easily

    share specific parts
 • That’s it! What do I want?
  4. • Some kind of episode transcription
 • Searchable
 • Easily

    share specific parts
 • That’s it! What do I want?
  5. • Some kind of episode transcription
 • Searchable
 • Easily

    share specific parts
 • That’s it! What do I want?
  6. Things I already know how to do Challenges in this

    project Audio Transcription Semantic Search Dynamic front end Model evaluation RSS Parsing Queues Cost-effective hosting Saying “we’ll tidy that up later Convincing myself it’s “MVP” 
 
 Making confusing Venn diagrams
  7. I needed: I get: Something to run an ingest twice

    a week Scheduler Process files in the background Queues Try different AI tools Service classes & container A simple UI to browse results Blade, Alpine Deploy & run at low cost Cache, config, cheap VPS
  8. • Design the entities / models • Map out the

    Controllers, Jobs, Services Let’s get started!
  9. • Design the entities / models • Map out the

    Controllers, Jobs, Services • Set up config and environments Let’s get started!
  10. • Design the entities / models • Map out the

    Controllers, Jobs, Services • Set up config and environments • Set up test / validation rig Let’s get started!
  11. • Design the entities / models • Map out the

    Controllers, Jobs, Services • Set up config and environments • Set up test / validation rig • Fix problems with test / validation rig Let’s get started!
  12. • Design the entities / models • Map out the

    Controllers, Jobs, Services • Set up config and environments • Set up test / validation rig • Fix problems with test / validation rig • Build queue infrastructure Let’s get started!
  13. • Design the entities / models • Map out the

    Controllers, Jobs, Services • Set up config and environments • Set up test / validation rig • Fix problems with test / validation rig • Build queue infrastructure • Fix problems with queues not running Let’s get started!
  14. • Design the entities / models • Map out the

    Controllers, Jobs, Services • Set up config and environments • Set up test / validation rig • Fix problems with test / validation rig • Build queue infrastructure • Fix problems with queues not running • …. Let’s get started!
  15. • Design the entities / models • Map out the

    Controllers, Jobs, Services • Set up config and environments • Set up test / validation rig • Fix problems with test / validation rig • Build queue feature • Fix problems with queues not running • …. Let’s get started!
  16. Whisper curl --request POST \ --url https://api.openai.com/v1/audio/transcriptions \ --header "Authorization:

    Bearer $OPENAI_API_KEY" \ --header 'Content-Type: multipart/form-data' \ --form file=@/path/to/file/audio.mp3 \ --form model=gpt-4o-transcribe { "text": “Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger.....” } • OpenAI API • Fast! • Supports prompting • Post-processing https://developers.openai.com/api/docs/guides/speech-to-text/
  17. Whisper curl --request POST \ --url https://api.openai.com/v1/audio/transcriptions \ --header "Authorization:

    Bearer $OPENAI_API_KEY" \ --header 'Content-Type: multipart/form-data' \ --form file=@/path/to/file/audio.mp3 \ --form model=gpt-4o-transcribe { "text": “Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger.....” } • OpenAI API • Fast! • Supports prompting • Post-processing https://developers.openai.com/api/docs/guides/speech-to-text/
  18. Whisper curl --request POST \ --url https://api.openai.com/v1/audio/transcriptions \ --header "Authorization:

    Bearer $OPENAI_API_KEY" \ --header 'Content-Type: multipart/form-data' \ --form file=@/path/to/file/audio.mp3 \ --form model=gpt-4o-transcribe { "text": “Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger.....” } • OpenAI API • Fast! • Supports prompting • Post-processing https://developers.openai.com/api/docs/guides/speech-to-text/
  19. • Runs locally! • Plain C/C++ implementation • No python

    required • Different models can be used • CPU/GPU-hungry https://github.com/ggml-org/whisper.cpp
  20. • Large variations in model quality • --max-context keeps internal

    consistency high • --prompt can help with noun recognition • Prompt too long, and the quality degrades - a balancing act!
  21. • Sporadic issues with proper nouns • Challenges with punctuation

    & run-on sentences • Occasionally gets a little confused… https://github.com/openai/whisper/discussions/194
  22. What’s in a name? • Models trained on “mid-Atlantic” accent


    • Show features strong regional accents
 • Names pronounced differently in each episode • Post-transcription processing needed
  23. Responsibility • Content is AI-generated, but responsibility is ours
 •

    Need guardrails to prevent incorrect publication • Errors already costing companies
  24. Responsibility • Content is AI-generated, but responsibility is ours
 •

    Need guardrails to prevent incorrect publication • Errors already costing companies https://www.theguardian.com/world/2024/feb/16/air-canada-chatbot-lawsuit
  25. Semantic Search • Keyword search asks: “Does this text contain

    these words?” • Semantic search asks: “Is this about the same thing?” • It tolerates synonyms, paraphrasing, and noise • Under the hood: high-dimensional math
  26. Semantic Search • Keyword search asks: “Does this text contain

    these words?” • Semantic search asks: “Is this about the same thing?” • It tolerates synonyms, paraphrasing, and noise • Under the hood: high-dimensional math • ✨✨ Embeddings! ✨✨
  27. • Complex data reduced to simpler information [159, 837, 528,

    162, …] • The larger the embedding, the more “meaning” captured
 • Similar words or phrases are close to each other in this multi-dimensional space
  28. • Complex data reduced to simpler information [159, 837, 528,

    162, …] • The larger the embedding, the more “meaning” captured
 • Similar words or phrases are close to each other in this multi-dimensional space
  29. Embeddings • Postgres extension pgvector • Generate embedding for each

    text block • Store embedding alongside original text • Generate embedding for each query • Search by similarity https://github.com/pgvector/pgvector My interesting query
  30. Embeddings • Postgres extension pgvector • Generate embedding for each

    text block • Store embedding alongside original text • Generate embedding for each query • Search by similarity https://github.com/pgvector/pgvector My interesting query [938, 324, 5, 234.. ]
  31. Embeddings • Postgres extension pgvector • Generate embedding for each

    text block • Store embedding alongside original text • Generate embedding for each query • Search by similarity https://github.com/pgvector/pgvector My interesting query [938, 324, 5, 234.. ] [11, 903, 675, 837.. ]
  32. Embeddings • Postgres extension pgvector • Generate embedding for each

    text block • Store embedding alongside original text • Generate embedding for each query • Search by similarity https://github.com/pgvector/pgvector My interesting query [938, 324, 5, 234.. ] [11, 903, 675, 837.. ]
  33. Embeddings • Use local model (Ollama) or API (OpenAI) •

    Really basic model is ok! (text-embedding-3-small) • Makes remote APIs very cheap
  34. Observers • Hook into model lifecycle events • Automate side-effects

    cleanly • Remove glue code from controllers • Keep business logic cohesive
  35. Real-world users! • Tend to use really short queries •

    Hard to parse intent! • How to handle both?
  36. Real-world users! • Tend to use really short queries •

    Hard to parse intent! • How to handle both?
  37. Real-world users! • Tend to use really short queries •

    Hard to parse intent! • How to handle both?
  38. • Search for text segments • Click segment to autoplay


    • Share deeplink • URLs always update!
  39. What did I expect? • Discrete function classes / jobs


    • Logical separation
 • Testable
  40. What did I expect? • Discrete function classes / jobs


    • Logical separation
 • Testable
  41. What did I expect? • Discrete function classes / jobs


    • Logical separation
 • Testable • That’s it!
  42. • Side by side of different code • Highlight “same

    but different” approach • AI solving from 10ft, I’m approaching this from 10,000ft
  43. • Side by side of different code • Highlight “same

    but different” approach • AI solving from 10ft, I’m approaching this from 10,000ft
  44. • Side by side of different code • Highlight “same

    but different” approach • AI solving from 10ft, I’m approaching this from 10,000ft
  45. • Side by side of different code • Highlight “same

    but different” approach • AI solving from 10ft, I’m approaching this from 10,000ft
  46. What’s happening? • Lots of near-duplicate code • Huge amount

    of dead code • AI is focusing on low-level context alone
 Working at 10ft while I’m at 10,000ft • Need to match the code to my mental model
  47. Use AI to tidy up AI • Much tighter feedback

    loops • Personas ◦ “You are a senior PHP dev…”
 • Less vibes, more control • Closer to pair programming
  48. Use AI to tidy up AI • Much tighter feedback

    loops • Personas ◦ “You are a senior PHP dev…”
 • Less vibes, more control • Closer to pair programming
  49. Workload Generation • Heavy GPU load • But only 2-3x

    a week • Admin tooling Public site • Effectively read-only • Updated 2-3x a week • Strong caching candidate
  50. Workload Generation • Heavy GPU load • But only 2-3x

    a week • Admin tooling Public site • Effectively read-only • Updated 2-3x a week • Strong caching candidate 💸💸💸
  51. Workload Generation • Heavy GPU load • But only 2-3x

    a week • Admin tooling Public site • Effectively read-only • Updated 2-3x a week • Strong caching candidate 💸💸💸 💸
  52. Late 2025 • Step-change in AI tooling
 • Moving from

    the IDE to CLI • From “check this code I wrote” to “I’ll check the code you wrote”
  53. Parallel & Structured • Sub-agents with defined roles • Reusable

    skills
 (Laravel clean code, frontend design…) • Worktrees for isolation • Inter-agent communication 🤖 🤖 🤖 🤖 The Boss Design Security Architect
  54. From prompting to planning • Interview with the model first

    • Capture decisions in plan.md • Make constraints explicit • Break work into checkable steps
  55. From prompting to planning • Interview with the model first

    • Capture decisions in plan.md • Make constraints explicit • Break work into checkable steps
  56. Ralphing • Models cut corners on long tasks • Hook

    in to finished state • “Did you really finish? Hmmmm???” • Keep going relentlessly until it’s done https://github.com/anthropics/claude-code/blob/main/plugins/ralph-wiggum/README.md
  57. Cleanup Complete! • It works (mostly..) • Documented • Tested

    • Public https://github.com/conroyp/podcast-transcription
  58. Side Projects! • Abstract away the boring boilerplate • Dopamine

    hit of fast feedback • Keep the momentum going • Quick to prototype & validate • From noodling on phone to live app
  59. Where does that leave us developers? • AI is already

    faster than most mid-level devs • Productivity up 5-6× → headcount down? • “Good enough” beats “well-engineered.” • Why hire juniors when AI does the boilerplate?
  60. “[I]f you work as a radiologist you are like Wile

    E. Coyote in the cartoon. You’re already over the edge of the cliff, but you haven’t yet looked down. Geoffrey Hinton, “Godfather of AI”
  61. “[I]f you work as a radiologist you are like Wile

    E. Coyote in the cartoon. You’re already over the edge of the cliff, but you haven’t yet looked down. 
 It’s just completely obvious that in five years deep learning is going to do better than radiologists.” Geoffrey Hinton, “Godfather of AI”
  62. What Happened Next? • Demand went up • Salaries increased!

    • The nature of the work
 changed https://worksinprogress.co/issue/the-algorithm-will-see-you-now/
  63. What Happened Next? • Demand went up • Salaries increased!

    • The nature of the work
 changed https://worksinprogress.co/issue/the-algorithm-will-see-you-now/
  64. Who gets to build? • Doctors can ship apps •

    Lawyers can prototype tools • Contractors can automate their workflows • Founders can validate ideas without devs (?)
  65. We’ve been here before • Assembly → C • C

    → PHP • PHP → Low-/no-code tools • Manual infra → DevOps • On-prem → Cloud
  66. We’ve been here before • Assembly → C • C

    → PHP • PHP → Low-/no-code tools • Manual infra → DevOps • On-prem → Cloud https://addyosmani.com/blog/the-efficiency-paradox/ “Every time we’ve made it easier to write software, we’ve ended up writing exponentially more of it.”
  67. What changes for us? • Execution is getting cheaper •

    Prototypes are cheaper • Boilerplate is getting cheaper • Judgment is not
  68. What changes for us? • Execution is getting cheaper •

    Prototypes are cheaper • Boilerplate is getting cheaper • Judgment is not https://addyosmani.com/blog/the-efficiency-paradox/ The real question is whether we’re prepared for a world where the bottleneck shifts from “can we build this?” to “should we build this?”