Skip to content

1 · Zero to Deployed ​

22. 9. 2026 · Slides

Your environment ​

We've prepared a working project for each of you. Here's what's waiting:

  • Your repository at https://github.com/applifting-vsecourse/<slug>. The slug is your name, lowercase, no diacritics; it's in the invitation. You got an invitation by e-mail; accept it and you're in.
  • Your app at https://<slug>.vsepractical.applifting.dev. Every merge into main rebuilds it and puts it live within a few minutes.
  • Your database, a PostgreSQL instance just for your app. You can browse it in Adminer; the link came in the same e-mail.
  • Your logs. When something on the live app misbehaves, the logs say why. Same e-mail.

This is your project for the whole semester: your code, your database, your data. Everything you build stays in it.

Your task ​

Solo, in your own repository, in this order. Whatever you don't finish in class is homework, same list, by Sunday midnight.

1 · Accept the invitation and clone your repo.

shell
git clone https://github.com/applifting-vsecourse/<slug>
cd <slug>

2 · Run it. If a step fails, jump to Missing something? and come back.

shell
pnpm install
pnpm dev

pnpm dev does everything: creates the .env files, starts Postgres in Docker, applies migrations, seeds demo data and starts both dev servers.

WhatWhere
Apphttp://localhost:3050
APIhttp://localhost:4050/api
API docs (Swagger)http://localhost:4050/api/docs

Log in with caffeinatedduck@example.com / password1. More accounts are in the project README.

3 · Your first change. On a new branch, put your name on the landing page (apps/frontend/src/routes/index.tsx). Commit, push, open a pull request.

4 · Merge into main. Watch the run in Actions, then open your live URL. Only main is deployed; a branch or a pull request gets the checks.

5 · Sign up on your live app. Production runs migrations but no seed, so there are no accounts yet. You are the first user.

6 · Post the URL in the Seminars channel on Teams.

Finished early? If you already have an agent, ask it the question below and compare the answer with the code. Break the deploy on purpose and find the cause in the live logs. Open Adminer and find your own row in the user table.

Missing something? ​

pnpm dev needs Git, Node 24, pnpm and a running Docker Desktop. Pick your platform, go through the block top to bottom, then return to step 2 of the task.

macOS ​

Everything through Homebrew, the package manager for macOS. Its installer downloads Apple's Command Line Tools on its own, so you need nothing else beforehand. Run each step in Terminal and wait for it to finish.

1 · Homebrew. One tool that installs everything else and later updates it with a single command.

shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

At the end the installer prints two lines starting with echo and eval that add brew to your path. Copy and run them, otherwise the next command won't find brew.

2 · Git. Version control: cloning the repo, commit, push. Without it you can't reach your repository.

shell
brew install git

3 · fnm. A version manager for Node.js. The project requires Node 24 (the .nvmrc file), and other projects may want a different version. fnm lets you switch between them and picks the right one inside the project folder on its own.

shell
brew install fnm

fnm needs one line in your shell so it works in every new Terminal window:

shell
echo 'eval "$(fnm env --use-on-cd)"' >> ~/.zshrc
source ~/.zshrc

4 · Node.js 24. The runtime for the backend, the frontend build and every tool in the project.

shell
fnm install 24
fnm default 24

5 · pnpm. The project's package manager: it installs dependencies and runs the scripts (pnpm dev). Node already ships it through Corepack, you only switch it on. The project then picks its own version from package.json.

shell
corepack enable

6 · Docker Desktop. The Postgres database runs locally in a Docker container, so pnpm dev can start it without installing a database into your system.

shell
brew install --cask docker

Then open Docker once from Applications, confirm the permissions and leave it running in the background. It has to be running before every pnpm dev.

Windows ​

On Windows you develop inside WSL 2, the Windows Subsystem for Linux. It's a feature built into Windows 10 and 11 that runs a real Ubuntu Linux alongside Windows, tightly integrated: Ubuntu opens like any other terminal app, VS Code opens folders inside it, and Docker Desktop already runs on top of it. It's Microsoft's recommended setup for Node.js development and the standard at most companies with Windows developers.

We use it because the whole stack (Node, pnpm, Docker, the project's scripts) is built for a Unix environment. Inside WSL the same commands work exactly as on the Macs around you, installs are several times faster than on the Windows file system, and Windows line endings never get into the code. The project and every tool except Docker Desktop live inside Ubuntu.

1 · WSL 2 with Ubuntu. Run PowerShell as administrator:

powershell
wsl --install

Restart the computer. On the first start of Ubuntu choose a username and password, you'll type them for sudo.

2 · Docker Desktop. The Postgres database runs locally in a Docker container. Docker Desktop installs on Windows and connects to WSL on its own.

Download and install Docker Desktop, keep the WSL 2 backend enabled during installation. After it starts, open Settings → Resources → WSL integration and enable Ubuntu. Requires Windows 10 21H2 or newer and virtualization enabled in the BIOS. Docker Desktop has to be running before every pnpm dev.

Everything else happens in the Ubuntu terminal.

3 · Git and basic tools. Git versions the code and clones the repo. curl and unzip are needed by the fnm installer in the next step.

shell
sudo apt update && sudo apt install -y git curl unzip

4 · fnm. A version manager for Node.js. The project requires Node 24 (the .nvmrc file), other projects may want a different version. fnm switches between them and picks the right one inside the project folder on its own.

shell
curl -fsSL https://fnm.vercel.app/install | bash
source ~/.bashrc

5 · Node.js 24. The runtime for the backend, the frontend build and every tool in the project.

shell
fnm install 24
fnm default 24

6 · pnpm. The project's package manager: it installs dependencies and runs the scripts (pnpm dev). Node already ships it through Corepack, you only switch it on.

shell
corepack enable

7 · VS Code with the WSL extension. Install VS Code on Windows and the WSL extension in it. You then open the project from the Ubuntu terminal with code . and the editor runs inside WSL. Always clone and run from the Ubuntu terminal.

Editor ​

We recommend VS Code. Extensions: ESLint, Prettier, Prisma, Tailwind CSS IntelliSense, and WSL on Windows.

Check ​

All five commands have to pass, otherwise pnpm dev won't start:

shell
git --version           # any 2.x
node -v                 # v24.x
pnpm -v                 # 10.x
docker compose version  # v2.x
docker run --rm hello-world

Ask your agent ​

Once you have an agent: before it writes a single line for you, let it read. Copy and paste:

text
How does a quack get from the database to the screen? Name every file on the way, in order, and say in one sentence what each one does.

Compare the answer with the map from the slides. Where they differ, the code decides.

Homework ​

By Sunday midnight, in the Seminars channel on Teams, in this format:

Live app: <URL>
My first merged PR: <link>
Agent I'm bringing: <name>

From week 3 on, everyone works with an AI agent that reads the whole repo, edits files and runs commands: Claude Code, Codex, Cursor, Antigravity, Copilot agent mode. Free option: the GitHub Student Developer Pack includes Copilot with agent mode. Apply with your school e-mail, approval takes days to weeks. Can't get any agent working? Message me privately by Sunday.

When it breaks ​

SymptomCause / fix
pnpm dev fails immediately with Docker errorsDocker Desktop isn't running. Start it and retry.
pnpm warns about the Node versionYou're on a different major version. fnm use in the project folder.
Port 3050 is already in useSomething else holds the port. Stop it, the port is pinned on purpose.
Bind for 0.0.0.0:5433 failed: port is already allocatedAnother Docker container publishes 5433, often a database from a different project. docker ps shows it; docker stop <name> frees the port.
EADDRINUSE :::4050An old backend is still running: lsof -i :4050 and kill the process.
Page loads, login fails, CORS error in the consoleThe frontend runs on a different port than the API expects. See above.
On Windows, thousands of changed files after cloningLine endings. Work in WSL, or set core.autocrlf false and clone again.
The deploy is redOpen the run in Actions and read the step that failed. Usually lint or types: pnpm check-all locally shows the same.
The live URL doesn't work after the mergeIt takes a moment. After 5 minutes, check the live application logs.