Skip to content

feat(home): add first-screen entry surface - #5

Draft
huyanxius wants to merge 6 commits into
feat/58-frontend-module-skeletonfrom
feat/home-entry-surface
Draft

feat(home): add first-screen entry surface#5
huyanxius wants to merge 6 commits into
feat/58-frontend-module-skeletonfrom
feat/home-entry-surface

Conversation

@huyanxius

@huyanxius huyanxius commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Title: feat(home): add first-screen entry surface

Dependency

Feature Description

  • Replace the placeholder root route with a responsive first screen for Quick Start and Projects.
  • Add the split floating product navigation from the LiveDemo visual reference.
  • Keep route-aware navigation in app/layout and page-only entry cards in pages/home.

Implementation Approach

  • Reuse only the Windup mark and presentation pattern; no LiveDemo routes, data model, runtime, or large CSS/JS are copied.
  • Preserve /quick-start and /projects; the migration does not touch features, entities, or shared.

Testing

  • npm run format:check — passed (42 files)
  • npm run lint — passed
  • npm run typecheck — passed
  • npm run test — passed (3 files, 3 tests)
  • npm run build — passed
  • git diff --check 7a6515e...HEAD — passed
  • Current-branch browser render — not rerun because the local URL was blocked by the browser policy; the same UI had passed desktop and mobile visual review on the previous base.

[CX] Prompt & Review

The global shell needs a persistent navigation surface without moving route awareness into shared UI.

Add the LiveDemo-inspired split floating header, route-group highlighting, and Windup mark.

Keep the header private to app layout and reserve page content space beneath it.
Route grouping controls which product navigation item is exposed as current.

Render the header on a workflow route and assert the home, project, and creation links.

Protect the app-level navigation contract without coupling page tests to layout markup.
The root route needs a clear first screen for the two existing production entry points.

Build a responsive editorial hero and page-private choice cards for quick start and projects.

Preserve the existing routes while keeping workflow state outside the home page.
The redesigned home surface must preserve both existing navigation choices.

Assert the page heading and the quick-start and project destinations.

Keep presentation changes from silently breaking the root-route contract.
@huyanxius
huyanxius force-pushed the feat/home-entry-surface branch from e7f4a20 to 73b6497 Compare July 30, 2026 13:35
@huyanxius
huyanxius changed the base branch from feat/58-frontend-skeleton to feat/58-frontend-module-skeleton July 30, 2026 13:35
xiaocheny214 and others added 2 commits July 31, 2026 09:54
* feat: add backend skeleton

* ci: add backend CI workflow and naming convention gates

* feat: add backend skeleton

* docs: add module split document

Describe the backend package layout (common/framework/app) and the server domain module split: user, project, asset, character with action/character_template/wearable subdomains, generation and media. All modules currently define abstract interfaces only.

* feat: add unified response and global exception

Add the shared response/exception kernel in windup_common: Response/ListResponse unified bodies (HTTP always 200, business code in body), BizException base, ModelException for LLM calls, and the BizCode/ModelErrorType enums. Add the app-level global exception handlers that convert these into Response.fail.

* feat: add framework infrastructure scaffolding

Add windup_framework infrastructure abstractions: SQLAlchemy db base/session, config loaders (database/provider/storage), LLM provider protocols (chat/image/video) and Kodo object storage.

* feat: add server module api skeletons

Add abstract service interfaces and domain models for the server modules: user, project, asset, character (with action/character_template/wearable subdomains), generation and media. Drop the now-obsolete .gitkeep placeholders.

* refactor: remove health endpoint

Drop the placeholder health router and its registration in create_app; the web layer now revolves around the global exception handlers.

* build: add windup entrypoint and python-multipart dependency

Expose the windup CLI entrypoint (windup_app.bootstrap.app:main) and add python-multipart for form/file uploads; refresh uv.lock accordingly.

* docs: fix stale module paths in character service docstring

Point the sub-entity references at the nested character subpackages (character.action / character_template / wearable) instead of the old top-level paths.

* chore: drop unused imports

Remove unused imports flagged by ruff F401 in generation/interface.py and user/model.py.

* ci: split naming gate into its own workflow

将 validate-branch 与 validate-commits 从 backend.yml 拆到独立的 naming.yml。命名规范门禁不局限于 backend 范畴,应作为仓库级 CI 单独维护(PR review:@minorcell 建议)。

backend.yml 仅保留 lint-and-test;naming.yml 用独立 concurrency group 避免与 backend 共用 group 互相取消。

* docs: sync module-split with current design

Reflect character/media/generation/user module redesigns in the split
document.

* feat(generation): refine task types and SSE streaming

Replace strategy pattern with typed submit methods.

- model: add CharacterImageOutput/CharacterActionOutput/CharacterActionFrame
  as typed task results, remove generic GenerationResult
- interface: split submit into generate_character_image and
  generate_character_action with typed inputs
- document SSE streaming flow (GET /generation/tasks/{id}/stream)
  replacing frontend polling

* refactor(user): defer OAuth to future iteration

Remove OAuth abstract methods and models from UserService.

Commented-out methods: get_oauth_authorize_url, login_by_oauth,
bind_oauth, get_oauth_bindings. Related imports OAuthCallbackInput and
UserOAuth removed from interface. The OAuth region is preserved as a
placeholder for future extension.

* feat(media): add file upload to object storage

Add ObjectStorageMediaService implementing MediaService.

- service: upload to Kodo via KodoStorage adapter, auto-generated
  object keys with category prefix, no user filenames in keys
- app: register media router (POST /media/upload) in create_app

* refactor(media): implement Qiniu upload and deduplicate MediaCategory

- Remove dead storage module (empty __init__.py and kodo.py) from framework
- Implement actual Qiniu Kodo SDK upload in ObjectStorageMediaService
- Move MediaCategory to windup_common.enums.media, remove duplicate from media/model
- Update media __init__ to import MediaCategory from common

* fix(media): lazy-import qiniu SDK to avoid import-time failure

Move qiniu import inside upload() so module collection does not fail
when qiniu is not installed (e.g. CI test runs).

* feat(generation): update API contract models to match implementation

- CharacterImageInput: reference_image_url optional, add width/height/num_images
- CharacterImageOutput: unified type field, image_urls list (single element for one image)
- CharacterActionOutput: unified type field
- Generation API endpoint: request/response Pydantic models with size validation
- Stubs marked with TODO for actual implementation
后端 1024XEngineer#64 合入 main 后根 .gitignore 出现 add/add 冲突。
根 .gitignore 取 main 版本(已含 .DS_Store),前端的依赖与构建产物由 frontend/.gitignore 负责。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants