Screencasts for
Invest in your future with the
best technology screencasts on the web!
Latest Videos
Find And See What's New

javascript
13m:57s
May 29, 2025
Nested Structures & Loops w/Objects
As your programs grow more complex, you’ll often need to work with data inside of data. In this episode, we explore how to combine arrays and objects to model richer, more realistic structures.🎯 What you’ll learn:
• How to create and work with arrays inside arrays (like a game board)
• How to structure objects inside objects (like a user and their account)
• How to manage arrays of objects (like a list of students)
• How to handle arrays inside objects (like student grades)
🎥 What you’ll see:
• Code examples of each structure
• How to access nested values
• How to loop through nested data using for loops or for...of
By the end of this episode, you’ll understand how to organize complex data and access it confidently — a big step toward working with real-world applications! 🗃️🔁

javascript
8m:40s
May 27, 2025
Objects - Key / Value Pairs
Objects are one of the most powerful and flexible tools in JavaScript. In this episode, we’ll explore how to represent real-world things — like people, places, or ideas — using key/value pairs.🎯 What you’ll learn:
• What objects are and why they matter
• How to define and access object properties
• The difference between dot notation and bracket notation
• How to add, update, and delete properties dynamically
🎥 What you’ll see:
• A walkthrough of building a simple person object
• Real-time code edits and console logging
• Examples that mirror how data is structured in real apps
After this episode, you’ll see how objects give your data shape and make your code more expressive and organized. 🗂️📦

javascript
6m:35s
May 22, 2025
Looping Through Arrays
Ready to do something with all those array items? In this episode, you’ll learn how to loop through arrays and apply logic to each value — one of the most common tasks in JavaScript!🎯 What you’ll learn:
• The classic for loop — great for full control
• The cleaner, modern for…of loop
• The elegant and expressive .forEach() method
• A fun mini-challenge: Loop through numbers and log which are even 🔍
🎥 What you’ll see:
• Step-by-step demos of each loop type
• Code that transforms and filters array data
• A clear comparison so you know when and why to use each loop
By the end, you’ll be confidently cycling through arrays and writing logic that reacts to each item. 🧠✨

javascript
12m:35s
May 20, 2025
Arrays - Working with Lists
Say hello to one of the most useful tools in JavaScript: arrays! In this episode, you’ll learn how to store, access, and manipulate ordered lists of data — like a list of fruits, numbers, or even mixed types. 🧺🔢🎯 Here’s what you’ll explore:
• What arrays are and why they’re so powerful
• How to create, access, and update array elements
• Common methods like .push(), .pop(), .shift(), .unshift(), .length, and .indexOf() that help you manage your data with ease
🎥 Visual Walkthroughs:
• Real-time examples you can follow and modify on your own
• See arrays grow, shrink, and change as you manipulate them step by step
• Understand how arrays help avoid repetitive code and keep things organized
By the end, you’ll be looping through lists and managing data like a pro, ready to build smarter, more dynamic programs! ⚙️💡

javascript
6m:1s
May 15, 2025
Functions as Values & Callbacks
Time to level up! In this episode, you’ll learn that functions are more than just reusable code blocks — they’re first-class citizens in JavaScript. That means you can treat them just like any other value — assign them to variables, pass them as arguments, and return them from other functions. 🧠➡️📦🎯 Here’s what we’ll cover:
• Assigning functions to variables — because yes, functions are values!
• Passing functions into other functions (aka callbacks) to build dynamic, flexible behavior.
• A clear, simple example where you control how a message is spoken: shouted, whispered, or anything in between.
🎥 Visual Walkthroughs:
• See how callback functions work step by step.
• Build intuition around treating functions like any other data.
• Reinforce learning with a clean, beginner-friendly real-time example.
By the end, you’ll start to see the true power of JavaScript’s flexibility — and you’ll be ready for more dynamic programming patterns ahead! ⚙️🚀

javascript
7m:38s
May 13, 2025
Parameters, Return Values, and Scope
In this episode, we go deeper into how functions communicate — by receiving input, producing output, and knowing where variables “live.” 🧩🎯 Here’s what we’ll cover:
• How to pass data into functions using parameters and arguments.
• Use return values to get results back from functions.
• Understand scope — where your variables exist and who can see them:
• Local (block), function, and global scope.
• Get a taste of lexical scope with a simple nested function.
🎥 Visual Walkthroughs:
• Watch functions take in inputs and return meaningful results.
• See clear, visual examples of variable scope in action.
• Spot common mistakes like trying to access variables outside their scope.
After this episode, you’ll be writing smarter functions that take input, give output, and stay in their own lane! 🧠➡️🧪➡️📦

javascript
4m:34s
May 8, 2025
Defining and Calling Functions
In this episode, you’ll unlock the power of functions — reusable blocks of code that let you organize your logic, avoid repetition, and keep your programs clean and efficient. 🧼✨🎯 Here’s what we’ll cover:
• What a function really is and why it’s a cornerstone of any serious JavaScript developer’s toolkit.
• The difference between function declarations and function expressions, and when to use each.
• A first look at sleek, modern arrow functions introduced in ES6 — cleaner syntax with powerful flexibility.
🎥 Visual Walkthroughs:
• See each style written and called step-by-step.
• Watch how functions help break your code into logical pieces.
• Reinforce learning through quick, practical examples you can follow along with.
By the end, you’ll have multiple tools to define and invoke your own functions — and you’ll know which style fits your coding vibe best! 🧑💻🚀

javascript
12m:27s
May 6, 2025
Control Flow – Loops
Ever wish your code could repeat itself without repeating yourself? That’s the magic of loops — and in this episode, you’ll learn how to write them like a pro. 🌀🎯 Here’s what we’ll cover:
• Why loops matter: run code multiple times without copying and pasting.
• Use the classic for loop to count or iterate through values.
• Learn the while loop for flexible repetition when the end condition isn’t known in advance.
• Try out the do…while loop, which guarantees at least one execution.
• Understand break and continue for more control inside your loops.
🎥 Visual Walkthroughs:
• See real-time examples of different loop types in action.
• Learn when to use each loop and how they differ in behavior.
• Practice repetition with simple, visual examples to build confidence.
By the end of this episode, you’ll be looping like a champ — and writing code that works smarter, not harder! ♻️⚙️

javascript
13m:21s
May 1, 2025
Control Flow – Conditionals
Programming gets powerful when your code can make decisions — and that’s exactly what this episode is all about! Learn how to use conditionals to respond to different situations and write smarter, more dynamic scripts. 🚦🎯 Here’s what we’ll cover:
• Master the classic if / else if / else structure to control the flow of your program.
• Use boolean conditions to trigger different outcomes based on logic.
• Learn the sleek and compact ternary operator for quick, inline decisions.
🎥 Visual Walkthroughs:
• Build real-time examples that react to changing values like temperature and age.
• Watch how branching logic helps your programs behave differently in different scenarios.
• Break down the syntax so you not only write it — you understand it!
By the end of this episode, you’ll have the tools to write JavaScript that responds to the world around it! 🌍💡
Content for Tech Lovers like you
Joining takes less than a minute.
Paid plans unlock all released content!
Monthly Plan
Full access to all released content with a flexible month-to-month subscription—cancel anytime.
$9
$14
monthly
Start Free Trial
Yearly Plan
Save with an annual subscription and enjoy uninterrupted access to all released content for a full year.
$86
$140
yearly
Start Free Trial
Forever Plan
Pay once and unlock lifetime access to all current and future released content—no renewals required.
$225
$399
once
Start Free Trial
Membership unlocks the following features: Watch history to always know what you’ve seen
and resume exactly where you left off and save your favorite videos for easy access later.
and resume exactly where you left off and save your favorite videos for easy access later.
All Videos
Here’s what gets built in version v18-redirects-with-flash:
- Create a Session class as a singleton, with a handy global session() helper 🔐
- Initialize the session at app start and build a clean API like:
- session()->error('Missing required parameters.')->redirect('/');
- Implement error() and redirect() methods for smooth flow and messaging
- Fix the issue of persistent flash messages by introducing delete_transient_data() to clear session data after one request cycle
- Use Alpine.js to display flash messages dynamically with a snappy user experience ⚡
- Create a reusable _flash.view.php layout file for flash UI 💡
- Hook flash messages into the review flow by updating all dd('TODO') redirects in the PhotoController
- Bonus: Add current_route support in the Router to improve context-awareness in views 🧭
With sessions and flash messages in place, your app now speaks back to the user—clear, friendly, and fast. 🚀
Here’s what we tackle in version v16-framework-refactor:
Emphasize the value of regular review and refactor sessions 🧠
Review our entry point (public/index.php) and extract logic into a new App class 📦
Create Framework/App as a singleton with a start() method to centralize bootstrapping 🚀
Address messy relative paths like '../../' by creating a dedicated Path helper class 🧭
Build Framework/Path as a singleton and introduce helpers like app(), root(), require_app(), and require_root()
Refactor all path-related code to use these clean, expressive helpers 📁
Move globals.php into the Framework directory to keep framework-related code encapsulated
Clean up and clarify all require/import statements 🔄
This refactor sets us up for a cleaner, more organized foundation—making our mini-framework easier to navigate, extend, and love. 💡
Here’s what we’ll cover:
Query the database for all reviews associated with a given photo 📄
Loop through the reviews and display them on the photo page 🎞️
Calculate a summary (like average stars or total reviews) 📊
Display the summary alongside the photo for quick insight 🧠
By the end, version v15-show-reviews adds real voices to each photo—making the app feel more alive and interactive. 🚀
Here’s what’s packed into version v17-leave-review:
Add a POST route to handle form submissions 🛤️
Stub out the PhotoController::store method as our entry point for review handling
Wire up the review form and hook it into the controller 🧵
Introduce basic validation to catch missing fields or bad data 🧼
Add temporary dd('TODO') calls as placeholders for future redirects
Build the SQL insert logic using the photo_id from the query string 🔗
Validate that the photo exists before inserting a review to maintain data integrity 🔒
Refactor the Database class:
Rename exec() to raw() for clarity
Add a new execute() method to handle parameterized inserts and return the number of affected rows ⚙️
By the end of this video, users can leave their thoughts—and our app takes one more step toward being fully interactive. 🌟
We’ll start by touring the project’s goals, showing you where we’re landing and what’s ahead. The rule is simple: all the PHP code is ours! We begin with static HTML pages and gradually convert them into dynamic applications. 💻
Along the way, we’ll cover:
• Extracting a layout to avoid repetition 🔄
• Refactoring into an MVC architecture 🏗️
• Building a “mini-framework” to streamline development ⚙️
You’ll also learn how this framework introduces powerful features like routing, sessions, databases, models, views, and controllers. 🛠️
We’ll stick to best practices throughout—focusing on clean, secure, and maintainable code that’s easy to use. By the end of this series, you’ll be ready to implement these principles in your own projects!
Prerequisites: Basic PHP and OOP knowledge are recommended to get the most out of this series. Ready to dive in? Let’s go! 🚀
You’ve probably already seen it in action today—on a shopping cart, a weather widget, maybe even a chat box. JavaScript is the secret sauce behind interactive websites, and in this video, we’ll explore:
🌐 A quick peek into its wild history
🖥️ Where it runs (spoiler: not just in your browser!)
⚙️ What it actually does for web pages and applications
📚 What to expect from the rest of this hands-on, no-fluff series
We’ll even check out a tiny bit of code that creates a button ✨ and responds to a click with an alert—just to show how easy it is to bring pages to life.
Let’s set the foundation for your JavaScript journey. 💪
Popular Videos
Watch What's Hot

oop,php
25m:6s
Jun 10, 2025
Sessions / Redirects / Flash Messages
Now that users can submit reviews, let’s give them feedback! In this video, we bring in sessions, redirects, and flash messaging to guide the user experience after form submissions. ✨Here’s what gets built in version v18-redirects-with-flash:
- Create a Session class as a singleton, with a handy global session() helper 🔐
- Initialize the session at app start and build a clean API like:
- session()->error('Missing required parameters.')->redirect('/');
- Implement error() and redirect() methods for smooth flow and messaging
- Fix the issue of persistent flash messages by introducing delete_transient_data() to clear session data after one request cycle
- Use Alpine.js to display flash messages dynamically with a snappy user experience ⚡
- Create a reusable _flash.view.php layout file for flash UI 💡
- Hook flash messages into the review flow by updating all dd('TODO') redirects in the PhotoController
- Bonus: Add current_route support in the Router to improve context-awareness in views 🧭
With sessions and flash messages in place, your app now speaks back to the user—clear, friendly, and fast. 🚀

oop,php
18m:18s
Jun 3, 2025
First Review & Refactor
It’s time to pause and sharpen the tools. In this video, we take a step back to review our progress and clean up our codebase, because maintainability is key to sustainable development. 🛠️Here’s what we tackle in version v16-framework-refactor:
Emphasize the value of regular review and refactor sessions 🧠
Review our entry point (public/index.php) and extract logic into a new App class 📦
Create Framework/App as a singleton with a start() method to centralize bootstrapping 🚀
Address messy relative paths like '../../' by creating a dedicated Path helper class 🧭
Build Framework/Path as a singleton and introduce helpers like app(), root(), require_app(), and require_root()
Refactor all path-related code to use these clean, expressive helpers 📁
Move globals.php into the Framework directory to keep framework-related code encapsulated
Clean up and clarify all require/import statements 🔄
This refactor sets us up for a cleaner, more organized foundation—making our mini-framework easier to navigate, extend, and love. 💡

oop,php
19m:34s
May 29, 2025
Displaying Reviews
Let’s bring feedback into the spotlight! In this video, we enhance the photo detail page by fetching and displaying user reviews from the database. 💬Here’s what we’ll cover:
Query the database for all reviews associated with a given photo 📄
Loop through the reviews and display them on the photo page 🎞️
Calculate a summary (like average stars or total reviews) 📊
Display the summary alongside the photo for quick insight 🧠
By the end, version v15-show-reviews adds real voices to each photo—making the app feel more alive and interactive. 🚀

oop,php
29m:47s
Jun 5, 2025
Submitting Reviews
It’s time to let users have their say! In this video, we implement the “Leave a Review” feature, allowing users to submit feedback on photos directly from the app. 💬Here’s what’s packed into version v17-leave-review:
Add a POST route to handle form submissions 🛤️
Stub out the PhotoController::store method as our entry point for review handling
Wire up the review form and hook it into the controller 🧵
Introduce basic validation to catch missing fields or bad data 🧼
Add temporary dd('TODO') calls as placeholders for future redirects
Build the SQL insert logic using the photo_id from the query string 🔗
Validate that the photo exists before inserting a review to maintain data integrity 🔒
Refactor the Database class:
Rename exec() to raw() for clarity
Add a new execute() method to handle parameterized inserts and return the number of affected rows ⚙️
By the end of this video, users can leave their thoughts—and our app takes one more step toward being fully interactive. 🌟

oop,php
3m:54s
Apr 8, 2025
Introduction & Overview
Welcome to PHP: The Pragmatic Way! In this video, we set the stage for an exciting journey into dynamic web development. 🌐We’ll start by touring the project’s goals, showing you where we’re landing and what’s ahead. The rule is simple: all the PHP code is ours! We begin with static HTML pages and gradually convert them into dynamic applications. 💻
Along the way, we’ll cover:
• Extracting a layout to avoid repetition 🔄
• Refactoring into an MVC architecture 🏗️
• Building a “mini-framework” to streamline development ⚙️
You’ll also learn how this framework introduces powerful features like routing, sessions, databases, models, views, and controllers. 🛠️
We’ll stick to best practices throughout—focusing on clean, secure, and maintainable code that’s easy to use. By the end of this series, you’ll be ready to implement these principles in your own projects!
Prerequisites: Basic PHP and OOP knowledge are recommended to get the most out of this series. Ready to dive in? Let’s go! 🚀

javascript
15m:55s
Apr 15, 2025
What Is JavaScript?
Welcome to the series! 🎉 In this first episode, we kick things off by answering the big question: What even is JavaScript? 🧠You’ve probably already seen it in action today—on a shopping cart, a weather widget, maybe even a chat box. JavaScript is the secret sauce behind interactive websites, and in this video, we’ll explore:
🌐 A quick peek into its wild history
🖥️ Where it runs (spoiler: not just in your browser!)
⚙️ What it actually does for web pages and applications
📚 What to expect from the rest of this hands-on, no-fluff series
We’ll even check out a tiny bit of code that creates a button ✨ and responds to a click with an alert—just to show how easy it is to bring pages to life.
Let’s set the foundation for your JavaScript journey. 💪

Hi, I’m Bob Cravens, the founder of TekFoundry. I created
TekCasts to share my passion for software engineering, architecture,
and best practices with developers, tech enthusiasts, and lifelong
learners. TekCasts is a platform built for those who want to deepen
their understanding of cutting-edge technologies, master essential
skills, and stay ahead in an ever-evolving industry. Whether you’re
just starting or looking to refine your expertise, our in-depth
courses and hands-on lessons are designed to provide real-world
value. Join us and take your technical skills to the next level!
Upcoming Schedule
Here’s what we build in version v19-redirect-with-errors:
- Define the ideal usage:
- session()->invalid($errors)->redirect_back();
- Then… we make it real! 💥
- Introduce invalid() and redirect_back() methods in the Session class
- Store transient $old and $errors values to survive the redirect and improve UX ✨
- Refactor Session::old() into a more flexible Session::flash() and flash_message() pattern 🔁
- Improve the old($key, $default) helper to escape HTML using htmlspecialchars() for security 🛡️
- Add a validation_message() helper to display specific errors next to form fields
- Update the review form:
- Loosen validation so comment is optional
- Add hidden rating input with default of 0
- Test with extreme values (e.g., rating=10, long name) to confirm validation is triggered
- Clean up temporary debug outputs (like var_dump()) and finalize the flow ✅
This update makes your app smarter, friendlier, and much more user-friendly when things go wrong. A polished user experience, even on failure? Now that’s pragmatic. 🚀
Here’s what gets done:
✅ Create a Models/Photo class
- Move the all() and find() logic out of PhotoController and into this model
✅ Create a Models/Review class
- Same deal: centralize data logic away from controllers
- Introduce a protected static ?string $table property
🧱 Extract shared logic into a Framework/Model base class:
- static table() throws by default—models must define their own table
- Implement reusable all() and find() methods
🔄 Refactor all() and find() with:
- static::query() → creates an instance of the model
- get() → used by all(), calls build_query() to prepare the SQL and params
- build_query() → generates the SQL from query state
🧠 Reimagine find() usage like this:
- static::query()->where('id', '=', $id)->first();
- Then implement:
- A where() method that collects conditions into $wheres
- Modify build_query() to handle WHERE clauses
- A first() method to return the first matching result
🚀 Refactor the PhotoController to use the new model APIs
- Add an insert() method on the base Model class for creating new records
By the end of this refactor, your models are smart, reusable, and expressive—freeing your controllers from repetitive SQL and focusing them on application logic. Pragmatic PHP is feeling pretty elegant right about now. 👌
🧱 Created the Framework/Validation class and added a validate() helper to globals.php.
✍️ The goal was to write intuitive validation logic like:
validate('rating')->integer()->min(0)->max(5)->required();
validate('name')->string()->max(100);
validate('comment')->string()->max(1000);
🧪 This fluent API allowed chaining validation rules for each input field, improving both readability and maintainability.
🔧 We fixed the num_stars constraint in the migration SQL to properly enforce the rating range.
🧹 Ran the migration and reseeded the database to apply the changes.
🕵️ Also refined the reviews logic to default the name to “Anonymous” when one isn’t provided.
This new validation infrastructure enhances data safety and gives us a consistent, clean way to validate user input throughout the application.
- Create a new RegistrationController inside Http/, with index() and store() methods
- index() displays the registration form
- store() temporarily calls dd($_POST) to confirm input
🔹 View
- Add the form view at views/registration.index.view.php
🔹 Validation
- Write validation rules in fluent style:
- $email = validate('email')->email()->required()->unique('users', 'email');
- Build out the validation logic to support this pattern
🔹 User Model
- Create a Models/User class
- Move relevant DB logic from the controller into the model
🔹 Model Base Enhancements
- In the Model base class:
- Add $is_count to build_query()
- Implement a count() method that supports basic tallying
- In the Database class:
- Add a count() method to execute counting queries
- Add a unique() validation method using model and count
🔹 Data Insertion
- Assemble a $data array with validated inputs
- Call User::insert($data) to create the new user
That’ll wrap up the registration feature and land us at v22-registering-users 🏁
- Create a new AuthenticationController inside Http/ with three methods:
- login() – shows the login form
- authenticate() – handles login logic
- logout() – clears user session
📄 View
- Add views/login/index.view.php to render the login form
🔀 Routing
- Register the necessary routes:
- GET /login → shows the login form
- POST /login → processes authentication
- POST /logout (or GET) → logs the user out
🧠 Authentication Logic
- Inside authenticate():
- Validate email and password inputs
- Lookup user by email from the database
- Use password_verify() to check if password matches
- On success → Session::login($user_id)
- On failure → redirect back with error message
🔐 Session Enhancements
- Add login($user_id) to store user ID in session
- Add logout() to destroy the session cleanly
📌 And that lands us at v23-authentication.
- Add guest() and user() methods to the Session class
- guest() → returns true if no user is logged in
- user() → returns current user object (or null)
🎨 Navigation Improvements
- Update the top navigation bar to reflect authentication state:
- Show Register / Login links when user is not logged in
- Show user avatar and menu when logged in
- Fix any related JavaScript issues
👤 Gravatar Integration
- Create a new helper class: app/Code/Gravatar.php
- Use the user’s email to generate their avatar
- Display avatar in the nav for logged-in users
🖼️ Conditional Upload View
- Modify the upload page to only display the upload form if the user is logged in
📌 And that ties up the loose ends, landing us at v24-authentication-loose-ends.
Upcoming Releases
Coming Soon
Coming Soon

oop,php
18m:5s
Jun 12, 2025
Invalid Form Submissions
In this video, we tackle the next critical part of the form experience—handling invalid submissions with grace. When a user submits a form with missing or incorrect data, we want to redirect them back, repopulate the form, and show helpful error messages. 💡Here’s what we build in version v19-redirect-with-errors:
- Define the ideal usage:
- session()->invalid($errors)->redirect_back();
- Then… we make it real! 💥
- Introduce invalid() and redirect_back() methods in the Session class
- Store transient $old and $errors values to survive the redirect and improve UX ✨
- Refactor Session::old() into a more flexible Session::flash() and flash_message() pattern 🔁
- Improve the old($key, $default) helper to escape HTML using htmlspecialchars() for security 🛡️
- Add a validation_message() helper to display specific errors next to form fields
- Update the review form:
- Loosen validation so comment is optional
- Add hidden rating input with default of 0
- Test with extreme values (e.g., rating=10, long name) to confirm validation is triggered
- Clean up temporary debug outputs (like var_dump()) and finalize the flow ✅
This update makes your app smarter, friendlier, and much more user-friendly when things go wrong. A polished user experience, even on failure? Now that’s pragmatic. 🚀
Coming Soon

oop,php
26m:22s
Jun 17, 2025
Database Model Abstractions
In this video, we take a big step toward cleaner, more maintainable code by introducing a Model abstraction layer—a pattern that reduces boilerplate and centralizes logic around database operations. This lands in version v20-db-models.Here’s what gets done:
✅ Create a Models/Photo class
- Move the all() and find() logic out of PhotoController and into this model
✅ Create a Models/Review class
- Same deal: centralize data logic away from controllers
- Introduce a protected static ?string $table property
🧱 Extract shared logic into a Framework/Model base class:
- static table() throws by default—models must define their own table
- Implement reusable all() and find() methods
🔄 Refactor all() and find() with:
- static::query() → creates an instance of the model
- get() → used by all(), calls build_query() to prepare the SQL and params
- build_query() → generates the SQL from query state
🧠 Reimagine find() usage like this:
- static::query()->where('id', '=', $id)->first();
- Then implement:
- A where() method that collects conditions into $wheres
- Modify build_query() to handle WHERE clauses
- A first() method to return the first matching result
🚀 Refactor the PhotoController to use the new model APIs
- Add an insert() method on the base Model class for creating new records
By the end of this refactor, your models are smart, reusable, and expressive—freeing your controllers from repetitive SQL and focusing them on application logic. Pragmatic PHP is feeling pretty elegant right about now. 👌
Coming Soon

oop,php
17m:11s
Jun 19, 2025
Fluent Validation
In this step, we introduced a flexible and expressive validation system.🧱 Created the Framework/Validation class and added a validate() helper to globals.php.
✍️ The goal was to write intuitive validation logic like:
validate('rating')->integer()->min(0)->max(5)->required();
validate('name')->string()->max(100);
validate('comment')->string()->max(1000);
🧪 This fluent API allowed chaining validation rules for each input field, improving both readability and maintainability.
🔧 We fixed the num_stars constraint in the migration SQL to properly enforce the rating range.
🧹 Ran the migration and reseeded the database to apply the changes.
🕵️ Also refined the reviews logic to default the name to “Anonymous” when one isn’t provided.
This new validation infrastructure enhances data safety and gives us a consistent, clean way to validate user input throughout the application.
Coming Soon

oop,php
20m:42s
Jun 24, 2025
User Registration
🔹 Controller Setup- Create a new RegistrationController inside Http/, with index() and store() methods
- index() displays the registration form
- store() temporarily calls dd($_POST) to confirm input
🔹 View
- Add the form view at views/registration.index.view.php
🔹 Validation
- Write validation rules in fluent style:
- $email = validate('email')->email()->required()->unique('users', 'email');
- Build out the validation logic to support this pattern
🔹 User Model
- Create a Models/User class
- Move relevant DB logic from the controller into the model
🔹 Model Base Enhancements
- In the Model base class:
- Add $is_count to build_query()
- Implement a count() method that supports basic tallying
- In the Database class:
- Add a count() method to execute counting queries
- Add a unique() validation method using model and count
🔹 Data Insertion
- Assemble a $data array with validated inputs
- Call User::insert($data) to create the new user
That’ll wrap up the registration feature and land us at v22-registering-users 🏁
Coming Soon

oop,php
9m:3s
Jun 26, 2025
User Authentication
📁 Controller Setup- Create a new AuthenticationController inside Http/ with three methods:
- login() – shows the login form
- authenticate() – handles login logic
- logout() – clears user session
📄 View
- Add views/login/index.view.php to render the login form
🔀 Routing
- Register the necessary routes:
- GET /login → shows the login form
- POST /login → processes authentication
- POST /logout (or GET) → logs the user out
🧠 Authentication Logic
- Inside authenticate():
- Validate email and password inputs
- Lookup user by email from the database
- Use password_verify() to check if password matches
- On success → Session::login($user_id)
- On failure → redirect back with error message
🔐 Session Enhancements
- Add login($user_id) to store user ID in session
- Add logout() to destroy the session cleanly
📌 And that lands us at v23-authentication.
Coming Soon

oop,php
15m:30s
Jul 1, 2025
Auth & Application Workflow
🛠️ Session Enhancements- Add guest() and user() methods to the Session class
- guest() → returns true if no user is logged in
- user() → returns current user object (or null)
🎨 Navigation Improvements
- Update the top navigation bar to reflect authentication state:
- Show Register / Login links when user is not logged in
- Show user avatar and menu when logged in
- Fix any related JavaScript issues
👤 Gravatar Integration
- Create a new helper class: app/Code/Gravatar.php
- Use the user’s email to generate their avatar
- Display avatar in the nav for logged-in users
🖼️ Conditional Upload View
- Modify the upload page to only display the upload form if the user is logged in
📌 And that ties up the loose ends, landing us at v24-authentication-loose-ends.
Have questions?
All Series
If you’re ready to take your PHP skills to the next level, this video series is designed to help you do just that! Starting from a static HTML page, we’ll guide you through the process of converting it into a dynamic, maintainable PHP application using best practices.
🔧 What You’ll Learn:
• How to build a custom PHP mini-framework from scratch (no frameworks, just pure PHP!)
• Core concepts like MVC architecture, routing, sessions, and database management
• Practical coding techniques for clean, secure, and maintainable PHP code
• Step-by-step guidance on refactoring your project as it grows, from simple static pages to a full-fledged application
⚙️ Key Features:
• Hands-on approach with real-world examples
• A focus on practical, easy-to-follow solutions
• Emphasis on clean, reusable code that follows industry best practices
• Building your own PHP framework and database handling code along the way
By the end of this series, you’ll have built a fully functional photo review application – and gained the skills to develop your own PHP projects with confidence.
Ideal for: Intermediate PHP developers looking to deepen their understanding and elevate their coding practices.
Prerequisites: Basic knowledge of PHP and OOP principles.
Ready to take your PHP skills to the next level? Join me in this practical, hands-on series! 👨💻👩💻
We kick things off by exploring why OOP matters and how it solves common issues like messy, hard-to-maintain code. You’ll learn how to create classes and objects, define properties and methods, and harness encapsulation 🔒 to control data access. As we progress, we’ll dive into constructors, destructors, namespaces, and autoloading 📦, making your code more efficient and modular.
From there, we explore inheritance & polymorphism 🎭, showing you how to extend classes and implement interfaces for flexible, reusable designs. You’ll master traits, static methods, and the final & parent keywords to control class behavior. Then, we tackle exception handling ⚠️, teaching you how to manage errors like a pro with custom exceptions.
In the final stretch, we bring everything together with real-world patterns, including the Singleton pattern (logger class) 🔁 and Dependency Injection 💡 for writing decoupled, testable code. To top it off, we’ll refactor a calculator app from scratch 🛠️, applying OOP best practices to build a fully optimized application.
Whether you’re just starting out or looking to level up your PHP skills, this series will equip you with everything you need to master OOP and write better PHP code! 🚀🔥
In “JavaScript for Beginners”, you’ll go from zero to confident coder with a hands-on, modern approach to the world’s most popular programming language. Step-by-step, we’ll guide you through the fundamentals, demystify the syntax, and get you writing real code fast. 💻✨
💡 What you’ll learn:
• 🧠 Core Language Fundamentals: Understand variables, data types, operators, and control flow—build the logic behind the magic.
• 🔁 Loops & Functions: Write clean, reusable code with powerful function patterns.
• 📦 Collections: Master arrays and objects—tools you’ll use everywhere in JavaScript.
• 💥 Intermediate Power-Ups: Destructuring, error handling, template literals, and more to level up your scripts.
• 🌀 Function Wizardry: Closures, higher-order functions, and even recursion? Yes, you can.
• 🏗 Object-Oriented JavaScript: From prototypes to modern ES6 classes and inheritance.
• 🔗 Modules & What’s Next: A sneak peek into modular code and your next steps in the JavaScript journey.
🛠️ You’ll also:
• Set up a coding environment
• Use browser dev tools like a champ
• Build a solid foundation for DOM scripting and frameworks like React
⸻
Whether you’re brand new to coding or switching gears into web development, this course will leave you energized and equipped. By the end, you won’t just know JavaScript—you’ll be using it like a pro. ⚔️🔥
Let’s code something awesome. Your journey starts here! 🌟
What You’ll Learn:
✅ The fundamentals of PHP and how it powers the web
✅ Setting up your development environment (XAMPP, MAMP, Docker, and more)
✅ Writing your first PHP script and understanding PHP syntax
✅ Working with variables, data types, arrays, and strings
✅ Controlling program flow with conditionals and loops
✅ Creating and using functions efficiently
✅ Handling user input, forms, and validation for secure web applications
✅ Embedding PHP in HTML and structuring reusable code
✅ Debugging, error handling, and best practices
✅ A hands-on final project to put your PHP skills to the test!
By the end of this series, you’ll have a strong foundation in PHP development, enabling you to create dynamic websites, process user input, and build real-world applications. Get ready to code and bring your web development ideas to life! 💻🔥
Popular Series
Series Others Are Watching

oop|php|web
Apr 9, 2025
30 videos
7h:19m:4s
Pragmatic PHP
🚀 Introducing “PHP: The Pragmatic Way” – Your Guide to Building Real-World PHP Applications!If you’re ready to take your PHP skills to the next level, this video series is designed to help you do just that! Starting from a static HTML page, we’ll guide you through the process of converting it into a dynamic, maintainable PHP application using best practices.
🔧 What You’ll Learn:
• How to build a custom PHP mini-framework from scratch (no frameworks, just pure PHP!)
• Core concepts like MVC architecture, routing, sessions, and database management
• Practical coding techniques for clean, secure, and maintainable PHP code
• Step-by-step guidance on refactoring your project as it grows, from simple static pages to a full-fledged application
⚙️ Key Features:
• Hands-on approach with real-world examples
• A focus on practical, easy-to-follow solutions
• Emphasis on clean, reusable code that follows industry best practices
• Building your own PHP framework and database handling code along the way
By the end of this series, you’ll have built a fully functional photo review application – and gained the skills to develop your own PHP projects with confidence.
Ideal for: Intermediate PHP developers looking to deepen their understanding and elevate their coding practices.
Prerequisites: Basic knowledge of PHP and OOP principles.
Ready to take your PHP skills to the next level? Join me in this practical, hands-on series! 👨💻👩💻

oop|php
Mar 21, 2025
17 videos
3h:40m:23s
PHP Object Oriented Programming
This action-packed video series takes you on a journey from the fundamentals of Object-Oriented Programming (OOP) in PHP to advanced techniques, helping you write cleaner, more maintainable, and scalable code.We kick things off by exploring why OOP matters and how it solves common issues like messy, hard-to-maintain code. You’ll learn how to create classes and objects, define properties and methods, and harness encapsulation 🔒 to control data access. As we progress, we’ll dive into constructors, destructors, namespaces, and autoloading 📦, making your code more efficient and modular.
From there, we explore inheritance & polymorphism 🎭, showing you how to extend classes and implement interfaces for flexible, reusable designs. You’ll master traits, static methods, and the final & parent keywords to control class behavior. Then, we tackle exception handling ⚠️, teaching you how to manage errors like a pro with custom exceptions.
In the final stretch, we bring everything together with real-world patterns, including the Singleton pattern (logger class) 🔁 and Dependency Injection 💡 for writing decoupled, testable code. To top it off, we’ll refactor a calculator app from scratch 🛠️, applying OOP best practices to build a fully optimized application.
Whether you’re just starting out or looking to level up your PHP skills, this series will equip you with everything you need to master OOP and write better PHP code! 🚀🔥

javascript
Apr 25, 2025
14 videos
2h:26m:13s
JavaScript for Beginners
Ready to unlock the power of the web? Whether you’re dreaming of building websites, launching interactive apps, or diving into a dev career, JavaScript is your gateway—and this course is your launchpad. 🧑💻💥In “JavaScript for Beginners”, you’ll go from zero to confident coder with a hands-on, modern approach to the world’s most popular programming language. Step-by-step, we’ll guide you through the fundamentals, demystify the syntax, and get you writing real code fast. 💻✨
💡 What you’ll learn:
• 🧠 Core Language Fundamentals: Understand variables, data types, operators, and control flow—build the logic behind the magic.
• 🔁 Loops & Functions: Write clean, reusable code with powerful function patterns.
• 📦 Collections: Master arrays and objects—tools you’ll use everywhere in JavaScript.
• 💥 Intermediate Power-Ups: Destructuring, error handling, template literals, and more to level up your scripts.
• 🌀 Function Wizardry: Closures, higher-order functions, and even recursion? Yes, you can.
• 🏗 Object-Oriented JavaScript: From prototypes to modern ES6 classes and inheritance.
• 🔗 Modules & What’s Next: A sneak peek into modular code and your next steps in the JavaScript journey.
🛠️ You’ll also:
• Set up a coding environment
• Use browser dev tools like a champ
• Build a solid foundation for DOM scripting and frameworks like React
⸻
Whether you’re brand new to coding or switching gears into web development, this course will leave you energized and equipped. By the end, you won’t just know JavaScript—you’ll be using it like a pro. ⚔️🔥
Let’s code something awesome. Your journey starts here! 🌟

php
Mar 17, 2025
13 videos
2h:56m:41s
PHP for Beginners
Welcome to PHP for Beginners, a complete step-by-step guide to learning PHP from the ground up! Whether you’re a total beginner or looking to refine your backend development skills, this series covers everything you need to know to start building dynamic, data-driven websites with PHP.What You’ll Learn:
✅ The fundamentals of PHP and how it powers the web
✅ Setting up your development environment (XAMPP, MAMP, Docker, and more)
✅ Writing your first PHP script and understanding PHP syntax
✅ Working with variables, data types, arrays, and strings
✅ Controlling program flow with conditionals and loops
✅ Creating and using functions efficiently
✅ Handling user input, forms, and validation for secure web applications
✅ Embedding PHP in HTML and structuring reusable code
✅ Debugging, error handling, and best practices
✅ A hands-on final project to put your PHP skills to the test!
By the end of this series, you’ll have a strong foundation in PHP development, enabling you to create dynamic websites, process user input, and build real-world applications. Get ready to code and bring your web development ideas to life! 💻🔥