A web application for browsing and filtering research datasets. Find it here: Trident Data Hub.
interface Dataset {
researcher: string;
researcherEmail: string;
institution: string;
datasetName: string;
datasetDescription: string;
datasetType: string;
disease: string;
drug: string;
url: string;
tags: string[];
}Datasets are managed in a Google Sheet and synced to src/data.tsv via a script that scrubs researcher emails before committing.
Via GitHub Actions (recommended):
- Add the sheet ID as a repository variable:
SHEET_ID - Go to Actions > Sync Google Sheet > Run workflow
- The workflow fetches the sheet, scrubs emails, and commits the updated
data.tsv. The site redeploys automatically.
Locally:
SHEET_ID=<sheet-id> pnpm sync- Use tabs between columns (not spaces)
- Consistent dataset types for effective filtering
- Use "NA" for non-applicable disease/drug fields
- DOI links preferred when available
- Descriptive names including manuscript titles when applicable
- Tag-based filtering — filter by institution and custom tags using clickable pills
- Sortable columns — click column headers to sort ascending/descending
- Responsive design — works on desktop, tablet, and mobile
- Clickable contact — email addresses link directly to
mailto:
- React 19 + TypeScript
- Vite for development and building
- TanStack Table for data grid functionality
- pnpm for package management
TridentDataHub/
├── src/
│ ├── types.ts # Dataset and FilterState type definitions
│ ├── data.tsv # Dataset records (tab-separated values)
│ ├── data.ts # TSV parser and filter option exports
│ ├── App.tsx # Main application component
│ ├── main.tsx # Entry point
│ ├── styles.css # Global styles and CSS variables
│ └── index.css # Base styles
├── public/
│ ├── white_horz_logo.jpg
│ └── trident-icon.svg
├── scripts/
│ └── sync-sheet.ts # Fetches Google Sheet and scrubs emails
├── index.html
├── package.json
├── pnpm-lock.yaml
└── vite.config.ts
pnpm install # Install dependencies
pnpm dev # Start development server
pnpm build # Build for production
pnpm preview # Preview production build
pnpm lint # Run ESLint
pnpm sync # Sync data from Google Sheet (requires SHEET_ID env var)