Skip to content

feat: replace npm with bun for frontend package management - #1770

Merged
jaseemjaskp merged 1 commit into
feat/vitefrom
feat/bun-migration
Jan 29, 2026
Merged

feat: replace npm with bun for frontend package management#1770
jaseemjaskp merged 1 commit into
feat/vitefrom
feat/bun-migration

Conversation

@jaseemjaskp

Copy link
Copy Markdown
Contributor

Summary

Replace npm with bun as the frontend package manager.

Changes

  • Switch Dockerfile base image from node:20-alpine to oven/bun:1-alpine
  • Replace npm install/npm run commands with bun install/bun run 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

Notes

  • No application source code changes — only build/tooling configuration
  • bun run build verified locally (Vite build succeeds)
  • CI workflows use Dockerfiles so they pick up changes automatically
  • oven/bun:1-alpine includes Node.js, so Vite and all tooling work as-is

- 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
@coderabbitai

coderabbitai Bot commented Jan 29, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

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

  • 🔍 Trigger a full review

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.

@sonarqubecloud

Copy link
Copy Markdown

@jaseemjaskp
jaseemjaskp merged commit fcb06ff into feat/vite Jan 29, 2026
5 checks passed
@jaseemjaskp
jaseemjaskp deleted the feat/bun-migration branch January 29, 2026 16:07
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.

1 participant