*-101 Learning Projects
Step-by-step GitHub repos built for Laravel developers cross-skilling into other frameworks. You already know routes, Eloquent, migrations, middleware, and FormRequests: each *-101 project maps those ideas to Python, PHP, Go, Node, or Flutter using the same items and categories API, so you compare conventions, not unrelated toy apps.
Built for the Laravel crossover
These repos are not generic framework tutorials. They assume you are comfortable with Laravel and want a structured path into Python, Go, Node, or mobile without starting from zero.
READMEs use Laravel parallels throughout: artisan migrate maps to Doctrine or Django migrations, API Resources map to serializers, auth:sanctum maps to JWT, and resource controllers map to Symfony controllers or DRF ViewSets. You learn the new stack by analogy.
What does *-101 mean?
The name is deliberate: these are 101-level projects, not production apps. They teach routing, validation, persistence, auth, and testing in a shape you would recognise from Laravel, without the noise of a full product codebase.
Most backend repos implement the same items and categories API (list, filter, paginate, JWT on writes, rate limits, stats). That lets you compare frameworks side by side instead of learning unrelated toy examples.
Monolith vs API-only
Most *-101 backends share the same JSON API (auth, categories, items, JWT on writes). Some also include a Catalog Shop at /shop (server-rendered HTML + session auth), mirroring laravel-101.
Full monolith (API + shop): symfony-101, laravel-101, framework-x-101, django-101, orchestr-101, rails-101.
API-only (no /shop): fastAPI-101, flask-101 (19 tests), go-101, geblang-101 (18 tests), gebweb-101 (18 tests), sinatra-101 (19 tests), fortran-101 (47 integration tests), java-101 (50 MockMvc tests), dotNet-101 (ASP.NET Core); nest-101 and express-101 (19 tests). Pair these with react-101, vue-101, alpine-101, or flutter-101 as API clients.
How the repos relate
- Compare PHP stacks – symfony-101 (Doctrine, port 8002), laravel-101 (Eloquent, port 8003), framework-x-101 (PDO + ReactPHP, port 8004).
- Into Python – fastAPI-101 (API-only, port 8000); flask-101 (minimal Flask API, port 8011); django-101 adds admin and shop (port 8001).
- Into Ruby – rails-101 (ActiveRecord + ERB shop, port 8012); sinatra-101 (minimal Sinatra API, port 8015), the Flask peer for Ruby.
- Into Geblang – geblang-101 (stdlib
web.router, port 8013) then gebweb-101 (Gebweb MVC with/docs, port 8014). - Compare Node – orchestr-101 (Laravel-style monolith + shop, port 8005); nest-101 (NestJS, API-only, port 8006); express-101 (minimal Express, API-only, port 8007).
- Compare Go, Fortran, Java, and .NET – go-101 (Gin, port 8000), fortran-101 (POSIX sockets + fpm, port 8008), java-101 (Spring Boot + JPA, port 8009), and dotNet-101 (ASP.NET Core, port 8010) for compiled, JVM, and .NET backends.
- Add a client – react-101 (React SPA for fastAPI-101), vue-101 (web SPA for any *-101 API), alpine-101 (Alpine.js SPA on port 5180), or flutter-101 (mobile/desktop).
Repositories by language
Backend repos use ports 8000–8015 so you can run several side by side. Each card is tagged Monolith (API + /shop) or API-only (JSON API only).
PHP
symfony-101 Monolith
PHP · Symfony 7, Doctrine, PHPUnit
Same API for Laravel developers learning Symfony: JWT auth, service layer, filtering, pagination, rate limits, Catalog Shop at /shop (port 8002).
laravel-101 Monolith
PHP · Laravel 13, Eloquent, Blade, PHPUnit
Native Laravel port of the same API and Catalog Shop: jwt-auth, service layer, 28 feature tests, SQLite locally and PostgreSQL in Docker (port 8003).
framework-x-101 Monolith
PHP · Framework X, ReactPHP, PDO, PHPUnit
Minimal reactive PHP port with invokable controllers, hand-rolled JWT middleware, and plain PHP shop templates. Same API shape, explicit wiring (port 8004).
Python
fastAPI-101 API-only
Python · FastAPI, SQLAlchemy, Alembic, pytest
Step-by-step API with categories, filtering, pagination, JWT, rate limiting, and PostgreSQL in Docker. Interactive docs at /docs (port 8000).
django-101 Monolith
Python · Django, DRF, pytest-django
Same API as fastAPI-101, plus Django Admin, a server-rendered shop at /shop/, and Swagger UI at /docs (port 8001).
flask-101 API-only
Python · Flask, SQLite, pytest
Minimal Flask port of the same JSON API: blueprints, JWT auth, service layer, and 19 feature tests. Compare with fastAPI-101 and express-101 (port 8011).
Ruby
rails-101 Monolith
Ruby · Rails 8, ActiveRecord, ERB, Minitest
Rails port of the same API and Catalog Shop: JWT auth, service layer, rack-attack rate limits, SQLite locally and PostgreSQL in Docker (port 8012).
sinatra-101 API-only
Ruby · Sinatra, SQLite, RSpec, rack-test
Minimal Sinatra API for Laravel developers: JWT auth, service layer, Laravel-style validators, and 19 RSpec feature tests. The Flask analogue on Ruby (port 8015).
Go
go-101 API-only
Go · Gin, GORM, testify, golang-migrate
Go implementation of the fastAPI-101 items API: middleware auth, service layer, SQLite, Docker, and a test suite that mirrors the Python project.
Geblang
geblang-101 API-only
Geblang · web.router, db.Connection, geblang test
Typed scripting on a Go runtime (dwgebler/geblang): the same items/categories JSON API with JWT auth, SQLite, Laravel-style validation messages, and 18 feature tests (port 8013).
gebweb-101 API-only
Geblang · Gebweb, TestClient, OpenAPI /docs
Same API on Gebweb (decorator MVC for Geblang): @Controller, @Auth, JWT, SQLite, and 18 feature tests. Aimed at Laravel developers reskilling (port 8014).
Fortran
fortran-101 API-only
Fortran · fpm, gfortran, POSIX sockets
Uncommon but instructive: pure Fortran HTTP server with full fastAPI-101 parity (JWT, SQLite, categories and items CRUD, filters, stats). 47 bash feature tests (port 8008).
Java
java-101 API-only
Java · Spring Boot 3.5, JPA, Flyway, JUnit
Same JSON API for Laravel developers learning JVM backends: JWT auth, service layer, filters, pagination, stats. README maps Eloquent to JPA and jwt-auth to Spring Security (port 8009, 50 tests).
.NET
dotNet-101 API-only
.NET · ASP.NET Core 8, xUnit
Same JSON API for Laravel developers learning .NET backends: JWT auth, layered services, filters, pagination, rate limits. Compare with java-101 on the JVM (port 8010, 66 xUnit tests).
Node
orchestr-101 Monolith
Node · Orchestr, Ensemble, Vitest
Full *-101 parity: JWT API, Catalog Shop at /shop, Orchestr View templates, 28 feature tests (port 8005).
nest-101 API-only
Node · NestJS, TypeScript, Jest
Same JSON API with modules, guards, and DI. No server-rendered shop (NestJS is API-first). 19 feature tests (port 8006).
express-101 API-only
Node · Express, Vitest
Minimal Express wiring for the same routes and JWT auth. No shop (Express has no natural HTML layer). 19 feature tests (port 8007).
Clients
flutter-101 Client
Dart · Flutter (iOS, macOS, Android)
Full *-101 API client: auth, categories CRUD, items (filters, pagination, edit), stats. Mock/live toggle and JWT for writes.
vue-101 Client
TypeScript · Vue 3, Vite, Pinia
Web SPA with the same API coverage as flutter-101: JWT auth, categories, items, and stats against any *-101 backend.
alpine-101 Client
TypeScript · Alpine.js, Vite, Vitest
Lightweight Alpine.js SPA for any *-101 API: JWT auth, categories, items, and stats with mock/live toggle (port 5180).
react-101 Client
TypeScript · React 19, Vite, Vitest
Step-by-step React SPA paired with fastAPI-101: JWT auth, item filters, pagination UI, categories, and stats (port 3000).
What every *-101 repo includes
- A README with Laravel-to-framework mapping tables.
- Automated tests and CI (pytest, Vitest, Jest, PHPUnit).
- The same domain model so you focus on framework differences.
- Monolith repos: API + Catalog Shop (28 tests). API-only repos: JSON API only (19 tests).
Suggested path for Laravel developers
- Stay in PHP: symfony-101, laravel-101, framework-x-101 (all include
/shop). - Into Python: fastAPI-101 (API-only), flask-101 (minimal Flask API, port 8011), django-101 (monolith with admin + shop).
- Into Ruby: rails-101 (ActiveRecord + ERB shop, port 8012); sinatra-101 (minimal Sinatra API, port 8015).
- Into Geblang: geblang-101 (stdlib router, port 8013) then gebweb-101 (Gebweb MVC, port 8014).
- Into Node: orchestr-101 for Laravel-style monolith; nest-101 or express-101 for enterprise or minimal APIs.
- Into Go, Fortran, Java, and .NET: go-101 (API-only, port 8000), fortran-101 (API-only, port 8008), java-101 (API-only, port 8009), and dotNet-101 (API-only, port 8010).
- Into clients: react-101 (React SPA for fastAPI-101), vue-101 (web SPA for any API), alpine-101 (Alpine.js SPA, port 5180), or flutter-101 (mobile/desktop).