Short Bio:
Bob Cravens is a seasoned technology leader, software architect, and educator with a passion for empowering others through practical, real-world knowledge. As the founder of TekFoundry, Bob has dedicated his career to designing and delivering innovative software solutions that combine cutting-edge technology with elegant simplicity.
At TekCasts, Bob leverages over two decades of experience in software engineering, application architecture, and team leadership to create engaging, high-impact courses for developers and technology professionals. His instructional style is rooted in practical application, offering insights drawn from his extensive background in industries like medical devices and global technology consulting.
Bob’s expertise spans a variety of technologies and methodologies, including PHP/Laravel, FastAPI, and DevOps, as well as architecture best practices and team dynamics. Whether teaching foundational concepts or advanced strategies, he’s passionate about helping others turn complex challenges into streamlined solutions.
When not crafting elegant code or inspiring the next generation of tech innovators, Bob enjoys exploring the intersection of technology, business strategy, and creative problem-solving.
At TekCasts, Bob leverages over two decades of experience in software engineering, application architecture, and team leadership to create engaging, high-impact courses for developers and technology professionals. His instructional style is rooted in practical application, offering insights drawn from his extensive background in industries like medical devices and global technology consulting.
Bob’s expertise spans a variety of technologies and methodologies, including PHP/Laravel, FastAPI, and DevOps, as well as architecture best practices and team dynamics. Whether teaching foundational concepts or advanced strategies, he’s passionate about helping others turn complex challenges into streamlined solutions.
When not crafting elegant code or inspiring the next generation of tech innovators, Bob enjoys exploring the intersection of technology, business strategy, and creative problem-solving.
Videos
Checkout Videos By This Instructor

browser,javascript
8m:17s
Sep 9, 2025
Class & Style Manipulation
Ready to take your DOM game up a notch? In this video, we’ll unlock the secrets of making your pages look alive with style changes and class toggles.✨ You’ll learn how to:
🔹 Add, remove, and toggle classes with ease
🔹 Directly style elements using .style 🎯
🔹 Know when to use CSS classes vs inline styles 🧩
🌙 Build a slick dark mode toggle demo
By the end, you’ll be styling like a pro—your elements won’t just sit there…they’ll respond, adapt, and shine ✨🔥

oop,php
5m:27s
Mar 22, 2025
Classes and Objects
Welcome to the foundation of Object-Oriented Programming (OOP) in PHP! In this episode, we break down one of the most important concepts in OOP—classes and objects.We’ll start by creating an empty class using the class keyword and explore how a class acts as a blueprint for building objects. Then, we’ll bring it to life by instantiating objects with the new keyword, transforming our blueprint into real, usable instances. You’ll learn how every object is an independent version of a class, ready to hold data and perform actions.
By the end of this video, you’ll have a solid grasp of classes and objects, setting the stage for writing cleaner, modular, and scalable PHP code! 💡🔥

javascript
8m:31s
Sep 2, 2025
Closures and Lexical Scope
In this episode, we unlock one of JavaScript’s most powerful (and sometimes mysterious) features: closures. You’ll see how functions can “remember” the variables around them, even after the outer function has finished running.🎯 What you’ll learn:
- Lexical scope — how JavaScript decides which variables a function can access.
- Closures — functions carrying their environment with them.
- Practical use cases:
* A simple counter that remembers its value.
* Using closures to create private data in JavaScript.
💡 Why it matters:
Closures are everywhere in modern JavaScript — from event listeners to libraries and frameworks. Understanding them gives you the power to write smarter, safer, and more reusable code.
By the end, closures won’t feel like “magic” — they’ll be a tool you can confidently use to structure your programs. 🔑

php
1m:5s
Mar 19, 2025
Congrats & Recap
🎉 You did it! 🎉 You’ve completed the “PHP for Beginners” series, and you now have a solid foundation in PHP! In this short recap, we’ll:✅ Review what we’ve learned—from loops and functions to forms and reusable code.
✅ Celebrate your progress and encourage you to keep coding!
✅ Hint at exciting next steps, like database queries and object-oriented programming.
This is just the beginning of your PHP journey! Keep practicing, keep building, and get ready for more advanced topics. 🚀

javascript
10m:2s
Sep 16, 2025
Constructor Functions & Prototypes
Before ES6 classes came along, JavaScript had its own way of doing object-oriented programming—using constructor functions and prototypes. In this episode, we’ll take a step back in time and uncover how developers structured code for reusability and efficiency. 🏗️Here’s what we’ll explore:
🏭 Object factories vs constructor functions—and why constructors gave us more power.
🆕 The magic of the new keyword and how it creates object instances.
🛠 Adding methods through prototypes to keep memory usage efficient.
💡 Why this pattern still matters today (hint: classes are built on top of it!).
By the end, you’ll see how prototypes formed the backbone of JavaScript’s object system—and why understanding them gives you a deeper grasp of how modern classes really work. 🚀

oop,php
9m:31s
Mar 22, 2025
Constructors and Destructors
Time to build it up and tear it down—PHP style! 🚀 In this video, we dive into constructors and destructors, the dynamic duo that controls how objects come to life 🏗️ and gracefully clean up after themselves 🧹.You’ll learn how constructors automatically set up an object when it’s created, making your code more efficient ⚡. Then, we’ll explore destructors, the unsung heroes that handle cleanup duties when an object is no longer needed.
By the end, you’ll be crafting smarter, more efficient PHP classes like a true OOP wizard! 🧙♂️💻

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! 🌍💡

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! ♻️⚙️
Coming Soon

javascript,node
9m:29s
Nov 27, 2025
Cookies
HTTP is stateless — every request is brand new.So… how do we remember users, personalize experiences, or keep them logged in?
That’s where cookies come in 🍪✨
👉 In this episode, you’ll learn how to:
🚀 Read and parse cookie data from incoming requests
⚙️ Set and clear cookies from your server responses
🔐 Understand cookie flags like HttpOnly, Max-Age, and Path
🧠 Explore real-world uses like sessions, personalization, and analytics
By the end, you’ll have a working mental model of how state travels between client and server — and how cookies form the foundation of sessions and authentication in modern web apps.
💡 Relevant Links
Previous TekCasts series:
- JavaScript for Beginners: https://tekcasts.com/play/javascript-for-beginners-what-is-javascript
- JavaScript in the Browser: https://tekcasts.com/play/javascript-in-the-browser-browser-runtime-environment
Official Docs & Resources:
- MDN: HTTP Cookies — https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
- Node.js HTTP Module — https://nodejs.org/api/http.html
- MDN: HTTP Headers — https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

oop,php
8m:23s
May 6, 2025
Creating A Master Layout
Let’s streamline our app’s structure even further! In this video, we tackle layout repetition by introducing a master layout—making our pages cleaner and more consistent. 🧼Here’s what we’ll cover:
• Refactor repetitive layout code into layout/app.view.php using a $page_content placeholder for dynamic content 🧩
• Enhance our view() helper function to accept a third $layout parameter 🧠
• Update controllers to support a page_layout variable for flexibility in rendering 🛠️
• Clean up our individual page views for clarity and focus ✂️
• Bonus: Improve our dd() helper to accept any number of arguments using ...$var 🧪
By the end of this refactor, we’ll be rocking version v8-create-layout—a polished, DRY, and maintainable foundation for future growth. 🚀

oop,php
9m:23s
Apr 24, 2025
Creating Views
Let’s clean up our code and separate logic from markup—the pragmatic way! In this video, we refactor each page to use dedicated view files, making our structure more scalable and maintainable. 🧼📁Here’s what we’ll do:
• Move HTML into organized view files:
• views/about/index.view.php 🧾
• views/photo/index.view.php 📷
• views/upload/index.view.php ⬆️
• Create a global view() helper function to simplify view rendering across the app 🛠️
This separation of concerns brings clarity to our project and lays the groundwork for a clean MVC structure. By the end, we’ll be rocking version v5-created-views—structured, readable, and ready for action! 🚀

browser,javascript
12m:23s
Sep 18, 2025
Creating, Removing, & Cloning Elements
Web pages don’t have to be static — with JavaScript, you can build, destroy, and duplicate elements on the fly. In this video, we’ll dive into the core DOM methods that let you take full control over your UI.Here’s what you’ll master:
🧩 Creating nodes with createElement & createTextNode
📌 Inserting elements using append, appendChild, and prepend
🗑️ Removing nodes gracefully with .remove() and .removeChild()
🪞 Cloning entire elements with cloneNode(true/false)
⚡ Building dynamic UI components—like interactive tables, buttons, and more
You’ll see:
✅ Why innerHTML isn’t always your best friend
✅ How to dynamically add “Remove” and “Clone” buttons to a table
✅ A hands-on demo where rows can be added, deleted, or duplicated — all with clean JavaScript
By the end, you won’t just be reading the DOM — you’ll be shaping it, sculpting it, and breathing life into it 💡🚀
👉 Watch this video and unlock the power to create and control dynamic UIs!

php
20m:26s
Mar 18, 2025
Data Types
Understanding data types is essential for writing efficient and error-free PHP code! In this video, we’ll break down PHP’s core data types, including strings, integers, floats, and booleans, and show you how they work in real-world applications. You’ll learn how to:✅ Properly name and assign variables
✅ Work with strings, including concatenation and the differences between single and double quotes
✅ Perform simple math with integers and floats, while exploring PHP’s type juggling
✅ Understand booleans and how PHP dynamically handles truthy and falsy values
By the end of this video, you’ll have a solid grasp of PHP’s data types and be ready to start building dynamic applications with confidence! 🚀

oop,php
21m:3s
May 15, 2025
Database Connections / Migrations
Let’s connect our app to the real world of data! In this video, we build a reliable and secure database layer and run our first migrations and seed scripts. This step sets the stage for persistent data handling in our application. 🧱Here’s what we cover:
• Temporarily hijack index.php for local development and testing purposes 🔧
• Add database/migrate.sql and database/seed.sql to define and populate our schema 🧬
• Use file_get_contents() to load SQL scripts and run them using PDO 🎯
• Define connection settings: host, port, database name, user, and password (with Docker-friendly defaults) 🐳
• Set up secure PDO options for error handling and safe queries 🔐
• Wrap everything in a try/catch to safely execute migrations and seeding 🚨
• Introduce our app’s database structure:
• users – for login info 👤
• photos – uploaded images 📸
• reviews – ratings and comments ⭐📝
• Protect sensitive credentials by moving them into a .env file 🛡️
• Create a Framework/Env.php class to access environment variables cleanly 🌱
By the end of this video, version v11-db-basics will bring real data into play—securely, cleanly, and pragmatically. 🚀

oop,php
20m:53s
May 20, 2025
Database Infrastructure
Let’s encapsulate our database logic the pragmatic way! In this video, we refactor our raw database code into a dedicated Database class, making connections and queries more reusable, readable, and testable. 🛠️Here’s what we’ll do:
Create a Framework/Database class that accepts config parameters in the constructor ⚙️
Expose an exec() method for executing raw SQL 🧾
Add a static instance for quick access to a shared connection 🌐
Introduce helper methods: first() to fetch a single record & all() to fetch multiple records
Write a simple query to fetch a photo by ID and pass it into the view dynamically 📸
Update the View class to properly render passed variables inside templates
Introduce a private render_template() method to handle this cleanly 🧩
By the end of this refactor, we’ll be on version v12-db-encapsulation—with database access that’s clean, powerful, and built to scale. 🚀

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. 👌