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
oop,php
19m:17s
Jul 3, 2025
Uploading Photos
🔒 UI Adjustments Based on Auth State• Hide the notification bell in the top nav if the user isn’t logged in
🧭 Routing & Form Setup
• Create an /upload route
• Set the form’s action and stub in the store() method with a dd($_POST) to start
• Remove the unused “title” field from the upload form
🧪 Validation Process
• Define validation for the uploaded photo:
$file = validate('photo')->file($allowed_mimes)->max(4016053)->required();
• Add $allowed_mimes and $max_file_size constants to the Photo model
• Implement file() and update the max() method in the Validation class
• Fix Validation::clean_value() to properly handle file inputs
⚠️ Missing Validation Messages
• Ensure validation errors are displayed in these views:
• registration.index
• auth.index
• upload.index
💾 File Storage & DB Entry
• Save the uploaded file to the appropriate location
• Create a new photo record in the database
🚫 .gitignore Update
• Add public/photos to the .gitignore file to prevent uploaded files from being committed
⸻
📌 And that completes the upload feature, bringing us to v25-upload-photos. Ready to show off some pictures!
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.
linux
19m:42s
Feb 3, 2025
User Permissions - Access Control Lists (ACL)
This video is part of the Linux Crash Course series. This video will cover Access Control Lists or ACLs to apply permissions at a granular level.Github Repo: https://github.com/rcravens/linux-crash-course
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 🏁
linux
1m:45s
Feb 3, 2025
Users and Permissions - Groups, Users, Sudo, Files
This video is part of the Linux Crash Course series. This video will cover user management features.Github Repo: https://github.com/rcravens/linux-crash-course
javascript,node
9m:24s
Nov 13, 2025
Using EJS Templates
EJS (Embedded JavaScript) is one of the simplest ways to generate dynamic HTML on the server — without the chaos of string concatenation. 💡In this episode, we’ll walk through how to:
✅ Install and configure EJS in a Node.js project
✅ Embed JavaScript directly inside HTML templates
✅ Use loops and conditionals for dynamic content
✅ Render full pages from data
✅ Create reusable layouts and partials for cleaner structure
By the end, you’ll know how to serve fully rendered HTML from your Node.js server using EJS — the perfect first step toward clean, maintainable server-side rendering (SSR).
💡 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:
- EJS Docs: https://ejs.co/
- Node.js Documentation: https://nodejs.org/en/docs/
- MDN JavaScript Guide: https://developer.mozilla.org/en-US/docs/Web/JavaScript
laravel,php
18m:18s
Jan 8, 2026
Validation Errors
Welcome back to Laravel: The Pragmatic Way!In this episode, we build on our Form Request workflow and focus on how Laravel handles validation errors — and how you can present them cleanly in your UI.
We walk through the full flow: triggering errors, displaying them, styling them, and customizing their messages.
🎯 What You’ll Learn
- How Laravel automatically redirects back with validation errors
- Displaying all errors at the top of the page
- Field-specific error messages using Blade directives
- Highlighting invalid fields for better UX
- Creating custom error messages inside your Form Request
- Updating question components to surface validation issues cleanly
If you’re enjoying the series, hit 👍 Like, 🔔 Subscribe, and share with other Laravel devs!
💥 About the Series:
Pragmatic Laravel focuses on building real applications with Laravel — emphasizing clarity, maintainability, and thoughtful design decisions instead of shortcuts or magic.
javascript,node
13m:48s
Dec 4, 2025
Validation Improvements
Your form validation just got smarter 💪We’ve built forms, validated input, and handled errors… but what if we could preserve user data, show field-specific messages, and make validation feel seamless? ⚡️
👉 In this episode, you’ll learn how to:
🧠 Use sessions to persist form data across redirects
💬 Display inline validation errors with EJS helpers
⚙️ Implement a back() method for clean redirects
✨ Create a smoother, stateful user experience — no frameworks required
By the end, your Node.js app will remember what users entered, show precise errors, and feel more interactive 🔥
💡 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
Libraries mentioned:
- Node.js HTTP: https://nodejs.org/api/http.html
- Node.js Path: https://nodejs.org/api/path.html
- EJS Templates: https://ejs.co/
laravel,php
22m:47s
Jan 1, 2026
Validation Rules Engine
In this video, we introduce server-side validation to ensure incoming survey data is complete, well-formed, and secure. You’ll learn how Laravel’s validation layer works, how to define rules, and how to prepare your app to handle different question types with a rule engine.Topics Covered:
🔍 What validation is and why it matters
🌐 Client-side vs. server-side validation
🛡️ Laravel’s built-in validation features
🧩 Introducing rules for each survey question type
⚙️ Building a rule engine to encapsulate validation logic
📦 Aggregating validation rules for a full survey
✔️ Validating incoming user input
📚 Resources
- Laravel Validation Docs: https://laravel.com/docs/12.x/validation
💥 About the Series:
Pragmatic Laravel focuses on building real applications with Laravel — emphasizing clarity, maintainability, and thoughtful design decisions instead of shortcuts or magic.
#Laravel #PHP #WebDevelopment #FullStack #Validation #DataIntegrity #Programming #SurveyApp #TekCasts
javascript
17m:41s
Apr 24, 2025
Variables & Data Types
In this episode, we’ll dive into the foundation of any programming language: variables and data types! Mastering these early will make everything you do in JavaScript much easier and more powerful. 🚀🎯 Here’s what we’ll cover:
• Understand what a variable is: a container for storing data.
• Learn how to declare variables using let and const — and briefly touch on var as older legacy syntax.
• Explore primitive data types in JavaScript: strings, numbers, booleans, null, and undefined.
• Use typeof to inspect and understand the type of any value.
• Follow best practices with naming conventions like camelCase and choosing clear, descriptive names.
🎥 Visual Walkthroughs:
• See real examples of variable declarations and data types in action.
• Inspect types live using the console to build intuition.
• Highlight common quirks (like why null shows up as “object”!).
By the end of this episode, you’ll have a strong grip on creating variables and recognizing the key types of data in JavaScript! 💥
oop,php
12m:15s
May 8, 2025
View Infrastructure
It’s time to level up our view system! In this video, we refactor our simple view() helper into a flexible View class, giving us cleaner, more expressive control over how pages are rendered. ✨Here’s what we’ll do:
• Create the app/Framework directory to hold core infrastructure 🗂️
• Build the View class to support a fluent, chainable syntax for setting views, layouts, data, and page titles 🔧
• Add support for setting a custom page title directly in the view pipeline 🏷️
• Update controller classes to return View instances instead of using the old helper 🔄
• Refactor the load_route function and index.php to support the new view rendering flow 🔁
By the end, we’ll arrive at version v9-view-infrastructure—a modern, powerful view layer that keeps your code clean, expressive, and easy to maintain. 🚀
esp32
4m:36s
Apr 4, 2025
What is a "Smart Garage Door"?
Ever left the house and thought… “Wait, did I close the garage door?” 😬 You’re not alone — and that’s exactly the problem we solve in this video!In this first episode, we break down what makes a garage door smart — including:
✅ Real-time door position detection
✅ Remote open/close functionality
✅ Integration with Apple’s Home app for sleek iPhone control 📱🍏
✅ Notifications and remote access via Apple Home Hub 🌐📬
You’ll also get a full demo of the final product in action — showing exactly how these features come together in a seamless smart home experience.
📂 Resources mentioned:
🔗 Project GitHub Repo: rcravens/esp32_smart_garage_door
🔗 HomeSpan (Apple Home integration): HomeSpan/HomeSpan
Whether you’re into DIY home automation or just love cool projects, this series is for you. Let’s get started! 🚀
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. 💪
oop,php
13m:52s
Mar 21, 2025
Why OOP?
Ever felt like your PHP code is a tangled mess of functions, impossible to scale, and a nightmare to maintain? You’re not alone! In this kickoff episode, we dive into why Object-Oriented Programming (OOP) is a game-changer and how it solves common problems found in procedural PHP.We’ll break down the downsides of functional programming—spaghetti code 🍝, duplicated logic 🔁, and function name collisions 💥—and compare it to the structured, reusable, and scalable world of OOP. Through a tabletop comparison, we’ll introduce key OOP concepts like encapsulation, inheritance, and modular design, setting the foundation for everything to come.
By the end of this video, you’ll understand why OOP isn’t just a fancy buzzword—it’s a smarter way to write PHP! 💡🔥
php
8m:11s
Mar 17, 2025
Why PHP?
Kicking off our PHP for Beginners series, this video takes you on a deep dive into the world of PHP. From its origins to its modern-day relevance, we’ll explore how PHP has shaped the web—powering everything from WordPress to robust frameworks and libraries. But why do some developers swear by it while others steer clear? We’ll break down the pros, the cons, and why PHP continues to be a powerhouse in web development today. Whether you’re a complete beginner or just curious about PHP’s place in the tech world, this video is the perfect starting point!
javascript,node
5m:23s
Nov 11, 2025
Why Templates?
Static HTML can only take you so far. In this episode, we explore why Server-Side Rendering (SSR) and templates are essential for building dynamic web applications.We’ll look at how to generate HTML dynamically using JavaScript, what makes manual templating so painful, and why templating engines like EJS are the next logical step.
💡 You’ll Learn
- The difference between Static HTML and Server-Side Rendering (SSR)
- Benefits of dynamic content in web apps
- How to manually render HTML from JavaScript data
- The drawbacks of manual templating
- Why separating data from layout improves maintainability
💡 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
Resources mentioned:
- Node.js: https://nodejs.org
- TailwindCSS: https://tailwindcss.com
- PrismJS: https://prismjs.com