Unit 1 home
FSWD · MERN LAB 1 · EX.1 UI23PC511CS · LAB poshtik-campus/ BEGINS TODAY
LAB 1 · P 1/23PGDN NEXT LINE / POINT · PGUP BACK
LAB 1 OF 12 · EX.1 UNIT 1 · WEB BASICS, HTML & CSS 2-HOUR LAB SESSION

Today it becomes real

Your first static website — built, saved, and pushed to your own GitHub.

Four classes of practice pages end here. Today you create the folder every remaining lab of this course lives in — poshtik-campus/ — build its first three real pages with your own hands, and then do something no class has done yet: put that folder under version control and push it to a GitHub repository that belongs to you. When you walk out, your site exists in two places: your Desktop, and the internet.

R-23 SYLLABUS · FSWD LAB · PROGRAMMING EXERCISE 1 · WORD FOR WORD

“Creation of Static Web Site using HTML.”

Walk out of this lab able to…

Build a 3-page linked website from a blank folder, with no reference open
Own poshtik-campus/ — the project every later lab grows
Run git init, add, commit and explain each step in plain words
Push to a GitHub repo you created yourself, from a blank account
THE LAB, POINT BY POINT
01Warm-up — today's promise: a real site, really published to your GitHubIDEA
02Prelab program 1 — a heading and a paragraphWARM-UP
03Prelab program 2 — a list of three itemsWARM-UP
04Prelab program 3 — an image with honest alt textWARM-UP
05Prelab program 4 — one file linking to anotherWARM-UP
06Meet the project — Poshtik Campus, the client brief & the ten dishesIDEA
07Prelab Q1 (guided) — which tags will the home page need?GUIDED
08Prelab Q2 (guided) — the relative link from index to menuGUIDED
09Prelab Q3 (guided) — what belongs in <head> vs <body>?GUIDED
10Prelab Q4–Q5 — on your own, then the solution sheetTRY IT
11The folder ritual — create poshtik-campus/ on your DesktopRITUAL
12Mini problem statement — index.html (no code shown)TRY IT
13Solution sheet — index.html, line by line, with live previewSOLUTION
14Mini problem statement — menu.html + about.htmlTRY IT
15Solution sheet — both files + the nav at two screen widthsSOLUTION
16Git 1/6 — what version control actually is (zero jargon)GIT
17Git 2/6 — install Git, verify it, introduce yourself to itINSTALL
18Git 3/6 — init · status · add · commit, run on YOUR folderGIT
19Git 4/6 — GitHub account from zero, empty repo, first pushINSTALL
20Git 5/6 — Build-from-Spec: push your own site, verify onlineTRY IT
21Git 6/6 — solution sheet: the whole terminal story, end to endSOLUTION
22Your folder after today — the tree, now under Git and pushedIDEA
23Close — the git-push checkpoint that ends every lab from now onIDEA
Nothing to download today.

Lab 1's three pages are deliberately text-only — headings, paragraphs, lists and links, nothing else. The dish photographs stay behind in your fswd-practice\ sandbox experiments; the real poshtik-campus/menu.html gets its images in a later lab, after the site is safely under version control. One new thing at a time.

PRELAB PROGRAM 1 OF 4 · WARM-UP, NOT A TEST

A heading and a paragraph. Two minutes, from memory.

Before the real build, four tiny finger-warmers — each one rehearses a move today's site uses at full scale. No marks, no gate: the answer sits right below, because a warm-up you can't check isn't a warm-up. Write it first, then look.

The program: in a scratch file called warmup-1.html (in your fswd-practice\ sandbox — never the repo), write a complete page whose visible content is exactly one <h1> that says Healthy food, honest prices and one paragraph under it. Full skeleton — doctype to closing html — nothing skipped.

warmup-1.html · the answerBUILDS ONE LINE PER PRESS
1<!DOCTYPE html>
2<html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Warm-up 1</title>
6 </head>
7 <body>
8 <h1>Healthy food, honest prices</h1>
9 <p>A campus canteen that treats your health as the main course.</p>
10 </body>
11</html>
Warm-up 1
file:///C:/Users/student/Desktop/fswd-practice/warmup-1.html
Healthy food, honest prices

A campus canteen that treats your health as the main course.

Skeleton + two content lines. If your version differs only in the paragraph's wording, it's correct.
Why this exact drill?

Every one of today's three real pages starts with this identical skeleton and an <h1>. If your fingers typed it without thinking just now, the real build will feel like repetition — which is the point.

PRELAB PROGRAM 2 OF 4

An unordered list of three items.

Today's navigation — on all three pages — is a <ul> of three entries. So the second warm-up is exactly that shape, with plain text where links will later go.

The program: in warmup-2.html (full skeleton again — no shortcuts), the body holds one <h2> saying Today's specials and an unordered list of any three dishes from the Poshtik Campus menu.

Sample text to use — type these three exactly: Ragi Sangati Bowl · Jonna Rotte Wrap · Sprouted Moong Chaat
warmup-2.html · body only — your skeleton is already warmONE LINE PER PRESS
7 <body>
8 <h2>Today's specials</h2>
9 <ul>
10 <li>Ragi Idli Bowl</li>
11 <li>Pesarattu with Sprouts</li>
12 <li>Millet Protein Shake</li>
13 </ul>
14 </body>
Warm-up 2
file:///C:/Users/student/Desktop/fswd-practice/warmup-2.html
Today's specials
  • Ragi Idli Bowl
  • Pesarattu with Sprouts
  • Millet Protein Shake
Any three dishes count. What matters: ul wraps, each item is its own li, both close.
Why this exact drill?

In under an hour you'll wrap each of these <li> texts in an <a> and it becomes your site's navigation. List first, links inside it second — the exact layering the real build uses.

PRELAB PROGRAM 3 OF 4

One image, with alt text that earns its place.

Third warm-up: the <img> tag — one line, two attributes, no closing tag. The skill being rehearsed isn't the tag; it's writing an alt that describes the picture honestly.

The program: in warmup-3.html, show a photo called ragi-idli.jpg that sits in the same folder as the file, with alt text a blind classmate would thank you for. (No such photo on your disk? Perfect — you'll see exactly what a browser does when an image is missing, and why alt matters.)

warmup-3.html · body onlyONE LINE PER PRESS
7 <body>
8 <h2>Ragi Idli Bowl</h2>
9 <img src="ragi-idli.jpg" alt="Three ragi idlis in a steel bowl with chutney">
10 </body>
Warm-up 3
file:///C:/Users/student/Desktop/fswd-practice/warmup-3.html
Ragi Idli Bowl
Three ragi idlis in a steel bowl with chutney
The photo isn't on disk — so the browser shows the alt text in its place. That fallback is one of alt's three jobs (screen readers and image-search are the other two).
Why this exact drill?

A bare filename in src means "same folder as this file" — the smallest possible relative path. Hold onto that instinct: warm-up 4 and the whole site build run on it.

PRELAB PROGRAM 4 OF 4 · THE ONE TODAY IS BUILT ON

Two files. One link between them.

The final warm-up is today's whole build in miniature: two files in one folder, and an anchor that carries you from the first to the second. If this works on your machine, today's three-page site is just more of this.

The program: in one folder, create one.html and two.html. Page one shows a heading and a link reading Go to page two. Page two shows any heading, so you can tell you arrived. Save both, open one.html, click the link.

one.html · body — the file doing the linkingONE LINE PER PRESS
7 <body>
8 <h1>Page one</h1>
9 <p><a href="two.html">Go to page two</a></p>
10 </body>
·<!-- two.html body: just <h1>You made it.</h1> -->
Page one
file:///C:/Users/student/Desktop/fswd-practice/one.html
Page one

Go to page two

Click test — and this preview link REALLY works: cursor becomes a hand, click loads two.html, its Back link returns. That round trip is the entire mechanic of a multi-page site.
Page two
file:///C:/Users/student/Desktop/fswd-practice/two.html
You made it.
The address bar now says two.html — the round trip's far end. This page has no link of its own (check the code: just an <h1>) — so use the browser's ← Back button in the bar above. Click it and you've proven the whole mechanic.
If the click lands on "file not found" —

the two files are not in the same folder, or the filename in href is spelt differently from the file on disk (case counts: Two.htmltwo.html). Those are the only two ways this breaks — and both will chase you into the real build if you don't fix them here.

Part 6 · Meet the project

Every lab from today serves one client.

Not a toy example that changes every week — one continuous project that grows with your skills, lab after lab, until it is a full MERN application. Here is your client.

Poshtik Campus logo — a healthy food bowl motif

The running project

Poshtik Campus పౌష్టిక్ క్యాంపస్

A healthy-food canteen opening inside your campus. Their pitch: proper Telangana & Andhra staples — millets, sprouts, protein bowls — at student prices. They have dishes, they have a counter… and they have no website. You are their web team for the rest of this course.

The problem statement, in full

"We need a website where a student can, in under a minute: see who we are and what we stand for, browse the full menu of ten dishes, and find out how to reach us. It must work on the lab desktops and on a phone. We'll add online ordering someday — but first we just need to exist on the web."

Today's slice of that: a three-page static site — a home page (index.html), a menu page (menu.html) listing all ten dishes by name, and an about page (about.html) — every page reachable from every other. Text only; the order form arrives in Lab 2, styling in Lab 3, real ordering in Unit 4. A real client, sliced the way real teams slice.

The menu — ten dishes, locked

This exact list, in this exact order, is the site's content today — and every later lab keeps the same ten names in the same order, so the file you write now stays the file you extend. English names only — that's the client's own branding decision for the menu board.

Why "Poshtik"? — a fun aside.

Poshtik / పౌష్టిక్ means nutritious — the same word your grandmother uses about ragi and sprouts. The founders wanted a name every student's family would instantly approve of. It's also the only place Telugu appears in the project: dish names stay English on the board, but the brand proudly isn't.

PRELAB Q1 · GUIDED — WE REASON TOGETHER

Which tags will the home page need?

Before code, a planning question — answered the way a professional would: read the requirement, name the structures.

The requirement: "The home page shows the canteen's name as a big heading, one welcome sentence, and a navigation list that reaches the other two pages."

1
"name as a big heading"

The page's one main heading is <h1>. One per page — a habit that holds for life.

2
"one welcome sentence"

Running text is <p>. Not a heading — it doesn't title anything, it just speaks.

3
"a navigation list"

The word list gives you <ul> + <li>; the word reaches gives you <a href> inside each item. Warm-ups 2 and 4, combined — exactly as promised.

4
And around everything

The full skeleton: <!DOCTYPE html>, <html>, <head> (with <meta charset> and <title>), <body>. Requirements name the organs; the skeleton is assumed.

index.html — the four answers, assembledONE LINE PER PRESS · skeleton shown dim
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Poshtik Campus — Home</title>
6</head>
7<body>
8 <h1>Poshtik Campus</h1> <!-- answer 1 -->
9 <p>Healthy food, right on campus.</p> <!-- answer 2 -->
10 <ul> <!-- answer 3 -->
11 <li><a href="menu.html">Menu</a></li>
12 <li><a href="about.html">About</a></li>
13 </ul>
14</body>
15</html>
Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html
Poshtik Campus

Healthy food, right on campus.

  • Menu
  • About
Four nouns, four tags, one page. Notice the <head> contributed nothing you can see — the title shows up on the tab, not in the page. That is exactly its job.
The transferable move:

Underline the nouns in a requirement — heading, sentence, list, link — and each noun names its own tag. This reading-to-tags reflex is the whole skill of turning a spec into markup.

PRELAB Q2 · GUIDED

Write the link from index.html to menu.html.

Both files will sit side by side in poshtik-campus/. One anchor connects them — and warm-up 4 already justified every character of it.

index.html — the answer, in the real fileONE LINE PER PRESS · skeleton shown dim
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Poshtik Campus — Home</title>
6</head>
7<body>
8 <ul>
9 <!-- inside index.html's nav list -->
10 <li><a href="menu.html">Menu</a></li>
11 </ul>
12</body>
13</html>
Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html
  • Menu
Underlined, blue, hand cursor — and one click away from a file that sits centimetres from it on disk. The link is real — click it.
Poshtik Campus — Menu
file:///C:/Users/student/Desktop/poshtik-campus/menu.html
Our Menu

Ten dishes, every one of them poshtik.

  • Home
It landed — the bare filename found its sibling. Click Home to go back.
Why the bare filename?

Same folder means the shortest relative path. No C:\ (breaks on every other machine), no https:// (site isn't hosted), no folder prefix (there is no folder between them).

Why "Menu" as the text?

The out-of-context test: link text must make sense alone, read aloud with nothing around it. Menu passes. Click here never does.

PRELAB Q3 · GUIDED — THE LAST ONE TOGETHER

What goes in <head>, what goes in <body>?

You'll type this split three times today — once per page — so let's make the rule impossible to forget: head is about the page, body is on the page.

<head> — about the page

Information for the browser, invisible in the page itself: <meta charset="UTF-8"> (how to read the bytes) and <title> (the tab label — watch every preview tab on this page prove it). Later residents: CSS links, favicons.

<body> — on the page

Everything a visitor can see or click: headings, paragraphs, lists, links, images. If it has pixels, it lives in body. If a tag's content shows up in the white area of the browser, you put it here.

about.html — the split, on a whole real fileONE LINE PER PRESS
1<!DOCTYPE html> <!-- "this is HTML5" -->
2<html lang="en">
3<head> <!-- ABOUT the page -->
4 <meta charset="UTF-8"> <!-- how to read the bytes -->
5 <title>About — Poshtik Campus</title>
6</head>
7<body> <!-- ON the page -->
8 <h1>About Us</h1>
9 <p>Run by students, for students.</p>
10</body>
11</html>
About — Poshtik Campus
file:///C:/Users/student/Desktop/poshtik-campus/about.html
About Us

Run by students, for students.

Watch where each line landed. Lines 3–6 — the whole <head> — put nothing in the white area; the only thing they changed was the tab label above. Lines 7–9 are the only ones a visitor can see. That is the entire rule, proved by where the pixels went.
The classic Lab-1 mistake, named in advance.

An <h1> accidentally placed inside <head>. Browsers are forgiving and often render it anyway — which makes the mistake invisible until a stricter context (a validator, a framework, an exam) points it out. Careful habits now, so forgiveness never gets the chance to teach you wrong.

PRELAB Q4–Q5 · NOW COLD, ON YOUR OWN

Two questions, zero help. Then the sheet.

Guided is over. These two are answered on paper, alone, before the gate below opens — they are the exact reasoning the build will demand in twenty minutes.

Q4. The about page must link back to the home page. Write the complete anchor tag as it appears in about.html, and state the one word your link text should be.

Q5. A classmate's nav reads <a href="Menu.html">Menu</a> and works on their Windows laptop. Predict what happens after the site is uploaded to a Linux web server — and name the rule that saves you from this forever.

Both answers written? Only then.

SOLUTION SHEET · Q4–Q5
Q4 · the answerONE LINE PER PRESS
·<!-- in about.html -->
·<a href="index.html">Home</a>
About — Poshtik Campus
file:///C:/Users/student/Desktop/poshtik-campus/about.html

Home

Same-folder sibling takes the bare filename, in both directions. Link text: Home — one word, passes the out-of-context test. Click it — it really goes home.
Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html
Poshtik Campus

Healthy Telangana & Andhra staples at student prices.

  • About us
Back at the front door — the return link worked. Click About us to jump back.
Q5 · The prediction and the rule.

On the Linux server the link breaks — 404. Windows treats Menu.html and menu.html as the same file; Linux treats them as two different names, and only menu.html exists. The saving rule, from today and forever: all filenames lowercase, always — then href and file can never disagree by case.

Score yourself honestly
  1. Q4 exact tag with index.html + one-word text — full marks. Wrote home.html? The home page's real name is index.html — the special name servers open by default; re-read Part 7.
  2. Q5 predicted the 404 and named the lowercase rule — full marks. Predicted "works fine"? That answer costs real teams real money weekly. Burn this one in.
THE FOLDER RITUAL · EVERYONE, TOGETHER, NOW

Create poshtik-campus/ — the folder this course lives in.

Stop. This is a together-moment. Every file today, and every file for the next eleven labs, lives inside one folder — created right now, exactly like this, on every machine in the room.

1
Show your Desktop

Minimise everything (Win+D does it in one stroke). You should be looking at your wallpaper.

2
Right-click empty space, choose New, then Folder

A folder appears with its name highlighted, waiting.

3
Type the name — exactly

poshtik-campus — all lowercase, one hyphen, no spaces, no capitals. Press Enter. The same lowercase-no-spaces rule you follow for filenames applies to folders too, and Git will thank you for the no-spaces part within the hour.

4
Open it in VS Code

Right-click the folder and choose Open with Code (or in VS Code: File menu, Open Folder). The Explorer sidebar now shows POSHTIK-CAMPUS, empty. That empty sidebar is the "before" photo of your entire course.

WHERE YOU NOW LIVE
FULL PATHC:\Users\student\Desktop\poshtik-campus\
RULEEvery file today is saved inside this folder, at its top level — no subfolders yet. Three files will exist here by the break.
NOT THISNot inside fswd-practice\. The sandbox is for drills; this folder is the product. Two different lives.
Why the ceremony for one folder?

Because in ninety minutes this folder becomes a Git repository, and its exact name becomes part of a public URL: github.com/<you>/poshtik-campus. A space or a capital letter typed casually now would follow you through every lab. Names are cheap to get right once and expensive to fix forever after.

MINI PROBLEM STATEMENT 1 · BUILD, DON'T COPY

Build index.html from the requirements alone.

No code on this screen — that's deliberate. You have the requirements, a structure sketch in plain words, and everything the prelab just rehearsed. Fifteen minutes. The solution sheet comes after you've fought for it.

Problem. Poshtik Campus needs its front door: the page a visitor lands on first, carrying the brand and the way onward.

Requirements.

  • File named index.html, at the top level of poshtik-campus/.
  • Browser tab must read Poshtik Campus — Home.
  • One main heading with the canteen's name — exactly Poshtik Campus.
  • One welcome paragraph — type exactly: “Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.” (typing the same sentence means your browser preview must match the solution sheet's, character for character — that's your self-check).
  • A navigation list reaching menu.html and about.html — yes, files that don't exist yet; write the nav as if they do, because in ten minutes they will.

Sample structure, in words only: the skeleton first; the head holds charset + title; the body holds heading, then paragraph, then the two-item nav list. Every requirement maps to a warm-up or a prelab question — nothing here is new.

Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html

SAMPLE OUTPUT — YOUR FINISHED PAGE MUST RENDER EXACTLY THIS

Poshtik Campus

Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.

  • Menu
  • About us
Match this character for character — including the tab title above. The two links will 404 when clicked — try them here; that's correct until Part 14 keeps the promises.
menu.html
file:///C:/Users/student/Desktop/poshtik-campus/menu.html
Your file couldn't be accessed

It may have been moved, edited or deleted.

ERR_FILE_NOT_FOUND

← Back to index.html

Correct behaviour at this stage — the nav is a promise, and menu.html gets written in Part 14.
about.html
file:///C:/Users/student/Desktop/poshtik-campus/about.html
Your file couldn't be accessed

It may have been moved, edited or deleted.

ERR_FILE_NOT_FOUND

← Back to index.html

Same honest answer — about.html is also a Part 14 promise.
Save early, refresh often.

Ctrl+S after every element, F5 in the browser after every save. The nav's two links will show "file not found" when clicked — correct at this stage: the anchors are promises, and you keep them in Part 14.

SOLUTION SHEET · INDEX.HTML

The front door, line by line.

Compare against your own — differences in wording are fine, differences in structure are findings.

poshtik-campus/index.htmlBUILDS ONE LINE PER PRESS
1<!DOCTYPE html>
2<html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Poshtik Campus — Home</title>
6 </head>
7 <body>
8 <h1>Poshtik Campus</h1>
9 <p>Healthy Telangana &amp; Andhra staples at student prices —
10 millets, sprouts and protein bowls, made fresh on campus.</p>
11 <!-- site navigation: same list on every page -->
12 <ul>
13 <li><a href="menu.html">Menu</a></li>
14 <li><a href="about.html">About us</a></li>
15 </ul>
16 </body>
17</html>
Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html
Poshtik Campus

Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.

  • Menu
  • About us
Note the tab: Poshtik Campus — Home — requirement ② proven by the browser chrome itself, not by trust. The two nav links still 404 (click and check) — Part 14 keeps those promises.
menu.html
file:///C:/Users/student/Desktop/poshtik-campus/menu.html
Your file couldn't be accessed

It may have been moved, edited or deleted.

ERR_FILE_NOT_FOUND

← Back to index.html

index.html is done and correct — the 404 isn't a bug in it. The missing half of the promise is Part 14's job.
about.html
file:///C:/Users/student/Desktop/poshtik-campus/about.html
Your file couldn't be accessed

It may have been moved, edited or deleted.

ERR_FILE_NOT_FOUND

← Back to index.html

Same story for about.html — written next, in Part 14.
Mark your own — the three findings that matter
  1. Title in head, heading in body — both carrying the brand, doing different jobs (Q3's split, live).
  2. The comment above the nav — in ten minutes you'll paste this list into two more files; the comment is the flag that says "shared block, keep identical".
  3. &amp; for the ampersand — the entity habit, in the wild. A bare & usually renders, but "usually" isn't a standard.
MINI PROBLEM STATEMENT 2 · TWO FILES, ONE PATTERN

Keep the promises: menu.html and about.html.

Your home page's nav points at two ghosts. Twenty minutes to make them real — and to make the navigation two-way, so no visitor is ever stranded.

menu.html.

  • Tab reads Poshtik Campus — Menu.
  • Main heading Our Menu.
  • One short intro paragraph.
  • An unordered list of all ten dishes, exact names, exact order from Part 6 — English only, plain text (they become fragment-linked sections in a later lab).
  • The same nav list as index — but think before you paste: what should the Menu entry become on the menu page itself?

about.html.

  • Tab reads Poshtik Campus — About.
  • Main heading About us.
  • Two short paragraphs — type exactly: “We believe campus food can be honest food: millets, sprouts and real vegetables, cooked the way home cooks.” and “Find us beside the library block, open 8am–8pm.” — so your render matches the solution sheet's preview exactly.
  • The nav, adapted the same way.

Then the test that makes it a site: from index.html, click to Menu, to About, and back Home from each. Four clicks, zero error pages, zero Back-button rescues.

Poshtik Campus — Menu
file:///C:/Users/student/Desktop/poshtik-campus/menu.html

SAMPLE OUTPUT (menu.html) — ONE THING DELIBERATELY HIDDEN

Our Menu

Ten dishes, every one of them poshtik.

  • Jonna Rotte Wrap
  • Sajja Roti Wrap
  • Ragi Sangati Bowl
  • Ragi Idli Bowl
  • Pesarattu with Sprouts
  • Ulava Charu Protein Bowl
  • Gongura Sprouts Salad
  • Sprouts Moong Chilla
  • Paneer Protein Bowl
  • Millet Protein Shake
? ? ? — the nav list goes here. Its exact entries are the paste-trap question you answer in the box below.
Ten dishes, exact names, exact order. The censored strip is deliberate: what the nav's Menu entry becomes on the menu page itself is the thinking this MPS tests.

Only after your four-click test runs clean (or you know exactly where it breaks).

SOLUTION SHEET · MENU.HTML + ABOUT.HTML
poshtik-campus/menu.htmlONE LINE PER PRESS
1<!DOCTYPE html>
2<html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Poshtik Campus — Menu</title>
6 </head>
7 <body>
8 <h1>Our Menu</h1>
9 <p>Ten dishes, every one of them poshtik.</p>
10 <ul>
11 <li>Jonna Rotte Wrap</li>
12 <li>Sajja Roti Wrap</li>
13 <li>Ragi Sangati Bowl</li>
14 <li>Ragi Idli Bowl</li>
15 <li>Pesarattu with Sprouts</li>
16 <li>Ulava Charu Protein Bowl</li>
17 <li>Gongura Sprouts Salad</li>
18 <li>Sprouts Moong Chilla</li>
19 <li>Paneer Protein Bowl</li>
20 <li>Millet Protein Shake</li>
21 </ul>
22 <!-- site navigation -->
23 <ul>
24 <li><a href="index.html">Home</a></li>
25 <li><a href="about.html">About us</a></li>
26 </ul>
27 </body>
28</html>
Poshtik Campus — Menu
file:///C:/Users/student/Desktop/poshtik-campus/menu.html
Our Menu

Ten dishes, every one of them poshtik.

  • Jonna Rotte Wrap
  • Sajja Roti Wrap
  • Ragi Sangati Bowl
  • Ragi Idli Bowl
  • Pesarattu with Sprouts
  • Ulava Charu Protein Bowl
  • Gongura Sprouts Salad
  • Sprouts Moong Chilla
  • Paneer Protein Bowl
  • Millet Protein Shake
  • Home
  • About us
The paste-trap answer, visible: on the menu page, the nav has no Menu link — a page never links to itself; the entry it keeps is the way out. And both exits are now real — click them.
Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html
Poshtik Campus

Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.

  • Menu
  • About us
Part 12's page, unchanged — but its links stopped 404ing the moment menu.html landed beside it. The same nav that failed in Part 13 now works.
Poshtik Campus — About
file:///C:/Users/student/Desktop/poshtik-campus/about.html
About us

We believe campus food can be honest food: millets, sprouts and real vegetables, cooked the way home cooks.

Find us beside the library block, open 8am–8pm.

  • Home
  • Menu
The third page, one pane ahead of its own solution below — the site's triangle, complete and clickable.
poshtik-campus/about.html · bodyONE LINE PER PRESS
5 <title>Poshtik Campus — About</title>
7 <body>
8 <h1>About us</h1>
9 <p>We believe campus food can be honest food: millets,
10 sprouts and real vegetables, cooked the way home cooks.</p>
11 <p>Find us beside the library block, open 8am–8pm.</p>
12 <!-- site navigation -->
13 <ul>
14 <li><a href="index.html">Home</a></li>
15 <li><a href="menu.html">Menu</a></li>
16 </ul>
17 </body>
Poshtik Campus — About
file:///C:/Users/student/Desktop/poshtik-campus/about.html
About us

We believe campus food can be honest food: millets, sprouts and real vegetables, cooked the way home cooks.

Find us beside the library block, open 8am–8pm.

  • Home
  • Menu
Same skeleton, same nav discipline, own content. Three pages now behave as one site — and every nav link in this preview is real. Click your way around the whole triangle.
Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html
Poshtik Campus

Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.

  • Menu
  • About us
The front door — the same links that 404'd in Part 13 now both land. That change cost zero edits to this file: keeping a promise means writing the other file.
Poshtik Campus — Menu
file:///C:/Users/student/Desktop/poshtik-campus/menu.html
Our Menu

Ten dishes, every one of them poshtik.

  • Jonna Rotte Wrap
  • Sajja Roti Wrap
  • Ragi Sangati Bowl
  • Ragi Idli Bowl
  • Pesarattu with Sprouts
  • Ulava Charu Protein Bowl
  • Gongura Sprouts Salad
  • Sprouts Moong Chilla
  • Paneer Protein Bowl
  • Millet Protein Shake
  • Home
  • About us
All ten dishes, and both exits work. Home ⇄ Menu ⇄ About — no dead ends anywhere on the site.

Part 15 · One more look before Git

The client said "on a phone, too." Let's check.

Requirement one of the brief: works on lab desktops and phones. Your pages have no styling yet — and that's exactly why they already pass. Below, the same index.html at two widths.

DESKTOP · LAB MACHINE
Poshtik Campus

Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.

PHONE · 390px WIDE
Poshtik Campus

Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.

Why plain HTML is already responsive.

Text wraps, lists stack, nothing has a fixed width — the browser's default layout flows. Sites break on phones when styling later pins widths in pixels. Remember this day when we reach CSS: responsiveness isn't something you add, it's something you avoid breaking.

The full click-test, once more, out loud
  1. Open index.html, click Menu — all ten dishes present, in order?
  2. Click Home — back at the front door? Click About us — both paragraphs there?
  3. Click Menu from About — cross-link works without passing through Home?
  4. Every tab title correct on every page? Then say it: "the site works." Now let's make sure it can never be lost.

Run that click-test right here — on the REAL files.

This is not a picture of your site and not a simulation. Below, a browser is loading three genuine .html files — the same three you just wrote — and rendering them itself. Click Menu, come Home, cross to About us: the tabs above the frame switch the real file the frame is showing, exactly like typing its name in the address bar.

REAL FILES, REAL BROWSER · NOT A MOCK-UP — THE LINKS INSIDE THE PAGE WORK TOO
file:///C:/Users/student/Desktop/poshtik-campus/index.html
Why it looks plain — and why that is correct. No CSS exists yet, so you are seeing the browser's own default styling: Times New Roman, blue underlined links, black bullets. Lab 3 changes every pixel of this. What matters today is that the structure and the links are right — and they are, because this frame is running your actual files.

And for the record, here is the same thing drawn as a walkthrough — useful when your instructor is presenting and wants to point at one page at a time:

LIVE MULTI-PAGE PREVIEW · EVERY BLUE LINK REALLY WORKS — CLICK THEM
Poshtik Campus — Home
file:///C:/Users/student/Desktop/poshtik-campus/index.html
Poshtik Campus

Healthy Telangana & Andhra staples at student prices — millets, sprouts and protein bowls, made fresh on campus.

  • Menu
  • About us
Front door. Two links, two sibling files — click either.
Poshtik Campus — Menu
file:///C:/Users/student/Desktop/poshtik-campus/menu.html
Our Menu

Ten dishes, every one of them poshtik.

  • Jonna Rotte Wrap
  • Sajja Roti Wrap
  • Ragi Sangati Bowl
  • Ragi Idli Bowl
  • Pesarattu with Sprouts
  • Ulava Charu Protein Bowl
  • Gongura Sprouts Salad
  • Sprouts Moong Chilla
  • Paneer Protein Bowl
  • Millet Protein Shake
  • Home
  • About us
All ten dishes — the COMPLETE output, nothing trimmed. And no Menu link here: a page never links to itself.
Poshtik Campus — About
file:///C:/Users/student/Desktop/poshtik-campus/about.html
About us

We believe campus food can be honest food: millets, sprouts and real vegetables, cooked the way home cooks.

Find us beside the library block, open 8am–8pm.

  • Home
  • Menu
Cross-link test: jump straight to Menu from here — no stop at Home needed. Three pages, one site.
GIT & GITHUB ESSENTIALS · 1 OF 6 · ZERO JARGON

Save points. That's the whole idea.

Your site works. Now imagine tomorrow you edit menu.html, break it, and can't remember what it looked like when it worked. Every developer has lived this. Version control is the fix — and you already understand it from games.

In a game

You reach a checkpoint, the game saves. Try a risky jump, fall, and you don't restart the game — you go back to the save point. Saves are named, ordered, and always there.

In your project

You reach a working state, you commit — a save point for the whole folder, with a message saying what it contains. Break something later? Any commit can be revisited. Nothing committed is ever truly lost.

The disease it cures — you may already have it.

A folder that looks like index-final.html, index-final-v2.html, index-actually-final.html… Copies-as-versions: nobody knows which is current, what changed between them, or which one worked. Git keeps one file per name and remembers every version behind it, each with a message, a timestamp, and an author.

1
Git — the save system

A free program on your machine. It watches a folder you choose (a repository, "repo") and records commits when you say so. Works fully offline.

2
GitHub — the cloud shelf for repos

A website that stores a copy of your repository online. Laptop stops working, lab machine gets wiped clean — your history is safe, and shareable by URL. Git without GitHub: fine, but local. GitHub without Git: impossible — it shelves what Git records.

3
Push — the courier between them

A commit saves locally. Pushing uploads your new commits to GitHub. The rhythm of your whole developer life, starting today: work, commit, push.

GO DEEPER · YOU USE THINGS BUILT THIS WAY DAILY

The browser you're reading this in, the OS under it, WhatsApp, Instagram — all built by teams committing to shared repositories, most of them on GitHub itself. When recruiters say "show me your GitHub", they mean: show me your save points — the honest history of what you've built. Yours starts in about twenty minutes.

GIT & GITHUB ESSENTIALS · 2 OF 6 · INSTALL — EVERYONE, TOGETHER

Install Git, prove it's alive, introduce yourself.

Lab machines: Git is pre-installed — skip to the proof step. Your own laptop: follow every step, together, now. Hands up at any step that looks different on your screen; nobody proceeds past a hurdle alone.

1
Download

In the browser open git-scm.com/downloads, click Windows (or your OS), then 64-bit Git for Windows Setup. One official site, no mirrors, no "download manager" buttons.

2
Run the installer — and don't panic

It asks ~10 questions. The honest secret: press Next on every screen. The defaults are what professionals use. The only screen worth reading names the default branch — if it offers a choice, choose main.

3
Open a terminal in your project

In VS Code with poshtik-campus open: Terminal menu, New Terminal (Ctrl+`). A panel appears at the bottom, showing your folder's path and a waiting cursor. That panel is where the rest of this lab happens.

4
Prove it, then introduce yourself

Type the three commands below — the panel shows the exact output to expect. The name/email pair is stamped onto every commit you'll ever make; use your real name and the email you'll give GitHub in Part 19. --global means "remember on this machine" — once, ever.

MINI PROBLEM · TERMINAL — PROVE & CONFIGURE GIT
PROBLEM
Prove Git is installed on this machine, then tell it who you are — in the VS Code terminal opened inside poshtik-campus.
REQUIRE­MENTS
  • git --version — the proof-of-life check.
  • git config --global user.name "…" and git config --global user.email "…"your real name and the email you'll give GitHub.
  • git config --global user.name with no value — read the setting back to verify.
EXPECTED OUTPUT
A version number (any number passes), then silence from both config lines — no news is good news — then your name echoed back on the final line.
TERMINAL — poshtik-campusREAL OUTPUT · ONE LINE PER PRESS
1C:\Users\student\Desktop\poshtik-campus> git --version
2git version 2.46.0.windows.1
3 
4C:\Users\student\Desktop\poshtik-campus> git config --global user.name "Ananya Rao"
5C:\Users\student\Desktop\poshtik-campus> git config --global user.email "ananya.rao@example.com"
6 
7C:\Users\student\Desktop\poshtik-campus> git config --global user.name
8Ananya Rao
what each line means

A version number = Git is installed. Yours may differ (2.44, 2.47…) — any number is a pass. "git is not recognized" instead? Git isn't installed or the terminal is stale — close VS Code fully, reopen, retry; still failing? Hand up.

Silence = success. The config commands print nothing when they work — a terminal habit worth learning on day one: no news is good news. Use your name, not Ananya's.

Asking a config without a value reads it back. If your name echoes back, Git knows who you are. Every commit from now on is signed.

Three commands: prove, introduce, verify. This panel's matte-black style is exactly what terminals look like from here to the end of the course.
Why a terminal at all?

Git has point-and-click wrappers, but every tutorial, every Stack Overflow answer, every workplace speaks Git's command language. Learn the five commands once and every wrapper becomes obvious; learn only a wrapper and every terminal stays foreign. We do it the portable way.

GIT & GITHUB ESSENTIALS · 3 OF 6 · ON YOUR REAL FOLDER

init · status · add · commit. Your first save point.

Not a demo folder — your poshtik-campus/, the one holding the three files you just built. Four commands, each explained beside its real output. Type along.

MINI PROBLEM · TERMINAL — FIRST COMMIT
PROBLEM
Turn poshtik-campus/ — the folder holding your three real pages — into a Git repository, and record its first save point.
REQUIRE­MENTS
  • git init once, inside the project folder — never anywhere else.
  • git status before and after staging — watch the three files move from untracked to staged.
  • git add . to stage everything, then git commit -m "Lab 1: three-page static site".
EXPECTED OUTPUT
[main (root-commit) …] 3 files changed — your commit ID will differ from the panel's f3a9c21; every commit's ID is unique in the world.
TERMINAL — poshtik-campusREAL OUTPUT · ONE LINE PER PRESS
1C:\Users\student\Desktop\poshtik-campus> git init
2Initialized empty Git repository in C:/Users/student/Desktop/poshtik-campus/.git/
3 
4C:\Users\student\Desktop\poshtik-campus> git status
5On branch main
6No commits yet
7Untracked files:
8 (use "git add <file>..." to include in what will be committed)
9 about.html
10 index.html
11 menu.html
12nothing added to commit but untracked files present (use "git add" to track)
13 
14C:\Users\student\Desktop\poshtik-campus> git add .
15C:\Users\student\Desktop\poshtik-campus> git status
16On branch main
17Changes to be committed:
18 new file: about.html
19 new file: index.html
20 new file: menu.html
21 
22C:\Users\student\Desktop\poshtik-campus> git commit -m "Lab 1: three-page static site"
23[main (root-commit) f3a9c21] Lab 1: three-page static site
24 3 files changed, 62 insertions(+)
25 create mode 100644 about.html
26 create mode 100644 index.html
27 create mode 100644 menu.html
what each command did

git init — "watch this folder." Run once per project, ever. It creates a hidden .git/ folder where all history will live. Delete that hidden folder and the history is gone — so don't.

git status — "what do you see?" Git sees your three files but calls them untracked: visible, not yet part of any save point. Status is free and safe; run it whenever unsure — it's Git's answer to "where was I?"

git add . — "include everything here in the next save point." The dot means "this folder". Silent on success. Status now shows the same three files in green: staged, ready.

git commit -m "…" — the save point itself. The -m message is for future-you: say what this version is. f3a9c21 is the commit's short ID — yours will differ; every commit's ID is unique in the world.

Root-commit: the first save point of your course-long project. Everything from here is history — literally.
If commit scolds you about "Please tell me who you are" —

Part 17's two git config --global lines didn't run (or ran with a typo). Run them again exactly, then repeat the commit. This is the single most common first-commit hiccup in any classroom.

GIT & GITHUB ESSENTIALS · 4 OF 6 · FROM NO ACCOUNT TO PUSHED

GitHub, from absolute zero.

Assume nothing: no account, never seen the site. Fifteen minutes from now your repository exists at a public URL. Screens below are drawn to match what you'll see; small visual drift on GitHub's side never changes the flow.

Step A — create the account

1
Go to github.com/signup

Enter the same email you gave git config in Part 17 — matching emails is how GitHub credits your commits to your account.

2
Choose a password and a username

The username becomes part of every URL you'll ever share: github.com/<username>. Professional and readable beats clever — ananya-rao outlives xX_coderguy_Xx on a résumé. Lowercase, hyphens allowed.

3
Verify — puzzle, then email code

Solve the human-check puzzle, then GitHub emails a launch code — open your inbox, copy the digits, paste. You land on your dashboard. Free plan; skip or close any personalisation questions.

Step B — create the empty repository

github.com / new
poshtik-campus
Exactly the folder's name — same spelling, same hyphen. Green tick means the name is free.
Public

Anyone can view (not edit). Your work becomes showable — the point of a portfolio.

Private

Only you. Fine too — but today we go public, together.

☐ Add a README   ☐ Add .gitignore   ☐ Choose a license — leave ALL three unticked
Our repository already exists on disk with history. GitHub must start empty, or the two histories collide on first push.
Create repository
ILLUSTRATION DRAWN TO MATCH GITHUB'S NEW-REPO SCREEN — YOURS MAY DIFFER COSMETICALLY
The page that appears next is a cheat-sheet.

An empty repo shows "Quick setup" with copy-paste commands. Ours are below — same commands, explained. The long https://github.com/…/poshtik-campus.git address on that page is your repo's remote URL; you're about to hand it to Git.

Step C — connect and push

MINI PROBLEM · TERMINAL — CONNECT & PUSH
PROBLEM
Hand Git the address of your empty GitHub repository, then upload the commit — your code's first trip to the internet.
REQUIRE­MENTS
  • git remote add origin … with your URL from GitHub's Quick-setup page — not Ananya's.
  • git push -u origin main-u links local and remote so future pushes are just git push.
  • When the browser pops up once for sign-in: click Authorize. Windows remembers it after that.
EXPECTED OUTPUT
Counting/compressing chatter, then the success line: * [new branch] main -> main. Refresh your repo page — three files, your commit message at the top.
TERMINAL — poshtik-campusREAL OUTPUT · ONE LINE PER PRESS
1C:\Users\student\Desktop\poshtik-campus> git remote add origin https://github.com/ananya-rao/poshtik-campus.git
2C:\Users\student\Desktop\poshtik-campus> git push -u origin main
3info: please complete authentication in your browser...
4Enumerating objects: 5, done.
5Counting objects: 100% (5/5), done.
6Delta compression using up to 8 threads
7Compressing objects: 100% (4/4), done.
8Writing objects: 100% (5/5), 1.42 KiB | 1.42 MiB/s, done.
9Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
10To https://github.com/ananya-rao/poshtik-campus.git
11 * [new branch] main -> main
12branch 'main' set up to track 'origin/main'.
what each line means

remote add origin <URL> — "the cloud copy of this repo lives at this address, and I'll call it origin." Use your URL from the Quick-setup page, not Ananya's. Silent on success.

The browser pops up once — first push opens a GitHub sign-in window; click Authorize. Windows remembers it after that (Credential Manager) — you will not sign in per push.

The counting/compressing chatter — Git bundling your commit for the wire. You never need to read these lines closely; their presence means progress.

[new branch] main -> main — the success line. Your local main now exists on GitHub, and -u linked them: from now on plain git push suffices.

Refresh your repo page in the browser. Three files, your commit message at the top. Your code is on the internet.
GIT & GITHUB ESSENTIALS · 5 OF 6 · BUILD-FROM-SPEC — YOUR PUSH, YOUR PROOF

Now do the whole thing yourself — and verify online.

Parts 17–19 were done together, on the projector. This part is yours alone: the spec below, your terminal, no peeking back up the page until you've tried.

The spec.

  • Your poshtik-campus/ contains the three working pages.
  • Git knows your name and email.
  • The folder is a repository with at least one commit containing all three files.
  • A GitHub repository named poshtik-campus exists under your account.
  • Your local commits are pushed to it.
  • Proof: open github.com/<you>/poshtik-campus in the browser — all three files listed, your commit message beside them.

Already pushed while following along? Then prove the daily rhythm instead: open about.html, improve one sentence, save — then add and commit (fresh message: "Improve about wording") and push, and watch the change appear online on refresh.

After your repo page shows three files — or after fifteen honest minutes of trying.

GIT & GITHUB ESSENTIALS · 6 OF 6 · SOLUTION SHEET

The whole story, one terminal, start to finish.

Every command from empty folder to public repo — the reference card for the rest of the course. Config lines appear once in life; everything from status down repeats every lab.

TERMINAL — THE FULL SEQUENCEONE LINE PER PRESS
1# once per machine, ever
2> git config --global user.name "Your Name"
3> git config --global user.email "you@example.com"
4# once per project
5> git init
6> git remote add origin https://github.com/<you>/poshtik-campus.git
7# every working session — the rhythm
8> git status
9> git add .
10> git commit -m "What this save point contains"
11> git push -u origin main
12# (-u needed on the first push only; afterwards: git push)
github.com/<you>/poshtik-campus — the expected repo page
<you> / poshtik-campus  Public
about.htmlLab 1: three-page static site
index.htmlLab 1: three-page static site
menu.htmlLab 1: three-page static site
ILLUSTRATION OF THE EXPECTED REPO PAGE — CHECK EACH LABELLED ITEM ON YOUR SCREEN
Checklist:
  • Repo name beside your username.
  • "Public" badge.
  • Three files, alphabetical.
  • Your commit message beside each.
  • "1 commit" in the history bar (2+ if you did the rhythm re-run).
All five present = Lab 1's Git goal, complete.
The four stumbles and their one-line fixes
  1. "remote origin already exists" — you ran the remote line twice. Fix: git remote set-url origin <URL>.
  2. "failed to push some refs" — the GitHub repo wasn't created empty (a README got ticked). Fix today: delete the repo on GitHub (Settings page, bottom), recreate with all three boxes unticked, push again.
  3. "src refspec main does not match any" — you pushed before committing, so there's no save point to send. Fix: add then commit, then push.
  4. Repo page shows no files after "success" — you pushed a different folder. Check the terminal's path prefix; cd into poshtik-campus and re-run the rhythm.

Part 22 · The map of what you own

Your folder after today — three files, one repo, two homes.

Small on disk, big in meaning: this exact tree is the project every remaining lab of the course grows. It now lives on your Desktop and at github.com/<you>/poshtik-campus — and Git watches every change from here on.

DESKTOP\POSHTIK-CAMPUS\ — UNDER GIT, PUSHED
poshtik-campus\ the real project · born today
├─ index.html the front door · Part 13
├─ menu.html ten dishes · Part 15
├─ about.html the story · Part 15
└─ .git\ Git's ledger · hidden · never edit by hand
TODAY'S POINTWHAT IT LEFT BEHIND
2–5 · Prelab warm-upsscratch files in your sandbox — not part of the repo
11 · The folder ritualDesktop\poshtik-campus\ itself
12–13 · MPS 1 + solutionindex.html
14–15 · MPS 2 + solutionmenu.html + about.html
16–18 · Git 1–3Git installed · configured · .git\ ledger + first commit
19–21 · Git 4–6your GitHub account · the poshtik-campus repo · everything pushed
Two folders, two jobs — keep them apart.

Your fswd-practice\ sandbox (Classes 2–4) stays exactly where it is — it is your study record, never pushed, never graded. poshtik-campus\ is different: it is the product, it lives under Git, and every later lab opens by continuing this exact repo. Missed something today? Lab 2 restates the folder's expected starting state, so you can always catch up.

Part 23 · Wrap-up

Your site exists in two places. That changes every lab after this one.

Say each of these out loud — any hesitation marks your revision list. Every line below was done with your own hands today, not watched.

I built a complete 3-page linked website — index · menu · about — from a blank folder, with two-way navigation that click-tests clean.
I can explain what version control is in one plain sentence — save points I can always return to — and why index-final-v2.html was never a system.
I ran git init · status · add · commit on my own folder and can say what each step did.
I created a GitHub account and repository from zero and pushed — my code is on the internet at an address with my name in it.
I know the daily rhythm by heart — status · add · commit · push — and that -u was needed on the first push only.
I can name the four common push stumbles and their one-line fixes without opening the solution sheet.
The ritual that now ends every lab.

From Lab 2 to Lab 12, every session closes the same way: git status, git add ., git commit -m "…", git push — the git-push checkpoint. It's not ceremony: it means no lab's work can ever be lost to a broken laptop, and your GitHub profile quietly becomes a week-by-week record of the entire course — the exact thing recruiters open first.

Before the next lab — three 15-minute pieces of homework:

RUN THE RHYTHM ONCE ALONE

At home, open about.html, improve one sentence, save — then add, commit, push with a fresh message, and watch the change appear on your repo page on refresh. Doing it once with nobody beside you is what makes it yours.

READ A REAL REPO

On GitHub, search any project you've heard of. Find the same things your repo has: files, commit messages, a history count. The tools you used today are the tools the whole industry uses — at exactly this scale and at a million times it.

LOOK AT YOUR MENU WITH NEW EYES

Open your menu.html. Ten dishes as a list, and nothing a customer can fill in — no name, no phone, no quantity. Lab 2 opens this very file and adds the order form beneath the list. Come with an opinion on which questions the form must ask.

EXIT TICKET · ANSWER BEFORE YOU LEAVE

Two sentences: (1) In plain words, what did git commit do that Ctrl+S doesn't? (2) Your laptop suddenly stops working — exactly which of today's work is still safe, and at what address?