Today's Mission: Understand what the web actually is, write your first HTML, style it with CSS, get it live on the internet, AND start thinking critically about design choices.
Critical Concept: Design is not neutral. Every choice you make serves someone or something. Today we start asking: Who does my design serve?
When you type a URL:
No app required. No company in the middle. Just requests and responses.
But waitβif "anyone can make a page," why does the web feel so corporate?
The reality:
This course teaches you to:
Design is not neutral. The web you build reflects your values (whether you realize it or not).
Before we code anything, let's see why this matters.
What it does:
Why it matters:
View it, then "View Source" (right-click β View Page Source)
β See? It's just text files. HTML, CSS, JavaScript.
What it does:
Why it matters:
What it does:
Why it matters:
What it does:
Why it matters:
HTML = HyperText Markup Language
Translation: Text with links that describes meaning
It's not a programming language. It's a way of saying "this is a heading" or "this is a paragraph" so browsers know what to display.
Open your text editor. Create a file called index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My First Site</title>
</head>
<body>
<h1>Hello, I am on the internet</h1>
<p>This is my first website. I made it myself.</p>
</body>
</html>
Save it. Open it in a browser. You're officially a web developer.
<!DOCTYPE html>
β "Hey browser, this is HTML5"
<html lang="en">
β Everything goes inside here. lang="en" = English content (helps screen readers)
<head>
β Invisible stuff: metadata, page title, links to CSS
<meta charset="UTF-8">
β Use UTF-8 characters (emojis, international characters)
<meta name="viewport" content="width=device-width, initial-scale=1.0">
β Make it work on phones (don't skip this!)
<title>My First Site</title>
β Shows in browser tab
<body>
β Everything you SEE goes here
<h1>Hello, I am on the internet</h1>
β Main heading (h1 = biggest, h6 = smallest)
<p>This is my first website.</p>
β Paragraph text
<h1>Page Title - Only One Per Page</h1> <h2>Section Heading</h2> <h3>Sub-section</h3> <h4>Smaller heading</h4> <!-- h5 and h6 exist but rarely needed -->
Rule: h1 = most important. Use heading levels in order. Screen readers use these to navigate.
<p>This is a paragraph.</p>
<p>This is a paragraph with <strong>bold text</strong> and <em>italic text</em>.</p>
<p>You can <br> force a line break like this.</p>
<blockquote>
"This is a quote from someone smart."
</blockquote>
Note: <strong> = important, <em> = emphasis. They're not just "bold" and "italic" - they have meaning for screen readers.
<!-- Link to another site --> <a href="https://example.com">Click here to go somewhere</a> <!-- Link to another page on your site --> <a href="about.html">About Me</a> <!-- Link to a section on the same page --> <a href="#contact">Jump to Contact</a> <!-- Open in new tab (use sparingly) --> <a href="https://example.com" target="_blank" rel="noopener">External Link</a>
The href attribute = where the link goes
<!-- Image on your site --> <img src="images/cat.jpg" alt="A fluffy orange cat sleeping"> <!-- Image from elsewhere --> <img src="https://example.com/image.jpg" alt="Description of image">
Critical: ALWAYS write alt text. Screen readers need it. Search engines use it. It's not optional.
<!-- Unordered list (bullets) -->
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ul>
<!-- Ordered list (numbers) -->
<ol>
<li>First step</li>
<li>Second step</li>
<li>Third step</li>
</ol>
<!-- Generic container (no meaning, just for styling) -->
<div class="project">
<h2>Project Title</h2>
<p>Project description</p>
</div>
<!-- Semantic containers (have meaning!) -->
<header>
<h1>My Site</h1>
<nav>
<a href="index.html">Home</a>
<a href="about.html">About</a>
</nav>
</header>
<main>
<article>
<h2>Blog Post Title</h2>
<p>Content goes here...</p>
</article>
</main>
<footer>
<p>© 2025 Your Name</p>
</footer>
Semantic HTML = Using tags that describe what they contain
β Better for accessibility, SEO, and future you reading your code
CSS = Cascading Style Sheets
Translation: Instructions for how HTML should look
HTML = structure/meaning
CSS = appearance/layout
<p style="color: blue; font-size: 20px;">Blue text</p>
<head>
<style>
p {
color: blue;
font-size: 20px;
}
</style>
</head>
index.html:
<head>
<link rel="stylesheet" href="style.css">
</head>
style.css:
p {
color: blue;
font-size: 20px;
}
Why external? Change one CSS file β updates every page. Separation of concerns. Easier to read.
selector {
property: value;
another-property: value;
}
Example:
h1 {
color: darkblue;
font-size: 48px;
font-family: Arial, sans-serif;
}
β "Make all h1 elements dark blue, 48px size, Arial font"
/* Select by tag name */
p {
color: gray;
}
/* Select by class (can use multiple times) */
.project {
border: 1px solid black;
padding: 20px;
}
/* Select by ID (only use once per page) */
#header {
background-color: lightblue;
}
/* Select descendants */
nav a {
text-decoration: none;
color: black;
}
/* Select with multiple classes */
.project.featured {
background-color: yellow;
}
.element {
color: red; /* text color */
background-color: lightblue; /* background */
/* Different ways to specify colors: */
color: #ff0000; /* hex */
color: rgb(255, 0, 0); /* RGB */
color: rgba(255, 0, 0, 0.5); /* RGB with transparency */
color: hsl(0, 100%, 50%); /* HSL */
}
.text {
font-family: Arial, sans-serif; /* Font (with fallback) */
font-size: 18px; /* Size */
font-weight: bold; /* or normal, 100-900 */
font-style: italic; /* or normal */
line-height: 1.6; /* Space between lines */
letter-spacing: 0.5px; /* Space between letters */
text-align: center; /* left, right, center, justify */
text-decoration: underline; /* or none */
text-transform: uppercase; /* or lowercase, capitalize */
}
.element {
/* Padding = space INSIDE element */
padding: 20px; /* All sides */
padding: 10px 20px; /* Top/bottom left/right */
padding: 10px 20px 30px 40px; /* Top right bottom left */
/* Margin = space OUTSIDE element */
margin: 20px;
margin-top: 10px;
margin-bottom: 30px;
/* Width & Height */
width: 50%;
max-width: 800px;
height: 300px;
}
The Box Model:
ββββββββββββββββ MARGIN ββββββββββββββββ β ββββββββββββ BORDER ββββββββββββββ β β β ββββββββββ PADDING ββββββββββ β β β β β β β β β β β CONTENT β β β β β β β β β β β ββββββββββββββββββββββββββββββ β β β βββββββββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββββββββββββββ
.element {
border: 2px solid black; /* width style color */
border-radius: 10px; /* Rounded corners */
background-color: lightblue;
background-image: url('pattern.png');
background-size: cover; /* or contain */
background-position: center;
}
Create these two files:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Your Name - Portfolio</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<h1>Your Name</h1>
<p>Designer β’ Artist β’ Human</p>
</header>
<nav>
<a href="#about">About</a>
<a href="#work">Work</a>
<a href="#contact">Contact</a>
</nav>
<main>
<section id="about">
<h2>About Me</h2>
<p>I'm a third-year student learning to build for the web. This is my space to share projects and experiments.</p>
</section>
<section id="work">
<h2>My Work</h2>
<div class="project">
<h3>Project One</h3>
<p>Description of something you made.</p>
</div>
<div class="project">
<h3>Project Two</h3>
<p>Another thing you're proud of.</p>
</div>
</section>
<section id="contact">
<h2>Get In Touch</h2>
<p>Email: <a href="mailto:your@email.com">your@email.com</a></p>
</section>
</main>
<footer>
<p>© 2025 Your Name. Built by hand.</p>
</footer>
</body>
</html>
/* Reset some defaults */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
header {
text-align: center;
padding: 40px 0;
border-bottom: 2px solid #333;
margin-bottom: 30px;
}
header h1 {
font-size: 48px;
margin-bottom: 10px;
}
header p {
font-size: 18px;
color: #666;
}
nav {
text-align: center;
margin-bottom: 50px;
}
nav a {
text-decoration: none;
color: #333;
margin: 0 20px;
font-weight: bold;
}
nav a:hover {
color: #666;
}
section {
margin-bottom: 60px;
}
h2 {
font-size: 32px;
margin-bottom: 20px;
border-bottom: 1px solid #ddd;
padding-bottom: 10px;
}
.project {
background-color: #f5f5f5;
padding: 20px;
margin-bottom: 20px;
border-left: 4px solid #333;
}
.project h3 {
margin-bottom: 10px;
}
footer {
text-align: center;
padding-top: 30px;
border-top: 2px solid #333;
color: #666;
font-size: 14px;
}
a {
color: #0066cc;
}
a:hover {
text-decoration: underline;
}
username.neocities.orgYOU'RE LIVE. On the actual internet. You did that.
Now that you've built something, let's talk about what your choices mean.
Look at your site. You made choices:
None of these are "neutral" choices. They include or exclude people.
Dark Pattern = Design that tricks users into doing things they didn't intend
1. Forced Continuity
<!-- DARK PATTERN: Hidden subscription --> <button>Start Free Trial</button> <!-- (Fine print: auto-charges $99/month after 7 days) -->
2. Confirmshaming
<!-- DARK PATTERN: Guilt-trip buttons --> <button>Yes, I want to save money</button> <a href="#">No, I prefer paying full price</a>
3. Hidden Costs
4. Roach Motel
You will NOT use dark patterns. Ever. Here's why:
Every visual choice communicates something:
| Choice | What It Signals |
|---|---|
| Bright colors, rounded fonts | Friendly, casual, playful |
| Dark theme, sharp edges | Serious, technical, modern |
| Lots of white space | Minimal, expensive, exclusive |
| Dense text, many links | Information-rich, DIY, chaotic |
| Sans-serif fonts | Contemporary, clean |
| Serif fonts | Traditional, literary, formal |
Question to ask yourself:
Look at your site and verify:
Good design = accessible + honest + intentional
As we learn more techniques (typography, layout, JavaScript), keep asking:
Design is power. Use it consciously.
Next Up: Day 2: Visual Language & Cultural Specificity
Questions? Stuck? That's normal. Debugging is learning. Ask for help.