Skip to content

UN-3185 [MISC] : replace ESLint and Prettier with Biome for frontend#1771

Merged
jaseemjaskp merged 2 commits intofeat/vitefrom
feat/biome
Feb 3, 2026
Merged

UN-3185 [MISC] : replace ESLint and Prettier with Biome for frontend#1771
jaseemjaskp merged 2 commits intofeat/vitefrom
feat/biome

Conversation

@jaseemjaskp
Copy link
Contributor

Summary

Replace ESLint + Prettier with Biome for frontend linting and formatting.

Changes

  • Added @biomejs/biome v2.3.13 as dev dependency
  • Created biome.json with rules migrated from .eslintrc.json (68 rules auto-migrated)
  • Updated package.json scripts (lint, format, check, etc.) to use Biome commands
  • Removed ESLint and Prettier dependencies: eslint, eslint-config-google, eslint-config-prettier, eslint-plugin-prettier, eslint-plugin-react, prettier, prettier-quick
  • Deleted .eslintrc.json
  • Added Biome pre-commit hook to .pre-commit-config.yaml
  • Reformatted all frontend source files with Biome (one-time formatting pass)

Bug Fixes (discovered during migration)

  • Fixed undeclared sessionDetails variable in HeaderTitle.jsx (added missing useSessionStore import)
  • Fixed Error()new Error() in useSessionValid.js
  • Fixed Array()new Array() in DocumentThumbnail.jsx
  • Fixed prismjs import order in CombinedOutput.jsx (core library must load before addons)

Why Biome?

  • 10-25x faster than ESLint + Prettier combined
  • Single tool replaces both linter and formatter
  • One config file (biome.json) instead of multiple configs
  • 90%+ rule coverage for React ESLint plugin rules
  • Built-in import sorting via organizeImports

Notes

  • 3 rules downgraded to warn for pre-existing code issues: useBlockStatements (319), noUnusedVariables (108), noEmptyBlockStatements (17) — these can be gradually fixed in follow-up PRs
  • Build passes, zero lint errors

… formatting

- Add @biomejs/biome v2.3.13 as dev dependency
- Create biome.json with migrated ESLint rules and formatter config
- Update package.json scripts (lint, format, check) to use Biome
- Remove ESLint and Prettier dependencies and .eslintrc.json
- Add Biome pre-commit hook to .pre-commit-config.yaml
- Fix undeclared sessionDetails variable in HeaderTitle.jsx
- Fix Error() and Array() to use new keyword
- Fix prismjs import order in CombinedOutput.jsx
- Reformat all frontend source files with Biome
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 30, 2026

Important

Review skipped

Too many files!

This PR contains 236 files, which is 86 over the limit of 150.

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

  • 🔍 Trigger a full review
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/biome

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.

- Add biome-check to ci.skip list since pre-commit.ci lacks
  reliable npm registry access for language:system hooks
- Add --files-ignore-unknown=true and --no-errors-on-unmatched
  flags to the biome-check hook entry for robustness
@github-actions
Copy link
Contributor

Test Results

Summary
  • Runner Tests: 11 passed, 0 failed (11 total)
  • SDK1 Tests: 66 passed, 0 failed (66 total)

Runner Tests - Full Report
filepath function $$\textcolor{#23d18b}{\tt{passed}}$$ SUBTOTAL
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_logs}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_cleanup}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_cleanup\_skip}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_client\_init}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config\_without\_mount}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_run\_container}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image\_for\_sidecar}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_sidecar\_container}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$ $$\textcolor{#23d18b}{\tt{11}}$$ $$\textcolor{#23d18b}{\tt{11}}$$
SDK1 Tests - Full Report
filepath function $$\textcolor{#23d18b}{\tt{passed}}$$ SUBTOTAL
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_success\_on\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_on\_connection\_error}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_non\_retryable\_http\_error}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retryable\_http\_errors}}$$ $$\textcolor{#23d18b}{\tt{3}}$$ $$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_post\_method\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_logging}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_success\_on\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_retry\_on\_errors}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_wrapper\_methods\_retry}}$$ $$\textcolor{#23d18b}{\tt{4}}$$ $$\textcolor{#23d18b}{\tt{4}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_connection\_error\_is\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_timeout\_is\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_retryable\_status\_codes}}$$ $$\textcolor{#23d18b}{\tt{3}}$$ $$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_non\_retryable\_status\_codes}}$$ $$\textcolor{#23d18b}{\tt{5}}$$ $$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_without\_response}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_retryable\_errno}}$$ $$\textcolor{#23d18b}{\tt{5}}$$ $$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_non\_retryable\_errno}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_other\_exception\_not\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_without\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_with\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap\_with\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_successful\_call\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_after\_transient\_failure}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_max\_retries\_exceeded}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_max\_time\_exceeded}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_with\_custom\_predicate}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_no\_retry\_with\_predicate\_false}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_exception\_not\_in\_tuple\_not\_retried}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_delay\_would\_exceed\_max\_time}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_default\_configuration}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_environment\_variable\_configuration}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_max\_retries}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_max\_time}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_base\_delay}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_multiplier}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_jitter\_values}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_exceptions\_only}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_predicate\_only}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_both\_exceptions\_and\_predicate}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_exceptions\_match\_but\_predicate\_false}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_platform\_service\_call\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_prompt\_service\_call\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_platform\_service\_decorator\_retries\_on\_connection\_error}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_prompt\_service\_decorator\_retries\_on\_timeout}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_warning\_logged\_on\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_info\_logged\_on\_success\_after\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_exception\_logged\_on\_giving\_up}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$ $$\textcolor{#23d18b}{\tt{66}}$$ $$\textcolor{#23d18b}{\tt{66}}$$

@sonarqubecloud
Copy link

@jaseemjaskp jaseemjaskp changed the title feat: replace ESLint and Prettier with Biome for frontend MISC: replace ESLint and Prettier with Biome for frontend Jan 30, 2026
@jaseemjaskp jaseemjaskp changed the base branch from main to feat/vite January 30, 2026 05:16
@jaseemjaskp jaseemjaskp changed the title MISC: replace ESLint and Prettier with Biome for frontend UN-3185 [MISC] : replace ESLint and Prettier with Biome for frontend Jan 30, 2026
Copy link
Contributor

@athul-rs athul-rs left a comment

Choose a reason for hiding this comment

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

LGTM.
Most of the changes are refactoring.

@jaseemjaskp jaseemjaskp merged commit a6768ba into feat/vite Feb 3, 2026
7 checks passed
@jaseemjaskp jaseemjaskp deleted the feat/biome branch February 3, 2026 12:27
Deepak-Kesavan added a commit that referenced this pull request Feb 26, 2026
* [FEAT] Migrate frontend from Create React App to Vite

Migrate the Unstract frontend build system from Create React App (react-scripts 5.0.1) to Vite 6.0.5 for improved development experience and build performance.

Key Changes:
- Replace react-scripts with Vite 6.0.5 and @vitejs/plugin-react 4.3.4
- Move index.html from public/ to root directory
- Replace setupProxy.js with Vite proxy configuration
- Update environment variables from REACT_APP_* to VITE_* prefix
- Configure esbuild to handle JSX in .js files
- Add comprehensive migration documentation

Build Optimizations:
- Manual chunk splitting for react, antd, and pdf vendors
- Dependency pre-bundling for faster cold starts
- HMR with polling enabled for Docker volume compatibility

Documentation:
- Add VITE_MIGRATION.md with comprehensive migration guide
- Update README.md with Vite-specific configuration and commands
- Document environment variable migration and troubleshooting

Performance Benefits:
- Development server startup: 10-30s → 1-2s
- Hot Module Replacement: 2-5s → <1s
- Production build time: 60-120s → 30-60s

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(frontend): Restore vite-plugin-svgr for SVG-as-React-component imports

The codebase extensively uses SVG imports with ?react query syntax
(39 imports in src/assets/index.js). vite-plugin-svgr is required to
transform these imports into React components.

Changes:
- Add vite-plugin-svgr@^4.5.0 to devDependencies
- Restore svgr plugin in vite.config.js
- Add vite-plugin-svgr type references in vite-env.d.ts
- Remove conflicting public/index.html from CRA migration

Fixes white screen issue caused by SVG components failing to render.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(frontend): Fix HMR configuration example to match actual implementation

The README documentation showed incorrect HMR clientPort configuration
using process.env instead of the env variable from loadEnv.

Changes:
- Update clientPort example to use env.WDS_SOCKET_PORT (not process.env)
- Change from falsy coalescing to explicit conditional check
- Ensure documentation matches vite.config.js implementation

Addresses CodeRabbit feedback on PR #1607.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(frontend): Fix proxy configuration example to match actual implementation

The README proxy configuration example incorrectly used process.env
instead of the env variable from loadEnv.

Changes:
- Update proxy target to use env.VITE_BACKEND_URL (not process.env)
- Ensure documentation matches vite.config.js implementation
- Maintain consistency across all Vite configuration examples

Addresses CodeRabbit critical feedback on PR #1607.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: replace CommonJS require() with ES dynamic import() for Vite compatibility

Converted all require() calls in frontend/src to use try/catch with
top-level await import() to support Vite's native ES module system.
Plugin imports remain optional via try/catch to preserve OSS compatibility
where plugin files are not present.

Special cases:
- Pipelines.jsx: static import (non-plugin, always available)
- DsSettingsCard.jsx: async IIFE inside useEffect

* fix: correct PropTypes for CombinedOutput and JsonViewBody

- Make selectedPrompts optional in CombinedOutput since ToolsMain
  does not pass it and the component handles undefined
- Change llmProfiles PropType from string to array in JsonViewBody
  to match the actual data type

* fix: correct PropTypes warnings across frontend components

- Change coverageCountData from PropTypes.object to PropTypes.array in
  PromptCardWrapper, PromptCard, and PromptCardItems
- Fix PropTypes.text (undefined) to PropTypes.string for promptKey and
  promptText in PromptCardItems
- Change highlightData to PropTypes.oneOfType([object, array]) in
  DisplayPromptResult
- Change apiService from PropTypes.func to PropTypes.object in ManageKeys
- Change connMode from required to optional in ConfigureConnectorModal
- Change type from required to optional in ListOfSources

* fix: add Rollup plugin to resolve missing optional plugin imports

Add optionalPluginImports() Rollup plugin to vite.config.js that
resolves missing plugin paths to an empty module at build time instead
of failing. This allows the existing try/catch dynamic import pattern
to work during production builds when plugin files are absent.

* fix: set build target to esnext for top-level await support

The codebase uses top-level await for optional plugin imports, which
requires es2022+. Vite's default target (es2020) does not support
this, causing the build to fail.

* feat: replace npm with bun for frontend package management (#1770)

- Switch Dockerfile base image from node:20-alpine to oven/bun:1-alpine
- Replace npm install/run commands with bun equivalents in Dockerfile
- Remove engines.npm constraint, update engines.node to >=18.0.0
- Replace npm run with bun run in lint:all script
- Delete package-lock.json, add bun.lock

* fix: correct COPY path in frontend.Dockerfile for runtime config script

* UN-3185 [MISC] : replace ESLint and Prettier with Biome for frontend (#1771)

* feat: replace ESLint and Prettier with Biome for frontend linting and formatting

- Add @biomejs/biome v2.3.13 as dev dependency
- Create biome.json with migrated ESLint rules and formatter config
- Update package.json scripts (lint, format, check) to use Biome
- Remove ESLint and Prettier dependencies and .eslintrc.json
- Add Biome pre-commit hook to .pre-commit-config.yaml
- Fix undeclared sessionDetails variable in HeaderTitle.jsx
- Fix Error() and Array() to use new keyword
- Fix prismjs import order in CombinedOutput.jsx
- Reformat all frontend source files with Biome

* fix: skip biome-check in pre-commit CI and add robust flags

- Add biome-check to ci.skip list since pre-commit.ci lacks
  reliable npm registry access for language:system hooks
- Add --files-ignore-unknown=true and --no-errors-on-unmatched
  flags to the biome-check hook entry for robustness

* ci: add GitHub Actions workflow for frontend Biome lint checks

* ci: pin Bun version to 1.1.38 in frontend lint workflow

* ci: add sticky PR comment for frontend lint report

* docs: update frontend README for Biome migration

- Update Node.js requirement to >= 18.0.0
- Replace ESLint/Prettier with Biome in editor setup
- Update linting/formatting commands for Biome
- Add biome.json to project structure
- Add Biome documentation links to learning resources

* docs: add Vite, Bun, and Biome badges to frontend README

* docs: add Vite, Bun, and Biome badges to main README

* chore(frontend): upgrade to Vite 7 and Vitest 3

- Upgrade vite from ^6.0.5 to ^7.0.0 (installed 7.3.1)
- Upgrade vitest from ^2.1.8 to ^3.2.0 (installed 3.2.4)
- Upgrade @vitejs/plugin-react from ^4.3.4 to ^4.4.0
- Update Node.js engine requirement from >=18.0.0 to >=20.19.0
- Modernize __dirname to import.meta.dirname in vite.config.js

* docs(frontend): update README for Vite 7 upgrade

- Update Vite badge from 6.x to 7.x
- Update Node.js requirement from 18.0.0 to 20.19.0

* docs(frontend): update README to use Bun instead of npm

- Update prerequisites to list Bun as primary package manager
- Replace all npm commands with bun equivalents
- Update install, dev, build, test, and lint commands

* docs(frontend): update migration note with Vite 7 upgrade date

* docs(frontend): update VITE_MIGRATION.md for Vite 7 and Bun

- Add Vite 7 upgrade section with version updates and changes
- Update all npm commands to use bun
- Update package versions to current (Vite 7.3.1, Vitest 3.2.4)
- Document Node.js 20.19+ requirement

---------

Signed-off-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jaseem Jas <jaseem@zipstack.com>
Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>
Deepak-Kesavan added a commit that referenced this pull request Feb 26, 2026
… mode (#1786)

* [FEAT] Migrate frontend from Create React App to Vite

Migrate the Unstract frontend build system from Create React App (react-scripts 5.0.1) to Vite 6.0.5 for improved development experience and build performance.

Key Changes:
- Replace react-scripts with Vite 6.0.5 and @vitejs/plugin-react 4.3.4
- Move index.html from public/ to root directory
- Replace setupProxy.js with Vite proxy configuration
- Update environment variables from REACT_APP_* to VITE_* prefix
- Configure esbuild to handle JSX in .js files
- Add comprehensive migration documentation

Build Optimizations:
- Manual chunk splitting for react, antd, and pdf vendors
- Dependency pre-bundling for faster cold starts
- HMR with polling enabled for Docker volume compatibility

Documentation:
- Add VITE_MIGRATION.md with comprehensive migration guide
- Update README.md with Vite-specific configuration and commands
- Document environment variable migration and troubleshooting

Performance Benefits:
- Development server startup: 10-30s → 1-2s
- Hot Module Replacement: 2-5s → <1s
- Production build time: 60-120s → 30-60s

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(frontend): Restore vite-plugin-svgr for SVG-as-React-component imports

The codebase extensively uses SVG imports with ?react query syntax
(39 imports in src/assets/index.js). vite-plugin-svgr is required to
transform these imports into React components.

Changes:
- Add vite-plugin-svgr@^4.5.0 to devDependencies
- Restore svgr plugin in vite.config.js
- Add vite-plugin-svgr type references in vite-env.d.ts
- Remove conflicting public/index.html from CRA migration

Fixes white screen issue caused by SVG components failing to render.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(frontend): Fix HMR configuration example to match actual implementation

The README documentation showed incorrect HMR clientPort configuration
using process.env instead of the env variable from loadEnv.

Changes:
- Update clientPort example to use env.WDS_SOCKET_PORT (not process.env)
- Change from falsy coalescing to explicit conditional check
- Ensure documentation matches vite.config.js implementation

Addresses CodeRabbit feedback on PR #1607.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(frontend): Fix proxy configuration example to match actual implementation

The README proxy configuration example incorrectly used process.env
instead of the env variable from loadEnv.

Changes:
- Update proxy target to use env.VITE_BACKEND_URL (not process.env)
- Ensure documentation matches vite.config.js implementation
- Maintain consistency across all Vite configuration examples

Addresses CodeRabbit critical feedback on PR #1607.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: replace CommonJS require() with ES dynamic import() for Vite compatibility

Converted all require() calls in frontend/src to use try/catch with
top-level await import() to support Vite's native ES module system.
Plugin imports remain optional via try/catch to preserve OSS compatibility
where plugin files are not present.

Special cases:
- Pipelines.jsx: static import (non-plugin, always available)
- DsSettingsCard.jsx: async IIFE inside useEffect

* fix: correct PropTypes for CombinedOutput and JsonViewBody

- Make selectedPrompts optional in CombinedOutput since ToolsMain
  does not pass it and the component handles undefined
- Change llmProfiles PropType from string to array in JsonViewBody
  to match the actual data type

* fix: correct PropTypes warnings across frontend components

- Change coverageCountData from PropTypes.object to PropTypes.array in
  PromptCardWrapper, PromptCard, and PromptCardItems
- Fix PropTypes.text (undefined) to PropTypes.string for promptKey and
  promptText in PromptCardItems
- Change highlightData to PropTypes.oneOfType([object, array]) in
  DisplayPromptResult
- Change apiService from PropTypes.func to PropTypes.object in ManageKeys
- Change connMode from required to optional in ConfigureConnectorModal
- Change type from required to optional in ListOfSources

* fix: add Rollup plugin to resolve missing optional plugin imports

Add optionalPluginImports() Rollup plugin to vite.config.js that
resolves missing plugin paths to an empty module at build time instead
of failing. This allows the existing try/catch dynamic import pattern
to work during production builds when plugin files are absent.

* fix: set build target to esnext for top-level await support

The codebase uses top-level await for optional plugin imports, which
requires es2022+. Vite's default target (es2020) does not support
this, causing the build to fail.

* feat: replace npm with bun for frontend package management (#1770)

- Switch Dockerfile base image from node:20-alpine to oven/bun:1-alpine
- Replace npm install/run commands with bun equivalents in Dockerfile
- Remove engines.npm constraint, update engines.node to >=18.0.0
- Replace npm run with bun run in lint:all script
- Delete package-lock.json, add bun.lock

* fix: correct COPY path in frontend.Dockerfile for runtime config script

* UN-3185 [MISC] : replace ESLint and Prettier with Biome for frontend (#1771)

* feat: replace ESLint and Prettier with Biome for frontend linting and formatting

- Add @biomejs/biome v2.3.13 as dev dependency
- Create biome.json with migrated ESLint rules and formatter config
- Update package.json scripts (lint, format, check) to use Biome
- Remove ESLint and Prettier dependencies and .eslintrc.json
- Add Biome pre-commit hook to .pre-commit-config.yaml
- Fix undeclared sessionDetails variable in HeaderTitle.jsx
- Fix Error() and Array() to use new keyword
- Fix prismjs import order in CombinedOutput.jsx
- Reformat all frontend source files with Biome

* fix: skip biome-check in pre-commit CI and add robust flags

- Add biome-check to ci.skip list since pre-commit.ci lacks
  reliable npm registry access for language:system hooks
- Add --files-ignore-unknown=true and --no-errors-on-unmatched
  flags to the biome-check hook entry for robustness

* ci: add GitHub Actions workflow for frontend Biome lint checks

* ci: pin Bun version to 1.1.38 in frontend lint workflow

* ci: add sticky PR comment for frontend lint report

* docs: update frontend README for Biome migration

- Update Node.js requirement to >= 18.0.0
- Replace ESLint/Prettier with Biome in editor setup
- Update linting/formatting commands for Biome
- Add biome.json to project structure
- Add Biome documentation links to learning resources

* docs: add Vite, Bun, and Biome badges to frontend README

* docs: add Vite, Bun, and Biome badges to main README

* chore(frontend): upgrade to Vite 7 and Vitest 3

- Upgrade vite from ^6.0.5 to ^7.0.0 (installed 7.3.1)
- Upgrade vitest from ^2.1.8 to ^3.2.0 (installed 3.2.4)
- Upgrade @vitejs/plugin-react from ^4.3.4 to ^4.4.0
- Update Node.js engine requirement from >=18.0.0 to >=20.19.0
- Modernize __dirname to import.meta.dirname in vite.config.js

* docs(frontend): update README for Vite 7 upgrade

- Update Vite badge from 6.x to 7.x
- Update Node.js requirement from 18.0.0 to 20.19.0

* docs(frontend): update README to use Bun instead of npm

- Update prerequisites to list Bun as primary package manager
- Replace all npm commands with bun equivalents
- Update install, dev, build, test, and lint commands

* docs(frontend): update migration note with Vite 7 upgrade date

* docs(frontend): update VITE_MIGRATION.md for Vite 7 and Bun

- Add Vite 7 upgrade section with version updates and changes
- Update all npm commands to use bun
- Update package versions to current (Vite 7.3.1, Vitest 3.2.4)
- Document Node.js 20.19+ requirement

* fix(frontend): show API Hub branding on verticals pages in incognito mode

When visiting /verticals/* in incognito, selectedProduct from localStorage
is null, causing isUnstract to be true and showing the Unstract logo and
setup incomplete banner instead of the API Hub layout.

Add URL-based fallback to detect verticals route and set the effective
product accordingly.

UN-3219

---------

Signed-off-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
Signed-off-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>
Co-authored-by: Hari John Kuriakose <hari@zipstack.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>
vishnuszipstack added a commit that referenced this pull request Feb 27, 2026
…1807)

* [FEAT] Migrate frontend from Create React App to Vite

Migrate the Unstract frontend build system from Create React App (react-scripts 5.0.1) to Vite 6.0.5 for improved development experience and build performance.

Key Changes:
- Replace react-scripts with Vite 6.0.5 and @vitejs/plugin-react 4.3.4
- Move index.html from public/ to root directory
- Replace setupProxy.js with Vite proxy configuration
- Update environment variables from REACT_APP_* to VITE_* prefix
- Configure esbuild to handle JSX in .js files
- Add comprehensive migration documentation

Build Optimizations:
- Manual chunk splitting for react, antd, and pdf vendors
- Dependency pre-bundling for faster cold starts
- HMR with polling enabled for Docker volume compatibility

Documentation:
- Add VITE_MIGRATION.md with comprehensive migration guide
- Update README.md with Vite-specific configuration and commands
- Document environment variable migration and troubleshooting

Performance Benefits:
- Development server startup: 10-30s → 1-2s
- Hot Module Replacement: 2-5s → <1s
- Production build time: 60-120s → 30-60s

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(frontend): Restore vite-plugin-svgr for SVG-as-React-component imports

The codebase extensively uses SVG imports with ?react query syntax
(39 imports in src/assets/index.js). vite-plugin-svgr is required to
transform these imports into React components.

Changes:
- Add vite-plugin-svgr@^4.5.0 to devDependencies
- Restore svgr plugin in vite.config.js
- Add vite-plugin-svgr type references in vite-env.d.ts
- Remove conflicting public/index.html from CRA migration

Fixes white screen issue caused by SVG components failing to render.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(frontend): Fix HMR configuration example to match actual implementation

The README documentation showed incorrect HMR clientPort configuration
using process.env instead of the env variable from loadEnv.

Changes:
- Update clientPort example to use env.WDS_SOCKET_PORT (not process.env)
- Change from falsy coalescing to explicit conditional check
- Ensure documentation matches vite.config.js implementation

Addresses CodeRabbit feedback on PR #1607.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(frontend): Fix proxy configuration example to match actual implementation

The README proxy configuration example incorrectly used process.env
instead of the env variable from loadEnv.

Changes:
- Update proxy target to use env.VITE_BACKEND_URL (not process.env)
- Ensure documentation matches vite.config.js implementation
- Maintain consistency across all Vite configuration examples

Addresses CodeRabbit critical feedback on PR #1607.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: replace CommonJS require() with ES dynamic import() for Vite compatibility

Converted all require() calls in frontend/src to use try/catch with
top-level await import() to support Vite's native ES module system.
Plugin imports remain optional via try/catch to preserve OSS compatibility
where plugin files are not present.

Special cases:
- Pipelines.jsx: static import (non-plugin, always available)
- DsSettingsCard.jsx: async IIFE inside useEffect

* fix: correct PropTypes for CombinedOutput and JsonViewBody

- Make selectedPrompts optional in CombinedOutput since ToolsMain
  does not pass it and the component handles undefined
- Change llmProfiles PropType from string to array in JsonViewBody
  to match the actual data type

* fix: correct PropTypes warnings across frontend components

- Change coverageCountData from PropTypes.object to PropTypes.array in
  PromptCardWrapper, PromptCard, and PromptCardItems
- Fix PropTypes.text (undefined) to PropTypes.string for promptKey and
  promptText in PromptCardItems
- Change highlightData to PropTypes.oneOfType([object, array]) in
  DisplayPromptResult
- Change apiService from PropTypes.func to PropTypes.object in ManageKeys
- Change connMode from required to optional in ConfigureConnectorModal
- Change type from required to optional in ListOfSources

* fix: add Rollup plugin to resolve missing optional plugin imports

Add optionalPluginImports() Rollup plugin to vite.config.js that
resolves missing plugin paths to an empty module at build time instead
of failing. This allows the existing try/catch dynamic import pattern
to work during production builds when plugin files are absent.

* fix: set build target to esnext for top-level await support

The codebase uses top-level await for optional plugin imports, which
requires es2022+. Vite's default target (es2020) does not support
this, causing the build to fail.

* feat: replace npm with bun for frontend package management (#1770)

- Switch Dockerfile base image from node:20-alpine to oven/bun:1-alpine
- Replace npm install/run commands with bun equivalents in Dockerfile
- Remove engines.npm constraint, update engines.node to >=18.0.0
- Replace npm run with bun run in lint:all script
- Delete package-lock.json, add bun.lock

* fix: correct COPY path in frontend.Dockerfile for runtime config script

* UN-3185 [MISC] : replace ESLint and Prettier with Biome for frontend (#1771)

* feat: replace ESLint and Prettier with Biome for frontend linting and formatting

- Add @biomejs/biome v2.3.13 as dev dependency
- Create biome.json with migrated ESLint rules and formatter config
- Update package.json scripts (lint, format, check) to use Biome
- Remove ESLint and Prettier dependencies and .eslintrc.json
- Add Biome pre-commit hook to .pre-commit-config.yaml
- Fix undeclared sessionDetails variable in HeaderTitle.jsx
- Fix Error() and Array() to use new keyword
- Fix prismjs import order in CombinedOutput.jsx
- Reformat all frontend source files with Biome

* fix: skip biome-check in pre-commit CI and add robust flags

- Add biome-check to ci.skip list since pre-commit.ci lacks
  reliable npm registry access for language:system hooks
- Add --files-ignore-unknown=true and --no-errors-on-unmatched
  flags to the biome-check hook entry for robustness

* ci: add GitHub Actions workflow for frontend Biome lint checks

* ci: pin Bun version to 1.1.38 in frontend lint workflow

* ci: add sticky PR comment for frontend lint report

* docs: update frontend README for Biome migration

- Update Node.js requirement to >= 18.0.0
- Replace ESLint/Prettier with Biome in editor setup
- Update linting/formatting commands for Biome
- Add biome.json to project structure
- Add Biome documentation links to learning resources

* docs: add Vite, Bun, and Biome badges to frontend README

* docs: add Vite, Bun, and Biome badges to main README

* chore(frontend): upgrade to Vite 7 and Vitest 3

- Upgrade vite from ^6.0.5 to ^7.0.0 (installed 7.3.1)
- Upgrade vitest from ^2.1.8 to ^3.2.0 (installed 3.2.4)
- Upgrade @vitejs/plugin-react from ^4.3.4 to ^4.4.0
- Update Node.js engine requirement from >=18.0.0 to >=20.19.0
- Modernize __dirname to import.meta.dirname in vite.config.js

* docs(frontend): update README for Vite 7 upgrade

- Update Vite badge from 6.x to 7.x
- Update Node.js requirement from 18.0.0 to 20.19.0

* docs(frontend): update README to use Bun instead of npm

- Update prerequisites to list Bun as primary package manager
- Replace all npm commands with bun equivalents
- Update install, dev, build, test, and lint commands

* docs(frontend): update migration note with Vite 7 upgrade date

* docs(frontend): update VITE_MIGRATION.md for Vite 7 and Bun

- Add Vite 7 upgrade section with version updates and changes
- Update all npm commands to use bun
- Update package versions to current (Vite 7.3.1, Vitest 3.2.4)
- Document Node.js 20.19+ requirement

* fix(frontend): show API Hub branding on verticals pages in incognito mode

When visiting /verticals/* in incognito, selectedProduct from localStorage
is null, causing isUnstract to be true and showing the Unstract logo and
setup incomplete banner instead of the API Hub layout.

Add URL-based fallback to detect verticals route and set the effective
product accordingly.

UN-3219

* feat(frontend): redesign landing page with light-themed right panels

Redesign all three landing page variants (default, LLM Whisperer, Unstract)
with new light-themed right panels featuring compliance badges, stats cards,
testimonials with gradient borders, and provider logos. Update left panel
spacing to match Figma design specifications.

* fix: resolve biome formatting errors in Login.css and vite.config.js

Auto-fix formatting issues (double quotes, semicolons, import ordering)
flagged by the biome-check CI workflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: Address CodeRabbit review comments for landing page redesign

- Use dynamic imports (await import) for plugin assets to prevent
  build failures in OSS where plugins/ is gitignored
- Remove duplicate constant arrays (LLM_PROVIDERS, TRUSTED_BY_LOGOS,
  UNSTRACT_COMPLIANCE_BADGES) by reusing single definitions
- Add responsive media query for .login-right-section on mobile
- Add focus-visible styles for product toggle buttons
- Add focus-visible styles for region selector buttons

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Signed-off-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
Co-authored-by: Hari John Kuriakose <hari@zipstack.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>
Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>
Co-authored-by: vishnuszipstack <vishnu@zipstack.com>
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.

3 participants