ScoalaDeWeb

Course Documentation

Training sessions & content blocks — trainer notes excluded

Generated on 2026-10-19
14 training sessions · 98 content blocks
ScoalaDeWeb · Training
1

Training 1 — Kiro Setup, Prompt Log & Git

Cluster 1 - Foundation

Install Kiro, understand what it is, create your first bash script that logs every prompt you write, set up Git, and push your first commit. By end of session, every student has a working prompt-log system tracked in Git.

10 content blocks · 120 min
1.10:0020 min

Kiro Install & Tour

What is Kiro?

Kiro = VS Code + AI Agent

  • IDE - Integrated Development Environment. Where you write code.
  • AI Agent - A built-in assistant that can read your files, run terminal commands, create scripts, and explain anything.
  • Key difference from ChatGPT: Kiro sees your actual project files, can edit them directly, and runs commands in your real terminal.

Installation (do together)

  1. Download Kiro - Go to kiro.dev and download for your OS
  2. Install and Launch - Follow the installer. Open Kiro when done.
  3. Sign in - Create an account or sign in with GitHub/Google.
  4. Tour the interface:
    • File explorer (left panel)
    • Editor (center)
    • Terminal (bottom - Ctrl+` or Cmd+`)
    • AI chat (right panel - this is your copilot)
  5. First AI interaction - Type in the chat: What can you do? Give me 5 examples of tasks you can help me with.

Key Point: Kiro is your copilot, not your pilot. It gives answers, writes code, runs commands - but YOU must understand what it does. If you cannot explain it, you do not keep it.

1.20:0025 min

What is Prompt Engineering & Why It Matters

What is Prompt Engineering?

Prompt = Your instruction to the AI

  • A prompt is NOT a question — it is a specification. The more precise your spec, the better the output.
  • Think of it like ordering food: "food" gets you something random. "Pasta carbonara, no mushrooms, al dente, extra parmesan" gets you exactly what you want.
  • In this program, prompt quality IS your productivity. A developer who prompts well produces 5x more than one who prompts poorly.

The Anatomy of a Great Prompt

5 Elements of an Effective Prompt

  1. CONTEXT — What project, what tech stack, what existing patterns. Without context, AI guesses blindly.
  2. TASK — What specifically you want done. Be precise. Not "make a form" but "create a login form with email and password fields with validation."
  3. CONSTRAINTS — Rules to follow. "Use CSS variables." "No hardcoded values." "Follow BEM naming."
  4. FORMAT — How you want the output structured. "Separate files." "Include comments." "Use TypeScript."
  5. EDGE CASES — What about errors, empty states, limits? "Handle loading state." "Show error message if API fails."

Bad vs Good Prompt — Live Comparison

Experiment (do together, live on screen)

Prompt 1 (bad):

make a button component

Prompt 2 (good):

Create an Angular standalone component called PrimaryButton. It accepts a label input (string) and emits a clicked output event. Style: background var(--color-primary), white text, border-radius 8px, padding 12px 24px, hover darkens by 10%. Disable state: opacity 0.5, cursor not-allowed. Include aria-label that matches the label input.

Compare the two outputs side by side. Which one is production-ready?

What is a .md File?

Markdown — the language between humans and AI

  • .md stands for Markdown — a simple text format with minimal formatting
  • Headings use # symbols: # Big heading, ## Smaller heading
  • Bold uses double stars: **bold text**
  • Lists use dashes: - item one
  • Code uses backticks: `code here`
  • Why .md for AI work? Because AI reads and writes Markdown perfectly. It is the universal language between humans and AI tools.
  • You will use .md files for: steerings, READMEs, documentation, notes — everywhere in this program.

Key Insight: In an AI-assisted world, the quality of your prompts IS your productivity. Two developers with the same tools: one writes vague prompts and spends 5 iterations fixing output. The other writes precise prompts and ships first-try. Same tool, 5x difference in speed. The differentiator is prompt quality.

1.30:2030 min

Automatic Prompt Logging (Kiro Hook)

How It Works: Kiro Hooks

Hook = An automatic action triggered by an event

  • Kiro has a feature called Hooks - scripts that run automatically when something happens
  • We use the UserPromptSubmit trigger - fires every time you send a message in the AI chat
  • The hook runs a bash script (type: command) - zero AI credits consumed
  • The script receives your prompt as JSON on stdin, extracts it, and saves it to a file
  • Files are organized by day: prompts/2026-08-10.md

What is a Bash Script?

Script = A file with commands that the terminal runs in order

  • Instead of typing 5 commands one by one, you put them in a file and run it once
  • File extension: .sh
  • First line is always: #!/bin/bash (tells the system to use bash to run it)
  • You make it executable with: chmod +x script.sh

Exercise: Set Up Automatic Prompt Logging

Step 1: Create the project folder

mkdir -p ~/projects/prompt-log/prompts
cd ~/projects/prompt-log

Step 2: Ask Kiro to create the logging script

Prompt:

Create a bash script called log-prompt.sh that will be triggered by a Kiro hook. It receives JSON on stdin from a UserPromptSubmit hook event. The script should: extract the user prompt text from the JSON payload, then append it to a markdown file in a prompts folder. The filename must be today date in YYYY-MM-DD.md format. Each entry should have the time as a heading and the prompt text in a code block. Make the script executable.

Step 3: Ask Kiro to create the hook

Create a Kiro hook that triggers on UserPromptSubmit and runs the log-prompt.sh script. The hook action type must be command (not agent) so it does not consume AI credits.

Step 4: Test it

Type anything in Kiro chat, then check:

cat prompts/$(date "+%Y-%m-%d").md

Critical distinction: type: command = runs a shell script, zero credits. type: agent = injects AI prompt, burns credits. ALWAYS verify the hook uses command.

1.40:2535 min

Your First Hooks, Steerings & Skills (via Prompts)

What are Steerings, Hooks, and Skills?

Three Ways to Configure Kiro

  • Steerings (.kiro/steering/*.md) — Permanent rules Kiro follows in every interaction. Like company policies for your AI assistant.
  • Hooks (.kiro/hooks/*.json) — Automations that trigger on events. "When X happens, do Y automatically."
  • Skills (.kiro/skills/) — Specialized capabilities. Modes Kiro can switch into for specific tasks.

Exercise 1: Create Your First Steering

The Prompt (type in Kiro chat)

Create a steering file at .kiro/steering/coding-standards.md with these rules:
- Use camelCase for variables and functions
- Use PascalCase for classes and components
- All code comments must be in English
- No magic numbers — use named constants
- Maximum function length: 20 lines
- Prefer const over let, never use var
- Every public method needs a JSDoc comment

Kiro creates the file. Verify it exists. Read its contents. From now on, every piece of code Kiro generates follows these rules automatically.

Exercise 2: Create a Session Context Hook

The Prompt

Create a Kiro hook that fires on SessionStart. The hook type must be "agent" (not command). The prompt should say: "This is the DevLaunch training project. We use Angular 19 with standalone components, PHP 8 backend, MySQL database, SCSS for styles. Follow all rules in .kiro/steering/." Save it as .kiro/hooks/session-context.json

Now every time you start a new chat session, Kiro already knows your project context. You never repeat yourself.

Exercise 3: Quality Check Hook

The Prompt

Create a Kiro hook that fires on PreToolUse with a matcher for "fs_write|str_replace". Type must be "agent". The prompt should say: "Before writing, verify: no hardcoded color values (use CSS variables), semantic HTML tags, proper TypeScript types (no any), and meaningful variable names." Save as .kiro/hooks/quality-check.json

This hook checks quality BEFORE Kiro writes any file. Automatic code review on every change.

Exercise 4: Git Rules Steering

The Prompt

Create a steering file at .kiro/steering/git-rules.md with these rules:
- Commit messages use Conventional Commits format: feat:, fix:, docs:, refactor:
- Never commit directly to main branch
- Branch naming: feature/short-description or fix/short-description
- Each commit should be one logical change
- Always write a meaningful commit message that explains WHAT and WHY

Recap: In 15 minutes, using ONLY prompts, you configured an entire AI development environment. 2 steerings (permanent rules), 2 hooks (automatic triggers). Zero manual file creation. Zero syntax memorization. This is prompt-driven development.

1.50:5035 min

Git Setup & First Commit

What is Git?

Git in 60 Seconds

  • Git - Tracks changes to your files. Like save game for code.
  • Repository (repo) - A project folder tracked by Git.
  • Commit - A snapshot. Here is what my project looks like right now.
  • Push - Upload your commits to GitHub (online).
  • Pull - Download changes from GitHub to your machine.
  • GitHub - A website that stores your repos online. Free for everyone.

Exercise: Set Up Git

Step 1: Check if Git is installed

git --version

Step 2: Configure your identity

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

Step 3: Create a GitHub account

Go to github.com, sign up, verify email.

Step 4: Create a repo on GitHub

Name: prompt-log, Private, do NOT add README.

Step 5: Connect local folder to GitHub

cd ~/projects/prompt-log
git init
git add .
git commit -m "Initial commit: prompt log script and first entry"
git branch -M main
git remote add origin https://github.com/YOUR-USERNAME/prompt-log.git
git push -u origin main

Key Point: You just published your first code to the internet. Go to GitHub in your browser, refresh the page - you will see your files there.

1.61:0025 min

Connecting to Git Using Prompts

What is Git? (60-second version)

Git = Save Game for Your Code

  • Git tracks every change you make. Like unlimited undo history for your entire project.
  • GitHub stores your code online. Backup + collaboration + portfolio.
  • Commit = one save point. A snapshot of your project at a specific moment.
  • Push = upload your saves to GitHub. Pull = download changes from GitHub.

Today we just need: init, add, commit, push. Kiro handles the actual commands.

Exercise: Set Up Git Via Prompt

Step 1: Configure Git identity

Ask Kiro:

Configure git globally with my name "[YOUR NAME]" and email "[YOUR EMAIL]". Then initialize a git repository in the current project folder.

Step 2: Create a GitHub repo (manual step)

Do this in your browser — NOT in Kiro:

  1. Go to github.com, click + button, New Repository
  2. Name: prompt-log
  3. Visibility: Private
  4. Do NOT check any boxes (no readme, no gitignore)
  5. Click Create Repository
  6. Copy the HTTPS URL

Step 3: Connect and push (via prompt)

Back in Kiro, type:

Connect this git repo to my GitHub remote at https://github.com/[USERNAME]/prompt-log.git. Set the branch to main. Stage all files, commit with message "feat: initial setup with Kiro steerings and hooks", and push to origin main.

Notice: You did not type a single git command manually. You described what you needed. Kiro executed it. You verified the result. That is the workflow.

1.71:2525 min

Push, Pull & Daily Workflow

The Daily Workflow

Every day / every session:

  1. Use Kiro to work - prompts are logged AUTOMATICALLY (hook is active)
  2. At end of session: run ./sync.sh to push everything to GitHub

Exercise: Create a Sync Script

#!/bin/bash
cd ~/projects/prompt-log
git pull --rebase 2>/dev/null
if [ -z "$(git status --porcelain)" ]; then
  echo "Nothing to sync."
  exit 0
fi
git add .
git commit -m "Prompt log update $(date +%Y-%m-%d)"
git push
echo "Synced to GitHub at $(date +%H:%M)"
chmod +x sync.sh
./sync.sh

Git Commands Reference

git initStart tracking this folder
git statusShow what changed
git add .Stage all changes
git commit -m "msg"Save a snapshot
git pushUpload to GitHub
git pullDownload from GitHub
git log --onelineSee commit history
1.81:2525 min

Building an Automatic Prompt Logger (via Prompts)

The Goal

What We Are Building

  • A Kiro Hook that fires on UserPromptSubmit (every time you send a message)
  • It runs a bash script (type: command) — zero AI credits used
  • The script saves your prompt text + timestamp to a daily markdown file
  • Files organized as: prompts/2026-08-10.md, prompts/2026-08-11.md, etc.
  • Completely automatic. You use Kiro normally and everything is recorded.

What is a Bash Script?

Quick explanation

  • A script is a text file with commands inside. Run the file = run all commands in order.
  • First line: #!/bin/bash — called a shebang. Tells the OS: use bash to run this.
  • Make it runnable: chmod +x filename.sh — gives execute permission.
  • They will NOT write scripts manually — Kiro does it. But they need to READ what Kiro generates.

Exercise: Build the Prompt Logger

The Prompt

I need an automatic prompt logging system. Create two things:

1. A bash script called log-prompt.sh in the project root that:
   - Receives JSON on stdin from a Kiro UserPromptSubmit hook event
   - Extracts the user prompt text from the JSON payload
   - Creates a "prompts" directory if it does not exist
   - Appends the prompt to a markdown file named with today date (YYYY-MM-DD.md)
   - Each entry has the time (HH:MM:SS) as a heading and the prompt in a code block
   - If the file is new (first entry of the day), adds a "# Prompts — YYYY-MM-DD" header first
   - Make the script executable (chmod +x)

2. A Kiro hook file at .kiro/hooks/prompt-logger.json that:
   - Triggers on UserPromptSubmit
   - Action type is "command" (NOT agent — this must not consume AI credits)
   - Runs: bash ./log-prompt.sh

Important: the hook type MUST be "command" not "agent".

Testing the Logger

After Kiro creates the files:

  1. Type anything else in Kiro chat (that prompt itself got logged!)
  2. Ask Kiro: Show me the contents of the prompts folder. Is there a file for today?
  3. You should see today date as a filename with your prompts inside
  4. If it does not work, ask: The prompt logger hook is not working. Check if log-prompt.sh has correct permissions and if the hook JSON is valid.

Critical reminder: Hook type "command" = shell script, free. Hook type "agent" = AI call, costs credits. For logging: ALWAYS command.

1.91:5010 min

Wrap-up & Homework

Quick Quiz

  1. What is the first line of every bash script? #!/bin/bash
  2. What command makes a script executable? chmod +x
  3. What does git add . do? Stages all changes for commit
  4. What is the difference between push and pull? Push uploads, pull downloads
  5. Why do we log prompts? To track learning progress and prompt evolution

Key Takeaways

  • Kiro is your AI-powered IDE - use it daily, but understand what it generates
  • Bash scripts automate repetitive tasks - your prompt logger is proof
  • Git tracks your work history - every commit is a save point
  • GitHub stores your code online - push often, never lose work
  • Your prompt log = your learning portfolio. Log everything from day one.

Homework

  1. Use Kiro actively: Ask at least 10 questions between now and next session
  2. Sync daily: Run ./sync.sh at the end of each day
  3. Explore Git: Ask Kiro how to use git log
  4. Review your log: Read through your prompts and reflect on quality

Assignment (due next session)

Your GitHub repo should contain: at least 2 daily prompt files, a .gitignore, a README.md, at least 3 commits with meaningful messages. Be able to explain what a hook is, what is stdin, what the script does.

1.101:5010 min

Push to Git & Homework

Push Everything to GitHub

Your turn to write the prompt (try first!)

Think about what Kiro needs to do: stage all files, commit with a meaningful message, push. Write the prompt yourself. Try for 1 minute.

Example:

Add all new and changed files to git, commit with the message "feat: add automatic prompt logger and initial prompts", and push to origin main.

What You Built Today

  • Learned what prompt engineering IS and why it is the #1 skill (5 elements)
  • Created 2 steerings — permanent rules Kiro follows forever
  • Created 2 hooks — session context + quality check automations
  • Connected to Git and GitHub using only prompts
  • Built an automatic prompt logger — real tool, zero manual coding
  • Pushed everything to GitHub for backup and review

Homework

Required (due before next session):

  1. Use Kiro daily — At least 10 meaningful questions (not just "hi"). Logged automatically.
  2. Push daily — End of day: "Commit all changes and push to GitHub with today date."
  3. Create README.md — Ask Kiro to write one explaining the project, the logging system, and what steerings/hooks are.
  4. Reflect — Read your prompts file. Which were clear? Which were vague? Rewrite 2 vague ones with all 5 elements.

Grading

CriteriaPoints
GitHub repo with .kiro/ config/2
10+ prompts logged across 2+ days/2
README.md explains the system/2
Multiple commits, meaningful messages/2
Can explain: steering, hook, command vs agent/2
Total/10

Next Session

Session 02: Terminal fundamentals — file system, navigation, creating/moving/deleting, paths. Git and logging already set up so everything is tracked from here.

ScoalaDeWeb · Training
2

Training 2 — File System, Skills & First HTML Page

Cluster 1 + 2 — Foundation & Frontend

Understand where files live on your computer, create specialized Kiro skills via prompts, and build your first HTML page that opens in a browser.

5 content blocks · 120 min
2.10:0015 min

File System — Where Are My Files?

How Your Computer Organizes Files

Everything is Folders Inside Folders

  • Your computer is one giant tree of folders. At the very top is the root (on Mac: /)
  • Inside root there are system folders, and somewhere in there is YOUR home folder: /Users/yourname/
  • Inside your home you have Desktop, Documents, Downloads, and your projects.
  • Every file has a unique ADDRESS called a path: /Users/alex/projects/prompt-log/log-prompt.sh

Absolute vs Relative Paths

Two Ways to Describe Location

  • Absolute path — The FULL address from root. Always starts with /. Like: /Users/alex/projects/prompt-log/prompts/2026-08-10.md
  • Relative path — Address relative to WHERE YOU ARE NOW. Like: ./prompts/2026-08-10.md (if you are already in prompt-log folder)
  • . = the current folder (here)
  • .. = one folder UP (parent)
  • ~ = your home folder (shortcut for /Users/yourname)

Hidden Files and Permissions

The Invisible Files

  • Files starting with a dot are hidden: .kiro/, .gitignore, .env
  • They do not show in Finder/Explorer by default. They exist but are invisible to casual browsing.
  • Why hidden? Because they are configuration — you set them once and forget them. They should not clutter your view.
  • Permissions (rwx): r = can read, w = can write, x = can execute (run as program)
  • Your log-prompt.sh has x permission — that is why it can run. Without x, the computer refuses to execute it.
2.20:1520 min

Creating Kiro Skills (via Prompts)

What is a Kiro Skill?

Skill = Specialized Mode for Specific Tasks

  • A steering is always active — general rules for everything.
  • A skill is activated ON DEMAND — specialized instructions for a specific type of work.
  • Think of it like modes on a camera: Auto mode (steering) works for everything. Portrait mode, Night mode, Macro mode (skills) are activated when you need them for a specific shot.
  • Skills live in .kiro/skills/ folder. Each skill has a SKILL.md file with instructions.

Exercise 1: Create an HTML Page Builder Skill

The Prompt

Create a Kiro skill at .kiro/skills/html-builder/SKILL.md with these instructions:

When this skill is active, you are helping build HTML pages. Follow these rules:
- Always use semantic HTML5 tags (header, main, section, nav, footer, article)
- Never use div when a semantic tag exists for that purpose
- Every page must have: DOCTYPE, html lang attribute, meta charset UTF-8, meta viewport, title
- Every image must have a descriptive alt attribute
- Every form input must have an associated label
- Use proper heading hierarchy: h1 only once per page, h2 for sections, h3 for subsections
- Include comments marking major sections
- Output clean, indented, readable HTML

Exercise 2: Create a Code Explainer Skill

The Prompt

Create a Kiro skill at .kiro/skills/code-explainer/SKILL.md with these instructions:

When this skill is active, you are explaining code to a complete beginner. Follow these rules:
- Explain every single line, do not skip anything
- Use simple analogies from everyday life
- No jargon without immediately defining it
- Format as numbered list: line number, the code, then the explanation
- After explaining all lines, give a one-paragraph summary of what the whole thing does
- If the code has a bug or bad practice, mention it at the end

You now have: 2 steerings (always active rules) + 3 hooks (automatic triggers) + 2 skills (on-demand specialized modes). Your Kiro is becoming more powerful with every session.

2.30:3535 min

Your First HTML Page

What is HTML?

HTML = The Skeleton of Every Web Page

  • HTML stands for HyperText Markup Language
  • It is NOT programming — it is LABELING. You tell the browser: this is a heading, this is a paragraph, this is a link, this is an image.
  • The browser reads your labels and displays the content accordingly.
  • Every website you have ever visited — Google, YouTube, Instagram — is HTML underneath.
  • Without HTML, the web does not exist.

The Basic Structure

Every HTML Page Has This

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>My Page Title</title>
</head>
<body>
  <!-- Your content goes here -->
</body>
</html>
  • <!DOCTYPE html> — Tells the browser: this is a modern HTML5 page
  • <html lang="en"> — The container for everything. lang tells screen readers what language.
  • <head> — Invisible stuff: page title, character encoding, settings
  • <body> — Visible stuff: everything the user actually sees

Common HTML Elements

Building Blocks

  • <h1> to <h6> — Headings. h1 is biggest (page title), h6 is smallest. Only ONE h1 per page.
  • <p> — Paragraph. A block of text.
  • <a href="url">text</a> — Link. Click to go somewhere.
  • <img src="photo.jpg" alt="description"> — Image. alt is for blind users and broken images.
  • <ul> / <ol> — Lists. ul = bullets, ol = numbers. Items inside use <li>
  • <header>, <main>, <section>, <footer> — Semantic sections. They describe WHAT the content IS.

Exercise: Build Your Personal Page

The Prompt (activate your html-builder skill first!)

Create an HTML file called index.html with a personal page about me. Include:
- A header with my name as h1
- A section "About Me" with a short paragraph
- A section "My Hobbies" with an unordered list of 4-5 hobbies
- A section "Links" with a link to my GitHub profile
- An image placeholder (use https://placehold.co/300x200 as src with alt text)
- A footer with "Made with DevLaunch 2026"
- Use semantic HTML: header, main, sections, footer
- Add proper meta tags and page title

After Kiro creates it:

  1. Open the file in your browser: File → Open → select index.html
  2. You see your page! Your FIRST web page!
  3. Change something in the HTML (edit a heading text), save, refresh browser
  4. The change appears. That is the development cycle: edit → save → refresh.
2.41:1015 min

DevTools — X-Ray Vision for Websites

Inspect Any Website

Chrome DevTools = See the Code Behind Any Page

  • Right-click anything on a webpage → click Inspect (or press Cmd+Option+I on Mac)
  • The Elements panel shows the HTML structure of the page
  • Hover over elements in the panel → they highlight on the page
  • You can EDIT text and styles live (temporarily — disappears on refresh)
  • This works on ANY website: Google, YouTube, your own page, anything

Exercise: Inspect and Modify

Do these steps on YOUR page:

  1. Open DevTools (right-click → Inspect)
  2. Find your h1 in the Elements panel. Double-click the text. Change it to something funny. See it update live.
  3. Find your image. Look at the src attribute in the panel. That is where the image comes from.
  4. Now go to google.com. Open Inspect there. Look at how THEY structure their page. Find their logo img tag. Find their search input.
2.51:2535 min

Review, Push & Homework

Homework Review from Session 01

Quick verbal check:

  1. What is a steering? What is a hook?
  2. What is the difference between command and agent hook types?
  3. Show me your GitHub repo — do you have prompts logged?
  4. Show me your README — does it explain the system?

Push Today Work to GitHub

Ask Kiro:

Add all new files including index.html and the skills folder, commit with message "feat: add HTML page, skills, and session 2 work", and push to GitHub.

Verify on GitHub: you should see index.html and .kiro/skills/ folder.

What You Built Today (Recap)

  • Understand file paths: absolute, relative, dot, double-dot, tilde
  • Understand hidden files and permissions (why .kiro is invisible, why scripts need +x)
  • Created 2 Kiro Skills — HTML builder and Code explainer
  • Built your FIRST HTML page and saw it in a browser
  • Used DevTools to inspect and modify pages live

Homework

Required (due before session 3):

  1. Extend your HTML page — Add at least 3 more sections: a table (your skills with level), a "projects" section with descriptions, and a contact form (name, email, message inputs with a submit button). Use your html-builder skill.
  2. Create one custom skill — Something YOU think would be useful. Maybe "README writer", maybe "Bug finder", maybe "Study notes maker". Your choice. Write a one-sentence explanation of why you created it.
  3. Prompt reflection — Open today prompts log. Pick your best prompt and your worst prompt. Rewrite the worst one using the 5 elements (Context, Task, Constraints, Format, Edge Cases).
  4. Push daily — End of each day: commit and push.
  5. Explore with DevTools — Pick 2 websites you use regularly. Inspect them. Find: where is their logo? What tag is their navigation? What font do they use? Write a few observations in a file called devtools-notes.md

Grading

CriteriaPoints
HTML page with 5+ sections, semantic tags, works in browser/2
2 skills created (HTML builder + your custom one with explanation)/2
Can explain: absolute vs relative path, hidden files, permissions/2
S01 homework complete (README, prompts, push history)/2
Prompt reflection: best + worst + rewrite with 5 elements/2
Total/10

Next Session Preview

Session 03: CSS — making your HTML page actually look good. Colors, fonts, spacing, layout. Your page goes from plain text on white background to something that looks professional.

ScoalaDeWeb · Training
3

Training 3 — CSS Fundamentals — Making HTML Beautiful

Cluster 2 — Frontend Core

Learn what CSS is, how to write it, where to put it, and how selectors work. Understand properties, variables, and the three methods of applying styles. Build a styled page from scratch.

5 content blocks · 120 min
3.10:0020 min

What is CSS and How It Connects to HTML

CSS = The Clothes on the Skeleton

HTML is structure. CSS is appearance.

  • HTML says WHAT things are: this is a heading, this is a paragraph, this is a list.
  • CSS says HOW things look: this heading is blue, this paragraph has spacing, this list has no bullets.
  • Without CSS, every website looks like a plain text document from 1995. With CSS, you get colors, fonts, layouts, animations — everything visual.
  • CSS stands for Cascading Style Sheets. Cascading means: rules flow down and can be overridden by more specific rules.

CSS Syntax — How You Write It

The Rule Structure

selector {
  property: value;
  property: value;
}
  • Selector — WHAT you want to style (which HTML element)
  • Property — WHICH aspect you want to change (color, size, spacing)
  • Value — The specific setting (red, 16px, 20px)
  • Every rule ends with a semicolon. Curly braces wrap the properties.

Example:

h1 {
  color: #6366f1;
  font-size: 2rem;
  margin-bottom: 1rem;
}

This says: find all h1 elements, make them purple, size 2rem, with spacing below.

Three Ways to Apply CSS

Where to Put Your Styles

  1. Inline (worst — avoid):
    <p style="color: red; font-size: 20px;">Red text</p>
    Styles directly on the element. Hard to maintain. Cannot reuse.
  2. Internal / Embedded (OK for single pages):
    <head>
      <style>
        p { color: red; }
      </style>
    </head>
    Styles inside a style tag in the head. Works but mixes HTML and CSS in one file.
  3. External file (best — always use this):
    <head>
      <link rel="stylesheet" href="style.css" />
    </head>
    Separate .css file linked to HTML. Clean separation. Reusable across pages. Cacheable by browser.
3.20:2025 min

Selectors — Targeting Elements

Basic Selectors

How to Tell CSS Which Elements to Style

  • h1 — Element selector. Targets ALL h1 tags on the page.
  • .card — Class selector (dot prefix). Targets all elements with class="card". MOST USED.
  • #main — ID selector (hash prefix). Targets the ONE element with id="main". Use sparingly.
  • * — Universal selector. Targets EVERYTHING. Used for resets.

HTML:

<h1 class="title">Hello</h1>
<p class="intro">Welcome</p>
<p>Normal paragraph</p>

CSS:

h1 { color: blue; }        /* all h1 elements */
.title { font-size: 3rem; } /* elements with class title */
.intro { font-weight: bold; } /* elements with class intro */
p { line-height: 1.6; }     /* all paragraphs */

Combining Selectors

Getting More Specific

  • header nav a — Descendant: links inside nav inside header
  • .card .title — Title elements inside card elements
  • h1, h2, h3 — Group: same styles for multiple selectors (comma separated)
  • a:hover — Pseudo-class: styles when mouse is over the link
  • input:focus — Pseudo-class: styles when input is focused/clicked
  • .btn:disabled — Pseudo-class: styles when button is disabled

Classes vs IDs — When to Use Which

Simple Rule

  • Classes (.name) — For STYLING. Can be reused on many elements. Use 99% of the time.
  • IDs (#name) — For UNIQUE identification. Only one per page. Use for JavaScript targets or anchor navigation.
  • Never use IDs for styling. Classes are always better because they are reusable and have lower specificity (easier to override).
3.30:4525 min

Most Used CSS Properties

Text & Typography

Controlling How Text Looks

.text-example {
  color: #f1f5f9;              /* text color */
  font-family: "Inter", sans-serif; /* font */
  font-size: 1rem;             /* size (1rem = 16px) */
  font-weight: 600;            /* thickness: 400=normal, 700=bold */
  line-height: 1.6;            /* space between lines */
  text-align: center;          /* left, center, right */
  text-decoration: none;       /* remove underline from links */
  letter-spacing: 0.05em;      /* space between letters */
}

Spacing: Margin & Padding

The Box Model — Space Inside and Outside

  • Padding = space INSIDE the element, between content and border. Like bubble wrap inside a box.
  • Margin = space OUTSIDE the element, between it and neighbors. Like distance between boxes on a shelf.
.card {
  padding: 1.5rem;           /* same on all 4 sides */
  padding: 1rem 2rem;        /* top/bottom  left/right */
  margin: 0 auto;            /* top/bottom 0, left/right auto = centered */
  margin-bottom: 2rem;       /* only bottom */
}

Colors & Backgrounds

Color Formats

.colored {
  color: #6366f1;                    /* hex: most common */
  color: rgb(99, 102, 241);          /* rgb: same color */
  color: rgba(99, 102, 241, 0.5);    /* rgba: with 50% transparency */
  background: #0f1117;               /* solid background */
  background: linear-gradient(135deg, #6366f1, #06b6d4); /* gradient */
  border: 1px solid #2a2f42;         /* border: width style color */
  border-radius: 12px;               /* rounded corners */
  box-shadow: 0 4px 12px rgba(0,0,0,0.3); /* shadow: x y blur color */
}

Sizing & Display

How Big Things Are

.box {
  width: 100%;              /* full width of parent */
  max-width: 900px;         /* never wider than 900px */
  height: auto;             /* as tall as content needs */
  display: block;           /* takes full width, new line */
  display: inline;          /* flows with text, no width/height */
  display: flex;            /* flexbox container (next session) */
  display: none;            /* completely hidden */
}
3.41:1015 min

CSS Variables — Define Once, Use Everywhere

What Are CSS Variables?

Custom Properties You Define

:root {
  --color-primary: #6366f1;
  --color-bg: #0f1117;
  --color-text: #f1f5f9;
  --color-border: #2a2f42;
  --font-body: "Inter", sans-serif;
  --radius: 12px;
  --spacing-md: 1rem;
}

.button {
  background: var(--color-primary);
  color: var(--color-text);
  border-radius: var(--radius);
  padding: var(--spacing-md);
  font-family: var(--font-body);
}
  • Define with double-dash prefix: --name: value;
  • Use with var() function: var(--name)
  • :root makes them available EVERYWHERE on the page
  • Change the variable once = changes everywhere it is used
3.51:2535 min

Exercise: Style Your HTML Page

Exercise: Add CSS to Your Page from Session 2

The Prompt

Create a file called style.css for my index.html page. Use CSS variables for all colors and spacing. Apply a dark theme:
- Background: #0f1117
- Text: #f1f5f9
- Primary color: #6366f1
- Surface/cards: #1c2030
- Border: #2a2f42
- Font: Inter from Google Fonts
- Border radius: 12px for cards, 8px for smaller elements

Style the page with:
- Body: dark background, light text, Inter font, good line-height
- Header: centered name, gradient text on the h1
- Sections: card-like appearance with surface background, border, border-radius, padding
- Lists: remove default bullets, custom spacing
- Links: primary color, no underline, underline on hover
- Image: border-radius, max-width 100%
- Footer: smaller text, muted color, centered, border-top

Also add the Google Fonts link tag for Inter in the HTML head.
Link the style.css file in the HTML head.

Practice: Modify It Yourself

Make these changes MANUALLY in style.css (not via prompt):

  1. Change the primary color variable to a different color of your choice. See everything update.
  2. Add a hover effect on the section cards: slightly lighter background and a subtle shadow.
  3. Make the h1 larger. Try different font-weight values: 400, 600, 700, 900. See the difference.
  4. Add padding to the body so content does not touch screen edges.

Git Push

Save your work:

Commit all changes with message "feat: add CSS styling with dark theme and variables" and push to GitHub.

Homework

Required (due before session 4):

  1. Style a second page — Create an about.html with different content (bio, timeline, fun facts). Style it using the SAME style.css file. Both pages should look consistent because they share variables and base styles.
  2. Hover effects — Add at least 3 different hover effects across your pages: color change on link, background change on card, scale/transform on image or button.
  3. Experiment with properties — Try at least 5 CSS properties we did NOT cover today. Ask Kiro: "What are 10 interesting CSS properties I have not used yet?" Try them out.
  4. Create a color scheme — Pick a brand color you like. Define a full set of CSS variables: primary, primary-hover, background, surface, text, text-muted, border, accent, success, error. Use them consistently.
  5. Push daily.

Grading

CriteriaPoints
index.html has linked external CSS with variables and dark theme/2
about.html exists and shares the same stylesheet consistently/2
At least 3 hover effects using pseudo-classes/2
Can explain: class vs id, padding vs margin, inline vs external CSS/2
Full color scheme with 8+ CSS variables defined and used/2
Total/10

Next Session Preview

Session 04: CSS Layout — Flexbox and Grid. How to arrange elements on the page. Side by side, centered, responsive. The tools that make real layouts possible.

ScoalaDeWeb · Training
4

Training 4 — Build a Niche Site: Flexbox, Grid, Responsive & Motion

Cluster 2 — Frontend Core

You each pick a niche and build a full landing page live through AI prompts. Along the way you master flexbox, CSS grid, responsive design, animations and transitions, color theory, a taste of BEM naming, and the developer mindset for breaking a big idea into small, promptable steps.

7 content blocks · 120 min
4.10:0015 min

Pick Your Niche & Think Like a Developer

Today you direct, you do not type

You are the creative director. Kiro is your developer.

  • Today you build a complete landing page for a niche you choose — live, through prompts.
  • You will not write CSS by hand. You describe what you want, watch it appear, and refine.
  • The skill of the day: break one big scary task into small, clear steps and prompt them one at a time.

Step 1 — Pick your niche (60 seconds, no overthinking)

Choose ONE. The niche does not matter — the skill does.

  • Coffee shop, tattoo studio, indie game, dog grooming, vinyl records, padel club, a bakery...
  • Pick something you can picture. You will build a one-page site to promote it.

The developer mindset: decompose before you build

One "build a website" becomes 6 promptable steps

  1. Skeleton — the top-to-bottom structure (flexbox)
  2. Grid — a section with cards laid out in a grid
  3. Responsive — looks right on phone and desktop
  4. Motion — animations and hover transitions
  5. Color — a real palette that fits the niche
  6. Ship — push it to GitHub

Read before you paste! Every prompt below has parts in [SQUARE BRACKETS] you must fill in with your own values — your folder name, your niche, your business name. Pick a folder name like [YOUR-NAME]-niche-site (for example maria-niche-site) and use the SAME folder in every prompt today. Do not copy-paste blindly — read, edit the brackets, then send.

Prompt 1 — Scaffold the project and open a live preview

Context: I am building a one-page marketing landing page for a [YOUR NICHE, e.g. specialty coffee shop called "Ember"]. I am a beginner and want to see changes live in the browser.
Task: Create a new project folder called [YOUR-NAME]-niche-site (e.g. maria-niche-site) with three files: index.html, style.css, and a linked Google Font. Add a semantic HTML skeleton with header, main, and footer, and a single <h1> with the business name. Link style.css in the head.
Constraints: Use semantic HTML5 tags only (no div where a semantic tag fits). External CSS only. Add CSS variables in :root for colors and spacing even if empty for now. Keep it clean and commented.
Format: Give me the full file contents, then tell me the exact command to open it in a live preview so I can watch changes as we go.
Edge cases: Make sure the page has correct meta charset, viewport, and a descriptive title.

Watch your screen: once the preview is open, you should see a plain page with just your business name. Ugly is expected — that is our blank canvas. Keep this preview open the whole session.

4.20:1520 min

Layout the Skeleton with Flexbox

Flexbox = arranging things in ONE direction

Think of a single shelf of books

  • display: flex turns a container into a flexible shelf.
  • justify-content spaces items along the shelf (left, right, center, space-between).
  • align-items positions items across the shelf (top, center, bottom).
  • flex-direction sets the shelf direction: row (side by side) or column (stacked).

Prompt 2 — A flex navigation bar

Context: Work inside my [YOUR-NAME]-niche-site project. My niche landing page has a header. I want a professional top navigation bar.
Task: Using flexbox, build a nav inside the header with the business name/logo on the left and 3-4 text links on the right (e.g. About, Menu, Contact). Vertically center everything and add comfortable padding.
Constraints: Use display:flex with justify-content:space-between and align-items:center. Use my CSS variables for colors and spacing. No frameworks. Add a subtle bottom border.
Format: Update style.css and index.html and show me only the changed parts, with a one-line comment explaining the flex properties you used.
Edge cases: If the business name is long, it should not break the layout.

Prompt 3 — A centered hero as a flex column

Context: Work inside my [YOUR-NAME]-niche-site project. Below the nav I want a hero section that grabs attention — a big headline, a short subtitle, and a call-to-action button.
Task: Create a hero section that uses flexbox as a vertical column to center the headline, subtitle, and button both horizontally and vertically. Give it a large minimum height so it fills most of the first screen.
Constraints: Use display:flex, flex-direction:column, align-items:center, justify-content:center. Text centered. Use my CSS variables. Write a headline and subtitle that fit my niche.
Format: Show the HTML for the hero and the CSS, with comments on which flex property does what.
Edge cases: Keep the text readable if the headline is two lines.

Watch your screen: the nav should now sit in a neat row (logo left, links right) and the hero text should be perfectly centered in a tall band. If the links are stacked or stuck left, tell Kiro "the nav links should be in a horizontal row aligned to the right using flexbox."

4.30:3520 min

Build the Card Section with CSS Grid (+ a taste of BEM)

CSS Grid = arranging things in TWO directions

Flexbox is a shelf. Grid is a chessboard.

  • Grid lays items out in rows and columns at the same time — ideal for cards.
  • display: grid turns on the board.
  • grid-template-columns defines the columns.
  • gap sets the space between every cell — no more fiddly margins.

The one magic line to recognize

grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));

In plain words: "make as many equal columns as fit across the row, each at least 250px wide." This gives you a grid that reflows on its own — a taste of responsive design, which is the next step.

Naming your classes: BEM (Block, Element, Modifier)

A tidy convention so class names never turn into spaghetti

  • Block — the thing itself: card
  • Element — a part inside it, with double underscore: card__title, card__icon
  • Modifier — a variation, with double dash: card--featured

Anyone reading the class instantly knows what belongs to what. We will ask Kiro to name our card classes this way.

Prompt 4 — A responsive grid of cards (named with BEM)

Context: Work inside my [YOUR-NAME]-niche-site project. My landing page needs a section that showcases 6 items relevant to my niche (e.g. coffee drinks, tattoo styles, game features, grooming services). Each item is a card with an icon or emoji, a title, and one line of text.
Task: Build a section titled appropriately for my niche, containing 6 cards laid out with CSS Grid. Use grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)) and a comfortable gap so the cards reflow automatically. Style each card with padding, rounded corners, a subtle border, and my CSS variables.
Constraints: Use CSS Grid for the card layout (not flexbox). Name the classes using BEM: card for the block, card__icon, card__title, card__text for the elements, and a card--featured modifier for one highlighted card. Write real card titles and text that fit my niche. No images required — use an emoji or a Material Symbol as the icon.
Format: Show the HTML for the section and the grid CSS, with a comment explaining the repeat/auto-fit/minmax line, and point out the BEM block, element, and modifier in the classes.
Edge cases: With few cards the grid should still look balanced, not stretched awkwardly.

Watch your screen: you should see 6 cards in a tidy grid with even gaps, and one card standing out (the card--featured modifier). Drag your browser narrower — the cards rearrange from 3 columns to 2 to 1. Look at the class names too: card, card__title, card--featured. That is BEM.

4.40:5525 min

Make It Work on Every Screen: Responsive Design

Responsive = same content, layout adapts to the screen

One page that looks right on phone, tablet, and desktop

  • The HTML stays the same. Only the CSS adapts based on screen size.
  • Mobile-first: design for the small screen first, then enhance for larger screens.

The three pillars of responsive

1. The viewport tag

<meta name="viewport" content="width=device-width, initial-scale=1"> — without it, phones pretend to be desktop-wide and everything looks tiny. It is already in your file.

2. Relative units (not fixed pixels)

  • % and 1fr for widths that flex.
  • rem for scalable text and spacing.
  • clamp(min, preferred, max) for fluid type: never too small, never too big.

3. Media queries

@media (max-width: 640px) { ... } = "apply these rules only on screens up to 640px wide." This is how the layout changes by screen size.

Prompt 5 — Make the whole page responsive (mobile-first)

Context: Work inside my [YOUR-NAME]-niche-site project. My landing page (nav, hero, card grid) currently looks fine on desktop but I have not checked mobile. I want it to look great on phones too.
Task: Make the entire page responsive using a mobile-first approach. On small screens (max-width 640px): stack the nav links vertically, reduce the hero headline size, reduce section padding, and ensure the card grid becomes a single column. Use a media query for the small-screen adjustments.
Constraints: Do NOT use fixed pixel widths on containers — use max-width and percentages. Keep a max-width around 1100px on the main content, centered with margin auto. Use my CSS variables. Comment each media query so I understand what it changes.
Format: Show the updated CSS, clearly marking the base (mobile) styles and the media query overrides.
Edge cases: Nothing should overflow horizontally on a 375px-wide phone screen (no sideways scrolling).

Prompt 6 — Fluid typography with clamp()

Context: Work inside my [YOUR-NAME]-niche-site project. My headings jump awkwardly between screen sizes. I want text that scales smoothly.
Task: Convert my main headline, section titles, and body text to fluid sizes using clamp() so they scale smoothly between mobile and desktop without a media query.
Constraints: Headline should never be smaller than 1.8rem or larger than 3.5rem. Body text stays comfortably readable. Use rem units inside clamp. Keep line-height readable.
Format: Give me the updated typography CSS with a one-line comment on how clamp works.
Edge cases: Text must stay readable at the smallest size.

Watch your screen: open DevTools (right-click → Inspect), click the device toolbar icon, and pick "iPhone". Your nav should stack, your cards should be one column, and your headline should shrink — with no sideways scrolling. Drag the size up to desktop and watch it grow back smoothly. THIS is a real website now.

4.51:2020 min

Bring It to Life: Animations & Transitions

Transition vs Animation

Two ways to add motion

  • Transition = a smooth change between two states, usually on hover/focus. "From normal to hovered, over 0.2s."
  • Animation (@keyframes) = a scripted sequence that can run on its own, e.g. on page load. "Frame 0: invisible and low → Frame 100: visible and in place."
  • transform (translate, scale, rotate) is the smooth, performant way to move things — prefer it over animating width/top.

Prompt 7 — Hover transitions on buttons and cards

Context: Work inside my [YOUR-NAME]-niche-site project. My page is static. I want subtle, professional micro-interactions on hover.
Task: Add smooth transitions so that: (1) the call-to-action button darkens and lifts slightly on hover, (2) each card lifts up a few pixels and gains a soft shadow on hover, (3) nav links change color smoothly on hover.
Constraints: Use the transition property with a duration around 0.2s and an ease timing. Use transform: translateY() for the lift and box-shadow for depth. Use my CSS variables. Keep it tasteful — small movements only.
Format: Show only the added/changed CSS with a short comment on each hover effect.
Edge cases: Effects must reverse smoothly when the mouse leaves, not snap back.

Prompt 8 — A keyframe entrance animation for the hero

Context: Work inside my [YOUR-NAME]-niche-site project. When my page loads, the hero is just suddenly there. I want it to animate in gracefully.
Task: Create a @keyframes animation that fades the hero content in and slides it up slightly when the page loads. Apply it to the headline, subtitle, and button with a small stagger so they appear one after another.
Constraints: Use opacity and transform: translateY() in the keyframes. Total animation under 1 second. Use animation-delay to stagger the three elements. Do not make it loop.
Format: Show the @keyframes and the CSS that applies it, with comments.
Edge cases: After the animation ends, elements must stay fully visible and in place (animation-fill-mode: forwards).

Watch your screen: reload the page — the hero should fade and glide into place. Hover your button and cards — they should lift smoothly. If motion snaps instead of glides, tell Kiro "add a transition so this animates smoothly instead of jumping."

4.61:4015 min

Color Theory & Final Polish

Color theory for developers (the practical version)

A palette is simpler than you think

  • Primary — your brand color (buttons, links, highlights).
  • Accent — one or two supporting colors for contrast.
  • Neutrals — backgrounds and text (near-white, near-black, greys).
  • 60-30-10 rule: 60% neutral, 30% primary, 10% accent → instantly balanced.

Color sets the mood — match it to your niche

  • Blue → trust, tech, calm
  • Green → natural, health, growth
  • Warm orange / brown → cozy, food, friendly
  • Black + gold → premium, luxury

Prompt 9 — Generate and apply a real palette

Context: Work inside my [YOUR-NAME]-niche-site project. My landing page uses placeholder colors. I want a cohesive palette that fits my niche and its mood.
Task: Propose a color palette for my niche with one primary, one accent, and a set of neutrals (background, surface, text, muted text, border). Give each a hex value. Then wire them into my :root CSS variables and update the page to use them consistently following a 60-30-10 balance.
Constraints: Ensure text has strong contrast against its background for readability. Provide the palette as a small table (name, hex, usage) before the code. Keep it tasteful and on-brand for my niche.
Format: First a table of the palette, then the updated :root variables, then note which elements changed.
Edge cases: Body text on the background must be clearly readable — no low-contrast grey-on-grey.

Prompt 10 — The one-line theme switch (feel the power of variables)

Context: Work inside my [YOUR-NAME]-niche-site project.
Task: Show me how to change my entire site's mood by editing only the --color-primary and --color-accent variables. Give me one alternative palette (e.g. a darker or seasonal version) I can paste in to instantly re-skin the whole page.

Watch your screen: after prompt 9 your page should suddenly look designed, not default. After prompt 10, change one variable value and watch EVERY button, link, and accent update at once. That is why we built with CSS variables back in Session 3.

4.71:555 min

Ship It: Push, Recap & Homework

Prompt 11 — Commit and push your site

Context: Work inside my [YOUR-NAME]-niche-site project. My niche landing page is done for today and I want it saved on GitHub.
Task: Initialize git if needed inside my [YOUR-NAME]-niche-site folder, then stage everything, commit with a clear message, and push to a new GitHub repo called [YOUR-NAME]-niche-site.
Constraints: Use a Conventional Commit message like "feat: build responsive niche landing page with grid, flexbox, motion and color". Do not commit any secrets. Show me the commands.
Format: Give the commands in order, then tell me what to open in the browser to confirm it worked.

What you built today

  • Flexbox — the nav row and the centered hero (one-direction layout).
  • CSS Grid — the reflowing card section (two-direction layout).
  • BEM naming — tidy, predictable class names (block, element, modifier).
  • Responsive design — viewport, relative units, clamp(), media queries — works on every screen.
  • Animations & transitions — hover micro-interactions and a hero entrance.
  • Color theory — a real palette wired into CSS variables, 60-30-10, contrast.
  • Developer mindset — you broke one big task into small promptable steps and directed each one.

The real lesson: you did not memorize CSS. You decomposed a big goal into small, clear prompts and directed AI to build each layer. That skill scales to everything you will ever build.

Homework (due before Session 5)

  1. Add one more section to your niche site using ONLY prompts — a testimonials strip, a pricing table, a contact form, or an image gallery. Keep it responsive, on-palette, and name the classes with BEM.
  2. One hover effect you did not use today. Experiment.
  3. Prompt reflection: open today's prompt log, pick your best and worst prompt, and rewrite the worst one using the 5 elements (Context, Task, Constraints, Format, Edge cases).
  4. Push daily.
ScoalaDeWeb · Training
5

Training 5 — Our First Multi-Page Site: Structure, Shared Design & Collaboration

Cluster 2 — Frontend Core

Turn a single page into a real multi-page website that you both build at the same time. You will set up one shared design system so everything looks consistent, build a reusable header and footer together, then split the pages between you and work in parallel without stepping on each other — using Git branches and pull requests like a real team.

7 content blocks · 120 min
5.10:0015 min

From One Page to a Real Site

Today: your first real website

A site = several pages that link together

  • Last session: one page. Today: multiple pages that connect into one website — built by the two of you at the same time.
  • Two questions every team must answer: how do we not overwrite each other, and how do we keep one consistent look?

The golden rule of working together

One file, one owner at a time

  • Git only conflicts when two people edit the same lines of the same file.
  • So we split the pages — each of you owns your own pages — and build the few shared parts together, once.

Step 1 — Plan together (5 minutes, no coding yet)

Decide as a team before anyone builds

  1. One shared theme — it is ONE site, so agree on the business/topic together.
  2. List the pages — e.g. Home, About, Services, Contact.
  3. Split ownership — write down who owns which page. Nobody touches a page they do not own.
  4. Shared parts — the design tokens, header, and footer are built together (next blocks).

Write your plan in a file. Create a PLAN.md in your project listing the pages and who owns each one. This is your team agreement for the session.

5.20:1520 min

Build the Shared Design System (Together)

Why sites look consistent: a design system

Consistency comes from shared rules, not talent

  • A design system = one shared set of style rules everyone follows.
  • Two parts, both built together now: design tokens (a shared style.css) and a design steering (shared Kiro rules).

Read before you paste! The prompts below have [SQUARE BRACKETS] to fill in with your own values — your shared theme/business name and your project folder. Use the SAME shared project folder you both agreed on. Do not paste blindly — read, edit, then send.

Prompt 1 — Create the shared design tokens (do this together, once)

Context: We are two developers building ONE multi-page website together for [OUR SHARED THEME, e.g. a climbing gym called "Ascent"]. We want a single shared stylesheet of design tokens so every page looks consistent.
Task: In our shared project folder [OUR-PROJECT] create a file called style.css containing a :root block of CSS variables: a primary color, an accent color, background and surface colors, text and muted-text colors, a border color, a body font (from Google Fonts), a heading font, a base spacing unit, a border-radius, and a card shadow. Add a short comment above each group.
Constraints: Use CSS custom properties only (no components yet). Pick a palette and fonts that fit our theme, with strong text/background contrast. Keep values tasteful and cohesive.
Format: Give me the full style.css, and a one-line summary of the palette choices.
Edge cases: Make sure text-on-background contrast is easily readable.

Prompt 2 — Create the shared design steering for Kiro (both of you install it)

Context: We are building one website together and want both of our Kiro assistants to follow the exact same design rules so our pages look consistent.
Task: Create a steering file at .kiro/steering/design-system.md with rules that apply to all HTML/CSS work on this project: always use the CSS variables from style.css (never hardcode colors, fonts, spacing, or radius); every page must include the same header and footer; buttons use the class .btn; cards use BEM naming (card, card__title, card__text); use semantic HTML5 tags; keep a max-width container centered on every page; and make every page responsive (mobile-first).
Constraints: Write it as clear, short rules. It must be generic enough to apply to any page on the site.
Format: Give me the full contents of design-system.md.
Edge cases: The rules must not depend on any single page — they apply site-wide.

Watch your screen: you should end up with one style.css full of variables and one .kiro/steering/design-system.md. Both of you put that same steering in your Kiro. From now on, both AIs follow the same rules automatically.

5.30:3520 min

Build the Shared Header & Footer (with Navigation)

Shared header & footer = a consistent site

Build them once, reuse on every page

  • Every page shares the same header (with navigation) and footer.
  • Build them together now; each of you pastes the same markup into your own pages.

Navigation = links between your pages

Relative links connect files in the same folder

  • <a href="about.html">About</a> → the about page in the same folder.
  • <a href="index.html">Home</a> → the home page.
  • The active link (the current page) is highlighted so visitors know where they are.

Prompt 3 — Build the shared header with navigation (together)

Context: We are building a multi-page site in [OUR-PROJECT] and need one header used on every page. Our pages are: [LIST YOUR AGREED PAGES, e.g. index.html (Home), about.html (About), services.html (Services), contact.html (Contact)].
Task: Build a reusable site header containing the business name/logo on the left and a nav with a link to each of our pages on the right, using relative links (e.g. href="about.html"). Add a CSS class for the "active" nav link and show me how to mark the current page. Style it with our style.css variables and flexbox.
Constraints: Use semantic tags (header, nav). Use the CSS variables from style.css — no hardcoded values. Follow our design-system steering. Make the nav responsive (stacks on small screens).
Format: Give me the header HTML (as a block I can paste into each page), the nav CSS, and an example of how to set the active link on one page.
Edge cases: The header must look and behave the same on every page.

Prompt 4 — Build the shared footer (together)

Context: We need one footer used on every page of our site in [OUR-PROJECT].
Task: Build a reusable footer with the business name, a short tagline, the current year, and small nav links back to our main pages. Style it with our style.css variables.
Constraints: Semantic footer tag, muted colors, centered, a subtle top border, responsive. Use the shared variables only. Follow our design-system steering.
Format: Give me the footer HTML as a paste-in block and its CSS.
Edge cases: It should sit at the bottom and look consistent on short and long pages.

Watch your screen: a header with working nav links and a matching footer. Click a nav link — it should try to open another page (which may not exist yet; that is fine, you build those next). Make sure the nav links match the filenames in your PLAN.

5.40:5530 min

Split Up: Build Your Own Pages in Parallel

Build your own pages — at the same time

Each of you owns your pages from the PLAN

  • Paste in the shared header and footer, use the shared style.css, follow the shared steering.
  • Only touch the pages you own. Never edit a teammate's page — that is how you stay conflict-free.
  • Each page: same header + footer, then its own unique main content.

Prompt 5 — Build one of your pages (repeat for each page you own)

Context: I am building the [PAGE NAME, e.g. About] page ([FILENAME, e.g. about.html]) of our shared site in [OUR-PROJECT]. The site already has style.css, a shared header, and a shared footer.
Task: Create [FILENAME] as a full page. Start from the same <head> setup, paste in our shared header (with this page marked as the active nav link) and our shared footer, and build the unique main content for this page: [DESCRIBE THIS PAGE, e.g. our story, a timeline, and a team section]. Use flexbox and/or CSS grid where it fits.
Constraints: Use only the CSS variables from style.css — no hardcoded colors or spacing. Follow our design-system steering. Semantic HTML5. Fully responsive (mobile-first). Reuse the shared header and footer exactly.
Format: Give me the full [FILENAME] file, and any page-specific CSS added to style.css clearly marked with a comment.
Edge cases: The header, footer, fonts, and colors must match the rest of the site exactly.

Watch your screen: your page should look like it belongs to the same site as your teammate's — same header, footer, colors, and fonts — even though you built it separately. That is the design system working. Build each page you own the same way.

5.51:2520 min

Work as a Team: Git Branches & Pull Requests

Branches & pull requests: how teams share one project

The mental model

  • main — the official version of the site that should always work.
  • branch — your own private copy to build on, without affecting anyone else.
  • pull request (PR) — "here is my work, please review and merge it into main".
  • You each work on your own branch, open a PR, merge, then pull the updated main.

Why it stays conflict-free

Because you split the pages by owner, your branches touch different files — so merges are clean. If a conflict ever appears, it just means two edits hit the same lines; read the markers and resolve them (Kiro can help).

Prompt 6 — Create your branch and push your pages

Context: We share one Git repo for our site in [OUR-PROJECT]. I have built the pages I own and want to submit them the professional way, without disturbing my teammate.
Task: Show me the commands to: create and switch to a new branch called [feature/YOUR-NAME-pages, e.g. feature/maria-pages], stage and commit my pages with a clear Conventional Commit message, and push my branch to GitHub. Then tell me how to open a pull request on GitHub to merge my branch into main.
Constraints: Do not commit directly to main. Use a Conventional Commit message (e.g. "feat: add about and contact pages"). Only stage the pages I own plus any clearly-marked page-specific CSS. Show the commands in order.
Format: Give me the exact commands step by step, then the steps to open the pull request in the browser.
Edge cases: If I have uncommitted shared-file changes I did not intend, warn me before committing.

Prompt 7 — Review, merge, and sync

Context: My teammate opened a pull request on our shared repo, and I have merged my own. I want to get the latest combined version onto my machine.
Task: Show me how to switch back to the main branch and pull the latest so I have both of our merged work. Explain in one sentence what to do if Git reports a merge conflict.
Format: Commands in order, plus the one-sentence conflict tip.

Watch your screen: after both pull requests are merged and you pull main, you should see the WHOLE site — all pages, from both of you — in one folder, all matching. That is a real team workflow, done.

5.61:4510 min

Integrate & Design Review

Two jobs: connect it, then review it

1. Click through every link

  • Visit every page via the nav — no dead links, header/footer identical everywhere, active link correct.
  • Broken link? Almost always a filename mismatch (e.g. service.html vs services.html).

2. Design review together

  • Look at the whole site side by side and hunt for small inconsistencies (spacing, heading sizes, card styles).
  • Fix them by pointing back to the shared style.css variables — not by inventing new values.

Prompt 8 — Consistency check

Context: Our multi-page site in [OUR-PROJECT] is assembled from pages we each built. I want to catch any visual inconsistencies.
Task: Review my pages against our style.css design tokens and list anything that hardcodes a value instead of using a variable, or any spacing/heading/card style that is inconsistent between pages. Suggest the fix using our existing variables.
Format: Give me a short checklist of issues found and the one-line fix for each.
Edge cases: Only flag real inconsistencies; do not restyle things that already use the variables.

Watch your screen: after fixing the flagged items, click through the whole site once more. It should feel like one polished product built by one team — because that is exactly what it is.

5.71:555 min

Recap & Homework

What you built today

  • A multi-page website — separate HTML pages linked by a shared nav.
  • A shared design system — one style.css of tokens + one Kiro design steering, so both halves look like one site.
  • Reusable header & footer — built once, used everywhere, with an active nav state.
  • Real collaboration — page ownership, Git branches, and pull requests, with clean merges.

The real lesson: consistency and smooth teamwork are not luck — they come from shared rules and clear ownership set up before you build.

Homework (due before Session 6)

  1. Add one more page to the shared site on your OWN branch (e.g. a gallery, pricing, or FAQ page), then open a pull request to merge it. Practice the full branch → PR → merge flow yourself.
  2. Polish: pick two inconsistencies from the design review and fix them using the shared variables.
  3. Individual practice: keep doing small exercises with everything so far (flexbox, grid, responsive, animations, color, BEM) and push them to your project folder.
  4. Prompt reflection: pick your best and worst prompt from today and rewrite the worst using the 5 elements (Context, Task, Constraints, Format, Edge cases).
ScoalaDeWeb · Training
6

Training 6 — Design Like a Pro: Study Real Sites, Screenshot-to-Code & Fine-Tuning

Cluster 2 — Frontend Core

A hands-on session with no slides. You learn to steal like an artist: study award-winning designs on Behance and ThemeForest, learn to SEE what makes them good, then reproduce the parts you love by screenshotting an element and telling Kiro to build it. The rest of the session is pure fine-tuning — turning a rough page into a polished one through many small, precise prompts.

7 content blocks · 120 min
6.10:0015 min

Steal Like an Artist: Where Good Design Comes From

Today: no new tech — better taste and a killer workflow

Good design is learned by looking, not by luck

  • Every designer you admire started by studying other people's work on purpose.
  • Starting from a blank page produces generic results. Starting from great references produces great results.
  • We are not copying pixel-for-pixel — we are studying patterns: spacing, type scale, whitespace, one accent color, hero feel.

Train your eye: always ask WHY

When a site looks good, name the reason

  • Is it the generous whitespace? The strong contrast? A single bold accent color? A big confident heading?
  • Once you can name WHY it works, you can ask Kiro to reproduce that reason in your own site.

The plan today: 1) hunt for inspiration, 2) learn screenshot → code, 3) fine-tune your own site until it looks professional. No slides — we build the whole time.

6.20:1520 min

Hunt for Inspiration: Behance & ThemeForest

Two goldmines for references

Behance vs ThemeForest

  • Behance — designers showing off finished concepts. Beautiful, idea-rich, sometimes not built for real browsers.
  • ThemeForest — real templates for sale. What you see there actually ships and works in a browser.

Search with intent, then collect

Don't scroll randomly — hunt for YOUR niche

  1. Search close to your project: [YOUR NICHE] landing page (e.g. "coffee shop website", "travel landing page").
  2. Save 3–5 references you genuinely like.
  3. For each one, write down the specific element you want to borrow: "the hero with photo left", "rounded cards with soft shadow", "this footer".

Two rules: borrow the structure and feel, never someone's brand/logo/photos — bring your own content. And pick things that are ambitious but reachable for today.

6.30:3525 min

The Screenshot-to-Code Trick

Kiro can SEE — so show, don't describe

The workflow

  1. Find an element you love (a card, navbar, hero, footer).
  2. Screenshot just that element — on Mac, Cmd+Shift+4 drags a box around exactly the part you want.
  3. Drag the image straight into the Kiro chat.
  4. Tell Kiro what to build from it.

Screenshot + instructions + YOUR constraints

A picture alone gives a rough clone — add your design system

Example prompt to pair with a screenshot:

Recreate this [PRICING CARD] layout from the screenshot.
Use MY existing style.css variables — my colors, my fonts, my spacing.
Match the structure and the shadow feel, but use my accent color, not theirs.
Keep it fully responsive.
  • Kiro reproduces the structure from the image but dresses it in your design tokens, so it fits your site instead of looking pasted-in.

Do it yourself: take an element you saved earlier, screenshot it, drop it into Kiro, and turn it into a real block on your page before moving on.

6.41:0030 min

Fine-Tuning: Small, Precise Prompts

Getting it on the page is 20%. Fine-tuning is 80%.

Design is a conversation, not one perfect prompt

  • The first result is supposed to be rough. Do not give up — refine it.
  • Beginners quit after the first try. Pros expect to iterate.

The golden rule: change ONE thing at a time

Be surgical, not vague

  • Bad: "make it better" — Kiro can't read your mind.
  • Good, small, testable steps:
    • "make the [GLOBE] a bit bigger and remove the text in front of it"
    • "move the [TRANSLATOR DROPDOWN] to the right corner"
    • "keep the country borders visible when it zooms in"
  • Look at each result, decide, then give the next small instruction.

Fine-tuning vocabulary

Precise visual words get precise results

bigger / smaller · more / less spacing · tighter / looser · softer / harder shadow · move left / right · more / less contrast · calmer / bolder

Stepping back is allowed: if an approach isn't working, say "that's not what I wanted, go back to the earlier version". Reverting and trying a different direction is part of fine-tuning.

6.51:3020 min

Case Study: Building an Ambitious Interactive Feature

Real example from today

From a broken map to a rotating 3D globe

  • The first map option didn't work — so instead of forcing it, we asked for a different approach.
  • Result: a rotating globe that zooms into Europe, pins each available country with its flag and name, and flies country-to-country like a plane landing.
  • Then: a language translator added to the navbar.

What made it work

Three senior habits you used without realizing

  1. Abandon dead ends. When option A failed, you asked for alternatives instead of hammering the broken idea.
  2. Layer requirements gradually. Rotate → remove background → make bigger → add borders → add flags & names. One layer at a time, checked each.
  3. Hit real constraints honestly. A live translator needs a real domain/hosting/service — it can't fully run from a local file. Noticing that is progress, not defeat.

The takeaway: you don't need to know how to code a 3D globe. You need to describe what you want, look honestly at the result, and steer it one change at a time.

6.61:505 min

Polish Pass & Design Review

Look at your page like a stranger

Design review checklist

  • Is spacing consistent, or are some gaps random?
  • Is there one clear accent color, or a rainbow?
  • Does every section breathe, or is anything cramped?
  • Is text easy to read — enough contrast, not too small?
  • Does it look intentional on mobile, not just squished?

Every "no" is one more small fine-tuning prompt. Leave with a short, honest list of what to polish next.

6.71:555 min

Recap & Homework

What you learned today

  • Study real designs on Behance & ThemeForest — and name WHY they work.
  • Screenshot-to-code — show Kiro an element, pair it with your design tokens, get a block that fits your site.
  • Fine-tuning — small, precise, one-change-at-a-time prompts turn rough into polished.
  • Abandon dead ends — when an approach isn't working, step back and ask for a different option.

The real lesson: good-looking sites don't come from memorizing code — they come from a trained eye plus patient, precise iteration.

Homework (due before Session 7)

  1. Collect 5 references for your niche on Behance or ThemeForest. For each, write one sentence: what specifically you want to borrow.
  2. Screenshot-to-code: pick one element from your references, screenshot it, and recreate it on your site using YOUR design tokens.
  3. Fine-tune one section until you are proud of it — track how many small prompts it took. Aim for 5+ precise, one-change-at-a-time prompts.
  4. Design review: run the checklist on your whole site and write down the top 3 things still to polish.
ScoalaDeWeb · Training
7

Training 7 — Going Full-Stack: Databases, a PHP Backend & an Admin Login

Cluster 3 — Data Layer

The site so far had no memory. Today we give it one. You meet the three layers of every web app, learn just enough about databases and PHP to DIRECT an AI confidently, then scaffold a real blog project with Node.js and MAMP, build a small PHP backend, and finish with a working admin login. The goal is not to become a backend engineer — it is to understand the moving parts well enough to ask an AI for exactly the right thing and spot when something is wrong or unsafe.

8 content blocks · 120 min
7.10:0015 min

Frontend, Backend & Database: The Whole Picture

Your site had no memory — today it gets one

The three layers of every web app

  • Frontend — what the user sees (HTML/CSS today; Angular soon). The restaurant dining room.
  • Backend — the logic the user never sees (PHP, new for us). The kitchen.
  • Database — where data is stored permanently (MySQL). The pantry/fridge.

How they talk to each other

[Browser / Frontend]  --HTTP request-->  [Server / Backend]  --SQL query-->  [Database]
     (Angular)             (API call)           (PHP)          (read/write)     (MySQL)

Click "Login" → frontend sends email + password → backend checks the database → returns success/failure → frontend reacts.

Today's honest goal: not to become a backend engineer, but to understand the moving parts well enough to direct an AI precisely and spot when something is wrong or unsafe. You are becoming an AI-assisted developer.

New names ahead — that's fine. PHP, Angular and databases are all new to you. The very next block is a friendly tour of what each one is and why we use it, before we build anything.

7.20:1520 min

Meet the Technologies: JavaScript, PHP & Angular

A friendly tour before we build

From today we use tools you've never touched. Here's what each is, why we use it, and what it does for you — no code yet, just the map. New names are normal. Nothing here is scary.

JavaScript — the browser's engine

  • What it is: the programming language of the browser (you've already seen tiny bits of it).
  • Why we use it: it makes a page do things — buttons react, menus open, search filters live.
  • What it does for us: turns a static page into something interactive.

PHP — the brain on the server

  • What it is: a language that runs on the server, not the browser. Users never see it — only its results.
  • Why we use it: it talks to the database, checks passwords, prepares data. Our hosting already runs it, and the AI writes it well.
  • What it does for us: gives our site a brain and a memory behind the scenes. Brand new today — we read it, we don't memorize it.

Angular — the toolkit that organizes the frontend

  • What it is: a framework — an organized toolkit for building real, bigger apps without the code becoming spaghetti.
  • Why we use it: plain HTML + JavaScript gets messy once an app has many screens; Angular gives structure, reusable pieces, and a clean way to talk to a backend.
  • What it does for us: it's how we build the admin panel next session — think LEGO for interfaces. The biggest new thing — we take it slowly.

Hold onto this one sentence: JavaScript makes the browser interactive, PHP is the brain on the server, Angular organizes the frontend, and MySQL is the memory. Today we meet PHP + the database hands-on; next session, Angular.

7.30:3515 min

Databases in Plain Language

A database is just related tables

The only vocabulary you need

  • Table — one spreadsheet (e.g. posts).
  • Row — one record (one blog post).
  • Column — one field (title, body, author, created_at).
  • Primary key — a unique id for each row.
  • Foreign key — a column that links to another table (a post stores its author's user id).

Everything you do with data = CRUD

  • Create · Read · Update · Delete
  • A blog admin panel is just CRUD on posts. Most apps are CRUD dressed up.

SQL — recognize it, don't memorize it

SELECT * FROM posts WHERE author = 'Ana';   -- Read
INSERT INTO posts (title, body) VALUES ('Hello', '...');  -- Create
UPDATE posts SET title = 'New title' WHERE id = 3;  -- Update
DELETE FROM posts WHERE id = 3;             -- Delete

You need to READ a query the AI writes and sanity-check it — not write it from memory.

Design task (do it now, out loud): what tables does a blog admin need? (posts, users.) What columns on each? That design conversation IS the spec you hand to an AI.

7.40:5015 min

Scaffold the Blog Project (Node.js + MAMP)

Why Node.js + MAMP

  • MAMP — a whole backend on your own computer: Apache (runs PHP) + MySQL (the database). Runs on localhost, no internet needed.
  • Node.js — installed for next session's Angular; today it means npm is available.

Set up the database (visually)

  1. Start MAMP → Start Servers.
  2. Open phpMyAdmin from MAMP's start page (the visual tool for MySQL — same kind we use on the real server).
  3. Create a database, e.g. blogadmin. This is your empty pantry.

Scaffold the project — by DIRECTING Kiro

Example prompt

Create a project folder for a blog with an admin panel.
Add an /api folder for a PHP backend and a README explaining the structure.
Keep it flat and simple. Don't add code yet — just the skeleton.

Notice how specific that is. Being specific is the skill.

Plan before you build. We already know our tables (posts, users) and our folders before writing a line of PHP. We decide → direct the AI → review what it made. Never a blank screen.

7.51:0520 min

A PHP Backend — and How to Ask an AI to Build It

What PHP actually is

  • PHP runs on the server. The browser never sees the code — only the result, usually as JSON.
  • A backend endpoint does four moves: connect to the DB → query → shape the data → respond with JSON.

The shape to recognize (not memorize)

<?php
header('Content-Type: application/json');
$pdo = new PDO('mysql:host=localhost;dbname=blogadmin', 'root', 'root');
$stmt = $pdo->query('SELECT * FROM posts ORDER BY created_at DESC');
echo json_encode($stmt->fetchAll());

Connect → query → respond. The connection line is where the DB name, user, and password live.

How to ask an AI for a backend — the pattern

Name the endpoint, the table, the return, and the rules

Create a PHP file posts.php that connects to my MySQL "blogadmin" database,
selects all rows from the "posts" table ordered by newest first,
and returns them as JSON.
Use PDO with a prepared statement.
Handle connection errors gracefully.

Every phrase here is a decision you now understand from blocks 1 & 2.

Test the API like a pro: Postman / Insomnia

Opening it in the browser only tests the simplest reads

  • Postman and Insomnia are free tools built for poking at an API.
  • Type your endpoint address → pick the method (GET to read, POST to send data) → hit Send → see the JSON, the status code, everything.
  • Point it at your posts.php: a GET returns your posts; a POST with JSON creates a new one.
  • This is how you confirm a backend works before any frontend exists.

Do it for real: build posts.php, start MAMP, open it in the browser, then test it in Postman or Insomnia — a GET to read, a POST to create. Seeing real JSON come back from YOUR backend is the payoff.

7.61:2515 min

Security Basics You Can't Ignore

You are the last check on the AI's code

You don't need to be a security expert — but you MUST know the basics, because the AI sometimes writes insecure code and YOU have to catch it.

1. Never trust user input (SQL injection)

  • Anything a user types can be an attack. Gluing input straight into a query is the wound.
  • The fix: prepared statements — that's why we always tell the AI "use PDO with prepared statements".
  • Review skill: if AI output glues input into a query, say "use a prepared statement instead".

2. Never store passwords as plain text

  • Store a one-way hash, never the real password.
  • PHP: password_hash() to save, password_verify() to check. We use this in the login next.

3. Keep secrets out of the frontend and out of Git

  • DB passwords and API keys live on the server — never in code the browser downloads, never committed to a repo.
  • Same principle as keeping our own project secrets in a git-ignored file.

Three checks — prepared statements, hashed passwords, secrets off the frontend — are what make you trustworthy with a backend.

7.71:4015 min

Build the Admin Login

The gate to the admin panel

Only an admin should reach the panel. The login uses everything from today: a users table, a PHP endpoint, and hashed-password security.

The flow

  1. A users table with email and password_hash, plus one seeded admin user.
  2. A login endpoint receives email + password, looks up the user (prepared statement), and checks with password_verify() against the stored hash.
  3. Match → success. No match → reject.

Build it — direct Kiro with all the decisions

Create a PHP login endpoint login.php for my "blogadmin" database.
It receives email + password as JSON, looks up the user in the "users" table
with a prepared statement, verifies the password with password_verify()
against the stored hash, and returns JSON success or error.
Don't reveal whether the email or the password was wrong.

That last rule is a real security touch — don't help an attacker guess.

Test it live: correct login → success; wrong password → error. It's a foundational login, not a bank's auth system — and that's exactly right for now. You built a full-stack feature, end to end.

7.81:555 min

Recap & Homework

What you built today

  • A mental map of the three layers (frontend / backend / database).
  • Enough database + SQL to read a design and a query and sanity-check the AI.
  • A scaffolded blog project with MAMP (Apache + MySQL).
  • A real PHP backend endpoint returning JSON.
  • A working admin login with hashed passwords and prepared statements.

The real lesson: you went full-stack by DIRECTING an AI while understanding every piece — and you now know the security basics to keep it safe.

Homework (due before Session 8)

  1. Make the backend run cleanly under MAMP — no errors when you open your endpoints in the browser.
  2. Finish posts.php: make sure it returns all posts, and can create a post via POST (ask the AI, using the pattern from today — name the endpoint, table, return, and rules).
  3. Test it in Postman or Insomnia: a GET that returns your posts, and a POST that creates one. Confirm the JSON and status codes look right.
  4. Seed 3–5 blog posts in the posts table so we have data to display next time.
  5. Security check: read every query the AI wrote and confirm each uses a prepared statement. Fix any that don't.

Next session: JWT tokens for security, install Angular, and start building the admin panel's interface in Angular — connected to this backend.

ScoalaDeWeb · Training
8

Training 8 — Secure the Login with JWT, Install Angular & Start the Admin Panel

Cluster 4 — Angular Framework

Last time we built the backend, the posts endpoint, and a login, and tested it all in Postman. Today we make that login properly secure with JWT tokens, then we install Angular and take our first real steps building the blog admin panel in it. Just enough of each to understand what is happening and direct the AI with confidence.

6 content blocks · 120 min
8.10:0010 min

Where We Are and What We Do Today

How far you've come

  • A database + a PHP backend + posts.php returning JSON + a login.
  • You tested it all in Postman — before any interface existed.

Today, two things

  1. Secure the login with a JWT token — the professional way to remember "this user is logged in".
  2. Install Angular and take the first real steps building the admin panel.

Not mastery of JWT or Angular today — just enough to understand what's happening and direct the AI with confidence.

8.20:1025 min

JWT Tokens: Keeping People Logged In, Safely

The problem: the web forgets you

Login says "yes, correct password" — but the next page, the backend has forgotten who you are. The web works one request at a time. So how do sites keep you logged in? A token.

What a JWT is

  • JWT = JSON Web Token: a small piece of text carrying info about you (user id, admin flag) in JSON form, digitally signed by the server.
  • The signature lets the server instantly know: I created this, and nobody tampered with it. Change one letter → rejected.

Signed, not secret

  • Anyone holding a JWT can read what's inside — so never put a password or anything private in it. Just harmless things like the user id.
  • Like a festival wristband: visible to all, proves you got in, but has no bank details on it.

The flow in our blog

  1. Log in with email + password.
  2. PHP checks them → if correct, creates a JWT and sends it back.
  3. Your app stores the token, then sends it with every protected request (e.g. delete a post).
  4. The backend verifies the signature → confirms you're a logged-in admin → only then does the work.

You direct the AI, not hand-code the crypto: "Update my PHP login to create a signed JWT (user id + admin flag) when the password is correct, and add a check that protects my other endpoints by verifying that token." Every word is something you now understand.

8.30:3520 min

Install Angular and See It Run

Why Node.js mattered — and why we prompt everything

Angular runs on Node (that's why we installed it) and comes with a CLI tool that does the setup. We don't memorize commands — we ask Kiro and Kiro runs them. Knowing how to ask beats knowing the command by heart.

Do it in three prompts

1 — Install the Angular CLI

Install the Angular CLI globally on my machine
and tell me the version once it is done.

2 — Create the project

Create a new Angular project called blog-admin in my current folder,
using routing and CSS, and don't start the server yet.

3 — Run it

Start the Angular development server for the blog-admin project
and tell me which address to open in the browser.

Kiro runs each one and reports back. You open the address (usually localhost:4200) — and there's your app, live.

Live reload & when it breaks

  • Change the code and save — the browser updates by itself. No manual refresh.
  • If install fails, paste the error back to Kiro: "this failed with this error, fix it." That's the loop.

Today's win: Angular installed and a real app running — entirely through prompts. Don't worry about the many files; most are plumbing. We'll touch only a few.

8.40:5525 min

The Two Words That Matter: Components & Services

Leave today knowing just two words

Component and Service. Get these two and the rest of Angular follows over time.

Component — a piece of the interface

  • A self-contained block owning three things: HTML (looks), CSS (style), a bit of code (behavior).
  • Like LEGO bricks — a page is small bricks snapped together.
  • Our panel's bricks: login-form, post-list, post-item, add-post.

Service — talks to the outside world

  • The component shows; the service fetches (mostly: talks to our PHP backend).
  • Kept separate to stay clean: the list component shouldn't also worry about how to fetch over the internet.
  • The component asks the service "get me the posts" and shows what comes back.

How they work together

post-list asks the post service → the service calls posts.php → gets JSON → hands it to the component → the component displays it. Components show, services fetch.

Direct the AI: "Create an Angular component post-list that shows posts in a table, and a service that fetches them from my posts.php endpoint." You understand every piece of that sentence now.

8.51:2030 min

First Steps: The Admin Panel Login Screen

A strong start: the login screen

We won't finish the whole panel today. We build the front door — the login — which ties together everything from today: an Angular component, a service, and the JWT from the backend.

What the login screen needs

  1. A component with email + password fields and a button.
  2. On click, it asks a service (not the backend directly).
  3. The service sends the credentials to the PHP login endpoint.
  4. Correct → backend returns the JWT; the app stores it and shows the admin area.
  5. Wrong → show a friendly error and let them retry.

Direct the AI — with the whole flow baked in

Create an Angular login component with email and password fields and a login button.
On submit, call a service that sends them to my PHP login endpoint.
If it succeeds, store the JWT token it returns and show the admin area.
If it fails, show an error message.

Run it — also a prompt

Start the blog-admin app and open the login screen so I can test it.

When it breaks (it will — that's normal): look, then prompt

  • Open DevTools → Network, click login, watch the request go out and the answer come back.
  • Copy what you see and hand it to Kiro:
My Angular login calls the PHP endpoint but I get this error
in the Network tab — [paste it] — please find the cause and fix it.

Usually it's the two apps being on different addresses (CORS), and Kiro fixes it in the backend. Look, then prompt — that's the whole loop.

Today's result: a real Angular login screen talking to your real PHP backend and receiving a real JWT. Next session we walk through the door — list, add, delete, search.

8.61:5010 min

Recap & Homework

What you did today

  • JWT: a signed pass the backend gives you at login; your app shows it on every request so the site remembers you. Signed, not secret — nothing private inside.
  • Installed Angular: a real app running with live reload.
  • The two words: a component is a brick of the interface; a service talks to the backend.
  • Built the front door: an Angular login screen calling your PHP backend and receiving a JWT.

A real full-stack login, through a framework, built by directing the AI while understanding every piece.

Homework (due before Session 9)

  1. Tidy the login — apply your design tokens so it looks like your brand, not a raw form.
  2. Login end to end: correct password logs in and stores the token; wrong password shows an error.
  3. Explain it simply: write, in your own words, what a JWT is and why we never put a password inside it.

Next session: the inside of the panel — list posts from the database, add, delete, and search. The front door is done; next we furnish the rooms.

ScoalaDeWeb · Training
9

Training 9 — Documentation First: Plan an Online Shop with AI Before Building It

Cluster 6 — Kiro & AI Workflow

Until now we jumped straight into building. Today we learn the habit that separates hobby projects from real ones: before writing a single line of code, we get AI to write the full documentation of the project, we read it and fix it together, and only then do we let AI build. Our worked example is an online shop where orders are emailed to the owner — no online payment for now. By the end you will send one real prompt to Kiro and watch it start planning.

8 content blocks · 120 min
9.10:0015 min

Why We Plan Before We Build

How we've worked until now

Idea → jump straight in → ask the AI to build it. Fine for small things. Today we learn the habit that makes real projects calmer: plan it in writing first.

The habit: plan before you build

  • Before building anything real, write down what it is, what it should do, what it must remember, the screens, and the build order.
  • We don't write it by hand — the AI writes it, one piece at a time, while we read and correct.

Why it works

  • "Build me an online shop" → the AI guesses a thousand things (products? cart? payments?) and you find out it guessed wrong after it built the wrong thing.
  • Write clear docs first, then "build this, following the documentation" → almost nothing left to guess → you get what you actually meant.

No building today — we plan. We'll document one real idea (an online shop) with the AI, step by step, and at the end you'll send a real prompt to Kiro to start it off.

9.20:1515 min

A Little Theory: How Professionals Actually Start

This isn't a trick — it has a name

Documentation-driven development (working from a spec): write down what you'll build before you build it. That written thing becomes the source of truth everyone follows. It's how serious software has been made for decades.

The blueprint analogy

  • Nobody pours a house's foundation then wonders how many rooms it has — there's a blueprint first.
  • Changing a line on paper is free. Moving a wall after it's built costs a fortune.
  • Software is the same: fixing a doc takes seconds; fixing it after the AI built 100 files around it takes an afternoon.

Why it matters more with AI

  • AI is astonishingly fast — but speed in the wrong direction just reaches the wrong place faster.
  • The plan points that speed the right way. "Weeks of coding can save you hours of planning" — a joke, and a warning.

Documentation does three jobs

  • Tells the AI what to build.
  • Lets you check that what got built is what you asked for.
  • Is the project's memory — code says what the program does; docs say what it was supposed to do, and why.

That's the theory. Now we put it to work on a real shop.

9.30:3015 min

Our Example: An Online Shop That Emails the Orders

The project: a normal online shop

People browse products, add to a cart, and place an order. Nothing exotic.

The deliberate twist: no online payment (for now)

  • No card forms, no payment provider — too much complexity for today.
  • When a customer orders: the order is saved and emailed — to the owner (a sale came in) and to the customer (a confirmation).
  • Paying happens offline afterwards (transfer, cash…). The journey ends at "order placed", not "paid".

Why this example

Small enough to fully understand, but it has every real ingredient: products, categories, cart, checkout, stored orders, emails, and an admin area. Plan this and you can plan almost any small business app — booking, catalogue, inventory. Same shape.

We won't master these pieces today — we'll describe them clearly so the AI knows exactly what to build. Describing what you want, precisely, is the real skill.

9.40:4515 min

How We Do It: One Piece at a Time, and Ask Everything

The rhythm: one piece at a time

Don't ask for "all the documentation" at once — you'll never read the wall of text. Write one piece, read it, fix it, then move on.

Three simple rules

  1. No code yet — "we're planning, not building; don't write code until I say so."
  2. One piece at a time — the AI writes a part, shows it, waits for "good" or "change this". The pause is where you do the real work.
  3. Let it ask — a lot — encourage questions; a good planning session is a conversation, not a delivery.

Why questions matter most

  • The AI should ask: what products, what currency, what language, where the order emails go, how delivery works.
  • Every question answered = a hole in the plan filled before it becomes a bug in the code.
  • We'll tell it outright: don't hold back, ask anything, even small questions — the more you ask, the better the docs.

Slower at the start — but every decision made on purpose, out loud, by you, instead of guessed silently by a machine.

9.51:0020 min

What the Plan Will Cover — Seven Simple Pieces

Seven pieces, in order — each builds on the last

  1. Short description — what the shop is, who it's for, and the key line: orders by email, no online payment for now.
  2. What it should do — for the visitor (browse, search, view a product, add to cart, order) and the owner (manage products, categories, see orders). Plus the basics (fast, safe, mobile, findable on Google) and what's left for later.
  3. What to remember — products, categories, and orders (customer details + what they bought).
  4. How an order works — from "add to cart" to the email in the inbox; what the emails say; the order's journey: new → confirmed → delivered / cancelled.
  5. How the pieces fit — what people see, the server part, where data lives, the email — and the key choices and why.
  6. The screens — home, product list, single product, cart, checkout, thank-you page, admin — and how you move between them.
  7. A simple build plan — the real order of building, in small steps you can finish and see working.

If any piece is vague, the shop is vague in exactly that spot. Generating them is quick — reading them and catching the fuzzy bits is the real job.

9.61:2025 min

Now You Do It: Send the Prompt to Kiro

The moment: send the prompt

You'll send a real prompt to Kiro that starts the planning conversation. Read it together first — never send a prompt you don't understand.

What the prompt does, piece by piece

  • States the intention: building an online shop, but plan in writing first, no code yet.
  • Explains the shop + the twist: orders saved and emailed, no online payment, ends at "order placed".
  • Sets the rhythm: step by step, wait for approval, and ask lots of questions.
  • Lists the seven pieces to write, in order.
  • Ends firm: documentation only, no code — start with piece one and your questions.

What you do now

  1. Open Kiro, paste the prompt, send it.
  2. Have the conversation — answer what products, currency, language, where emails go.
  3. Read each piece. Missing or wrong? Tell it to fix it. You're the owner and the boss of this chat.
  4. Keep going until all seven pieces are written and you're happy.
  5. Save them into a docs folder — now they're the single source of truth.

Then the short second prompt: "read everything in the docs folder and start building the first step only." The AI builds from your plan, not its guesses — and next you'll see where that road leads.

9.71:4510 min

The Reveal: What the Plan Becomes

Closing the loop: here's where it leads

Today doesn't end with just a plan and a promise. On screen now: a real, working online shop — browse products, fill a cart, checkout, and a real order email lands in the owner's inbox (plus a confirmation to the customer). Exactly the shop we described.

The point: it was built from the documentation

  • Not a clever guess or a lucky prompt — built from the same seven pieces you just planned.
  • Give the AI the plan, tell it to follow it → it builds this. Compare it to the docs: it matches, because the docs told it what to make.
  • No "that's not what I wanted, start over" — the surprises were argued out on paper, while they were cheap.

That shop is your near future. You have the plan in docs and started step one. Keep following the map — the thinking was the hard part, and you already did it.

9.81:555 min

Recap & Homework

What you did today

  • Learned the habit: plan in writing with the AI first, build second.
  • Met a real project — an online shop that emails its orders, no online payment yet.
  • Learned the seven pieces of the plan and the rhythm: no code, one piece at a time, questions flowing.
  • Sent the prompt to Kiro and had the planning conversation yourself.

You didn't write a shop today — you made the AI think it through with you, on purpose, before any code existed. That's how professionals work.

Homework (due before Session 10)

  1. Finish the plan — all seven pieces, saved in your docs folder.
  2. Prove you were the boss: write 3 questions Kiro asked that made you think, or 3 things it got wrong that you corrected.
  3. Start the build — send the final short prompt and get the first step done or clearly started.

The professional reflex: never build on a guess — build on a plan.

ScoalaDeWeb · Training
10

Training 10 — Documentation First, For Real: We Plan the Shop Together

Cluster 6 — Kiro & AI Workflow

Last time we learned the theory and sent the first prompt. Today we do the whole thing for real: we run the planning conversation with Kiro from start to finish, we answer every question it asks, we read and fix each of the seven pieces, and we save them into a docs folder that becomes the single source of truth. By the end you have complete, written documentation for your shop and you have sent the prompt that starts the build.

7 content blocks · 120 min
10.10:0010 min

Where We Left Off

What Session 9 gave us

The habit — plan in writing with the AI first, build second — the online-shop example (orders emailed, no online payment yet), and the first prompt sent to Kiro.

What today is

No new theory. We do the thing, start to finish: run the planning conversation, answer every question, read and fix each piece, and save it all.

By the end you have, in a docs folder, the complete plan of your shop — read and corrected by you — and you have sent the prompt that starts the build.

10.20:1015 min

The Prompt That Starts It All

Read it before you send it

You'll live inside this prompt for two hours. Never send a prompt you can't explain.

The starting prompt

Context: I'm building a real project, but first I want to plan it fully in
writing with you, before any code exists. The project is an online shop where
customers browse products, add to a cart and place an order. Key rule: orders
are saved and EMAILED to the owner (and a confirmation to the customer) — no
online payment for now. The journey ends at "order placed", not "paid".

Task: Help me write the full documentation, as a conversation, in SEVEN pieces,
in order:
1. Short description  2. What it should do  3. What to remember (the data)
4. How an order works, start to finish, and its states
5. How the pieces fit together, and the key choices and why
6. The screens, and how you move between them
7. A simple build plan, in small steps I can finish and see working

Constraints:
- Do NOT write any code yet — documentation only until I say otherwise.
- Work ONE piece at a time; write a piece, then stop and wait for my approval.
- Ask me LOTS of questions — don't hold back, even small ones.

Format: Clear Markdown, one piece per message.

Edge cases: If something is unclear or contradicts an earlier decision, stop and
ask instead of guessing. Start now with piece 1 and your questions.

Within a minute it should either write piece 1 or ask questions first — both are correct. If it starts writing code, stop it: documentation only, no code yet.

10.30:2525 min

Pieces 1–3: What It Is, What It Does, What It Remembers

Piece 1 — Short description

  • Answer its questions concretely — not "products" but "handmade candles", "second-hand books".
  • Check the key rule is there, hard and clear: orders emailed, no online payment, ends at "order placed".

Piece 2 — What it should do

  • Let the questions flow: search or browse only? can the owner edit products? show out-of-stock?
  • List both sides — what the visitor can do and what the owner can do in admin.
  • Write down what you're leaving for later (no payment, no accounts) — as valuable as what you are building.

Piece 3 — What to remember (the data)

  • Product: name, price, description, photo, category, in stock?
  • Order: who placed it, how to reach them, where to deliver, which products and how many.
  • Ask: "if a real order came in, is anything missing I'd wish I had stored?" Add it now — one sentence on paper vs. an afternoon later.
10.40:5025 min

Pieces 4–5: The Order Flow & How It Fits Together

Piece 4 — How an order works (the story)

  • Add to cart → checkout → name + address → confirm. Then: order saved + two emails (owner: a sale came in; customer: confirmation).
  • Decide what those emails actually say.
  • The order's states: new → confirmed → delivered / cancelled. Writing them now = the right admin buttons later.

Piece 5 — How the pieces fit together

  • Plain language: what people see, the part on the server, where data lives, the email. That's the whole machine.
  • If it says frontend / backend / database — fine, but make it explain each in one normal sentence.
  • Every choice gets a "why". You don't need to be an expert — you need the reasons written down for later.
10.51:1520 min

Pieces 6–7: The Screens & The Build Plan

Piece 6 — The screens

  • Customer: home, product list (by category), single product, cart, checkout, thank-you.
  • Owner: admin login, manage products, see orders.
  • Draw the arrows: list → product → cart → checkout → thank-you. Screens + arrows = the shop already exists in your head.

Piece 7 — The build plan

  • Small steps, sensible order: setup → data → show products → cart → checkout + emails → admin → polish.
  • Golden rule: every step ends with something you can look at and say "yes, that works". No giant "build the shop" step.

Make it official: tell the AI to save all seven pieces into a docs folder, one Markdown file each. From now on that folder is the single source of truth — you point the AI at it every time.

10.61:3515 min

Save the Docs, Then Start the Build

The second prompt (short on purpose)

Read everything in the docs folder, then build ONLY the first step of the
build plan. Follow the documentation exactly — don't invent anything that
isn't in it. Stop and show me before going further.

The build loop

  1. Read the docs → build one step → it stops and shows you.
  2. Check it against your build plan: is this step done and does it work?
  3. Yes → "good, next step". Off → fix the doc, not the chat, then try again.

The doc is always the referee. Come back next week lost? Open docs, see which steps are done, do the next one. The plan carries the memory so your head doesn't have to.

10.71:5010 min

Recap & Homework

What you did today

  • Ran the planning conversation end to end and answered Kiro's questions instead of letting it guess.
  • Read and corrected all seven pieces, then saved them into docs — the single source of truth.
  • Sent the short prompt and watched the AI build step one from your plan, not a guess.

Last week it was a promise. This week you felt it: the shop came out looking like the plan — no "start over". That calm is the reflex doing its job.

Homework (due before Session 11)

  1. All seven pieces saved in docs — and you can explain each one.
  2. Walk the build plan: do the next 2–3 steps, one at a time, checking each against the docs.
  3. Write a short note: one place the docs saved you from building the wrong thing, and one question Kiro asked that made you decide something new.

Never build on a guess — build on a plan. It's yours now.

ScoalaDeWeb · Training
11

Training 11 — Going Live: Put the Shop on a Real Server, Then Tidy It Into Components

Cluster 6 — Kiro & AI Workflow

So far your shop has only existed on your own computer. Today we put it on a real server so anyone in the world can open it. We tour cPanel, create the database, create a proper email address for the shop, and upload the files with FTP using FileZilla. Then we come back to the code and improve it: we split one big messy file into clean components, so the shop is far easier to understand and change. By the end your shop is online and tidier than when the day started.

7 content blocks · 120 min
11.10:0010 min

From Your Computer to the Whole World

Where the shop lives now

Only on your computer — you open it at localhost and nobody else can see it. Great for building, but a shop nobody can reach isn't a shop yet.

The big picture, no jargon

  • You built furniture in your garage. To open the shop you need a building + a street address + movers.
  • Building + address = the server and domain you rent from a hosting company.
  • Movers = FTP, and the van we drive is a free program called FileZilla.

Today's plan: tour the control room (cPanel), make the database + a professional email, carry the files over with FileZilla, point the shop at its new database, and open the doors.

11.20:1015 min

The Control Room: A Tour of cPanel

What cPanel is

The control room for your hosting — one web page of icons where you manage your site. Log in with the username/password from your host.

The only three neighbourhoods we need today

  • Files — your website's files live here, in a special folder. FileZilla drops them here.
  • Databases — where we create the database and its user.
  • Email — where we make the shop's email address.

Write down the important names — especially the web folder, usually public_html. Files must land exactly there. 9 of 10 "it's not working" problems today = files in the wrong folder.

11.30:2520 min

Create the Database (and Its User)

Why a real database

The shop must keep its records — products, orders — on the server, not your laptop, so real customers' orders are stored safely.

MySQL Databases — three steps, in order

  1. Create the database — name it simply (e.g. shop); the host adds a prefix → youraccount_shop. Write the full name down.
  2. Create a user — username + strong password. Write both down exactly.
  3. Add the user to the database, ALL privileges — the handshake everyone forgets. Without it, nothing works.

Then open phpMyAdmin, pick your database, click Import, upload your SQL file → the tables appear. Guard three names: database, user, password — the shop needs them to connect.

11.40:4515 min

Create a Professional Email for the Shop

Why a shop email, not Gmail

The shop sends order emails (owner notice + customer confirmation). They should come from orders@yourshop.ro — professional, trusted, and separate from your personal mail.

Email Accounts in cPanel

  1. Click Create.
  2. Choose the part before the @ (orders / hello / contact); the domain is already yours.
  3. Set a password. Done — a real mailbox in under a minute (read it via webmail).

Write the address down next to your database names — soon we'll tell the shop's config: send the order emails from this address. That's why we make it before the upload.

11.51:0025 min

Carry the Files Over: FTP with FileZilla

What FTP and FileZilla are

FTP = copying files between your computer and the server over the internet. FileZilla is the free tool we drive.

The two-sided window

  • Left = your computer (the garage). Right = the server (the new building).
  • Moving a file = drag from left to right. That's the whole concept.

Connect — four things from your host

  • Host (e.g. ftp.yourshop.ro) · Username · Password · Port 21 → Quickconnect.

On the right, go into public_html before dropping anything, then drag your files across and wait for the queue to finish. Finally, edit the shop's config file with the live database name/user/password and the shop email, save — then open your domain in a browser. Live.

11.61:2525 min

Tidy the Code: Split It Into Components

The problem: one big messy file

Header, product list, cart, footer all jumbled in one enormous file. It works — but changing one thing means scrolling hundreds of lines holding your breath.

The fix: components (think LEGO)

  • A component = a self-contained piece that does one job and can be reused.
  • Header block, product-card block, cart block, footer block — small, independent, reusable.
  • Header on every page? Make it once; fix it in that one place → fixed everywhere. Change in one place, not twenty.

We don't do it by hand or blind — we ask Kiro and lean on our docs (they already list the screens). Split one big page into header / footer / product card / cart — one component at a time, checking the shop looks identical after each. Same shop to the customer; tidy LEGO blocks underneath.

11.71:5010 min

Recap & Homework

What you did today

  • Took the shop from your computer to a real server the whole world can reach.
  • Toured cPanel (Files · Databases · Email), created the database + loaded it via phpMyAdmin, made a professional email.
  • Uploaded with FileZilla / FTP into public_html and pointed the config at the live database + email.
  • Improved it: asked Kiro to split one messy page into clean, reusable components.

Three weeks ago you were planning on paper. Today: a live shop on the internet with a tidy codebase behind it. That's the real shape of shipping software.

Homework (due before Session 12)

  1. Confirm the shop is reachable — open it on your phone and place a test order to check the emails arrive. (If broken: usually the config file or files outside public_html.)
  2. Finish the component split — one at a time, checking the shop looks identical after each.
  3. Write a short note: one thing that broke during the upload and how you fixed it.

The shop is live. Now keep it tidy and keep it running.

ScoalaDeWeb · Training
12

Training 12 — Looking Right Everywhere: Responsive, Design Systems & SCSS

Cluster 2 & 5 — Frontend Core & Design-to-Code

Today we zoom out from any single project and talk about how professional interfaces are actually held together: making a page work on every screen, keeping a design consistent with a system of tokens, and taming CSS at scale with SCSS. We jump between a shop, a dashboard, a landing page and a blog to see how the same ideas play out differently, we argue a few honest trade-offs, and you leave with a pocket of reusable Kiro prompts you can point at any project you touch.

7 content blocks · 120 min
12.10:0015 min

Why "It Works on My Screen" Is a Trap

Today is different

No single project today. We zoom out to three ideas under almost everything on the front end, and we hop between a shop, a dashboard, a landing page and a blog to see each idea in different clothes.

The trap: "it works on my screen"

You build on a laptop, it looks great, someone opens it on a phone and it falls apart. Nothing in the code "broke" — only the size of the glass changed. That gap is the number one reason a project looks amateur.

The mental shift: a page is water, not a poster

  • A poster is one fixed size. Water takes the shape of its container.
  • A good page pours into a phone and arranges for a phone; into a wide monitor and spreads out.
  • You don't design one picture — you design the rules by which it flows.

Three ideas today: responsive design (the water idea, made practical), design systems & tokens (consistency so it doesn't drift), and SCSS (keeping styling sane at scale). Plus take-home prompts for any project.

12.20:1520 min

Mobile-First: Start Small, Grow Up

Mobile-first = start small, grow up

Write styles for the phone first, then add complexity for bigger screens. Beginners do it backwards (build desktop, then cram onto a phone) — and cramming always hurts.

Why start small — three honest reasons

  1. Most users are on phones — the phone is the main event, not an afterthought.
  2. It forces honesty — a small screen fits the essentials; extras come later on bigger screens.
  3. It's easier work — adding space as you grow is pleasant; squashing to shrink is miserable.

Media queries, in plain words

A media query says "when the screen is at least this wide, apply these extra rules." That "at least" is what makes the design grow upward from the phone. Three honest break points cover most of the world: phones, ~768px (tablets), ~1024px (desktops).

Same water, four containers

  • Blog: one scrolling column on a phone → adds a sidebar on desktop.
  • Dashboard: a vertical stack of cards → a grid with a fixed sidebar.
  • Shop: 1–2 products per row → 4–5 per row.
  • Landing page: sections stacked → placed side by side.

Prompt — make any page responsive, mobile-first:
Rework this page to be mobile-first. Write the base styles for phones, then add min-width media queries at ~768px and ~1024px for larger screens. Use flexible units (rem, %, fr, clamp) instead of fixed pixels for layout. Do not change the content or behaviour. After the change, list exactly what you adjusted and why, so I can review it.
Why: forces the correct direction (small → big) and makes Kiro explain itself so you verify instead of trust.

12.30:3520 min

Design Systems & Tokens: Consistency on Purpose

How a design quietly rots

Eyeballed colours drift: eleven almost-blues, nine almost-greys, spacing that's 16px here and 17px there. Nothing looks broken — it just looks cheap, and nobody can say why.

The cure: a design system of tokens

  • A token is a named value you decide once and reuse everywhere (primary colour, spacing steps, font sizes, radius, shadows).
  • Everything points at one source → automatic consistency.
  • Client says "warmer brand colour"? Change one line, the whole product updates.

The kitchen analogy

Amateur cook: a pinch of this, a splash of that — different every time. Professional kitchen: exact measurements, every plate identical. Tokens are your measurements.

Where tokens meet responsive

Tokens can themselves respond to screen size — a heading token is smaller on a phone, larger on desktop, defined once. A dashboard, a shop and a marketing site sharing one token vocabulary feel like a family. That shared feel is what a brand is, under the hood.

Prompt — extract a token system:
Scan this project's styles and pull every colour, spacing value, font size, border radius and shadow into a single named set of design tokens. Replace the scattered hard-coded values with references to those tokens. Flag any near-duplicates (colours or spacings that are almost identical) and suggest a single token to replace each group. Show me the token list first, before changing files.
Why: turns "about right" into "the value, every time," and uses the AI for the tedious near-duplicate hunt humans miss.

12.40:5520 min

SCSS: Taming CSS Before It Owns You

Why plain CSS becomes a swamp

One giant stylesheet: endless scrolling, repeated code, and fear of changing anything in case it breaks something 3,000 lines away. SCSS sits on top of CSS and gives you structure; a build step turns it back into normal CSS.

The three SCSS ideas that matter

  • Nesting — write styles inside styles, mirroring the page so related rules live together.
  • Partials — split one giant file into small files that each do one job (tokens, buttons, layout) + a main file that ties them together.
  • Mixins — a reusable chunk of styling, defined once, dropped in anywhere (like a little function).

The honest framing

SCSS does nothing CSS can't eventually do — it just keeps it organised and readable as the project grows. One messy drawer vs a place for everything. A tiny landing page may not need it; a dashboard, a shop, or any team app over months does. Matching the tool to the size of the job is a senior instinct.

Prompt — reorganise CSS into SCSS partials (safe refactor):
Reorganise these styles into SCSS partials: a file for tokens/variables, one for base/reset, one for typography, one for layout, and one per major component. Create a main file that imports them with @use. Do NOT change how anything looks or behaves — this is a pure refactor. After it compiles, confirm the rendered result is identical.

Prompt — hunt repetition → mixins:
Find repeated groups of style rules in this project (e.g. the same centring, card, or button patterns used many times) and extract each into a reusable SCSS mixin or token. Replace the duplicates with the new mixin/token. List what you consolidated and where, and keep the visual result unchanged.
Why: refactoring (tidying the inside without changing the outside), checked step by step, is one of the best uses of AI.

12.51:1520 min

Two Honest Debates

Debate 1 — Grid vs Flexbox

  • Flexbox thinks in one direction (a row or a column) → navbars, button rows, items inside a card.
  • Grid thinks in two directions (rows and columns) → whole-page skeletons: header / sidebar / main / footer.
  • They're friends, not rivals: Grid for the page skeleton, Flexbox for the arrangements inside each region. You'll use both on the same page — that's correct.

Debate 2 — Pixel-perfect vs good-enough-and-fast

  • Public marketing page: the polish is the product → lean pixel-perfect.
  • Internal admin tool: five users getting work done → good-enough, shipped on time.
  • Startup testing an idea: ship fast and rough — polishing something nobody wants is software's most expensive mistake.

Why debates, not rules? Because this is the judgement AI can't make for you. Kiro will build pixel-perfect or fast on command — deciding which the situation calls for is a human call about context, audience and risk.

Prompt — you set the goal:
I want a QUICK, solid first draft of this layout — correct structure and spacing, not pixel-perfect. Use Grid for the overall page regions and Flexbox inside them. Keep it simple and tell me what you'd refine later if we decide to polish.
and the opposite:
Match this layout as closely as possible to the design: exact spacing, alignment and proportions using our design tokens. Point out any place where the design is ambiguous so I can decide, rather than guessing.

12.61:3515 min

How to Steer Kiro on Styling (and Catch Its Mistakes)

Four habits behind every good styling prompt

  1. Context before task — tell Kiro about your tokens, mobile-first rule, the style you're matching. No context → it invents its own conventions and you fix the mismatch.
  2. Ask it to explain changes — add "list what you changed and why." You catch bad decisions early and you learn.
  3. One change at a time, then look — tokens → check, responsive → check, component by component. Small steps are faster because you skip the debugging mysteries.
  4. You're the designer, Kiro is the hands — it's great at typing and tedious consistency; taste and judgement are yours.

Prompt — a reusable "styling guardrails" preamble you can paste before any styling request:
Context for all styling you do in this project: we are mobile-first, we use our design tokens for every colour/spacing/font-size, Grid for page regions and Flexbox inside them. When you change styles, make one logical change at a time, keep the visual result consistent unless I ask otherwise, and after each change list what you changed and why so I can review it.
Why: encodes all four habits once, so every later request inherits them.

Developers who thrive with AI bring strong opinions about the result and use the tool to get there fast. Those who struggle have no opinion and let the AI decide — then wonder why everything feels generic.

12.71:5010 min

Recap & Take-Home

What we picked up today

  • Responsive — a page is water; get there mobile-first (small screen first, grow up).
  • Design systems & tokens — decide colours/spacing/sizes once, name them, reuse them; consistent and easy to change.
  • SCSS — nesting, partials, mixins keep styling organised when the job is big enough to deserve it.
  • Two debates — Grid vs Flexbox, pixel-perfect vs fast: "it depends, and knowing which situation you're in is the skill."

Taught across a shop, dashboard, blog and landing page on purpose: the goal isn't "style the shop," it's style anything — and see the same handful of ideas in different clothes.

Homework (light — build the muscle)

  1. Take any page (yours or one you admire) and run two of today's prompts: the mobile-first one and the token-extraction one.
  2. Read what Kiro changed. Write three sentences: what it did, one thing you agreed with, one thing you'd have done differently.

Having an opinion about the AI's output is the whole game. Keep the prompt kit, use it everywhere. Next time (the 13th): making things get found and feel trustworthy.

ScoalaDeWeb · Training
13

Training 13 — Getting Found & Being Trusted: SEO, Accessibility, Polish & Speed

Cluster 8 & 11 — Testing/A11y & DevOps/SEO

A site that looks right still fails if nobody can find it, nobody can use it, and it feels slow or broken. Today we cover four things that decide whether a real project succeeds: how search engines find you (SEO), how everyone can actually use what you build (accessibility), the small UX touches that make software feel trustworthy, and the speed that keeps people from leaving. We draw parallels across a blog, a local business, a SaaS landing page and a shop, argue about whether SEO matters on day one, and you leave with prompts to audit any site you own.

7 content blocks · 120 min
13.10:0015 min

Looking Good Is Not Enough

Four ways a beautiful site still fails

  1. Nobody can find it → SEO. Page nine of search results doesn't exist to humans.
  2. Some people can't use it → accessibility. Unlabelled buttons, no contrast, mouse-only = people locked out (and often it's the law).
  3. It feels broken even when it works → UX polish. No feedback, no loading sign, no error message = untrustworthy.
  4. It's slow → performance. People leave in a couple of seconds, before they see your work at all.

Looking good is the start, not the finish. Today: getting found, being usable by everyone, feeling trustworthy, being fast — across a blog, a local business, a SaaS landing page and a shop.

13.20:1520 min

SEO: How Machines Read Your Site

SEO, demystified

A search engine is a machine trying to understand what your page is about and how trustworthy it is. All of SEO is making the page easy to understand and giving it reasons to trust you. No dark arts.

How the machine reads: structure first

  • It reads your HTML, not your design. Use semantic structure: one main heading, real section headings in order, a clear page title and description, image descriptions.
  • None of it is clever — it's just being clear, and clarity is 90% of SEO.

Content: be the best answer

Keyword-stuffing is dead. The machine matches a question to a page that answers it. Be the best answer to something someone actually types.

Same machine, four strategies

  • Blog: every article is a fishing line for a search topic.
  • Local business: local SEO — "bakery near me," maps, address, reviews.
  • SaaS landing page: rank for a few high-value problem terms.
  • Shop: every product page findable for the thing it sells.

First question is never "what tricks?" — it's "who is searching, for what, in what situation?"

Prompt — SEO audit of a page:
Act as an SEO reviewer. Look at this page's HTML structure and metadata (title, description, headings, image alt text, semantic tags). List concrete, specific fixes in priority order, each with a one-line reason. Don't suggest keyword stuffing — focus on clarity and structure. Point out anything a search engine would struggle to understand.

13.30:3520 min

Accessibility: The Same Work, Twice the Payoff

The two-for-one fact

A screen reader (for a blind user) and a search crawler are both machines reading your HTML without seeing the visuals. Make the page clear for one and you've mostly done it for the other. Accessibility and SEO are largely the same job.

Picture real people

  • Buttons that all say "click here" → a screen reader user hears nonsense.
  • No image descriptions → they just hear "image" and miss the content.
  • Fake headings (bold text, not real tags) → they can't jump around the page.
  • Mouse-only → a keyboard user hits a locked door.

The fixes are considerate, not clever

Label buttons/links so they make sense out of context · describe images · real headings in order · enough colour contrast · everything reachable and visible by keyboard.

Honest limit: tools catch missing labels, poor contrast and bad structure — but some issues only a human finds. Homework: put the mouse away and use a page with the keyboard only for five minutes. It teaches more than any tool.

Prompt — accessibility audit:
Review this page for accessibility. Check: are all buttons and links labelled meaningfully out of context? Do images have descriptive alt text? Are headings real and in logical order? Is colour contrast sufficient? Can everything be reached and operated by keyboard, with a visible focus state? List issues by severity with a concrete fix for each. Note which checks still need a human to verify manually.

13.40:5520 min

The Small Things That Make Software Feel Trustworthy

Works, but feels broken

Trust is everything — a user who doesn't trust your software stops using it, however clever it is underneath. Trust is won or lost in four moments.

The four states beginners forget

  1. Feedback — a click/submit must be acknowledged immediately, or people think it's broken and click again.
  2. Loading — show that something is coming (spinner, skeleton). People wait happily when they know they're waiting.
  3. Empty — the first impression is usually an empty screen. Say "nothing here yet, add the first thing" instead of a blank void.
  4. Error — a clear human message ("that email looks incomplete") beats a frozen screen or a scary technical dump.

Forgetting these four is the number one tell of a beginner. Stakes scale with consequence: a bad error on a blog is annoying; on a bank transfer it's terrifying. The more serious the action, the more care these states deserve.

Prompt — the four-states check:
Go through this feature and make sure it handles all four states gracefully: (1) feedback when the user acts, (2) a loading state while data is fetched, (3) an empty state for first-time/no-data, (4) a clear, human error state. Tell me which states are currently missing, then add them. Keep error messages plain-language, not technical.
Why: it's easy to build only the happy path; real life is full of the unhappy ones.

13.51:1520 min

Speed, and an Honest Debate About Priorities

Speed is a feature (and it hurts you twice)

People leave slow sites in seconds; search engines also rank them lower. A few things cause most slowness in beginner projects — you don't need to be an expert.

  • Images — the biggest culprit. A phone photo can be several MB; shrinking to a sensible size and modern format is the highest-impact fix.
  • Loading everything up front when you could load as the user scrolls (lazy loading).
  • Making users wait on things that could happen in the background.

When something feels slow, look at images first.

Debate — does SEO/polish matter on day one?

  • Yes camp: build it in from the start — retrofitting SEO/a11y/performance into a finished product is painful and never happens.
  • No camp: for an unproven idea, validate first — weeks of SEO on a product nobody wants is polishing a car with no engine.

An honest take (form your own): Startup testing an idea → ship rough, validate, polish later. Content business (blog/media) → SEO is the foundation, not a later add-on. Accessibility sits apart — an ethical baseline, cheap to do early, expensive to retrofit. The meta-skill is reading your situation.

Prompt — performance quick-win scan:
Scan this page for the most common performance problems a normal user would feel: oversized or unoptimised images, content loaded up front that could be lazy-loaded, and anything blocking the first render. List the top fixes in impact order, with the rough effort of each, so I can decide what's worth doing now.

13.61:3515 min

The One-Pass Site Review

The one-pass site review — four lenses, one pass

  1. Found — can a search engine understand the page? (structure, title, headings)
  2. Usable — can everyone operate it? (labels, contrast, keyboard)
  3. Trustworthy — are the unhappy paths handled? (loading, empty, error states)
  4. Fast — will people wait for it? (images, what loads up front)

Out the other end: a prioritised list, not a vague "something's off."

Why a routine, not vibes

Reviewing by feeling misses exactly what doesn't show at a glance — SEO gaps, accessibility locks, missing error states, slow images — because none are visible on your own fast laptop with a mouse. A checklist protects you from your own blind spots.

Prompt — capstone one-pass review:
Review this page through four lenses and return ONE prioritised list. (1) Found: SEO structure, title, headings, metadata. (2) Usable: accessibility — labels, contrast, keyboard, focus. (3) Trustworthy: are loading, empty and error states handled? (4) Fast: oversized images and anything blocking first render. For each finding give a severity, a one-line fix, and rough effort. Don't fix anything yet — just give me the list so I can set priorities.

The template for using AI well: the machine does the thorough scan, the human sets the priorities. Kiro hands you twenty findings; deciding which three matter for your project is your judgement.

13.71:5010 min

Recap & Take-Home

What we covered

  • Found (SEO) — clear, structured HTML; be the best answer to a real question.
  • Usable (accessibility) — mostly the same work as SEO; labels, contrast, keyboard.
  • Trustworthy (UX polish) — the four states: feedback, loading, empty, error.
  • Fast (performance) — images first.
  • Wrapped in an honest debate: it depends on what you're building and why.

These aren't rules to memorise — they're lenses to look through. Judgement about your specific situation is what makes you valuable.

Homework (two small things)

  1. Run the one-pass review prompt on a real page you did not build. Bring the three findings you think matter most, and why.
  2. Use any website for two minutes with keyboard only, no mouse. Notice how it feels — that's how some of your users live.

Next time (the 15th): the last hard question — does it actually work, and can you trust it?

ScoalaDeWeb · Training
14

Training 14 — Does It Work & Can You Trust It: Testing, Edge Cases & Security

Cluster 8 & 11 — Testing/QA & Security

Everything we've built means nothing if it falls over the moment a real person uses it the "wrong" way, or if a bad actor can break in. Today is about trust in the deepest sense: thinking like someone trying to break your software, handling the inputs you never expected, and closing the security holes that sink real projects. We draw parallels across a weekend side project, a paying client's app and a product with thousands of users, argue about how much testing is actually enough, and you leave with prompts that turn Kiro into a tester and a security reviewer — ones you still have to check.

7 content blocks · 120 min
14.10:0015 min

The Happy Path Is a Lie

The biggest beginner illusion: the happy path

The happy path is the one perfect route where everything goes right — the user types exactly what you expected and clicks in the order you imagined. You built it, tested it, it works. You are not done. You tested one road out of a thousand.

Real people drive on every other road

  • Submit a half-empty form · paste a phone number into the email field · type text where a number goes.
  • Double-click because they're impatient · lose their connection halfway.
  • Open the app with no data, too much data, or weird data.

Software that only handles the happy path falls apart on contact with reality.

Three things today, building on each other: the testing mindset (think like someone breaking it), edge cases & validation (handle weird input gracefully), and security (handle the malicious user, not just the careless one).

14.20:1520 min

Thinking Like Someone Trying to Break It

Become a slightly mean user

You build in love with your software, so you use it gently. Testing needs the opposite: become a chaotic, slightly malicious user whose goal is to make it fall over. Every break you find in private is one that won't happen in front of a customer.

Free test ideas for any feature

  • Every input: empty? far too long? wrong type? weird edge (zero, negative, past/future date)?
  • Every action: done twice fast? out of order? with no connection?
  • Every screen: with nothing, with one item, with a thousand items?

Manual vs automated

  • Manual — a human clicking through a checklist. Catches what feels wrong; irreplaceable for judging the experience.
  • Automated — code that tests your code, every time you change something. Superpower: catching the thing you broke in a far corner (a regression) that humans miss.

Match testing to the cost of being wrong: a weekend toy → a manual click-through is plenty. A paying client's app → manual on critical flows + automated on the catastrophic parts. A product with thousands of users → serious automated testing isn't optional.

Prompt — generate a test checklist:
Act as a QA tester trying to break this feature. Generate a test checklist covering: empty, too-long, and wrong-type inputs; edge values; actions done twice, out of order, and offline; and screens with no / one / many items. For each, note the expected correct behaviour. Be adversarial — assume the user is careless or impatient.

14.30:3520 min

Edge Cases & Validation: Never Trust Input

The principle: never trust input

Any data from outside your code — a user, another system, the internet — is guilty until proven innocent. Check it, clean it, then use it. Trusting input is the root of a huge share of bugs and security disasters.

Validation = check before you act

  • Required field empty? Say it's needed — don't crash or silently ignore.
  • Nonsense email format? Catch it before you try to use it.
  • Letters where a number goes? Reject it kindly.
  • Out-of-range value (quantity of −5, age of 800)? Guard against it.

Each check is tiny; the discipline is remembering to do all of them.

Validate in TWO places

Front end (browser) = instant friendly feedback, a politeness for honest users. Back end (server) = the real guard, because front-end checks can be bypassed. Doing only the first feels safe and isn't.

Prompt — find & fix missing validation:
Review this feature and list every input that isn't properly validated. Add graceful handling for empty, malformed, wrong-type and out-of-range values, with clear plain-language messages. Make sure validation exists on BOTH the front end (for feedback) and the back end (for real protection). Show me the list of gaps first, then the fixes.

14.40:5520 min

Security: Handling the Malicious User

Security = assume a hostile user

You don't need to be an expert — but you must know the handful of attacks that sink real projects. They're shockingly common and shockingly preventable.

The big three

  1. SQL injection — user input pasted into a database command lets an attacker read/delete your database. Fix: parameterised queries that keep data and command strictly separate. Standard, not advanced.
  2. Cross-site scripting (XSS) — malicious code sneaks in via an input and runs in other users' browsers. Fix: treat displayed user content as text, never code.
  3. Secrets — never store passwords as plain text (scramble them one-way); never put keys in code or a public repo; always use HTTPS.

The theme is identical to validation: don't trust input; keep data and code separate.

Stakes scale, but the baseline doesn't vanish. The moment you accept any user input or store any user data, these become mandatory — automated bots attack everything, regardless of your size.

Prompt — security first-pass review:
Act as a security reviewer. Check this code for: SQL injection (any user input placed into queries without parameterisation), XSS (user content displayed without escaping), plaintext passwords, secrets or API keys committed in code, and missing HTTPS assumptions. List each issue with severity and a concrete fix.
Limit: an AI scan is a smoke detector, not a fire department — a first pass, not real security review for anything that matters.

14.51:1520 min

How Much Is Enough? An Honest Debate

The debate: how much, and when?

  • Ship fast: perfect is the enemy of done; for a new idea the biggest risk is building something nobody wants. Excessive early testing can be hiding from that scary question.
  • Test first: a bug in front of a customer destroys trust; a breach can end a company; fixes get costlier the later you catch them.

The deciding lens: reversibility × cost

  • Wrong label, fixed in an hour → cheap & reversible → ship and iterate.
  • Double-charged card or leaked data → expensive & sometimes irreversible → test hard first.

You don't apply the same rigour to a comment box and a payment flow. Spend your limited testing effort where being wrong costs the most.

The AI connection: these tools make a slick happy-path demo faster than ever — which makes it more tempting to skip edge cases and security because it already looks finished. The trap. Trusted developers still ask the mean questions after the demo works. The AI answers them faster; it won't remind you to ask. The habit of distrust is yours to own.

14.61:3515 min

A Reusable "Can I Trust This?" Routine

The trust pass — four questions before "done"

  1. Unhappy paths tested? Empty, wrong, too much, out of order, offline — not just the happy one.
  2. Every input validated, in both places (browser for friendliness, server for protection)?
  3. Common security holes closed? No raw input in queries, no user content shown as code, no plaintext passwords or leaked secrets, HTTPS on.
  4. Right amount of testing given what a mistake here would cost? Not too little for a payment flow, not wasteful for a toy.

Why routines beat instincts

In the real world you'll be tired, rushed and pushed to ship — exactly when instincts fail. Professionals aren't people who never err; they have systems that catch errors first. A pilot with 1,000 flights still runs the pre-flight checklist. The trust pass is yours.

Prompt — run the trust pass:
Run a "trust pass" on this feature and report findings grouped under four headings: (1) unhappy paths — which weird inputs/sequences/offline cases aren't handled; (2) validation — gaps on front end and back end; (3) security — SQL injection, XSS, secrets, HTTPS; (4) proportion — given this feature's risk, where am I over- or under-testing. Give severity and a one-line fix for each. Don't change code yet — I'll set priorities.

The whole arc in one line: the machine runs the thorough check; the human carries the judgement and the responsibility. These tools make you faster and make your judgement more valuable, not less.

14.71:5010 min

Recap & Where You Go From Here

Today, in one breath

  • Killed the happy-path illusion; built the testing mindset (be mean to your own software).
  • Handled weird input with validation — never trust input, guard in two places.
  • Faced the malicious user: injection, XSS, secrets, HTTPS.
  • Debated how much is enough → the lens is reversibility × cost.
  • Turned it into a reusable trust pass.

The three-session arc, complete

  • S12 — looks right on every screen, stays consistent.
  • S13 — gets found, usable by everyone, fast.
  • S14 — actually works, and is safe.

The same spine throughout: Kiro makes you fast, your judgement makes you valuable, and you never ship what you don't understand.

Homework (the capstone)

  1. Take one feature of anything you've built. Run all three core prompts on it: the tester, the validation finder, the security review.
  2. Write an honest paragraph: what surprised you, and what you'll fix now vs later, and why.

Deciding what matters is the real lesson — more than any single piece of code. You have the tools and the lenses. Now go be the kind of developer people trust with the important stuff.