Skip to main content

Applications

The monorepo contains two production applications:

Console

Main Openlane Console application

Storybook

Component documentation and testing

Console (apps/console)

The primary web application for Openlane users.
Name: console
Version: 1.0.0
Port: 3001
Framework: Next.js 16.1.6
Key Dependencies:
  • [email protected] - Application framework
  • [email protected] - UI library
  • @tanstack/react-query@^5.66.9 - Data fetching and caching
  • next-auth@beta - Authentication
  • stripe@^18.5.0 - Payment processing
  • @repo/ui - Shared component library
  • @repo/codegen - GraphQL API client
  • @repo/dally - Data access layer
Features:
  • Authentication with GitHub and Google OAuth
  • Stripe billing integration
  • AI-powered features using Amazon Bedrock and Google Vertex AI
  • Real-time notifications with Novu
  • WebAuthn passkey support
  • Survey creation with SurveyJS
  • Interactive force-directed graphs
  • PDF generation and viewing
CommandDescription
devStart development server on port 3001
buildBuild production bundle
debugBuild with memory debugging
startStart production server on port 3001
lintLint codebase
testRun Jest tests

Storybook (apps/storybook)

Component library documentation and visual testing environment.
Name: openlane-storybook
Version: 0.0.0
Port: 6006
Framework: Storybook 10.2.13
Key Dependencies:
  • [email protected] - Component development environment
  • @repo/ui - Component library being documented
  • @tanstack/react-query@^5.90.11 - Data fetching examples
  • @storybook/[email protected] - Vite integration
  • vite@^7.0.0 - Build tool
Addons:
  • @storybook/addon-a11y - Accessibility testing
  • @storybook/addon-docs - Auto-generated documentation
  • @storybook/addon-themes - Theme switching
  • @chromatic-com/storybook - Visual regression testing
CommandDescription
devStart Storybook dev server on port 6006
buildBuild static Storybook site
storybookAlias for dev command
lintLint Storybook files

Shared Packages

Five internal packages provide shared functionality:

@repo/ui (packages/ui)

Comprehensive React component library built with Radix UI and Tailwind CSS.
Version: 0.0.0 (private)
Exports: 70+ components and utilities
Core Technologies:
  • [email protected] - UI framework
  • [email protected] - Framework integration
  • tailwindcss@^4.1.13 - Styling (v4)
  • @radix-ui/* - Accessible component primitives
  • platejs@^49.1.5 - Rich text editor
  • recharts@^3.2.0 - Data visualization
Component Categories:
  • Forms: Input, Textarea, Select, Checkbox, Switch, Radio, Calendar, Tag Input
  • Data Display: Table, Data Table, Charts (Line, Donut), Badge, Avatar
  • Feedback: Alert, Toast, Dialog, Confirmation Dialog, Progress
  • Navigation: Breadcrumb, Tabs, Pagination, Command Menu
  • Layout: Grid, Panel, Card, Sheet, Separator
  • Rich Text: Plate.js editor with 30+ plugins
  • Advanced: Global Search, Infinite Scroll, Country Dropdown
  • Accessibility: Built on Radix UI primitives
  • Type Safety: Full TypeScript support
  • Styling: Tailwind CSS v4 with custom design system
  • Form Handling: React Hook Form integration
  • AI Integration: AI SDK for suggestions and autocomplete
  • Rich Text: Advanced markdown editor with Plate.js
  • Internationalization: Country flags and localization support
import { Button } from '@repo/ui/button'
import { DataTable } from '@repo/ui/data-table'
import { useToast } from '@repo/ui/use-toast'
import { LineChart } from '@repo/ui/line-chart'
import { Calendar } from '@repo/ui/calendar'

@repo/codegen (packages/codegen)

GraphQL code generator for type-safe API interactions.
Version: 0.0.0
Purpose: Generate TypeScript types and hooks from GraphQL schema
Dependencies:
  1. Define Queries: Create .graphql files in /query directory
  2. Generate Code: Run bun run codegen to generate TypeScript
  3. Use Hooks: Import generated hooks in your components
# query/organization.graphql
query GetOrganization($id: ID!) {
  organization(id: $id) {
    id
    name
    createdAt
  }
}
// Generated hook usage
import { useGetOrganizationQuery } from '@repo/codegen/src/schema'

const { data, loading } = useGetOrganizationQuery({ id: 'org-123' })
Configured via graphql-codegen.yml to:
  • Introspect the Openlane GraphQL API
  • Generate TypeScript types
  • Create React Query hooks
  • Include proper error handling

@repo/dally (packages/dally)

Data Access Layer (DAL) for common patterns and functionality.
Version: 0.0.0 (private)
Language: TypeScript
Exports:
  • ./auth - Authentication utilities
  • ./user - User management functions
  • ./chat - Chat functionality
  • ./ai - AI integration helpers
Build Process:
  • Compiled with TypeScript
  • Supports watch mode for development
  • Type checking enabled
CommandDescription
buildCompile TypeScript to JavaScript
devWatch mode compilation
type-checkVerify types without emitting
lintLint source files

@repo/eslint-config (packages/eslint-config)

Shared ESLint configurations for consistent code quality.
Version: 0.0.0 (private)
Type: ES Module
Exports:
  • ./base - Base ESLint configuration
  • ./next-js - Next.js-specific rules
  • ./react-internal - React component rules
Included Plugins:
  • @next/eslint-plugin-next@^16.1.6 - Next.js best practices
  • eslint-plugin-react@^7.37.5 - React rules
  • eslint-plugin-react-hooks@^7.0.1 - Hooks rules
  • eslint-plugin-turbo@^2.8.9 - Turborepo rules
  • eslint-config-prettier@^10.1.1 - Prettier integration
  • typescript-eslint@^8.30.1 - TypeScript rules

@repo/typescript-config (packages/config-typescript)

Shared TypeScript configurations for consistent type checking.
Version: 0.0.0 (private)
License: MIT
Purpose:
  • Provides base tsconfig.json files
  • Ensures consistent compiler options
  • Shared across all packages and apps

Package Dependency Graph

Cross-Package Usage

The Console app depends on:
  • @repo/ui - All UI components
  • @repo/codegen - GraphQL API client
  • @repo/dally - Authentication and data utilities
  • @repo/typescript-config - TypeScript configuration
  • @repo/eslint-config - Linting rules
Storybook depends on:
  • @repo/ui - Components being documented
  • @repo/typescript-config - TypeScript configuration
  • @repo/eslint-config - Linting rules

Development Workflow

1

Install Dependencies

Run bun install at the root to install all workspace dependencies
2

Build Packages

Run bun run build to build all packages in dependency order
3

Start Development

Run bun run dev to start all apps in parallel with hot reload
4

Make Changes

Edit files in any package - Turborepo will automatically rebuild dependents

Version Management

All packages use "version": "0.0.0" because they are private and not published to npm. Version management is handled at the monorepo level.

Monorepo Structure

Learn about the Turborepo architecture

Tech Stack

Explore the complete technology stack

Build docs developers (and LLMs) love