Skip to content

docs: update#101

Open
Limitex wants to merge 6 commits into
mainfrom
docs/update
Open

docs: update#101
Limitex wants to merge 6 commits into
mainfrom
docs/update

Conversation

@Limitex
Copy link
Copy Markdown
Owner

@Limitex Limitex commented May 16, 2026

Summary by CodeRabbit

  • New Features

    • Redesigned homepage with interactive component showcase.
    • Added footer with navigation links and resources.
    • Expanded installation options to include ALCOM, VCC, and vrc-get.
  • Documentation

    • Enhanced texture compression guides with improved filtering and exclusion explanations.
    • Updated troubleshooting sections with clearer step-by-step instructions.
    • Rebranded documentation to "LAC: Avatar Compressor" throughout.
  • Chores

    • Updated dependencies for improved performance and compatibility.

Review Change Stack

@Limitex Limitex self-assigned this May 16, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 16, 2026

📝 Walkthrough

Walkthrough

This PR synchronizes Avatar Compressor documentation with expanded feature explanations (exclusion mechanisms, editor preferences, ASTC options) and consistent "LAC:" branding, while simultaneously redesigning the homepage from a marketing-focused layout to a component-driven showcase with a new carousel, footer, and simplified installation flow.

Changes

Content and Branding Synchronization

Layer / File(s) Summary
Branding Updates in Metadata and Navigation
src/app/[lang]/layout.tsx, src/lib/layout.shared.tsx, src/app/[lang]/docs/[[...slug]]/page.tsx, src/app/[lang]/og/docs/[...slug]/route.tsx, src/app/[lang]/og/home/route.tsx
Navigation titles, page metadata, Open Graph site names, and JSON-LD structured data are updated from "Avatar Compressor" to "LAC: Avatar Compressor" across all layout and OG image generation routes.
Japanese Documentation Content Updates
content/docs.ja/changelog.mdx, content/docs.ja/components/texture-compressor.mdx, content/docs.ja/index.mdx, content/docs.ja/installation.mdx, content/docs.ja/releases.mdx, content/docs.ja/usage/reduce-texture-memory.mdx
Japanese texture compression documentation is expanded with explicit ASTC format variants, preset inheritance notes, and editor preferences. Usage guides add exclusion alternatives to freezing, detailed troubleshooting for unknown shader properties, and normal map filtering guidance. All pages receive "LAC:" prefix in frontmatter descriptions.
English Documentation Content Updates
content/docs/changelog.mdx, content/docs/components/texture-compressor.mdx, content/docs/index.mdx, content/docs/installation.mdx, content/docs/releases.mdx, content/docs/usage/reduce-texture-memory.mdx
English documentation mirrors Japanese updates: detailed ASTC presets, built-in preset calibration notes, and an expanded "Editor Preferences" section documenting GPU/CPU analysis backends. Usage guides clarify exclusion mechanisms and uncompressed shader property handling. All pages receive "LAC:" branding in descriptions and installation instructions mention ALCOM and vrc-get alongside VCC.

Homepage UI Redesign and Component Library

Layer / File(s) Summary
New UI Components and Enhancements
src/components/component-showcase.tsx, src/components/footer.tsx, src/components/vpm-repository-link.tsx, src/components/image-preview.tsx
Introduces ComponentShowcase carousel with five-slot masked layout, keyboard navigation, and role-based transforms. Adds Footer component rendering localized documentation/external links and copyright. Extends VPMRepositoryLink to accept optional className for inline styling. Adds ESLint suppress directive for image preview modal state effect.
Homepage Page Restructure
src/app/[lang]/(home)/page.tsx
Home page transitions from a multi-section marketing layout (badge, hero, features, benefits) to a localized landing page centered on ComponentShowcase carousel. Streamlines installation to dual VPMRepositoryLink components (ALCOM/VCC) with shared repository URL. Simplifies CTA structure and reduces translation keys to focus on tagline, installation, pairing, and docs linking. Removes custom hero styling and feature cards.
Home Layout Integration and Style Cleanup
src/app/[lang]/(home)/layout.tsx, src/app/global.css
Home layout derives locale and renders Footer component with language prop. Global stylesheet removes all custom CSS (theme variables, hero/background gradients, animations, hover effects, noise overlays) to rely on component-scoped Tailwind classes.
Dependencies and Build Configuration
package.json, pnpm-workspace.yaml, tsconfig.json
Runtime dependencies (next, react, react-dom, @next/third-parties, fumadocs-*, lucide-react) and devDependencies (TypeScript, ESLint, Tailwind, PostCSS, type packages) are upgraded. pnpm-workspace.yaml is introduced with allowBuilds configuration. TypeScript baseUrl is removed from tsconfig.json. New pnpm.onlyBuiltDependencies restricts builds to esbuild, sharp, and unrs-resolver.

Estimated Code Review Effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

A carousel spins with showcased grace,
While docs gain clarity, and LAC finds its place.
The homepage bounces from old to new,
With footer and components polished through.
🐰 Dependencies dance, the refresh is true!

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (2 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request description is completely empty, lacking all required template sections including type classification, summary, related issues, changes list, breaking changes, testing confirmation, and context. Fill in the PR description template with at least the PR type, a summary of changes, the changes list, and breaking changes confirmation.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'docs: update' is vague and overly generic, providing no meaningful information about the specific documentation changes made. Provide a more descriptive title that highlights the primary change, such as 'docs: rebrand Avatar Compressor to LAC and update component documentation'.
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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 and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
Documentation~/avatar-compressor-docs/package.json (1)

36-41: ⚡ Quick win

Consolidate pnpm build-script policy to allowBuilds.

Both package.json and pnpm-workspace.yaml configure the same packages (esbuild, sharp, unrs-resolver) for build scripts using different settings: onlyBuiltDependencies (deprecated) and allowBuilds (modern). Remove the pnpm.onlyBuiltDependencies configuration and rely only on allowBuilds in pnpm-workspace.yaml to avoid policy drift.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Documentation`~/avatar-compressor-docs/package.json around lines 36 - 41,
Remove the deprecated pnpm.onlyBuiltDependencies block from package.json so the
build-policy is consolidated to pnpm-workspace.yaml's allowBuilds; specifically
delete the "pnpm": { "onlyBuiltDependencies":
["esbuild","sharp","unrs-resolver"] } entry and ensure pnpm-workspace.yaml lists
esbuild, sharp and unrs-resolver under allowBuilds so only allowBuilds controls
build-script allowance.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@Documentation`~/avatar-compressor-docs/content/docs.ja/usage/reduce-texture-memory.mdx:
- Line 127: The label "Excluded textures / paths" is left in English and breaks
Japanese consistency; replace it with a Japanese label (e.g., "除外されたテクスチャ / パス")
or add Japanese first with the English in parentheses (e.g., "除外されたテクスチャ / パス
(Excluded textures / paths)") wherever this exact string appears in the document
so the troubleshooting bullet matches surrounding Japanese UI guidance.

In `@Documentation`~/avatar-compressor-docs/src/components/component-showcase.tsx:
- Around line 61-69: The global keydown handler inside the useEffect registers
onKey which currently always calls cycle for ArrowLeft/ArrowRight; update onKey
to ignore events when the active target is an editable element by checking
e.target (or document.activeElement) for input, textarea, select,
contentEditable=true, or similar editable controls and return early in those
cases so cycle only runs when focus is not in editable fields; modify the onKey
handler used by useEffect (references: useEffect, onKey, cycle, hasMultiple) to
perform this guard before handling arrow keys and keep the same add/remove
listener logic.

---

Nitpick comments:
In `@Documentation`~/avatar-compressor-docs/package.json:
- Around line 36-41: Remove the deprecated pnpm.onlyBuiltDependencies block from
package.json so the build-policy is consolidated to pnpm-workspace.yaml's
allowBuilds; specifically delete the "pnpm": { "onlyBuiltDependencies":
["esbuild","sharp","unrs-resolver"] } entry and ensure pnpm-workspace.yaml lists
esbuild, sharp and unrs-resolver under allowBuilds so only allowBuilds controls
build-script allowance.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 06596115-dc31-44be-8b24-9da98ba32e8d

📥 Commits

Reviewing files that changed from the base of the PR and between c1fa898 and 5afdbd6.

⛔ Files ignored due to path filters (1)
  • Documentation~/avatar-compressor-docs/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (27)
  • Documentation~/avatar-compressor-docs/content/docs.ja/changelog.mdx
  • Documentation~/avatar-compressor-docs/content/docs.ja/components/texture-compressor.mdx
  • Documentation~/avatar-compressor-docs/content/docs.ja/index.mdx
  • Documentation~/avatar-compressor-docs/content/docs.ja/installation.mdx
  • Documentation~/avatar-compressor-docs/content/docs.ja/releases.mdx
  • Documentation~/avatar-compressor-docs/content/docs.ja/usage/reduce-texture-memory.mdx
  • Documentation~/avatar-compressor-docs/content/docs/changelog.mdx
  • Documentation~/avatar-compressor-docs/content/docs/components/texture-compressor.mdx
  • Documentation~/avatar-compressor-docs/content/docs/index.mdx
  • Documentation~/avatar-compressor-docs/content/docs/installation.mdx
  • Documentation~/avatar-compressor-docs/content/docs/releases.mdx
  • Documentation~/avatar-compressor-docs/content/docs/usage/reduce-texture-memory.mdx
  • Documentation~/avatar-compressor-docs/package.json
  • Documentation~/avatar-compressor-docs/pnpm-workspace.yaml
  • Documentation~/avatar-compressor-docs/src/app/[lang]/(home)/layout.tsx
  • Documentation~/avatar-compressor-docs/src/app/[lang]/(home)/page.tsx
  • Documentation~/avatar-compressor-docs/src/app/[lang]/docs/[[...slug]]/page.tsx
  • Documentation~/avatar-compressor-docs/src/app/[lang]/layout.tsx
  • Documentation~/avatar-compressor-docs/src/app/[lang]/og/docs/[...slug]/route.tsx
  • Documentation~/avatar-compressor-docs/src/app/[lang]/og/home/route.tsx
  • Documentation~/avatar-compressor-docs/src/app/global.css
  • Documentation~/avatar-compressor-docs/src/components/component-showcase.tsx
  • Documentation~/avatar-compressor-docs/src/components/footer.tsx
  • Documentation~/avatar-compressor-docs/src/components/image-preview.tsx
  • Documentation~/avatar-compressor-docs/src/components/vpm-repository-link.tsx
  • Documentation~/avatar-compressor-docs/src/lib/layout.shared.tsx
  • Documentation~/avatar-compressor-docs/tsconfig.json
💤 Files with no reviewable changes (2)
  • Documentation~/avatar-compressor-docs/src/app/global.css
  • Documentation~/avatar-compressor-docs/tsconfig.json


- **サイズフィルター** — テクスチャが `Min Source Size` または `Skip If Smaller Than` より小さい
- **タイプフィルター** — テクスチャのカテゴリ(Main / Normal / Emission / Other)が無効
- **Excluded textures / paths** — テクスチャまたはアセットパスが **Exclusions** セクションに登録されている
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use a Japanese label for consistency in troubleshooting bullets.

Excluded textures / paths stands out from the surrounding Japanese UI guidance. Consider localizing this label (or adding Japanese first with English in parentheses) for consistency.

Suggested tweak
-- **Excluded textures / paths** — テクスチャまたはアセットパスが **Exclusions** セクションに登録されている
+- **除外テクスチャ / パス(Excluded textures / paths)** — テクスチャまたはアセットパスが **Exclusions** セクションに登録されている
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **Excluded textures / paths** — テクスチャまたはアセットパスが **Exclusions** セクションに登録されている
- **除外テクスチャ / パス(Excluded textures / paths** — テクスチャまたはアセットパスが **Exclusions** セクションに登録されている
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@Documentation`~/avatar-compressor-docs/content/docs.ja/usage/reduce-texture-memory.mdx
at line 127, The label "Excluded textures / paths" is left in English and breaks
Japanese consistency; replace it with a Japanese label (e.g., "除外されたテクスチャ / パス")
or add Japanese first with the English in parentheses (e.g., "除外されたテクスチャ / パス
(Excluded textures / paths)") wherever this exact string appears in the document
so the troubleshooting bullet matches surrounding Japanese UI guidance.

Comment on lines +61 to +69
useEffect(() => {
if (!hasMultiple) return;
function onKey(e: KeyboardEvent) {
if (e.key === 'ArrowLeft') cycle(-1);
else if (e.key === 'ArrowRight') cycle(1);
}
window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, [cycle, hasMultiple]);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Guard global Arrow key handling for editable targets.

On Line 63, the window-level handler runs even when focus is in inputs/textareas/contenteditable, which can trigger unintended carousel navigation while editing text.

🔧 Suggested fix
   useEffect(() => {
     if (!hasMultiple) return;
     function onKey(e: KeyboardEvent) {
+      const target = e.target as HTMLElement | null;
+      if (
+        target &&
+        (target.tagName === 'INPUT' ||
+          target.tagName === 'TEXTAREA' ||
+          target.isContentEditable)
+      ) {
+        return;
+      }
       if (e.key === 'ArrowLeft') cycle(-1);
       else if (e.key === 'ArrowRight') cycle(1);
     }
     window.addEventListener('keydown', onKey);
     return () => window.removeEventListener('keydown', onKey);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
useEffect(() => {
if (!hasMultiple) return;
function onKey(e: KeyboardEvent) {
if (e.key === 'ArrowLeft') cycle(-1);
else if (e.key === 'ArrowRight') cycle(1);
}
window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, [cycle, hasMultiple]);
useEffect(() => {
if (!hasMultiple) return;
function onKey(e: KeyboardEvent) {
const target = e.target as HTMLElement | null;
if (
target &&
(target.tagName === 'INPUT' ||
target.tagName === 'TEXTAREA' ||
target.isContentEditable)
) {
return;
}
if (e.key === 'ArrowLeft') cycle(-1);
else if (e.key === 'ArrowRight') cycle(1);
}
window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, [cycle, hasMultiple]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Documentation`~/avatar-compressor-docs/src/components/component-showcase.tsx
around lines 61 - 69, The global keydown handler inside the useEffect registers
onKey which currently always calls cycle for ArrowLeft/ArrowRight; update onKey
to ignore events when the active target is an editable element by checking
e.target (or document.activeElement) for input, textarea, select,
contentEditable=true, or similar editable controls and return early in those
cases so cycle only runs when focus is not in editable fields; modify the onKey
handler used by useEffect (references: useEffect, onKey, cycle, hasMultiple) to
perform this guard before handling arrow keys and keep the same add/remove
listener logic.

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