forked from Qortal/q-blog
38 lines
1.7 KiB
Markdown
38 lines
1.7 KiB
Markdown
# Multiple Blogs per Name — Overview (Plan A: Smart Redirect)
|
|
|
|
_Generated 2025-08-21_
|
|
|
|
## Goal
|
|
|
|
Allow a single **Name** to own **multiple Blogs**, while preserving existing blog-scoped routes and minimizing churn. Replace the single “My Blog” button with a **“My Blogs” dropdown** and introduce a new **User → Blogs** list page. When a Name has exactly one blog, visiting `/{name}` **auto-redirects** to that blog.
|
|
|
|
## Scope
|
|
|
|
- **In**: Header/Nav blog access, Name landing behavior, simple blog list page, light routing changes, a11y behavior.
|
|
- **Out**: Post editor behavior, post list virtualization, roles/permissions model changes, server protocol changes (unless list-by-name is missing).
|
|
|
|
## High-level UX
|
|
|
|
- Header/Nav:
|
|
- 0 blogs → Button shows **Create Blog** (primary action). Dropdown disabled/hidden.
|
|
- ≥1 blog → Button shows **My Blogs**. Dropdown lists each blog (title + id). Bottom row = **Create new blog**.
|
|
- Name route:
|
|
- `/{name}`:
|
|
- If blog count === 1 → redirect to `/{name}/{blog}/posts` (existing default route).
|
|
- If blog count !== 1 → show **User Blogs** page (`/{name}/blogs`).
|
|
- User Blogs page:
|
|
- Public, lists all blogs for the Name. If viewer is same user, show **Edit** per blog and **Create Blog** CTA.
|
|
- A11y:
|
|
- Dropdown uses proper menu roles, keyboard navigation, and focus return.
|
|
- User Blogs page has a single **H1**, semantic list, clear button labels.
|
|
|
|
## Benefits
|
|
|
|
- Aligns with entity contract (**Name 1..N Blog**).
|
|
- Minimizes refactors; relies on existing blog-scoped routing and components.
|
|
- Backward-compatible for deep links.
|
|
|
|
## Notes
|
|
|
|
- The **Header Blog Switcher** dropdown is **out of scope for v0.2.2** (list + redirect are implemented).
|