Skip to content

1 · Zero to Deployed

22. 9. 2026 · Slides

What you have

Nothing to set up. Your repository, your app on its own URL, a database and live logs already exist. You clone, code and push.

Repositoryhttps://github.com/applifting-vsecourse/<your-name>. The invitation came by e-mail, accept it.
Apphttps://<your-name>.vsepractical.applifting.dev. Goes live after your first push to main.
DatabaseYour own PostgreSQL. Access to Adminer arrives by e-mail as a one-time link.
LogsLive application logs in the browser, link in the same e-mail.

One repository for the whole semester. Your migrations and your data stay 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/<your-name>
cd <your-name>

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 #week-1-done.

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 #week-1-done channel, in this format:

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

From next week 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.
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.