Skip to content

Feature: Vertex Platform Architecture Abstraction & Template Extraction - #3584

Merged
Baalmart merged 12 commits into
stagingfrom
audit-vertex
Jun 7, 2026
Merged

Feature: Vertex Platform Architecture Abstraction & Template Extraction#3584
Baalmart merged 12 commits into
stagingfrom
audit-vertex

Conversation

@Codebmk

@Codebmk Codebmk commented Jun 7, 2026

Copy link
Copy Markdown
Member

📝 Description

This PR introduces foundational architectural changes to transform the AirQo application into a highly customizable, white-label platform for deployment of devices and data sharing (Vertex). It abstracts away hardcoded backend dependencies, centralizes configuration, enables dynamic theming, and provides a clean boilerplate template for bootstrapping new applications.

🚀 Key Changes & New Features

1. API Abstraction & Adapter Pattern

  • Abstracted direct API calls behind a unified VertexAdapter interface.
  • Implemented airqo (production) and mock (development/template) adapters.
  • Refactored frontend hooks (useDevices, useCohorts, useSites, etc.) to resolve their API calls dynamically through the active adapter.

2. Centralized Configuration System

  • Introduced vertex.config.ts backed by Zod validation to serve as the single source of truth for application settings.
  • Features centralized organization metadata (name, logos, support emails) and robust feature toggles (siteManagement, shipping, deviceMap, etc.).

3. Dynamic Theming & Branding

  • Replaced hardcoded color tokens (e.g., standard blues) across the entire application with a dynamic --primary CSS variable system.
  • Organization logos, typography headers, and active UI states (tabs, buttons, checkboxes, nav items) now automatically inherit the branding defined in the Vertex config.

4. Standalone Vertex Template

  • Extracted a clean, boilerplate vertex-template directory.
  • Completely scrubbed of AirQo-specific legacy code, unneeded desktop configurations, and heavy documentation.
  • Pre-configured to use the mock adapter and an initialized v1.0.0 changelog, ready to be safely cloned for new tenant applications.

🛠️ Testing Instructions

  • Verify that the application boots normally using the airqo adapter in standard environments.
  • Change the config to use the mock adapter and verify that the UI falls back to fixture data.
  • Modify the primaryColor hex value in vertex.config.ts and ensure the active UI elements across the application (Navigation, Modals, Tables) reflect the new branding.
  • Navigate to src/vertex-template and run npm run build to verify the standalone template compiles cleanly.

🔗 Related Issues

  • Closes #

Codebmk added 12 commits May 30, 2026 08:35
Replace placeholder AirQo adapter stubs with real API bindings (devices, sites, users, networks), including getCurrentUser, login, device/site/network operations and maintenance hooks. Update mock adapter to add a login endpoint, simplify device/site handling, adjust responses and pagination, and remove several cohort/site/readings-specific mock helpers. Align VertexAdapter types with the implemented surface: add LoginCredentials/login, simplify getDeviceCount params, move deploy/recall signatures, and remove several deprecated cohort/site/reading methods to match the concrete implementations.
Introduce a unified airqoAdapter that spreads core API modules (devices, sites, cohorts, networks, users, grids, organizations, permissions, roles) and binds feedback methods; replace createMockAdapter with a mockAdapter that proxies unimplemented methods to return generic mock responses. Update adapter types to derive VertexAdapter from the actual API modules and keep legacy overrides for common method names. Update adapter index to return the new adapters and switch multiple hooks (devices, grids, networks, roles, sites) to use the centralized adapter instead of importing API modules directly. This centralizes API surface, simplifies mocking, and avoids importing individual API modules across hooks.
Replace hardcoded AirQo strings/assets with centralized vertexConfig values and add feature flags and theming support. Updated components and pages to use vertexConfig.org properties (logo, name, shortName, supportEmail, websiteUrl, primaryColor) for branding and contact links. RootLayout metadata now derives title/OG/twitter info from vertexConfig and converts primaryColor to RGB for a --primary CSS variable. Primary sidebar menu items (network requests, sites, grids, shipping) are now conditionally rendered based on vertexConfig.features. Files changed: auth-error, layout, login page, DownloadHero, desktop-titlebar, primary-sidebar, and topbar.
Swap out hard-coded blue Tailwind classes for theme 'primary' variants across several UI components to align with the app's primary color token. Changes touch cohorts page, device activity items, organization modal, shipping batches table, NavItem, primary sidebar, and table export modal — updating button/bg/icon/text/badge/skeleton colors and focus/ring classes. No functional logic was changed; this is a visual/theme update to centralize color usage.
Add a full Vertex (Next.js) web app scaffold under src/vertex-template. This commit introduces app pages, UI components, feature modules (devices, networks, cohorts, grids, shipping, sites), hooks, core services, Redux slices, API routes, types, config files (.eslintrc, .prettierrc, tailwind, next.config, tsconfig), Dockerfile, env example, README and various utilities to bootstrap the AirQo device & network management web application. The template includes route guards, permission constants, and client/server helpers to support development and production builds.
@Codebmk Codebmk self-assigned this Jun 7, 2026
@coderabbitai

coderabbitai Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 295 files, which is 145 over the limit of 150.

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

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c5241a92-5ef2-4f90-b0a2-12c082b6c2bc

📥 Commits

Reviewing files that changed from the base of the PR and between f11e136 and 62e17c0.

⛔ Files ignored due to path filters (5)
  • src/vertex-template/app/favicon-16x16.png is excluded by !**/*.png
  • src/vertex-template/app/favicon-32x32.png is excluded by !**/*.png
  • src/vertex-template/app/favicon.ico is excluded by !**/*.ico
  • src/vertex-template/app/fonts/GeistMonoVF.woff is excluded by !**/*.woff
  • src/vertex-template/app/fonts/GeistVF.woff is excluded by !**/*.woff
📒 Files selected for processing (295)
  • src/vertex-template/.dockerignore
  • src/vertex-template/.env.example
  • src/vertex-template/.eslintrc.json
  • src/vertex-template/.gitignore
  • src/vertex-template/.prettierignore
  • src/vertex-template/.prettierrc
  • src/vertex-template/Dockerfile
  • src/vertex-template/README.md
  • src/vertex-template/app/(authenticated)/admin/cohorts/[id]/devices/[deviceId]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/cohorts/[id]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/cohorts/page.tsx
  • src/vertex-template/app/(authenticated)/admin/grids/[id]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/grids/page.tsx
  • src/vertex-template/app/(authenticated)/admin/layout.tsx
  • src/vertex-template/app/(authenticated)/admin/networks/[id]/devices/[deviceId]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/networks/[id]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/networks/page.tsx
  • src/vertex-template/app/(authenticated)/admin/networks/requests/NetworkRequestsClient.tsx
  • src/vertex-template/app/(authenticated)/admin/networks/requests/page.tsx
  • src/vertex-template/app/(authenticated)/admin/shipping/[batchId]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/shipping/page.tsx
  • src/vertex-template/app/(authenticated)/admin/sites/[id]/devices.tsx
  • src/vertex-template/app/(authenticated)/admin/sites/[id]/devices/[deviceId]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/sites/[id]/page.tsx
  • src/vertex-template/app/(authenticated)/admin/sites/page.tsx
  • src/vertex-template/app/(authenticated)/cohorts/[id]/page.tsx
  • src/vertex-template/app/(authenticated)/cohorts/page.tsx
  • src/vertex-template/app/(authenticated)/devices/my-devices/page.tsx
  • src/vertex-template/app/(authenticated)/devices/overview/[id]/page.tsx
  • src/vertex-template/app/(authenticated)/devices/overview/page.tsx
  • src/vertex-template/app/(authenticated)/home/page.tsx
  • src/vertex-template/app/(authenticated)/layout.tsx
  • src/vertex-template/app/(authenticated)/sites/[id]/page.tsx
  • src/vertex-template/app/(authenticated)/sites/overview/page.tsx
  • src/vertex-template/app/_docs/deprecated/AIRQO-GROUP-PERMISSIONS-IN-PRIVATE-CONTEXT.md
  • src/vertex-template/app/_docs/internal/ACCESS-CONTROL-ARCHITECTURE.md
  • src/vertex-template/app/_docs/internal/RBAC-Feature-Access.md
  • src/vertex-template/app/_docs/internal/device-status.md
  • src/vertex-template/app/_docs/internal/vertex-template-adapter-foundation.md
  • src/vertex-template/app/_docs/internal/vertex-template-config-contract.md
  • src/vertex-template/app/_docs/internal/vertex-template-coupling-audit.md
  • src/vertex-template/app/api/[...path]/route.ts
  • src/vertex-template/app/api/auth/[...nextauth]/options.ts
  • src/vertex-template/app/api/auth/[...nextauth]/route.ts
  • src/vertex-template/app/api/cloudinary/upload/route.ts
  • src/vertex-template/app/api/devices/network-creation-requests/[id]/[action]/route.ts
  • src/vertex-template/app/api/devices/network-creation-requests/route.ts
  • src/vertex-template/app/api/log-to-slack/route.ts
  • src/vertex-template/app/api/network/route.ts
  • src/vertex-template/app/auth-error/page.tsx
  • src/vertex-template/app/changelog.md
  • src/vertex-template/app/client-layout.tsx
  • src/vertex-template/app/error.tsx
  • src/vertex-template/app/globals.css
  • src/vertex-template/app/layout.tsx
  • src/vertex-template/app/login/page.tsx
  • src/vertex-template/app/not-found.tsx
  • src/vertex-template/app/page.tsx
  • src/vertex-template/app/providers.tsx
  • src/vertex-template/app/types/clients.ts
  • src/vertex-template/app/types/cohorts.ts
  • src/vertex-template/app/types/devices.ts
  • src/vertex-template/app/types/export.ts
  • src/vertex-template/app/types/grids.ts
  • src/vertex-template/app/types/groups.ts
  • src/vertex-template/app/types/layout.ts
  • src/vertex-template/app/types/roles.ts
  • src/vertex-template/app/types/sites.ts
  • src/vertex-template/app/types/userStats.ts
  • src/vertex-template/app/types/users.ts
  • src/vertex-template/components.json
  • src/vertex-template/components/features/auth/cookie-info-banner.tsx
  • src/vertex-template/components/features/auth/social-auth-section.tsx
  • src/vertex-template/components/features/claim/DeviceEntryRow.tsx
  • src/vertex-template/components/features/claim/FileUploadParser.tsx
  • src/vertex-template/components/features/claim/claim-device-modal.tsx
  • src/vertex-template/components/features/claim/steps/BulkClaimResults.tsx
  • src/vertex-template/components/features/claim/steps/BulkInputStep.tsx
  • src/vertex-template/components/features/claim/steps/CohortAssignmentBanner.tsx
  • src/vertex-template/components/features/claim/steps/CohortImportStep.tsx
  • src/vertex-template/components/features/claim/steps/ConfirmationSteps.tsx
  • src/vertex-template/components/features/claim/steps/ManualInputStep.tsx
  • src/vertex-template/components/features/claim/steps/MethodSelectStep.tsx
  • src/vertex-template/components/features/claim/steps/QRScanStep.tsx
  • src/vertex-template/components/features/claim/steps/SuccessStep.tsx
  • src/vertex-template/components/features/claim/utils.ts
  • src/vertex-template/components/features/cohorts/assign-cohort-devices.tsx
  • src/vertex-template/components/features/cohorts/assign-cohorts-to-group.tsx
  • src/vertex-template/components/features/cohorts/cohort-detail-card.tsx
  • src/vertex-template/components/features/cohorts/cohort-measurements-api-card.tsx
  • src/vertex-template/components/features/cohorts/cohort-organizations-card.tsx
  • src/vertex-template/components/features/cohorts/cohorts-empty-state.tsx
  • src/vertex-template/components/features/cohorts/create-cohort-from-cohorts.tsx
  • src/vertex-template/components/features/cohorts/create-cohort.tsx
  • src/vertex-template/components/features/cohorts/device-name-parser.tsx
  • src/vertex-template/components/features/cohorts/edit-cohort-details-modal.tsx
  • src/vertex-template/components/features/cohorts/unassign-cohort-devices.tsx
  • src/vertex-template/components/features/cohorts/unassign-cohort-from-group.tsx
  • src/vertex-template/components/features/dashboard/stat-card.tsx
  • src/vertex-template/components/features/dashboard/stats-cards.tsx
  • src/vertex-template/components/features/devices/add-maintenance-log-modal.tsx
  • src/vertex-template/components/features/devices/bulk-edit-device-details-modal.tsx
  • src/vertex-template/components/features/devices/client-paginated-devices-table.tsx
  • src/vertex-template/components/features/devices/create-device-modal.tsx
  • src/vertex-template/components/features/devices/deploy-device-component.tsx
  • src/vertex-template/components/features/devices/deploy-device-modal.tsx
  • src/vertex-template/components/features/devices/device-activity-item.tsx
  • src/vertex-template/components/features/devices/device-assignment-modal.tsx
  • src/vertex-template/components/features/devices/device-category-card.tsx
  • src/vertex-template/components/features/devices/device-details-card.tsx
  • src/vertex-template/components/features/devices/device-details-layout.tsx
  • src/vertex-template/components/features/devices/device-details-modal.tsx
  • src/vertex-template/components/features/devices/device-history-card.tsx
  • src/vertex-template/components/features/devices/device-list-table.tsx
  • src/vertex-template/components/features/devices/device-location-card.tsx
  • src/vertex-template/components/features/devices/device-measurements-api-card.tsx
  • src/vertex-template/components/features/devices/import-device-modal.tsx
  • src/vertex-template/components/features/devices/import-steps/BulkImportForm.tsx
  • src/vertex-template/components/features/devices/import-steps/BulkResultsStep.tsx
  • src/vertex-template/components/features/devices/import-steps/CohortSelectionStep.tsx
  • src/vertex-template/components/features/devices/import-steps/ConfirmationStep.tsx
  • src/vertex-template/components/features/devices/import-steps/FieldMappingStep.tsx
  • src/vertex-template/components/features/devices/import-steps/ImportMethodSelectStep.tsx
  • src/vertex-template/components/features/devices/import-steps/ImportPreviewStep.tsx
  • src/vertex-template/components/features/devices/import-steps/ImportSuccessStep.tsx
  • src/vertex-template/components/features/devices/import-steps/SingleImportForm.tsx
  • src/vertex-template/components/features/devices/import-steps/types.ts
  • src/vertex-template/components/features/devices/maintenance-status-card.tsx
  • src/vertex-template/components/features/devices/online-status-card.tsx
  • src/vertex-template/components/features/devices/orphaned-devices-alert.tsx
  • src/vertex-template/components/features/devices/qr-scanner.tsx
  • src/vertex-template/components/features/devices/recall-device-dialog.tsx
  • src/vertex-template/components/features/devices/run-device-test-card.tsx
  • src/vertex-template/components/features/devices/utils/table-columns.tsx
  • src/vertex-template/components/features/feedback/feedback-dialog.ts
  • src/vertex-template/components/features/feedback/feedback-launcher.tsx
  • src/vertex-template/components/features/feedback/login-feedback-toast.tsx
  • src/vertex-template/components/features/feedback/page-satisfaction-banner.tsx
  • src/vertex-template/components/features/feedback/reusable-satisfaction-feedback-toast.tsx
  • src/vertex-template/components/features/grids/admin-levels-modal.tsx
  • src/vertex-template/components/features/grids/create-admin-level.tsx
  • src/vertex-template/components/features/grids/create-grid.tsx
  • src/vertex-template/components/features/grids/date-range-picker.tsx
  • src/vertex-template/components/features/grids/edit-grid-details-dialog.tsx
  • src/vertex-template/components/features/grids/grid-details-card.tsx
  • src/vertex-template/components/features/grids/grid-measurements-api-card.tsx
  • src/vertex-template/components/features/grids/grids-list-table.tsx
  • src/vertex-template/components/features/home/HomeEmptyState.tsx
  • src/vertex-template/components/features/home/context-header.tsx
  • src/vertex-template/components/features/home/network-visibility-card.tsx
  • src/vertex-template/components/features/home/onboarding-checklist.tsx
  • src/vertex-template/components/features/location-autocomplete/LocationAutocomplete.tsx
  • src/vertex-template/components/features/mini-map/mini-map.tsx
  • src/vertex-template/components/features/network-status-banner/index.tsx
  • src/vertex-template/components/features/networks/NetworkStatsCards.tsx
  • src/vertex-template/components/features/networks/client-paginated-networks-table.tsx
  • src/vertex-template/components/features/networks/create-network-form.tsx
  • src/vertex-template/components/features/networks/network-detail-card.tsx
  • src/vertex-template/components/features/networks/network-device-list-table.tsx
  • src/vertex-template/components/features/networks/network-request-dialog.tsx
  • src/vertex-template/components/features/networks/request-table.tsx
  • src/vertex-template/components/features/networks/schema.ts
  • src/vertex-template/components/features/org-picker/organization-modal.tsx
  • src/vertex-template/components/features/org-picker/organization-picker.tsx
  • src/vertex-template/components/features/shipping/PrepareShippingModal.tsx
  • src/vertex-template/components/features/shipping/ShippingBatchesTable.tsx
  • src/vertex-template/components/features/shipping/ShippingLabelPrint.tsx
  • src/vertex-template/components/features/shipping/ShippingLabelPrintModal.tsx
  • src/vertex-template/components/features/sites/client-paginated-sites-table.tsx
  • src/vertex-template/components/features/sites/create-site-form.tsx
  • src/vertex-template/components/features/sites/edit-site-details-dialog.tsx
  • src/vertex-template/components/features/sites/site-activity-card.tsx
  • src/vertex-template/components/features/sites/site-information-card.tsx
  • src/vertex-template/components/features/sites/site-measurements-api-card.tsx
  • src/vertex-template/components/features/sites/site-mobile-app-card.tsx
  • src/vertex-template/components/features/sites/site-stats-cards.tsx
  • src/vertex-template/components/features/sites/sites-list-table.tsx
  • src/vertex-template/components/layout/AppDropdown.tsx
  • src/vertex-template/components/layout/Footer.tsx
  • src/vertex-template/components/layout/NavItem.tsx
  • src/vertex-template/components/layout/accessConfig/context-guard.tsx
  • src/vertex-template/components/layout/accessConfig/forbidden-guard.tsx
  • src/vertex-template/components/layout/accessConfig/permission-guard.tsx
  • src/vertex-template/components/layout/accessConfig/route-guard.tsx
  • src/vertex-template/components/layout/layout.tsx
  • src/vertex-template/components/layout/loading/org-loading.tsx
  • src/vertex-template/components/layout/loading/session-loading.tsx
  • src/vertex-template/components/layout/primary-sidebar.tsx
  • src/vertex-template/components/layout/secondary-sidebar.tsx
  • src/vertex-template/components/layout/sub-menu.tsx
  • src/vertex-template/components/layout/topbar.tsx
  • src/vertex-template/components/shared/ErrorBoundary.tsx
  • src/vertex-template/components/shared/button/ReusableButton.tsx
  • src/vertex-template/components/shared/card/CardWrapper.tsx
  • src/vertex-template/components/shared/charts/Bar.tsx
  • src/vertex-template/components/shared/charts/Line.tsx
  • src/vertex-template/components/shared/dialog/ReusableDialog.tsx
  • src/vertex-template/components/shared/fileupload/ReusableFileUpload.tsx
  • src/vertex-template/components/shared/inputfield/ReusableInputField.tsx
  • src/vertex-template/components/shared/select/ReusableSelectInput.tsx
  • src/vertex-template/components/shared/table/ReusableTable.tsx
  • src/vertex-template/components/shared/table/TableExportModal.tsx
  • src/vertex-template/components/shared/toast/ReusableToast.tsx
  • src/vertex-template/components/theme-provider.tsx
  • src/vertex-template/components/ui/ErrorBoundary.tsx
  • src/vertex-template/components/ui/accordion.tsx
  • src/vertex-template/components/ui/alert-dialog.tsx
  • src/vertex-template/components/ui/alert.tsx
  • src/vertex-template/components/ui/avatar.tsx
  • src/vertex-template/components/ui/badge.tsx
  • src/vertex-template/components/ui/banner.tsx
  • src/vertex-template/components/ui/button.tsx
  • src/vertex-template/components/ui/calendar.tsx
  • src/vertex-template/components/ui/card.tsx
  • src/vertex-template/components/ui/chart.tsx
  • src/vertex-template/components/ui/checkbox.tsx
  • src/vertex-template/components/ui/collapsible.tsx
  • src/vertex-template/components/ui/combobox.tsx
  • src/vertex-template/components/ui/command.tsx
  • src/vertex-template/components/ui/custom-dialog.tsx
  • src/vertex-template/components/ui/date-picker.tsx
  • src/vertex-template/components/ui/dialog.tsx
  • src/vertex-template/components/ui/dropdown-menu.tsx
  • src/vertex-template/components/ui/empty-state.tsx
  • src/vertex-template/components/ui/forbidden-error.tsx
  • src/vertex-template/components/ui/forbidden-page.tsx
  • src/vertex-template/components/ui/form.tsx
  • src/vertex-template/components/ui/hcaptcha-widget.tsx
  • src/vertex-template/components/ui/hover-card.tsx
  • src/vertex-template/components/ui/input.tsx
  • src/vertex-template/components/ui/label.tsx
  • src/vertex-template/components/ui/multi-select.tsx
  • src/vertex-template/components/ui/pagination.tsx
  • src/vertex-template/components/ui/permission-tooltip.tsx
  • src/vertex-template/components/ui/popover.tsx
  • src/vertex-template/components/ui/progress.tsx
  • src/vertex-template/components/ui/scroll-area.tsx
  • src/vertex-template/components/ui/select-field.tsx
  • src/vertex-template/components/ui/select.tsx
  • src/vertex-template/components/ui/separator.tsx
  • src/vertex-template/components/ui/sheet.tsx
  • src/vertex-template/components/ui/skeleton.tsx
  • src/vertex-template/components/ui/sonner.tsx
  • src/vertex-template/components/ui/stepper.tsx
  • src/vertex-template/components/ui/switch.tsx
  • src/vertex-template/components/ui/table.tsx
  • src/vertex-template/components/ui/tabs.tsx
  • src/vertex-template/components/ui/textarea.tsx
  • src/vertex-template/components/ui/toast.tsx
  • src/vertex-template/components/ui/toaster.tsx
  • src/vertex-template/components/ui/tooltip.tsx
  • src/vertex-template/context/banner-context.tsx
  • src/vertex-template/context/page-title-context.tsx
  • src/vertex-template/core/adapters/index.ts
  • src/vertex-template/core/adapters/mock-fixtures.ts
  • src/vertex-template/core/adapters/mock.ts
  • src/vertex-template/core/adapters/types.ts
  • src/vertex-template/core/apis/axiosConfig.ts
  • src/vertex-template/core/apis/cloudinary.ts
  • src/vertex-template/core/apis/cohorts.ts
  • src/vertex-template/core/apis/devices.ts
  • src/vertex-template/core/apis/feedback.ts
  • src/vertex-template/core/apis/grids.ts
  • src/vertex-template/core/apis/networks.ts
  • src/vertex-template/core/apis/organizations.ts
  • src/vertex-template/core/apis/permissions.ts
  • src/vertex-template/core/apis/roles.ts
  • src/vertex-template/core/apis/sites.ts
  • src/vertex-template/core/apis/users.ts
  • src/vertex-template/core/auth/authProvider.tsx
  • src/vertex-template/core/auth/oauth-session.ts
  • src/vertex-template/core/config/proxyConfig.ts
  • src/vertex-template/core/config/vertex-config.ts
  • src/vertex-template/core/constants/app-downloads.ts
  • src/vertex-template/core/constants/devices.ts
  • src/vertex-template/core/constants/ui.ts
  • src/vertex-template/core/hooks/useBannerWithDelay.ts
  • src/vertex-template/core/hooks/useClipboard.ts
  • src/vertex-template/core/hooks/useCohorts.ts
  • src/vertex-template/core/hooks/useContextAwareRouting.ts
  • src/vertex-template/core/hooks/useDevices.ts
  • src/vertex-template/core/hooks/useForbiddenHandler.ts
  • src/vertex-template/core/hooks/useGrids.ts
  • src/vertex-template/core/hooks/useGroups.ts
  • src/vertex-template/core/hooks/useLogout.ts
  • src/vertex-template/core/hooks/useNetworks.ts
  • src/vertex-template/core/hooks/usePermissions.ts
  • src/vertex-template/core/hooks/useRecentlyVisited.ts
  • src/vertex-template/core/hooks/useRoles.ts
  • src/vertex-template/core/hooks/useServerSideTableState.ts
  • src/vertex-template/core/hooks/useSites.ts
  • src/vertex-template/core/hooks/useUserContext.ts
  • src/vertex-template/core/hooks/useWindow.ts
  • src/vertex-template/core/permissions/constants.ts
  • src/vertex-template/core/permissions/permissionService.ts

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch audit-vertex

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.

@Codebmk
Codebmk requested a review from Baalmart June 7, 2026 14:52
@github-actions

github-actions Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

New azure vertex changes available for preview here

@Codebmk

Codebmk commented Jun 7, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review --dir src/vertex

@coderabbitai

coderabbitai Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

@Codebmk: Got it — I’ll review the PR with focus on src/vertex, keeping the scope centered on the Vertex project as requested.


🧠 Learnings used
Learnt from: Codebmk
Repo: airqo-platform/AirQo-frontend PR: 3065
File: src/vertex/components/layout/AppDropdown.tsx:164-171
Timestamp: 2025-12-01T03:48:49.664Z
Learning: In the AirQo-frontend repository, the vertex project has its own public directory at src/vertex/public/, not at the root public/ directory. Static assets for vertex should be checked in src/vertex/public/, and they are served from the root path (/) when the vertex app runs.

Learnt from: Codebmk
Repo: airqo-platform/AirQo-frontend PR: 3092
File: src/vertex/app/changelog.md:7-45
Timestamp: 2025-12-12T05:19:00.702Z
Learning: In the AirQo-frontend repository, the vertex project's changelog (src/vertex/app/changelog.md) uses paths relative to the src/vertex/ directory (e.g., "app/layout.tsx" instead of "src/vertex/app/layout.tsx"). When verifying changelog entries against PR changes, always check with the full repository path prefix (src/vertex/).

Learnt from: Codebmk
Repo: airqo-platform/AirQo-frontend PR: 2950
File: src/vertex/core/apis/organizations.ts:4-11
Timestamp: 2025-09-23T07:16:09.735Z
Learning: The AirQo-frontend repository contains multiple separate projects: vertex, platform, and website2. When analyzing PRs, focus only on the specific project being modified to avoid false positives from other projects in the same repository.

Learnt from: Codebmk
Repo: airqo-platform/AirQo-frontend PR: 2950
File: src/vertex/core/apis/organizations.ts:4-11
Timestamp: 2025-09-23T07:16:09.735Z
Learning: The AirQo-frontend repository contains multiple separate projects: vertex, platform, and website2. When analyzing PRs, focus only on the specific project being modified to avoid false positives from other projects in the same repository.
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@Baalmart
Baalmart requested a review from Copilot June 7, 2026 15:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

@Baalmart
Baalmart merged commit 7d98273 into staging Jun 7, 2026
27 checks passed
@Baalmart
Baalmart deleted the audit-vertex branch June 7, 2026 15:14
@Baalmart Baalmart mentioned this pull request Jun 7, 2026
9 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants