Portfolio-ready projects to demonstrate your skills
📄
Last updated Sep 2026
Expert Content
HTML — Portfolio Projects
Project 1: Accessible Personal Portfolio Page
Level: Beginner | Time: 1 day | GitHub:html-accessible-portfolio
What you build: a single-page personal portfolio (about, projects list, contact form) built with zero div-soup — every region uses a real semantic element, every image has meaningful alt text, and the whole page passes a Lighthouse accessibility audit at 100 with CSS/JS disabled.
Steps: semantic structure first with zero CSS, run a Lighthouse accessibility audit and fix every flag, then add CSS only after the unstyled page is already fully navigable by keyboard and screen reader alone.
Project 2: Data-Driven Product Table
Level: Intermediate | Time: 1-2 days | GitHub:html-product-table
What you build: a genuinely tabular product listing (name, price, stock) with correct thead/tbody/th scope structure, a responsive image using picture, and a details/summary filter panel requiring zero JavaScript for basic show/hide behavior.
Steps: build the table with real semantic markup and a caption, add the details-based filter, then verify a screen reader correctly announces column headers when navigating cell-by-cell (this is the actual test of whether scope was set correctly).
Project 3: Native Web Component Library
Level: Advanced | Time: 2-3 days | GitHub:html-web-components
What you build: three small, reusable custom elements (a , a that copies text to the clipboard, and an ) using customElements.define and Shadow DOM — usable in plain HTML with no build step or framework.
Steps: build each component with Shadow DOM style encapsulation, confirm the button inside each component is keyboard-accessible (real inside the shadow root, not a styled div), then demo all three dropped into a plain HTML page with no framework or bundler.
Portfolio Checklist
•[ ] Zero divs used where a semantic element already fits
•[ ] Every form input has a correctly connected label
•[ ] Every meaningful image has real, descriptive alt text; decorative images use alt=""
•[ ] Heading levels reflect actual document outline, never chosen for visual size
•[ ] Can explain: why
for layout is a real anti-pattern, and when ARIA is actually warranted vs. a native element