Objective of the week
The goal of this week was to take the next real step toward full-stack development.
Until now, everything lived either in a static page or entirely in the frontend. This week I wanted to:
- Build my first backend API using Python
- Connect a React + TypeScript frontend to that API
- Get frontend and backend to talk to each other
- Learn the basics of working with GitHub Codespaces and the terminal
What I built
I built a small Learning Log application with a clear separation between frontend and backend.
Backend
- Python + FastAPI
- Endpoints to:
- create entries
- list entries
- toggle a “favorite” flag
- Automatic API documentation via Swagger
Swagger UI:
https://orange-disco-pj4g9w4w46prh96pw-8000.app.github.dev/docs
Frontend
- React + TypeScript
- Fetches data from the backend API
- Displays entries
- Allows creating new entries and marking them as favorites
Frontend UI:
https://orange-disco-pj4g9w4w46prh96pw-5173.app.github.dev/
This is the first project in this challenge where:
- the frontend depends on a backend,
- data flows over HTTP,
- and things break if URLs, ports, or environments are wrong.
What I learned
This week was packed with fundamentals that I had either forgotten or never really learned properly:
- How to work with the terminal again:
- navigating folders
- activating virtual environments
- running servers
- The basics of GitHub Codespaces:
- it’s a real Linux machine in the cloud
- processes stop when you close it
- ports must be explicitly exposed
- How FastAPI works:
- defining request and response models
- automatic Swagger documentation
- How a frontend talks to a backend using:
fetch- JSON
- environment variables
- Why frontend apps need a configurable API base URL
This week made it very clear that modern development is less about syntax and more about understanding the system as a whole.
What was hard / surprising / confusing
Quite a few things 😅 — and that’s exactly why this week mattered.
- I initially treated things in
requirements.txtlike terminal commands - I repeatedly forgot to activate the Python virtual environment
-
uvicorn: command not foundtaught me a lot about how environments really work - Understanding where my code was running vs where my browser was running took time
- The concept of forwarded ports in Codespaces was new and unintuitive at first
- Knowing which URL the frontend should call (and why
localhostdoesn’t work here) was confusing - Forgetting to restart the frontend after changing
.envcaused a lot of head-scratching
Overall, the hardest part wasn’t coding — it was mental models:
- what runs where,
- what talks to what,
- and what needs to be restarted when something changes.
What I’ll do next week
For Week 5, I want to build on this exact architecture:
- Keep React + TypeScript on the frontend
- Keep Python on the backend
- Add the first “smart” behavior
- something that processes text
- analyzes, summarizes, or enriches entries
This will be my first step toward AI-adjacent functionality, built on top of the foundations laid this week.
Week 4 was slower, more frustrating, and more educational than the previous ones — which is probably a good sign.
Top comments (0)