Week 15: Case Study & Course Review
Unit V - Bringing It All Together
Congratulations on reaching the final week!
What We'll Cover
- Complete course summary
- Full project walkthrough: Student Portal
- Web development best practices
- Resources for continued learning
Reflection
Think about where you started at Week 1 - you knew nothing about web development. Now you can build complete web applications with HTML, CSS, JavaScript, Node.js, MySQL, and Bootstrap. That is an incredible journey! Let's review everything and see how it all connects.
Press → or click Next to continue
Our Course Journey
Unit I: HTML Foundations
Weeks 1-3: HTML
- HTML document structure
- Tags, elements, attributes
- Forms, tables, semantic HTML
- Accessibility basics
Unit II: CSS Styling
Weeks 4-6: CSS
- Selectors and specificity
- Box model, colors, typography
- Flexbox and Grid layouts
- Animations and responsive design
Unit III: JavaScript
Weeks 7-9: JavaScript
- Variables, operators, functions
- DOM manipulation
- Events and event handling
- Async programming (Promises, fetch)
Units IV-V: Server & Full-Stack
Weeks 10-14: Backend
- Node.js and Express
- MySQL and CRUD operations
- Bootstrap for responsive UI
- REST APIs and full-stack integration
The Complete Technology Stack
| Layer | Technology | Purpose | Weeks |
|---|---|---|---|
| Structure | HTML5 | Page structure and content | 1-3 |
| Styling | CSS3 | Visual design, layouts, animations | 4-6 |
| Interactivity | JavaScript | Dynamic behavior, DOM manipulation | 7-9 |
| Server | Node.js + Express | Backend API, server logic | 10-11 |
| Database | MySQL | Data storage, CRUD operations | 12 |
| UI Framework | Bootstrap 5 | Responsive design, components | 13 |
| Integration | REST APIs + Fetch | Frontend-backend communication | 14 |
How They Connect
HTML provides structure. CSS makes it beautiful. JavaScript makes it interactive. Node.js handles server logic. MySQL stores data. Bootstrap ensures it looks good everywhere. REST APIs connect it all together!
Case Study: Student Portal
Let's walk through building a complete Student Management Portal.
Requirements
- View all students in a responsive table
- Add new students with a form
- Edit student information
- Delete students with confirmation
- Search and filter students
- Mobile-responsive design
Technologies Used
- Frontend: HTML, CSS, Bootstrap 5, JavaScript
- Backend: Node.js, Express
- Database: MySQL
- Communication: REST API + Fetch
Architecture
student-portal/
|-- backend/
| |-- server.js # Express + routes
| |-- config/
| | |-- database.js # MySQL pool
| |-- models/
| | |-- Student.js # Data model
| |-- routes/
| | |-- students.js # API routes
| |-- middleware/
| | |-- validate.js # Input validation
| |-- .env
| |-- package.json
|
|-- frontend/
| |-- index.html # Main page
| |-- css/
| | |-- style.css # Custom styles
| |-- js/
| |-- api.js # API service
| |-- app.js # UI logic
|
|-- setup.sql # Database schema
|-- README.md
Case Study: Database Design
Schema Design
CREATE DATABASE student_portal;
USE student_portal;
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
age INT CHECK(age BETWEEN 15 AND 100),
course VARCHAR(50) NOT NULL,
semester INT DEFAULT 1,
gpa DECIMAL(3,2),
status ENUM('active', 'inactive',
'graduated') DEFAULT 'active',
created_at TIMESTAMP
DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
CREATE INDEX idx_course
ON students(course);
CREATE INDEX idx_status
ON students(status);
Design Decisions
- AUTO_INCREMENT id: Reliable primary key
- UNIQUE email: Prevents duplicates
- CHECK constraint: Validates age range
- ENUM status: Limited valid options
- DEFAULT values: Sensible defaults
- Timestamps: Audit trail
- Indexes: Faster queries on common filters
Design Principles
- Choose appropriate data types
- Use constraints for data integrity
- Index columns used in WHERE/JOIN
- Plan for growth and changes
- Always include timestamps
Case Study: Backend API
API Endpoint Design
| Method | Endpoint | Description | Status Codes |
|---|---|---|---|
| GET | /api/students | List all (with search & pagination) | 200 |
| GET | /api/students/:id | Get single student | 200, 404 |
| POST | /api/students | Create new student | 201, 400 |
| PUT | /api/students/:id | Update student | 200, 400, 404 |
| DELETE | /api/students/:id | Delete student | 200, 404 |
| GET | /api/students/stats | Dashboard statistics | 200 |
API Best Practices Applied
- Consistent JSON response format:
{ success, data/error } - Proper HTTP status codes for each scenario
- Input validation before database operations
- Prepared statements for all SQL queries
- Error handling middleware for clean error responses
Case Study: Frontend Design
UI Components
- Navbar: Bootstrap dark navbar with brand
- Dashboard cards: Total, active, GPA stats
- Search bar: Real-time filtering
- Data table: Responsive, sortable
- Add form: With validation
- Edit modal: Bootstrap modal popup
- Delete confirmation: Alert before delete
- Toast notifications: Success/error messages
Bootstrap Classes Used
container, row, col-*
navbar, navbar-dark, bg-dark
card, card-body, card-header
table, table-striped, table-hover
form-control, form-select
btn, btn-primary, btn-danger
modal, modal-dialog
alert, alert-success
spinner-border
d-flex, justify-content-between
JavaScript Architecture
// api.js - API Service Layer
class StudentAPI {
constructor(baseUrl) {
this.baseUrl = baseUrl;
}
async getAll(search = '') { ... }
async getById(id) { ... }
async create(data) { ... }
async update(id, data) { ... }
async delete(id) { ... }
}
// app.js - UI Logic Layer
class StudentApp {
constructor() {
this.api = new StudentAPI(API_URL);
this.init();
}
init() {
this.bindEvents();
this.loadStudents();
}
bindEvents() {
// Form submit
// Search input
// Edit/Delete buttons
}
async loadStudents() {
this.showLoading();
const result = await this.api.getAll();
this.renderTable(result.data);
}
renderTable(students) { ... }
showAlert(message, type) { ... }
}
Separating API calls from UI logic makes the code easier to maintain and test.
Web Development Best Practices
HTML Best Practices
- Use semantic tags (
header,nav,main,footer) - Always include
alttext on images - Use proper heading hierarchy (h1-h6)
- Validate your HTML
CSS Best Practices
- Use external stylesheets
- Mobile-first responsive design
- Use CSS variables for themes
- Use Flexbox/Grid for layouts
- Avoid
!important
JavaScript Best Practices
- Use
constandlet, nevervar - Use async/await for async code
- Always handle errors (try/catch)
- Validate input on both sides
- Prevent XSS (escape HTML output)
Backend Best Practices
- Use environment variables for secrets
- Prepared statements (prevent SQL injection)
- Connection pooling for databases
- Proper error handling middleware
- Input validation on the server
- Use HTTPS in production
General Best Practices
- Use version control (Git)
- Write clean, readable code
- Comment complex logic
- Keep functions small and focused
- Test on multiple browsers/devices
- Follow the DRY principle
Security Checklist
- Never expose API keys in frontend
- Always use prepared statements
- Escape all user-generated content
- Use HTTPS everywhere
- Hash passwords (never store plain text)
Common Mistakes to Avoid
Frontend Mistakes
1. Missing viewport meta tag
<!-- Always include this! -->
<meta name="viewport"
content="width=device-width,
initial-scale=1.0">
2. Using inline styles everywhere
<!-- Bad -->
<p style="color:red; font-size:16px;">
<!-- Good -->
<p class="error-text">
3. Not handling API errors
// Bad - no error handling
const data = await fetch(url);
// Good - with error handling
try {
const response = await fetch(url);
if (!response.ok) throw new Error('Failed');
const data = await response.json();
} catch (error) {
showError(error.message);
}
Backend Mistakes
4. SQL Injection vulnerability
// Bad - string concatenation
const query = `SELECT * FROM users
WHERE name = '${name}'`;
// Good - prepared statement
const [rows] = await pool.execute(
'SELECT * FROM users WHERE name = ?',
[name]
);
5. Hardcoded credentials
// Bad
const password = 'my_secret_123';
// Good - use .env
const password = process.env.DB_PASSWORD;
6. Missing CORS configuration
// Results in: blocked by CORS policy
// Fix: add cors middleware
const cors = require('cors');
app.use(cors());
7. Not validating input
// Always validate before database operations
if (!name || !email) {
return res.status(400).json({
error: 'Name and email required'
});
}
What's Next? Your Learning Path
Frontend Path
React.js
Component-based UI library by Facebook. Most popular for single-page applications.
TypeScript
Type-safe JavaScript. Used in large-scale applications.
Tailwind CSS
Utility-first CSS framework. Fast, modern alternative to Bootstrap.
Next.js
Full-stack React framework with server-side rendering.
Backend Path
Authentication (JWT, OAuth)
User login systems, token-based auth.
MongoDB + Mongoose
NoSQL database. Flexible document storage.
Docker
Containerize your applications for consistent deployment.
Cloud Services (AWS/GCP)
Deploy and scale applications in the cloud.
CampusKart: Demo Day!
"You started with <h1>Hello World</h1> in Week 1. You're ending with a deployed, full-stack, responsive e-commerce application with payments. That's 15 weeks of growth."
Final Features
- Checkout flow with Stripe payment
- Order confirmation page
- Order history (with JOINs)
- Seller dashboard: "My Listings"
- Mark product as "Sold"
- README with setup instructions
Demo Day Awards
- Best Design — most polished UI
- Most Creative — unique features
- Best Technical — cleanest code
- People's Choice — overall favorite
5-minute live demo per team. Polish your GitHub repo — this is your portfolio piece.
Recommended Resources
Frontend Masters
Free Courses
- freeCodeCamp - Full web dev curriculum
- The Odin Project - Comprehensive path
- javascript.info - Deep JS tutorial
- Codecademy - Interactive courses
YouTube Channels
Documentation
- MDN Web Docs - Definitive reference
- Node.js Docs
- Express.js Guide
- Bootstrap Docs
Practice & Build
- GitHub - Portfolio + collaboration
- LeetCode - Coding challenges
- Frontend Mentor - UI challenges
- CodePen - Quick experiments
Video Resources
Web Development Roadmap 2025
Portfolio Tips
Build 3-5 projects showcasing different skills. Host them on GitHub Pages or Netlify. Create a portfolio website.
Interview Prep
Study JavaScript fundamentals, DOM manipulation, HTTP/REST concepts, and basic SQL for web dev interviews.
Keep Learning
Technology evolves fast. Follow tech blogs, join developer communities, and build projects regularly!
Exam Review - Key Topics
HTML Topics
- Document structure (DOCTYPE, head, body)
- Semantic tags and their purpose
- Forms: input types, validation
- Tables: structure, colspan, rowspan
- Links, images, lists
CSS Topics
- Selectors: element, class, ID, combinators
- Specificity and cascade
- Box model: margin, padding, border
- Positioning: static, relative, absolute, fixed
- Flexbox and Grid basics
- Media queries and responsive design
JavaScript Topics
- Variables (let, const), data types
- Functions (regular, arrow)
- DOM: querySelector, innerHTML, events
- Arrays and objects
- Fetch API and promises
Backend Topics
- Node.js and npm basics
- Express routes and middleware
- MySQL: CREATE, SELECT, INSERT, UPDATE, DELETE
- REST API design
- SQL injection prevention
- CORS
Course Summary & Thank You
What You've Accomplished
- Built web pages with HTML5
- Styled them beautifully with CSS3
- Made them interactive with JavaScript
- Created backends with Node.js + Express
- Stored data with MySQL
- Built responsive UIs with Bootstrap
- Connected frontend to backend via REST APIs
- Learned security best practices
Remember
The best way to learn web development is to build things. Start a personal project, contribute to open source, or recreate websites you admire. Every expert was once a beginner!
Final Advice
- Build a portfolio - Showcase your work
- Use Git/GitHub - Version control everything
- Read documentation - MDN is your best friend
- Practice daily - Even 30 minutes helps
- Join communities - Stack Overflow, Discord, Reddit
- Stay curious - Technology never stops evolving
- Never stop learning - The journey has just begun!
Thank You!
It has been a pleasure teaching this course. Wishing you all the best in your web development journey!