Ahmed Abdelaziz

PortfolioDesign Docs

Functional Requirements

What the site must do for its author and its visitors.

Last updated August 2026

Overview

These are the product requirements in plain language — what the site must do for its owner (the author) and its visitors.

How to read

Must = core value. Should = improves the experience. Can = nice to have.


For the Author (Publishing)

IDRequirementPriority
FR-01Add a project by dropping a markdown file into projects/ — no code changes, no registryMust
FR-02Frontmatter drives everything: slug, tags, links, image, visibility, sort order, featured flagMust
FR-03Attach design docs to any project — local MDX or external Notion — via meta.yaml or frontmatterMust
FR-04Invalid doc metadata fails the build with a precise error, never silently drops contentMust
FR-05Project images/screenshots live next to the markdown and are served automaticallyShould
FR-06Add an external API documentation link via apiDocsUrl frontmatter (https:// only) — validated at build, no code changeShould
FR-07Git push triggers rebuild and deployMust

For the Visitor (Reading)

IDRequirementPriority
FR-08Scan projects fast: cards with banners, tags, demo/source links; featured section firstMust
FR-09Read deep dives: rendered MDX with diagrams, tables, callouts, and a table of contentsMust
FR-10Open external API docs when present — API Documentation button on project and design-docs index, opens in new tab with external-link indicatorShould
FR-11Navigate by keyboard and screen reader; visible focus everywhereMust
FR-12Comfortable in light and dark mode, following system preference by defaultShould
FR-13Find the site in search: per-page metadata, share images, structured data, sitemapCan
FR-14Motion that delights without harm — everything respects reduced-motion settingsShould

Behavior That Matters

  • Content is code-reviewed — every change goes through git, so publishing has history, diffs, and rollback for free.
  • Validation is loud — a broken meta.yaml or duplicate doc id stops the build instead of shipping a broken page.
  • Docs are first-class — each project can carry as many documents as it deserves, mixed between local MDX and Notion.
  • API docs are opt-in — a project declares apiDocsUrl and gets an external API Documentation link; projects without it show nothing — no empty state.
  • Diagrams render on demand — heavy libraries stay out of the critical path.

Out of Scope

To keep the site focused:

  • No CMS UI, no database, no comments, no analytics beyond Vercel's built-ins.
  • No blog/articles section yet (the header button is intentionally disabled).
  • No client-side search — the project count doesn't warrant it.

Trade-off made visible

The filesystem-as-CMS trade is: lose editorial UI, gain version control, portability, and zero infrastructure.


Acceptance in One Glance

  • Adding a new project takes one file and one push.
  • A recruiter can go from home page → project → architecture deep dive in three clicks.
  • Lighthouse-level basics hold: static HTML, responsive, keyboard-complete, dark-mode clean.

Why it matters

The portfolio's job is to prove engineering communication skills — the site itself should be the first piece of evidence.