30.09.2026

Permissions and HATEOAS

Enforce endpoint, object and field permissions, then let an editorial interface follow the actions offered by each response.

30.09.2026

Applying Changes Safely

Prepare entity changes before mutation, enforce current versions, validate the complete result and return useful errors without losing atomicity.

30.09.2026

Building a Form from End to End

Bind the post model directly to a form, show field errors and preserve newer edits when saves or conflicts arrive.

30.09.2026

Searching, Filtering and Pagination

Use HibernateSearch and CDI providers for typed filters, compact projections and URL-driven pagination that survives reloads and browser history.

30.09.2026

Managing Entity Relationships

Model authors and tags as shared entities, accept safe ID-only references, and update relationships deliberately across the API and editor form.

30.09.2026

Uploading and Serving Media

Validate image uploads, attach them to posts by reference, authorize each image request by post visibility, and safely clean up abandoned uploads.

30.09.2026

Integrating a Post Editor

Add a Markdown editor to the post form, secure embedded image uploads and references, and share one rendering path between preview and public reading.

30.09.2026

Translating the Interface

Add English and German routes, a message catalog and a language switch while preserving form state and editorial content.

30.09.2026

Translating Blog Content

Add independently published German post translations, consistent localized search and complete English fallback without changing the source article.

30.09.2026

Rendering Pages on the Server

Render the existing Scala.js blog with GraalJS so localized posts arrive as complete HTML with the correct HTTP status.

30.09.2026

Hydrating the Server-Rendered Page

Keep the server DOM, reuse its initial public response once and attach interactivity without a second initial data request.

30.09.2026

Completing the Public Pages

Finish the blog with consistent page metadata, published language links, a sitemap, Atom feeds and HTTP responses that match the content.