exercises and solutions

Capstone exercises

Capstone exercises combine earlier skills in a portfolio-sized change. They should be large enough to reveal design judgement but small enough to finish, review, and explain in an interview.

Capstone Brief

Build a small issue tracker.

- Authenticate users.
- Create, edit, list, and close issues.
- Validate request input and escape rendered output.
- Persist data through PDO prepared statements.
- Add focused tests for validation and repository behaviour.
- Document setup, checks, and one design decision.

Assess the result as a maintainable application, not a feature checklist. The learner should be able to explain boundaries, tradeoffs, security controls, tests, and one improvement they would make next.

Practice

Plan A Small Issue Tracker

Write a build plan for the issue-tracker capstone. Define the first vertical slice, persistence boundary, security controls, checks, and one design decision worth documenting.

Show solution

Start with authenticated issue creation and listing through one PDO repository. Validate request data, escape HTML output, protect state changes with CSRF tokens, and authorise edits. Add validation tests and repository integration checks.

Document one decision, such as keeping issue status as a backed enum or separating persistence from request handlers. Build later slices only after the first path is reviewable.

Review A Portfolio Release

Prepare the release checklist for the issue tracker after its first usable version. Include setup, migrations, test commands, rejected journeys, security controls, deployment, logs, backup, and rollback.

Show solution

Run setup from a clean checkout, apply migrations, execute automated checks, and manually exercise normal plus rejected journeys. Review validation, escaping, authentication, authorisation, CSRF protection, and secret handling.

Document deployment, log access, backup restoration, and rollback. A portfolio project is stronger when its ordinary engineering habits are visible and explainable.