AMDE 355 · Advanced Web Design · Week 14
Final Project Production & Deployment
Turn your approved plan into a working web experience. This week is about building, testing, refining, and preparing your project so another person can use it—not just look at it.
This week
Build with purpose, test as you go
Last week, critique helped you identify what to improve and establish a final project plan. This week, use that plan to make the most important design and functional decisions real. Work in short cycles: build a small part, preview it, test it, and revise it before moving on.
Learning outcomes
By the end of this lesson, you should be able to:
- Translate a project brief and critique notes into a practical production checklist.
- Build and refine a consistent interface using reusable styles and components.
- Test layouts at desktop, tablet, and mobile widths.
- Check links, images, forms or controls, and interactive behaviors.
- Use browser developer tools and a repeatable process to locate basic errors.
- Apply core accessibility checks, including keyboard use, visible focus, readable contrast, and meaningful image text alternatives.
- Prepare project files and content for a reliable presentation or deployment.
Production workflow
Build in manageable passes
- Pass 1 — Structure: make sure the main sections, page hierarchy, navigation, and content are in place.
- Pass 2 — Visual system: apply typography, color, spacing, image treatment, and reusable patterns consistently.
- Pass 3 — Responsive layout: adjust the design for smaller screens and prevent horizontal overflow.
- Pass 4 — Interaction: test buttons, menus, links, toggles, forms, and any JavaScript behavior.
- Pass 5 — Accessibility: check keyboard navigation, focus states, headings, labels, contrast, and image alternatives.
- Pass 6 — Quality assurance: check broken links, missing assets, spelling, console errors, and the final presentation.
Work from the critique
Use your three priority revisions
Return to the three revision goals you selected during Week 13. Keep them visible while you work. For each one, write a small action that can be completed and checked.
| Critique finding | Production task | How to check it |
|---|---|---|
| The main action was hard to find. | Strengthen its hierarchy with placement, size, label, or contrast. | Ask someone to identify the next step without coaching. |
| The navigation felt confusing. | Clarify labels and make the navigation pattern consistent. | Ask a reviewer to find a specific section. |
| The mobile layout felt crowded. | Adjust spacing, widths, and stacking behavior at a narrow viewport. | Preview at a mobile width and check for overlap or sideways scrolling. |
These are examples. Use the findings from your own critique rather than copying these tasks if they do not fit your project.
Responsive testing
Check more than one screen size
A responsive design is not simply a smaller desktop page. Content may need to stack, spacing may need to change, and navigation or controls must remain usable.
| Viewport | What to inspect |
|---|---|
| Desktop | Overall hierarchy, whitespace, grid alignment, image scale, and the main content path. |
| Tablet | Columns that become too narrow, crowded navigation, awkward line lengths, and image cropping. |
| Mobile | Readable text, comfortable tap targets, content order, overflow, and whether controls fit the screen. |
In your browser’s developer tools, enable device emulation or resize the browser window. Test the page at several widths, not only at one preset device size.
.project-layout {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2rem;
}
@media (max-width: 700px) {
.project-layout {
grid-template-columns: 1fr;
}
}
How to read this CSS
.project-layoutselects an HTML element with the classproject-layout.display: grid;turns that element into a grid layout.grid-template-columns: 2fr 1fr;creates two columns. The first gets twice the available space of the second.gap: 2rem;adds space between the columns.@media (max-width: 700px)applies the rules inside it when the viewport is 700 pixels wide or narrower.- Inside the media query,
grid-template-columns: 1fr;changes the layout to one column, so the content stacks.
JavaScript, one step at a time
Test one interaction from beginning to end
For JavaScript, do not start by trying to understand an entire script at once. Identify one interaction and trace what happens when a person uses it. Use the pattern find → listen → respond.
This example makes a button switch a message between hidden and visible. It is a simple example of a control that responds to user input.
<button id="toggle-message"
type="button">
Show project note
</button>
<p id="project-message" hidden>
Remember to test this page on a small screen.
</p>
const button = document.querySelector("#toggle-message");
const message = document.querySelector("#project-message");
button.addEventListener("click", function () {
message.hidden = !message.hidden;
});
Line-by-line explanation
const button = ...gives the button a name in the script. The namebuttonis a variable: a label that stores a reference to something.documentmeans the current web page.querySelector("#toggle-message")searches for an element whose ID istoggle-message. The#means “look for an ID.” The spelling must match the HTML exactly.- The next
constfinds the paragraph and stores its reference in the namemessage. addEventListener("click", ...)asks the browser to listen for a click on the button. An event is an action or occurrence, such as a click.function () { ... }holds the instructions to run when the click occurs. The braces mark the beginning and end of those instructions.message.hiddenchecks whether the message is currently hidden. The value is eithertrueorfalse.- The exclamation mark
!means “not” in this expression. It reverses the Boolean value:!truebecomesfalse, and!falsebecomestrue. message.hidden = !message.hidden;assigns the opposite of the current value. If the message is hidden, the click makes it visible. If it is visible, the click hides it again.- The semicolon ends the statement. The quotation marks around
"click"indicate a text string, whiletrueandfalseare Boolean values and do not need quotation marks.
Accessibility reminder: use a real <button> for an action. A real button can be operated with a keyboard and provides built-in behavior that a plain <div> does not.
Quality assurance
Run a final project check
Do not rely on memory. Use a checklist and test the project as if you were a first-time visitor.
- All required pages or sections are present and in a logical order.
- Navigation links and calls to action lead to the correct destinations.
- Images load correctly and have appropriate alternative text when needed.
- Text is readable, headings are organized, and color contrast is sufficient.
- Interactive controls work with a mouse and keyboard.
- Keyboard focus is visible and moves in a sensible order.
- Layouts work at desktop, tablet, and mobile widths without unintended horizontal scrolling.
- No obvious placeholder text, broken images, or unfinished content remains.
- The browser Console has been checked for errors.
- Project files are named clearly and the correct final version is saved.
Deployment and presentation
Make it ready for someone else to use
Deployment depends on the platform you are using. A project hosted through a service, published through a website builder, or presented locally may have different steps. Follow the process appropriate to your project, and make sure the final version can be accessed for critique.
- Save and organize: keep the final files together and use clear names for pages, stylesheets, scripts, and image assets.
- Check paths: verify that image, CSS, JavaScript, and page links point to the correct locations.
- Preview the final version: do a complete walkthrough after your last edits, not just before them.
- Publish or prepare access: confirm that your instructor and classmates can open the project or that you can demonstrate it reliably.
- Prepare a short walkthrough: explain the project goal, audience, key design decisions, one meaningful interaction, and one revision made in response to critique.
In-class studio
Production sprint and peer test
- Plan — 5 minutes: choose the most important task from your Week 13 revision list.
- Build — 25 minutes: implement that change, then work through the next most important task if time allows.
- Responsive check — 10 minutes: test desktop, tablet, and mobile layouts.
- Peer test — 10 minutes: ask a classmate to complete one task without explaining how the interface works.
- Fix — 10 minutes: address one issue observed during the peer test.
- QA and wrap-up — 10 minutes: run through the checklist and record what remains.
Submit before leaving class
- A working version of your final project or prototype.
- A completed checklist for responsive behavior and core functionality.
- One piece of feedback from a peer test and the change you made in response.
- A short list of remaining tasks, ordered by priority.
- A link or clear access method for the final critique.
Reflection
Before the final critique
- Which revision improved the user experience the most?
- What did you discover by testing at different screen sizes?
- What did a peer do or misunderstand that you did not expect?
- What is the biggest remaining risk, and how will you address it?
- What design decision are you prepared to explain during the final critique?
Instructor-only material · Remove before publishing to students
Instructor Layout Code — Step by Step
This section supports the production sprint. It includes a facilitation sequence, an annotated responsive CSS example, a beginner JavaScript walkthrough, and troubleshooting prompts. Remove this entire dashed amber section before publishing the lesson to students.
1. Open with the production priority
Ask students to show their Week 13 brief and name their top three revisions. Have them choose one change that most directly improves the primary user task. Remind them that completion is not the same as polish: a simple, coherent, working interface is stronger than an elaborate interface with broken navigation or unclear content.
2. Model a responsive CSS change
/* Default layout for wider screens */
.project-layout {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2rem;
}
/* Override the columns on narrow screens */
@media (max-width: 700px) {
.project-layout {
grid-template-columns: 1fr;
}
}
Walkthrough: the class selector targets an element with class="project-layout". The first rule creates a two-column grid for wider screens. The media query is a condition: when the viewport is 700 pixels wide or narrower, the second rule changes the grid to one column. The mobile rule overrides the column setting but keeps the rest of the layout properties unless they are changed elsewhere.
Ask students: What would happen if the class name in the HTML were project-grid instead? Why might the media query appear to do nothing? Reinforce that the CSS selector and HTML class must match.
3. JavaScript walkthrough — explain every part
Start by reading the HTML IDs aloud and matching them to the selectors in the script. Keep the example visible while explaining each line.
const button = document.querySelector("#toggle-message");
const message = document.querySelector("#project-message");
Explain: const creates a variable name that refers to a value. button and message are names chosen by the programmer. document refers to the page. querySelector searches for the first element matching a CSS selector. The # means ID selector, and the text inside the quotation marks must exactly match the HTML ID.
button.addEventListener("click", function () {
// The response goes inside these braces.
});
Explain: addEventListener attaches a listener to the button. "click" names the event. function () introduces instructions that run when the event occurs. The opening and closing braces define the block of instructions.
button.addEventListener("click", function () {
message.hidden = !message.hidden;
});
Explain the exclamation mark: message.hidden is either true or false. The ! operator means “not,” so it reverses that value. If the message is hidden, !message.hidden evaluates to false, making it visible. If it is visible, the expression evaluates to true, hiding it. This is a toggle: each click switches to the opposite state.
4. Common problems and instructor prompts
- Click does nothing: “Do the ID names match exactly? Is the script loaded after the button exists?”
- Console reports null: “What did
querySelectorfind? Does the selected element exist at the time this code runs?” - CSS does not change on mobile: “Is the viewport actually below the breakpoint? Is the class name correct? Is another CSS rule overriding this one?”
- Layout overflows: “Which element is wider than the viewport? Check fixed widths, long unbroken text, images, and grid columns.”
- Keyboard navigation is unclear: “Can you reach every interactive element with Tab? Can you see where focus is? Can you activate a button with the keyboard?”
Encourage a one-change-at-a-time workflow: reproduce the problem, inspect the error or element, change one thing, retest, and record the result. This helps students understand what solved the issue.
5. Suggested class pacing (approximately 75 minutes)
- 0–7 min: review project goals and the Week 13 revision priorities.
- 7–12 min: demonstrate the production passes and explain what “working” means.
- 12–42 min: individual production sprint with instructor check-ins.
- 42–52 min: responsive testing at desktop, tablet, and mobile widths.
- 52–62 min: peer test one primary task and note where the tester hesitates.
- 62–70 min: fix one issue and run the QA checklist.
- 70–75 min: collect project access details and remaining task lists.
6. Quick assessment check
Before students leave, verify that each student has a working version to test, has checked at least one core task, has reviewed the layout at multiple widths, and has recorded remaining issues by priority. If a project is not yet deployable, accept a reliable local or prototype demonstration for the studio check, but require a clear plan for how the final critique version will be accessed.