Decisions/2026-05-03-Phase1ScreenInventory.md
Phase 1 Screen Inventory
Scope. Phase 1 = the web crawler module of Crawler Factory, embedded inside the Algolia dashboard at
Data sources → Crawler. This document lists every screen, every state, every modal, every action surface that ships in Phase 1. It is the spec the React refactor reads from.Out of scope. Phase 2 connectors (CMS, KB, video, code), Phase 3+ pipeline stages (Transformer, Enrichment, Indexing, Agent Studio). See
**2026-05-03-EmbeddedArchitecture**Phased Roadmap.Outer chrome assumption. Algolia's outer dashboard chrome (left product rail, Data sources sub-nav, top bar) wraps everything below. We do not draw outer chrome.
Screen inventory at a glance
| # | Screen | Type | Source pattern | Status |
|---|---|---|---|---|
| 1 | Crawler list view | Page | Recipe 17 (toolbar) + Recipe 18 (table) + Recipe 23 (Run-State pill) | New (didn't exist in v1) |
| 2 | Crawler list — empty state | State | Recipe 13 — gated variant | New |
| 3 | "Add new crawler" choice modal | Modal | Recipe 9 with two CTA cards | New |
| 4 | Crawler Factory wizard — Step 1: Discover | Modal step | Recipe 9 + form rows | Refactor of 01-discover-screen.html |
| 5 | Wizard — Step 2: Review (live discovery) | Modal step | Recipe 12 (KPIs) + tree component | Refactor of 02-live-discovery.html |
| 6 | Wizard — Step 2: Review — empty/error states | States | Recipe 13 | New |
| 7 | Wizard — Step 3: Configure | Modal step | Recipe 14 (tabs) + Recipe 1-7 (form rows) | Refactor of 03-configure.html |
| 8 | Wizard — Step 4: Build summary | Modal step | Confirmation card | New (replaces 04-crawl.html) |
| 9 | Wizard — wizard-level error state | State | Recipe 13 + retry CTA | New |
| 10 | Per-crawler focused workspace shell | Workspace | Recipe 15 (3-section nav) + Recipe 22 (RunControlCluster) | New (extends Algolia's existing) |
| 11 | Focused workspace — Overview page | Page | Existing Algolia pattern + KPI tiles | Light refactor |
| 12 | Focused workspace — Configuration page | Page | Existing Algolia setting cards | Use as-is |
| 13 | Focused workspace — Editor page | Page | Existing Algolia code editor | Use as-is |
| 14 | Focused workspace — Suggestions page | Page | Existing Algolia | Use as-is |
| 15 | Focused workspace — URL Inspector | Page | Existing Algolia | Use as-is |
| 16 | Focused workspace — Monitoring | Page | Existing Algolia | Use as-is |
| 17 | Focused workspace — Data Analysis | Page | Existing Algolia | Use as-is |
| 18 | Focused workspace — Path Explorer | Page | Existing Algolia + Crawler Factory metadata layer | Light extension |
| 19 | Focused workspace — Logs Explorer | Page | Existing Algolia | Use as-is |
| 20 | Focused workspace — Settings | Page | Existing Algolia + extra Crawler-Factory metadata | Light extension |
| 21 | Re-crawl confirm modal | Modal | Recipe 24 | New |
| 22 | Stop crawl confirm modal | Modal | Lighter than Recipe 24 — single-line confirm | New |
| 23 | Delete crawler typed-confirm | Modal | Recipe 10 | Use Algolia's |
| 24 | Bulk action confirm modal | Modal | Recipe 9 | New |
Total Phase 1 screens to design or refactor: ~14 net new + 10 reuse-as-is.
Detail per screen
1. Crawler list view
Location: Data sources → Crawler (replaces today's Crawler list page; both Factory-built and hand-built crawlers visible).
Anatomy:
- Page H1: Crawler (matches Algolia today)
- 4 tabs unchanged from Algolia today: Crawlers (active by default) / Domains / External Data / Settings
- Info banner (Recipe 19): Crawler Factory · We can auto-discover your site and build N crawlers per content type. with Try it → link to the choice modal. This banner is dismissable but reappears for new users.
- Toolbar (Recipe 17):
- Left: search input + status filter dropdown (All Status, Idle, Running, Paused, Failed, Done)
- Right: secondary Recrawl failed URLs (bulk action), primary Add new crawler (opens choice modal — Screen 3).
- Table (Recipe 18):
- Columns: Name (clickable link → focused workspace), Run state (Run-State pill — Recipe 23), Last indexed, Author, Source (badge: Factory if built via Crawler Factory, Manual if hand-built — new column), 3-dot row menu.
- Row 3-dot menu: stateful per Run-Control Surface (Pause/Resume/Stop/Crawl now/Open/Settings/Delete).
- Bulk-select (checkbox column): bulk toolbar appears at top of table when ≥1 row checked. Bulk actions: Pause all selected, Resume all selected, Stop all selected, Crawl all selected. Scoped to current page only (per design pack §2.5).
- Pagination at bottom.
States: - Empty (no crawlers yet): see Screen 2. - Loading: skeleton rows. - Error: full-width error banner above the table with retry CTA.
2. Crawler list — empty state
Triggered when: the application has zero crawlers.
Anatomy: Recipe 13 gated variant.
- Centered illustration (small Algolia-style line drawing of a globe + spider).
- Heading: No crawlers yet.
- Body: Crawler Factory can discover your site and build a set of crawlers in 4 steps. Or you can configure one by hand.
- Primary CTA: Use Crawler Factory → opens wizard (Step 1 / Screen 4).
- Secondary CTA: Build manually → opens Algolia's existing manual crawler creation flow.
3. "Add new crawler" choice modal
Triggered when: user clicks the Add new crawler button on the list view.
Anatomy: Modal (Recipe 9 variant) with title How would you like to add a crawler? and two side-by-side CTA cards (each a clickable card, not a radio):
| Card | Title | Description | Indicator |
|---|---|---|---|
| Left | Use Crawler Factory (recommended) | We discover your site, classify the content, and build one crawler per content type. ~4 minutes. | RECOMMENDED pill, top-right |
| Right | Build manually | Configure a single crawler by hand. For advanced or unusual sources. | none |
Footer: Cancel (ghost) only. Clicking a card progresses to the chosen flow.
4. Wizard — Step 1: Discover
Triggered when: user picks Use Crawler Factory from the choice modal.
Anatomy: Modal with header (Add a new crawler title + Step 1 of 4 indicator + close X), body, footer.
Body:
- Section title: Tell us your website
- Single-line functional intro: We'll discover your content structure and create one crawler per content type.
- Form row: Domain label + scheme dropdown (https://) + URL input + inline error slot. Live-validate; disable Continue until valid.
- Suggestion pills below input: algolia.com, shopify.com, stripe.com (ghost-style; clicking fills the input).
- Info banner under the form (Recipe 19): We only read public pages. No login, no scraping behind paywalls.
Footer: Cancel (ghost left) + Continue (primary right). Continue triggers the discovery API call.
States: - Continue button has a loading state (spinner replacing label, button disabled) while the discovery starts. - If the API returns an error (DNS fail, WAF block, malformed URL), inline error below the input.
5. Wizard — Step 2: Review (live discovery)
Triggered when: Step 1 successfully kicks off discovery.
Anatomy: Modal — same shell as Step 1, but the body switches to the live-discovery layout.
Body:
- Section title: <domain> · Discovering content (becomes Review the categories once classifying completes).
- Status line: <spinner> Walking sitemap… → <spinner> Grouping URLs… → <spinner> Classifying content… → Discovery complete — review the categories below. (single live-pulse dot, opacity-only per Recipe 23.)
- Thin progress bar (8px, no shimmer, fills smoothly).
- 4 KPI tiles per Recipe 12: Sitemaps found / Unique URLs / Categories found / Elapsed. Numbers update without ramping animation.
- Tree component:
- Root row: <globe icon> <domain> · <total URL count>
- Branch rows (one per category): [checkbox] <grey icon tile> <category name> <confidence pill> <path glob> left-aligned + <URL count> right-aligned + <3-dot menu> for Rename / Merge with… / Split / Exclude.
- Branches appear in place when classified — no entrance animation.
- In-flight branch: row with <spinner> glyph and the literal text Classifying… and the path glob.
Footer: Back (ghost left) + Confirm categories (primary right). Disabled until all classification is complete and at least 1 category is selected.
States:
- Loading: progress bar partial fill, KPIs ticking, branches appearing.
- Empty (zero categories detected, e.g., site has no sitemap): Recipe 13 gated state inside the modal body. CTA: Try a different domain (returns to Step 1) or Build manually (drops the user out of Factory into Algolia's manual flow).
- Error (discovery failed mid-way): inline error banner with Retry CTA.
- WAF-detected: warning banner: This site appears to block our crawler. Phase 2 will support cookied/authenticated fetch. + CTA to switch to manual.
6. Wizard — Step 2 — empty / error states
Specced inline above. Captured here as a separate row in the inventory because they need explicit design.
7. Wizard — Step 3: Configure
Triggered when: user clicks Confirm categories on Step 2.
Anatomy: Modal — same shell.
Body:
- Section title: Configure your crawlers · <N> categories
- Honest readiness summary line: <X> of <N> ready where ready = (index name set + ≥3 fields + extractor test passed). Highlights the incomplete categories.
- Two-column body:
- Left rail (Recipe 15 nav style): one row per category. Active row has 2px blue left bar. Each row shows a small status pill (pill--success if ready, pill--warning if incomplete) and a per-category URL count.
- Right pane: tabbed (Recipe 14 underline tabs):
- Index name tab: input + description + index-name validation (regex, uniqueness check).
- Fields tab: selectable card grid of detected fields with inline check toggles. Each field: name + type + sample value preview. + Add custom field opens Recipe 9 modal. Apply to all categories toggle per field.
- Test extractor tab: 3-5 sample URLs from the category. Each shows an extracted record preview side-by-side with the source URL. Per-URL Re-run. Aggregate status: All passing / <n> failing with details.
Footer: Back (ghost) + Build crawlers (primary, disabled until all categories ready). Clicking Build crawlers does not start crawling — it creates the N crawler records in Algolia and dismisses to Step 4.
8. Wizard — Step 4: Build summary (replaces old 04-crawl.html)
Triggered when: Step 3 successfully creates the crawlers.
Anatomy: Modal — final step.
Body:
- Large success illustration (Algolia-style minimal).
- Title: <N> crawlers created.
- Body: A vertical list of the created crawlers. Each row:
- Name (<domain>_products etc.)
- Index name
- URL count
- Status: Idle (not yet crawled)
- A per-row link Open → → focused workspace.
- Bulk actions:
- Crawl all now (primary) — fires Crawl now on all N crawlers and dismisses the modal back to the list view.
- Crawl later (ghost) — dismisses the modal back to the list view; user starts crawls manually.
Footer: Same buttons as the body's bulk actions, repeated in standard footer position.
Why no "watch them crawl" inside the wizard: Per the Embedded Architecture decision, the per-crawler progress lives in each crawler's focused workspace's Overview page (Algolia native pattern). The list view's Run-State pill column shows progress at a glance. The wizard's job is creation; status is the workspace's job.
9. Wizard — wizard-level error state
If the wizard fails irrecoverably mid-flow (network down, server error), the modal body switches to a Recipe 13 error variant: title (Something went wrong), body (Your progress was saved. Resume to continue.), CTAs: Resume (re-attempts the failed step) + Cancel (closes the modal; user can resume later from the list view).
10. Per-crawler focused workspace shell
Triggered when: user clicks any crawler name in the list view, or a Open → link from the wizard's Step 4.
Anatomy: Recipe 15 + Recipe 22.
- Top-left: CRAWLER wordmark (matches Algolia today; not CRAWLER FACTORY).
- Center-top: scope indicator — small Crawler eyebrow + crawler avatar + crawler name dropdown (switch between crawlers).
- Top-right: Run-Control Cluster per Recipe 22. Stateful primary button + 3-dot overflow menu. Plus close X to return to the list.
- Left rail: 3 sections (SETUP / STATUS / CONFIGURATION) per Recipe 15. Items match Algolia's existing nav: Overview / Configuration / Editor / Suggestions; URL Inspector / Monitoring / Data Analysis / Path Explorer / Logs Explorer / Indices; External Data / Settings.
- Main content area renders the active page (Screens 11-20).
States of the Run-Control Cluster: stateful per **2026-05-03-RunControlSurface**.
11. Focused workspace — Overview
Largely Algolia's existing pattern (2-overview.png capture). Phase 1 enhancements:
- The KPI tile row at top now includes Crawler-Factory metadata: Source: Factory and Blueprint: <domain>/<category>.
- The "Last complete crawl" card includes a Compare with previous link (Algolia native).
- The Schedule card surfaces our per-crawler schedule edit (Algolia native form pattern).
12-19. Focused workspace pages 12-19
Use Algolia's existing patterns as-is. No Phase 1 redesign needed beyond making sure our React shell renders them via the existing components or close equivalents.
20. Focused workspace — Settings
Algolia's existing Settings page (22-settings.png capture) plus a Crawler Factory Metadata section above the danger zone:
- Source: Factory v1.1
- Blueprint: <blueprint URL> (read-only, copyable).
- Discovery session: <session-id> (read-only, copyable).
- Re-discover from scratch (button): opens Recipe 24 confirm modal scoped at "this rebuilds the blueprint and may produce a different category split."
- Danger zone: Delete this crawler per Recipe 10 (use Algolia's existing).
21. Re-crawl confirm modal
Recipe 24. Triggered from the Run-Control Cluster's "Re-crawl from scratch" overflow item, or from the Settings page's "Re-discover" button.
22. Stop crawl confirm modal
Lighter than Recipe 24 because Stop is reversible by Crawl-now-again. Single-line modal:
- Title: Stop this crawl?
- Body: Indexed records will be kept. The crawler will go back to Idle.
- CTAs: Cancel (ghost) + Stop (primary blue, not red — non-destructive).
23. Delete crawler typed-confirm
Recipe 10 (Algolia native pattern). Use as-is.
24. Bulk action confirm modal
When the user bulk-selects rows on the list view and clicks Stop all selected (or any other bulk action), a confirm modal appears:
- Title: Stop <N> crawlers?
- Body: Indexed records will be kept. All N crawlers will go to Idle.
- CTAs: Cancel + Stop <N> crawlers.
For non-destructive bulk actions (Crawl all selected), no confirm modal — just fire and toast (wait — toasts are banned per design pack; replace with a quiet inline status row above the table for 3 seconds).
Cross-cutting requirements
| Requirement | Where it shows up |
|---|---|
| Empty states | Screens 1 (empty list), 5 (no categories), 8 (no crawlers created — error path) |
| Error states | Screens 1, 5, 9, 21, 22 |
| Loading states | Screens 1 (skeleton table), 4 (continue button), 5 (in-flight discovery), 7 (extractor test) |
| Keyboard accessibility | All screens. Tab order. Focus rings (var(--accent-ring)). Modal focus trap. Escape to close. Enter to submit. |
| Mobile | Out of scope for Phase 1 (Algolia dashboard is desktop-first; the Crawlers area is not mobile-optimized today). |
| Dark mode | Out of scope for Phase 1 (Algolia dashboard light-only; Editor is the only dark surface). |
| i18n | Use plain English copy in Phase 1; i18n-ready structure (no concatenated strings, no hardcoded text in components) but no translations shipped. |
| Telemetry | Every wizard step transition fires an event. Every Run-Control Cluster action fires an event. Every error state fires an event. Naming: crawler_factory.<screen>.<action>. |
What this enables in Session 3
Reading this inventory + the gap analysis (**Session-2b-MockupGapAnalysis**) + the design pack should be enough to:
- Refactor the existing React UI without further design questions.
- Build the missing list view + Run-Control Cluster + Run-State Pill.
- Drop the standalone outer chrome and prepare for embedded integration.
- Ship the Phase 1 build as a self-contained module.
Open architectural questions remaining (deferred to Session 3+):
| Question | Owner |
|---|---|
| Algolia Crawler API support for Pause/Resume — primitive or do we track state? | Backend spike |
| When Crawler Factory integrates into Algolia's actual codebase, what's the integration mechanism (PR to shared repo, federated module, micro-frontend)? | Algolia internal product alignment |
| Bulk action rate-limiting — what's the API ceiling? | Backend spike |
| When does Phase 2 start? Which connector ships next? | Roadmap discussion |