Skip to content

feat(web): scaffold the Astro-based web server - #67

Merged
alikia2x merged 7 commits into
developfrom
feat/frontend
Jul 16, 2026
Merged

feat(web): scaffold the Astro-based web server#67
alikia2x merged 7 commits into
developfrom
feat/frontend

Conversation

@alikia2x

@alikia2x alikia2x commented Jul 15, 2026

Copy link
Copy Markdown
Member

Summary

Introduce the new apps/web Astro-based frontend application for CVSA. This PR scaffolds the web server with SSR (via @astrojs/node), a domain-based i18n system, an initial design system component library, and the first set of pages (landing, song detail, design system showcase, and error pages).

Changes

  • Scaffold apps/web: New Astro application using the @astrojs/node standalone adapter, Solid.js for interactive islands, and UnoCSS for utility-first styling.
  • Design system foundation: Add typography, layout, icon, button, and toast components to establish a consistent UI baseline.
  • Theming: Implement a CSS variable-based light/dark theme system with color primitives and automatic inversion logic.
  • Domain-based i18n: Add locale middleware and server/client fanee integration, supporting zh-CN and en-US with subdomain routing (e.g. zh.projectcvsa.com, en.dev.projectcvsa.com).
  • Wiki renderer: Add a server-side wiki markup renderer with OpenCC conversion for Chinese variants.
  • Pages: Implement the landing page (under construction), song detail page (/song/:id), design system showcase, and HTTP error pages (403/404/500).
  • Testing: Add Vitest setup for apps/web and locale resolution tests.
  • Assets: Add favicon and site.webmanifest assets.
  • Search fixes: Tune semantic search ratio and fix ranking-rules comparison in SearchManager.syncSettings.
  • Tooling/docs: Update Biome config, README script table, and lockfile.

Related

- Adopt Solid.js for interactive components
- Integrate with @ark-ui/solid for headless primitives
- Add a complete typography scale with components
- Introduce custom color system with light/dark mode support
- Implement Button (3 variants × 3 sizes) and Toast components
- Refactor layout to support theme cookies and inject dynamic color variables
- Replace locale-prefixed routing (/en, /zh) with middleware-based locale detection
- Add server-side and client-side i18n libraries (lib/i18n/server.ts, lib/i18n/client.ts)
- Add homepage (index.astro), 403, and 500 error pages
- Add wiki renderer (lib/wiki/renderer.ts)
- Add Card layout component
- Move UnderConstruction component to pages directory
- Migrate Astro config from .mjs to .ts
- Update backend i18n and error response handling
@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 65 files, which is 15 over the limit of 50.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 5591edff-b8fd-4b42-abc5-c93ebe69d5ea

📥 Commits

Reviewing files that changed from the base of the PR and between 6757456 and fa31149.

⛔ Files ignored due to path filters (7)
  • apps/web/public/android-chrome-192x192.png is excluded by !**/*.png
  • apps/web/public/android-chrome-512x512.png is excluded by !**/*.png
  • apps/web/public/apple-touch-icon.png is excluded by !**/*.png
  • apps/web/public/favicon-16x16.png is excluded by !**/*.png
  • apps/web/public/favicon-32x32.png is excluded by !**/*.png
  • apps/web/public/favicon.ico is excluded by !**/*.ico
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (65)
  • .gitignore
  • .vscode/settings.json
  • .zed/settings.json
  • README.md
  • apps/backend/tests/artist.test.ts
  • apps/web/.gitignore
  • apps/web/astro.config.ts
  • apps/web/biome.json
  • apps/web/package.json
  • apps/web/postcss.config.mjs
  • apps/web/public/site.webmanifest
  • apps/web/src/components/Condition.astro
  • apps/web/src/components/icon/GraphicLogo.astro
  • apps/web/src/components/icon/TextLogoChinese.astro
  • apps/web/src/components/icon/TextLogoLatin.astro
  • apps/web/src/components/layout/Card.astro
  • apps/web/src/components/layout/Layout.astro
  • apps/web/src/components/layout/Surface.astro
  • apps/web/src/components/pages/UnderConstruction.astro
  • apps/web/src/components/pages/design-system/Buttons.tsx
  • apps/web/src/components/pages/design-system/index.ts
  • apps/web/src/components/typography/Caption.astro
  • apps/web/src/components/typography/Caption.tsx
  • apps/web/src/components/typography/DisplayL.astro
  • apps/web/src/components/typography/DisplayL.tsx
  • apps/web/src/components/typography/Heading1.astro
  • apps/web/src/components/typography/Heading1.tsx
  • apps/web/src/components/typography/Heading2.astro
  • apps/web/src/components/typography/Heading2.tsx
  • apps/web/src/components/typography/Heading3.astro
  • apps/web/src/components/typography/Heading3.tsx
  • apps/web/src/components/typography/Paragraph.astro
  • apps/web/src/components/typography/Paragraph.tsx
  • apps/web/src/components/ui/Button.tsx
  • apps/web/src/components/ui/Toast.css
  • apps/web/src/components/ui/Toast.tsx
  • apps/web/src/lib/copy-plugin.ts
  • apps/web/src/lib/i18n/client.ts
  • apps/web/src/lib/i18n/const.ts
  • apps/web/src/lib/i18n/index.ts
  • apps/web/src/lib/i18n/server.ts
  • apps/web/src/lib/theme.ts
  • apps/web/src/lib/wiki/index.ts
  • apps/web/src/lib/wiki/renderer.ts
  • apps/web/src/middleware.ts
  • apps/web/src/pages/403.astro
  • apps/web/src/pages/404.astro
  • apps/web/src/pages/500.astro
  • apps/web/src/pages/design-system/index.astro
  • apps/web/src/pages/index.astro
  • apps/web/src/pages/song/[id].astro
  • apps/web/tests/resolveLocale.test.ts
  • apps/web/tsconfig.json
  • apps/web/uno.config.ts
  • apps/web/vitest.config.ts
  • biome.json
  • locale/modules/web/manifest.json
  • locale/modules/web/modules/server/manifest.json
  • locale/modules/web/modules/server/messages/en-US.json
  • locale/modules/web/modules/server/messages/zh-CN.json
  • packages/core/src/search/config.ts
  • packages/core/src/search/manager.ts
  • packages/core/tests/unit/SearchManager.test.ts
  • packages/core/tests/unit/SongService.test.ts
  • scripts/import.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/frontend

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@alikia2x
alikia2x merged commit 9bfcbf7 into develop Jul 16, 2026
2 checks passed
@alikia2x
alikia2x deleted the feat/frontend branch July 16, 2026 03:29
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.

1 participant