Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
645c4f2
Add ToggleGroup UI components
dannon Dec 17, 2025
e365a63
Add list/grid view toggle with list as default
dannon Dec 18, 2025
b37424b
Polish list/grid toggle design
dannon Dec 18, 2025
44d0ed2
Add search improvements with URL sync and collapsing hero
dannon Dec 18, 2025
2568ae3
Refactor: consistent styles and cleanup
dannon Dec 19, 2025
dc5c1ad
Fix scroll position when search activates
dannon Dec 19, 2025
cda1589
Use lightweight search index instead of full manifest
dannon Dec 19, 2025
e3e6bcb
Add Playwright tests for search functionality
dannon Dec 19, 2025
0e064e7
Update Tabs components to use brand colors
dannon Dec 19, 2025
0e454b6
Update sidebar to use brand colors with gold accent
dannon Dec 19, 2025
6e8cf06
Update How to Run section with brand colors
dannon Dec 19, 2025
2bb3a70
Update CodeBlock to use brand dark color
dannon Dec 19, 2025
64d859e
Update button variants to use brand colors
dannon Dec 19, 2025
a2f390b
Simplify tabs to clean underline style with gold accent
dannon Dec 19, 2025
3ea6c93
Add design system documentation
dannon Dec 19, 2025
a8b5759
Load search index at build time instead of client fetch
dannon Dec 19, 2025
b9e6ef3
Add site footer with Galaxy project branding
dannon Dec 19, 2025
731dd6c
Cleanup, formatting, fix display of filter counts on landing
dannon Dec 19, 2025
e15604d
Use Astro Image component for header logo
dannon Dec 19, 2025
ba3ea70
Improve category filters with counts and gold underline
dannon Dec 19, 2025
ceb4091
Fix filter hydration mismatch and URL sync
dannon Dec 19, 2025
62a762c
Move category filters to left sidebar, search to results area
dannon Dec 19, 2025
c7fafe1
Fix Vue hydration mismatches with URL params
dannon Dec 19, 2025
b721a56
Fix e2e tests for updated UI layout
dannon Dec 19, 2025
c9eb224
Add PLAYWRIGHT_PORT env var for test port override
dannon Dec 23, 2025
325bd59
Add ESLint with Vue 3 + TypeScript support
dannon Dec 24, 2025
e679f78
Fix Vue attribute ordering per eslint-plugin-vue
dannon Dec 24, 2025
f57e1fd
Fix ESLint errors
dannon Dec 24, 2025
b3d1dea
Remove obsolete auto-scroll tests
dannon Dec 24, 2025
196059c
Fix floating header on landing page
dannon Dec 26, 2025
4136961
Astro update
dannon Dec 26, 2025
74aa358
Clamp to 3 instead of 6 lines in compact mode (e.g., homepage)
dannon Dec 26, 2025
86c1be4
Fix footer position - use natural page scroll instead of app shell la…
dannon Dec 29, 2025
6606bbc
Simplify hero - remove subtitle, update tagline to emphasize open/pee…
dannon Jan 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions scripts/workflow_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,27 @@ def stage_workflow_test_file(test_data, iwc_id):

# Keep original manifest
write_to_json(workflow_data, "workflow_manifest.json")

# Generate lightweight search index for the website
# Contains all fields needed for search AND display (replaces LightweightWorkflow)
search_index = []
for item in workflow_data:
for workflow in item["workflows"]:
definition = workflow.get("definition", {})

search_entry = {
"iwcID": workflow["iwcID"],
"trsID": workflow["trsID"],
"uuid": definition.get("uuid", ""),
"name": definition.get("name", workflow.get("name", "")),
"annotation": definition.get("annotation", "") or "",
"tags": definition.get("tags") or [],
"release": definition.get("release", ""),
"collections": workflow.get("collections", []),
"updated": workflow.get("updated"),
}
search_index.append(search_entry)

search_index_path = os.path.join(OUTPUT_DIR, "search-index.json")
write_to_json(search_index, search_index_path)
print(f"Search index written to {search_index_path} ({len(search_index)} entries)")
160 changes: 160 additions & 0 deletions website/DESIGN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# IWC Website Design System

This document outlines the design rules and patterns used throughout the IWC website.

## Color Palette

The site uses Galaxy project brand colors defined in `tailwind.config.ts`:

| Role | Token | Hex | Usage |
| -------------- | ------------- | --------- | ------------------------------- |
| Primary dark | `ebony-clay` | `#2C3143` | Text, dark backgrounds, borders |
| Secondary text | `chicago` | `#58585a` | Body text, muted content |
| Accent/links | `bay-of-many` | `#25537B` | Links, interactive elements |
| Highlight | `hokey-pokey` | `#D0BD2A` | Active states, accents, CTAs |
| Bright accent | `gold` | `#ffd700` | Filter highlights |

### Rule: No Generic Grays

Always use brand colors instead of Tailwind's default `gray-*`:

```diff
- text-gray-700
+ text-chicago-700

- bg-gray-100
+ bg-ebony-clay-50

- border-gray-200
+ border-ebony-clay-100
```

## Text Hierarchy

| Level | Classes | Example |
| ----------- | ---------------------------------------- | ---------------------------- |
| Headings | `text-ebony-clay-900 font-bold` | Page titles, section headers |
| Subheadings | `text-ebony-clay-800 font-medium` | Step labels, card titles |
| Body | `text-chicago-700` | Paragraphs, descriptions |
| Muted | `text-chicago-500` or `text-chicago-600` | Help text, metadata |
| Links | `text-bay-of-many-700 hover:underline` | All hyperlinks |

## The Gold Accent

The `hokey-pokey-500` gold is the signature accent color. Use it for:

- **Active tab underlines**: `border-b-4 border-hokey-pokey-500`
- **Hover accent bars**: `border-l-4 border-hokey-pokey-500` (animated from left)
- **Primary buttons**: `bg-hokey-pokey-600 hover:bg-hokey-pokey-700`
- **Section heading accents**: `border-l-4 border-hokey-pokey-500 pl-3`

## Interactive Elements

### Hover Accent Bars

List items and cards use a gold accent bar that animates in from the left:

```html
<div class="group relative">
<div
class="absolute left-0 top-0 bottom-0 w-1 bg-hokey-pokey-500
transform origin-left scale-x-0 group-hover:scale-x-100
transition-transform duration-200" />
<!-- content -->
</div>
```

### Transitions

All interactive elements should have smooth transitions:

```
transition-all duration-200
transition-colors duration-200
transition-transform duration-200
```

## Containers & Cards

### Standard Card

```html
<div class="bg-white border border-ebony-clay-100 rounded-lg shadow-sm"></div>
```

### Section Backgrounds

Use tinted backgrounds to create visual separation:

| Background | Usage |
| ------------------- | ------------------------------------ |
| `bg-bay-of-many-50` | Primary actions, highlighted content |
| `bg-ebony-clay-50` | Secondary/technical content |

### Code Blocks

```html
<pre class="bg-ebony-clay-900 text-ebony-clay-100 rounded"></pre>
```

## Components

### Tabs

Clean underline style (not pills):

- **List**: `border-b border-ebony-clay-100`
- **Trigger**: `text-base font-medium text-chicago-600`
- **Active**: `text-ebony-clay-900 border-b-4 border-hokey-pokey-500`

### Buttons

| Variant | Style |
| ------- | ------------------------------------------------------------------ |
| Primary | `bg-hokey-pokey-600 text-white hover:bg-hokey-pokey-700` |
| Outline | `border-ebony-clay-200 text-ebony-clay-800 hover:bg-ebony-clay-50` |
| Ghost | `hover:bg-ebony-clay-100` |
| Link | `text-bay-of-many-700 hover:underline` |

### Badges

```html
<span
class="border border-bay-of-many-200 text-bay-of-many-700
hover:bg-hokey-pokey-500 hover:text-ebony-clay-950
hover:border-hokey-pokey-500"></span>
```

## Layout Patterns

### Sidebar with Accent

```html
<div class="bg-white border border-ebony-clay-100 rounded-lg p-6 shadow-sm">
<h2
class="font-bold text-xl text-ebony-clay-900
border-l-4 border-hokey-pokey-500 pl-3 -ml-3">
Title
</h2>
</div>
```

### Results Header

```html
<p class="text-chicago-600 text-sm">
Found <span class="font-semibold">X</span> <span class="font-bold text-ebony-clay-900"> Category </span> workflows
</p>
```

## Typography

The site uses **Atkinson Hyperlegible** as the primary font (defined in `tailwind.config.ts`), chosen for its readability and accessibility.

## Principles

1. **Consistency over novelty** - Use established patterns rather than inventing new ones
2. **Subtle over heavy** - Prefer light borders, small shadows, understated backgrounds
3. **Clean lines** - Underlines over pills, consistent spacing, aligned elements
4. **Gold is special** - Reserve the gold accent for active/highlighted states only
5. **Accessibility** - Sufficient color contrast, clear focus states, readable fonts
49 changes: 49 additions & 0 deletions website/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import js from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";
import globals from "globals";

export default tseslint.config(
js.configs.recommended,
...tseslint.configs.recommended,
...pluginVue.configs["flat/recommended"],

{
files: ["**/*.vue"],
languageOptions: {
parserOptions: {
parser: tseslint.parser,
},
},
},

{
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
},
rules: {
// Unused vars (allow underscore prefix for intentionally unused)
"@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }],

// Disable Vue formatting rules that conflict with Prettier (tabWidth: 4)
"vue/html-indent": "off",
"vue/max-attributes-per-line": "off",
"vue/html-closing-bracket-newline": "off",
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline": "off",
"vue/first-attribute-linebreak": "off",
"vue/html-self-closing": "off",

// Relax some Vue rules
"vue/multi-word-component-names": "off",
"vue/no-v-html": "off",
},
},

{
ignores: ["dist/", ".astro/", "node_modules/", "public/data/"],
},
);
Loading
Loading