Founder's Edition — seats limited
use IQRA for $99 $49/yr or go lifetime $129
Subscribe
build it yourselfproject-based learning

fundamentals of software engineering ;

to build a better world

fundamentals, deep dives, real projects from scratch. your library, your sandbox.

projectlighthouse — fish
curl -X POST https://projectlighthouse.io/api/v1/projects \
  -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/projects
make build
docker build
kubectl apply
syscall
Book illustration 1Book illustration 2Book illustration 3Book illustration 4Book illustration 5Book illustration 6Book illustration 7Book illustration 8Book illustration 9Book illustration 10Book illustration 11Book illustration 12Book illustration 1Book illustration 2Book illustration 3Book illustration 4Book illustration 5Book illustration 6Book illustration 7Book illustration 8Book illustration 9Book illustration 10Book illustration 11Book illustration 12

Books

Carefully crafted books to help you level up your skills

Go Fundamentals
11 pages

Go Fundamentals

from zero to writing real Go — not toy examples, but the kind of code that ships. variables, structs, pointers, error handling, and testing, grounded in patterns you will actually use when building services, CLI tools, and systems software.

Go Intermediate
15 pages

Go Intermediate

picks up where Go Fundamentals leaves off — concurrency, the GMP scheduler, channels, sync primitives, and performance profiling. understand how goroutines actually work, when to reach for context, and how to write Go that scales.

Shipping Go Web Services
23 pages

Shipping Go Web Services

build a production log aggregator from an empty main.go to a deployed service. HTTP routing, PostgreSQL, authentication, middleware, HTML dashboards, and deployment — no frameworks, just Go and the standard library.

Rust from Zero
in progress

Rust from Zero

learn Rust by building rune — a real CLI password manager with encrypted vaults and git-based sync. ownership, borrowing, lifetimes, traits, and the type system, all through a project you will actually use.

OS Fundamentals
in progress 35 pages

OS Fundamentals

inside the operating system — how processes are created, how memory is managed, how the scheduler decides what runs next. the layer between your code and the hardware, explored hands-on with real Linux tools.

C Programming
in progress 18 pages

C Programming

beneath the abstractions — the language that kernels, databases, and embedded systems are written in. manual memory, pointers, structs, and the compilation model, with no garbage collector and no safety net. understand what your higher-level languages are doing for you by learning the language underneath.

DSA Fundamentals
in progress 30 pages

DSA Fundamentals

data structures and algorithms from first principles — starting with how memory works and building up from there. arrays, linked lists, trees, graphs, heaps, hash tables, sorting, and searching, explained with the depth that helps you understand why things are fast or slow, not just what to memorize.

Networking Fundamentals
in progress 44 pages

Networking Fundamentals

follow a packet from your keyboard to a server and back — what actually happens when you curl an endpoint. TCP/IP, sockets, routing, DNS, TLS, and HTTP, all from first principles with hands-on Linux tools.

Introduction

what an operating system is, why it exists, and what the kernel actually does between your code and the hardware

What Is a Network?

what a network is, why the layered model exists, and how abstraction lets you reason about communication without losing your mind

Introduction

what we will build — a full log aggregator from scratch — and why Go's standard library is enough to ship production web services

Hello World

how to compile and run your first C program with gcc, understand why main returns an int, and see why #include is copy-paste not import

Introduction

what data structures are, why they matter for writing fast code, and how this book builds your understanding from memory up

The Go Concurrency Model

what goroutines are, how the GMP scheduler maps them to OS threads, and why Go's concurrency model scales better than raw threads

Getting Started with Go

what Go is, why it was built for modern infrastructure, and how its performance and tooling compare to other languages

Channels

how to send data between goroutines using buffered and unbuffered channels, enforce direction constraints, and apply common channel patterns

Request & Response Anatomy

how to parse request bodies, validate required fields, and return proper status codes with structured JSON error responses

What Is a Process?

what a process really is, how its memory is laid out, and why a running program is more than just code executing

Variables, Types and Data Structures

how to declare variables, choose the right types, and use arrays, slices, and maps — including how Go lays them out in memory

Seek into the Memory

how memory works as a giant array of bytes, why cache hierarchy decides performance, and how to think about data layout before choosing any structure

On the Horizon

The books above teach you how programs work, how memory works, how networks work. These books are where it all comes together — containers, distributed systems, databases, protocols. Each one builds on what you already learned or fills one of the gaps.

Containerizing Your App

Take Logline (Go) and Rune (Rust) — projects you built in earlier books — and ship them properly. Write Dockerfiles from scratch, optimize with multi-stage builds, manage secrets at build time, set up Docker Compose for local dev with databases and Redis, push to container registries, and configure health checks. The bridge between "it runs on my machine" and "it runs anywhere".

Advanced Containers

What actually happens when you run docker build? Namespaces, cgroups, overlay filesystems — the Linux primitives that make containers work. OCI image and runtime specs, BuildKit internals and custom build frontends, image layer optimization, vulnerability scanning with Trivy, rootless and daemonless containers with Podman, and building minimal images from scratch (literally FROM scratch). After this, Docker stops being magic.

Protocol Engineering

Design and implement wire protocols from scratch. Start with text-based protocols (like Redis RESP), then move to binary framing — length-prefixed messages, TLV encoding, versioning, and backward compatibility. Implement flow control, error recovery, and keepalives. Serialize with protobuf and flatbuffers. The capstone: design a custom binary protocol that controls LEDs on real hardware (Raspberry Pi / Arduino) over TCP, using Rust or C.

Distributed System Design

Consensus, replication, partitioning, gossip protocols, CRDTs — not just theory, each chapter is its own build-from-scratch project. Implement Raft consensus for leader election and log replication. Build a replicated key-value store. Add hash-ring partitioning and shard data across nodes. Write a two-phase commit coordinator. Implement SWIM protocol for membership and failure detection. Build a collaborative CRDT that merges concurrent edits without conflicts.

Database Internals

How databases actually work under the hood. Implement a B-tree that flushes to disk. Build a write-ahead log for crash recovery. Understand MVCC by implementing snapshot isolation. Write a buffer pool manager with clock-sweep eviction. Build a simple query executor that scans, filters, and joins. Explore indexing strategies — hash indexes, LSM trees, and when each wins. The OS and DSA books gave you the building blocks — this is where they become a storage engine.

Observability & Performance

You built the systems — now learn to see inside them. Instrument Go and Rust services with Prometheus metrics and OpenTelemetry traces. Set up Grafana dashboards that actually help you debug. Write eBPF programs to trace syscalls and measure latency without modifying application code. Read flame graphs and identify hot paths. Implement structured logging with correlation IDs for request tracing across services. Profile memory allocations, GC pauses, and lock contention.

Orchestrating Containers

Not "how to use kubectl" — how orchestration actually works. Understand how kubelet manages pod lifecycles, how CNI plugins configure pod networking, and how the kube-scheduler makes placement decisions. Write a custom scheduler. Explore Firecracker microVMs and how they differ from containers. Implement service discovery, rolling deployments, and resource limits. Builds on everything from networking (CNI, DNS) to containers (runtimes, images) to OS fundamentals (cgroups, namespaces).

Advanced Algorithms

Algorithms that show up in real systems, not interview prep. Segment trees for range queries in time-series databases. Tries and radix trees for IP routing tables and autocomplete. Skip lists as used in Redis sorted sets and LevelDB. Bloom filters for avoiding unnecessary disk reads in LSM-tree databases. Consistent hashing for distributing data across nodes. A* for pathfinding in game engines and network routing. Max-flow for network capacity planning and bipartite matching.

*subject to change based on priority and ask from the learners

Free

starter labs are free — 20 minutes per session, full terminal access, no credit card needed.

browse labs

practical learning

to build a better world

philosophy

fundamentals first; practice repeat

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

You don't learn to build systems by watching someone else do it. You read, you think, you build. Every project is yours to figure out.

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.

Build real things

Build Redis, Docker, HTTP servers — not toy apps. Real projects, real understanding.

See where you stand

Track your progress, earn XP, and see how you compare with other builders.

Your notes, your way

Highlight and annotate as you read. Come back to them before interviews or deep dives.

No filler content

Every project, every chapter is handcrafted — no AI slop, no recycled content.

the long game

from programs to machines

The gap between "I can program" and "I can write flight controller firmware" is just applied knowledge. We teach the fundamentals deeply enough that building robots or launching rockets becomes the next natural step — not a distant dream.

Projects & Challenges

build real systems from scratch, or sharpen your tools

Projects

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.

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.

19 tasks

SeaChart: 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.

Challenges

8 tasks

find Patrol

Disk alerts are firing and orphan files are everywhere. Locate files by pattern, age, and size, then clean up in bulk — eight tasks, two tools: find and xargs.

8 tasks

sort & uniq Triage

Duplicate entries are clogging the pipeline. Deduplicate, rank by frequency, and extract top-N offenders — eight tasks, two tools: sort and uniq.

8 tasks

grep Recon

A deploy went wrong and you're on-call. Hunt down errors in logs, search configs, and trace issues across files — eight tasks, one tool: grep.

8 tasks

awk Ops

A deploy went wrong and you're on-call. Extract columns, filter rows, and summarize data from logs and exports — eight tasks, one tool: awk.

8 tasks

jq Debrief

The API dump is 10,000 lines of JSON. Extract fields, filter objects, and reshape data for the post-incident report — eight tasks, one tool: jq.

8 tasks

Shell Script Basics

You keep typing the same commands over and over. Automate your on-call workflows with conditionals, loops, and functions — eight tasks, one shell: bash.

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 running a service and understanding the networking stack beneath it. Between writing code and knowing what the OS does with 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 how systems actually work, this is for you. If you've ever wondered how Docker actually isolates processes, why your TCP connection hangs, how memory allocation works, or what the OS does when you open a file—this is for you.

Language doesn't matter—except when it does. For systems and infrastructure work, it absolutely matters. Go powers 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 infrastructure tooling, Rust for its growing adoption in systems software, and C for foundational understanding.

Yes. We have the Lady Elizabeth scholarship. If you're going through a tough time and believe the content here can help you grow, reach out. Share what you've done and how these books, labs, or projects would benefit you. We'll grant access to relevant material or waive part or full payment. Don't let cost be a blocker.

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 containers 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 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!

If you want to understand how projectlighthouse.io works, read here in detail.

Welcome to projectlighthouse.io