React/Vite web application for exploring the OpenTelemetry ecosystem registry data.
Install dependencies:
bun installRun development server:
bun run serveBuild for production:
bun run buildPreview production build:
bun run previewRun linter:
bun run lintFormat code:
bun run formatCheck formatting:
bun run format:checkRun tests:
bun run testsrc/
├── components/ # Shared components
│ ├── layout/ # Header, Footer
│ ├── ui/ # Reusable UI components (buttons, cards, etc.)
│ └── icons/ # SVG icon components
├── features/ # Feature-based modules
│ ├── home/ # Home page
│ ├── java-agent/ # Java Agent explorer
│ ├── collector/ # Collector explorer
│ └── not-found/ # 404 page
├── lib/api/ # Data layer
│ ├── idb-cache.ts # IndexedDB persistence
│ └── javaagent-data.ts # Data fetching with cache
├── hooks/ # React hooks
│ └── use-javaagent-data.ts # Data hooks for components
└── types/ # TypeScript type definitions
└── javaagent.ts # Java Agent data typesWe use IndexedDB as a cache to minimize network requests and build a db in the browser. The data layer consists of three main parts:
-
IDB Cache (
src/lib/api/idb-cache.ts) - Browser-persistent storage with two object stores:metadata(versions, manifests) andinstrumentations(content-addressed data) -
Data API (
src/lib/api/javaagent-data.ts) - Fetching layer that checks IndexedDB first, falls back to network, and caches responses. -
React Hooks (
src/hooks/use-javaagent-data.ts) - Component integration with loading/error states
Example usage:
const versions = useVersions();
const instrumentations = useInstrumentations(version);Theme colors are defined in src/themes.ts and applied via CSS custom properties. Use them in your components:
In JSX with Tailwind classes:
<div className="bg-background text-foreground border border-border">
<span className="text-primary">Primary color</span>
<span className="text-secondary">Secondary color</span>
</div>With inline styles:
<div style={{color: 'hsl(var(--color-primary))'}}>
Custom styled element
</div>Available colors:
primary- Vibrant orange accentsecondary- Bright blue accentbackground- Main backgroundforeground- Main textcard- Card backgroundscard-secondary- Secondary card backgroundsmuted-foreground- Secondary textborder- Border colors