This document describes the standardized process for adding a new featured data library to DUOS. It includes required steps for obtaining and standardizing partner logos, asset requirements, configuration updates, optional styling, and testing guidelines.
Because partner institutions may provide assets in many different formats and quality levels, DUOS must standardize each logo before adding it.
Request the following, in order of preference:
- SVG (preferred)
- High-resolution transparent PNG
If possible, also request:
- Branding guidelines
- Brand resource folders
- Press/media kits
Search for publicly available branding assets:
- Partner’s official website (press kit, media page)
- GitHub organization profile
- Publications, slide decks, conference materials
- Verified Google Images or social media sources
If no high-quality vector is available:
- Place the raster logo into a 256 × 256 transparent canvas.
- Center it with consistent whitespace.
- Remove backgrounds if necessary.
- Export as PNG.
- Optimize the file for performance.
| Requirement | Value |
|---|---|
| Preferred format | SVG |
| Fallback format | Transparent PNG |
| Canvas or viewport size | 256 × 256 |
| Max SVG file size | ≤ 50 KB (hard limit 100 KB) |
| Max PNG file size | ≤ 100 KB (hard limit 150 KB) |
| Optimization | Required (SVGO, pngquant, Squoosh, ImageOptim, etc.) |
Once the asset is finalized, save it to:
src/images/<partner>-logo.svg
Example:
src/images/example-logo.svg
Add a new configuration entry for the data library.
import exampleIcon from 'src/images/example-logo.svg'Ordering rule:
Assignorderto one higher than the current highest order in the file.
'example': {
query: {
match_phrase: {
'study.description': 'Example',
},
},
icon: exampleIcon,
title: 'Example Data Library',
featured: true,
order: <next_available_order>,
},Some logos require a dark background (e.g., Broad Institute style). This is optional and should be used only when the branding requires it.
// Dark card background for Broad and Example
const cardStyle = library.key === 'broad' || library.key === 'example'
? { ...baseCard, background: '#1F3B50', padding: '15px' }
: baseCardimport exampleLogo from '../images/example-logo-white.svg'const logoSrc = library.key === 'broad'
? broadLogo
: library.key === 'example'
? exampleLogo
: library.icon- Logo is SVG or high-resolution transparent PNG
- Logo meets file size limits
- Logo normalized to a 256 × 256 canvas if needed
- Logo optimized using SVGO/pngquant/etc.
- Logo placed in
src/images - Alphabetical import added to
libraryVersions.ts - Configuration entry added with correct query pattern
-
orderassigned as highest existing + 1
- Logo displays correctly in the homepage grid
- Logo maintains correct aspect ratio
- Label shows correctly below the logo
- Tooltip appears for unauthenticated users
- Navigation works when authenticated
- Logo renders properly on phones, tablets, and desktops
- Logo appears in correct sort order
- Logo does not significantly increase homepage load weight
- No updates to UI components are required unless applying special dark-background styling
- The grid layout reads automatically from
libraryVersions.ts - Responsive behavior is handled entirely by the homepage grid styles
For questions about adding or standardizing data library icons, contact the DUOS development team.