Skip to content

feat: SharedUI Reader Page + IDataService Contract #157

Description

@fboucher

Parent PRD

#155

What to build

Create a new reader page in SharedUI that displays a cleaned post in a readable layout. The page renders the post title, author, publication date, and the cleaned HTML content. It also defines the IDataService contract for fetching post HTML, which will be implemented differently by MAUI (local cache) and Blazor (API fetch).

Acceptance criteria

  • New page /postreader/{id} in SharedUI project
  • Page displays post title, author, and published date in a header section
  • Page renders the cleaned HTML content in a <div> using @Html.Raw()
  • Page is styled with FluentUI, respects light/dark theme, has good typography (line height, max-width ~700px)
  • Page includes a back button that navigates to the previous page (or /posts)
  • Page shows a "Content not available" message when HTML cannot be loaded
  • New method added to IDataService interface: Task<string?> GetPostHtmlAsync(string postId)
  • Page uses IDataService.GetPostHtmlAsync to fetch the HTML content
  • Page fetches post metadata (title, author, date) via existing IDataService.GetPost method

Blocked by

None - can start immediately

User stories addressed

  • User story 1: As a MAUI app user, I want to tap a "Read" button on a post in the Posts list, so that I can open the cleaned HTML version of that post
  • User story 2: As a MAUI app user, I want the reader to display the post title, author, publication date, and cleaned HTML content in a readable layout
  • User story 3: As a MAUI app user, I want the reader to have a back button, so that I can return to the Posts list
  • User story 4: As a MAUI app user, I want the reader to match the app theme (light/dark mode)
  • User story 6: As a MAUI app user, I want to tap "Read" when the HTML is not cached and see a message on the reader page
  • User story 13: As a developer, I want the reader page in SharedUI, so that it can be reused in both MAUI and Blazor web apps
  • User story 17: As a Blazor web app user, I want to be able to open the reader page and fetch HTML from the API on demand

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status
    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions