projectlighthouse logoprojectlighthouse
build it yourselfproject-based learning

fundamentals of software engineering ;

learn by doing

beyond the framework and tutorials. hands-on, project-based, self-paced learning. no fluff, just practical skills you can use today.

projectlighthouse — fish
curl -X POST https://projectlighthouse.io/api/v1/labs \
  -H "Authorization: Bearer $TOKEN"
.PHONY: build test

build:
    cargo build --release
FROM rust:1.75-alpine
RUN cargo build --release
ENTRYPOINT ["api"]
apiVersion: apps/v1
kind: Deployment
replicas: 3
mov rax, 1
syscall
async fn create_session(req: Request) {
    VmSession::provision(&lab).await?;
}
$ cargo build --release
    Finished release in 42.3s
services:
  api:
    ports: ["8080:8080"]
pub struct MicroVm {
    tap_device: TapDevice,
}
GET /api/v1/labs
make build
docker build
kubectl apply
syscall

Books

Carefully crafted books to help you level up your skills

Go Fundamentals
9 pages

Go Fundamentals

Want to build beyond CRUD? Databases, CLI tools, or distributed systems? This course covers Go programming basics - variables, control flow, functions, structs, pointers, testing and error handling. With real world examples.

Go Intermediate
17 pages

Go Intermediate

Master Go concurrency, advanced language features, and performance optimization. Learn goroutines, channels, sync primitives, context, generics, reflection, and profiling with real-world examples.

Networking Fundamentals
44 pages

Networking Fundamentals

Demystify computer networking from first principles. Learn how data travels across networks, from electrical signals to HTTP requests. Packets, sockets, routing, DNS, TLS - all with hands-on Linux tools. The course for developers who want to understand what actually happens when they curl an endpoint.

DSA Fundamentals
32 pages

DSA Fundamentals

Data structures and algorithms taught the right way - from first principles, with memory-first thinking. Understand why things work, not just what to memorize. Arrays, linked lists, trees, graphs, sorting, searching - all with real-world motivation and hands-on implementation.

Rust from Zero
17 pages

Rust from Zero

Memory safety without garbage collection. Zero-cost abstractions. Fearless concurrency. This course takes you from zero to confident Rust developer - ownership, borrowing, lifetimes, traits, generics and more. With practical examples that stick.

OS Fundamentals
34 pages

OS Fundamentals

Master operating systems from first principles. Learn processes, memory management, scheduling, filesystems, and concurrency—while discovering why your algorithms and data structures education actually matters. Hands-on with real Linux tools.

Getting Started with Go

Why Go was created, what you can build with it, how it performs - we'll cover all of this. Plus an overview of the Go community and ecosystem.

What Is a Process?

The fundamental abstraction that lets multiple programs share one CPU. Understand process memory layout, the illusion of isolation, and why a 'running program' is more complex than it sounds.

Why Rust

What makes Rust different from other languages. Memory safety without garbage collection, zero-cost abstractions, and why companies are adopting it.

What Is a Network?

Two computers, one wire, and the fundamental question: how do they talk? The layered model of networking and why abstraction is essential for sanity.

The Go Concurrency Model

Understand Go's concurrency philosophy, goroutines, the GMP scheduler, and how Go achieves lightweight concurrency.

Introduction

What are data structures and why do they matter? The relationship between data structures and algorithms, and how this course is structured.

Channels

Channels are Go's primary mechanism for communication between goroutines. Learn buffered and unbuffered channels, channel directions, and common patterns.

RAM - How Memory Actually Works

Memory as a giant array of bytes, addresses, cache hierarchy, and why understanding memory is the key to writing fast code.

Practical learning

to build a better world

philosophy

Fundamentals first; practice & iterate

Instead of rushing through frameworks and libraries, we focus on building a strong foundation first. Understand the core concepts, then practice by building real projects, iterating as you learn.

approach

builders, not watchers

Tired of long video tutorials ? Here, it's DIY, no copy-paste tutorials!

resources

Books, text based approach

Books are a powerful way to learn. Find in-depth technical books on systems, networking, and more. Dive deep into concepts and build a solid understanding that lasts.

CLI

Validate your skills with luxctl

Hand-picked projects are designed to challenge you and validate your skills. Use Lux CLI tool to test your solutions and gain XPs.

Take notes

Review your annotations before a interview a quick look back.

Hand-crafted

Each project is carefully designed for production readiness.

Explore Labs

Build real-world software from scratch and understand how things work

18 tasks

Build Your Own HTTP Server

Build an HTTP server from raw TCP sockets. No frameworks, no libraries - just you and the protocol specification. Understand exactly what happens when browsers talk to servers.

8 tasks

1 Billion Row Challenge

Process 1 billion temperature measurements as fast as possible. Start with a working solution, then systematically optimize - I/O, parallelism, parsing, data structures - until you're competing with the best.

8 tasks

Build Your Own Docker

Build a container runtime from scratch. You, go and and the Linux kernel. Understand exactly how containers achieve isolation.

19 tasks

Build Your Own DNS Resolver

Understand DNS from the ground up by building a recursive resolver. Parse binary protocols, query root servers, follow delegation chains, and implement caching.

stay in the loop

get notified about new labs, books or pages, and deep-dive articles. no spam, unsubscribe anytime.

no spam. unsubscribe anytime.

Frequently Asked Questions

The why behind the what

When you read, your brain needs to take the cognitive load. When you're watching videos, it's often spoon feeding. Ever thought about why our attention span is in 2-digit seconds nowadays? The aim is to be a builder, not a watcher. Articles let you learn at your own pace. You can skim, re-read, and jump around easily. You can highlight text, take notes in the margins, and search for keywords. You can also read offline or in low-bandwidth situations. Also, one of the biggest myths is that videos are better for learning. Research shows that active reading leads to better retention and understanding than passive watching. Here's a great video that dives into this topic: https://www.youtube.com/watch?v=rhgwIhB58PA

There's a big gap between using Docker and understanding how containers actually work. Between deploying to Kubernetes and knowing what happens when a pod starts. Between running a service and understanding the networking stack beneath it. I'm building this platform to help bridge that gap. It won't solve everything, but it might help developers build a foundation for understanding the infrastructure they work with every day. Because without some of that foundation, it's easy to end up blindly accepting whatever comes your way—even 'sudo rm -rf ~/'.

projectlighthouse is for the seekers. The ones who want to understand how things work under the hood. The ones who want to go beyond just using tools and platforms, and actually understand the infrastructure they interact with daily. You might be actively learning by building things, reading documentation, or challenging yourself with hands-on labs. Either way, if you have that curiosity and drive to understand containers, Kubernetes, and cloud-native technologies, this is for you. If you've ever wondered how Docker actually isolates processes, why your TCP connection hangs, what happens when you deploy to Kubernetes, or how service meshes route traffic—this is for you.

Language doesn't matter—except when it does. For containers, Kubernetes, and infrastructure work, it absolutely matters. Go powers Kubernetes, Docker, Terraform, containerd, and half the cloud-native tools you use daily. Its simplicity and concurrency model make it the lingua franca of cloud infrastructure. Rust offers memory safety without a garbage collector, making it ideal for performance-critical infrastructure components. It's being adopted widely in the industry—from the Linux kernel to new container runtimes and networking tools. C provides low-level access to understand how containers interact with the kernel, how namespaces work, and what's really happening under the hood. As projectlighthouse is still a one-man show, I had to pick languages that are industry-standard and that I work with daily—I can't teach something I don't know. Go for its dominance in cloud-native, Rust for its growing adoption in infrastructure, and C for foundational understanding.

For the articles, no—you can read and follow along on any OS. For the labs, you'll need a Linux environment. The labs run on real Linux microVMs in the cloud, so you can use them from any machine with a browser. But if you want to experiment locally, a Linux VM, WSL2 on Windows, or a Linux machine will serve you well. Containers and Kubernetes are inherently Linux-centric. Namespaces, cgroups, the /proc filesystem, container runtimes—these are Linux concepts. You can't learn them properly without touching Linux.

Hi, I'm Aryan

The best way to learn programming is to build systems. You need the tools, and you also need the deeper understanding on how it works.

Over the years, I've been part of teams that built large scale systems from the ground up, keep up and running under heavy load, and scale to meet growing demand. Currently, I'm at DigitalOceanDigitalOcean; building the simple cloud.

I am building projectlighthouse to bridge some of the gap between theory, practice, tools and systems programming. This would be my approach if I could go back in time and teach myself. I hope you find it useful!

And welcome to ...