Dashboard shell

Workspace Overview

Static dashboard shell for the authenticated product experience. Backend routes are ready, but this page still uses demo data and does not call APIs, databases, workers, queues, or providers.

Site

Not connected

Not connected

Static shell only. No website validation, crawl, or database write exists.

Google Search Console

Future gate

Provider-free

Google OAuth and GSC sync remain blocked by 0.2G gates.

Crawl

Placeholder

Not running

No crawler, queue, worker, or external request exists in Milestone 1B.

Recommendations

Placeholder

Static only

Recommendation data will require evidence from future GSC and crawl systems.

Reports

Future gate

Unavailable

Report generation and delivery remain placeholder-only.

Safe Frontend Boundary

These cards and sections are static UI placeholders. They do not read customer data, accept account identifiers, start scans, run crawls, call workers, call Google APIs, generate reports, update tasks, or calculate real account health.

Auth Status

Static
Not loaded in UI shell

The dashboard has a trusted-session backend, but this static card does not read cookies or call auth APIs.

Existing routes: GET /api/identity/me and POST /api/auth/logout

If no trusted session is available, future UI should show a safe signed-out state.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

10C keeps this as a status surface until approved client wiring is added.

Account Status

Static
Profile unavailable in static shell

The identity route can return only a safe user id and email after trusted session resolution.

Existing route: GET /api/identity/me

Permission or session failures should render generic access messages.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Future account UI can read the identity route without sending client-selected account context.

Billing Status

Static
Live billing status not available

Checkout exists, but there is no safe billing-status read route yet. This card must not invent subscription state.

Existing action route: POST /api/billing/checkout

Plan and subscription details stay unknown until a safe read route is approved.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Future billing UI may offer checkout only after permission-aware client wiring is approved.

Projects

Future API wiring

Project list and create flow will use the trusted project API route.

Planned route: /api/seo/projects

Placeholder state

No connected projects are loaded in this static shell.

Tracked Keywords

Future API wiring

Keyword management will use the metered tracked keyword service through API routes only.

Planned route: /api/seo/projects/[projectId]/keywords

Placeholder state

No tracked keywords are loaded yet.

Crawl Targets

Future API wiring

Crawl target inventory will use the safe crawl target API route and inventory usage metric.

Planned route: /api/seo/projects/[projectId]/crawl-targets

Placeholder state

No crawl targets are loaded yet.

Crawl Runs

Future API wiring

Crawl run UI will schedule metadata only and will never call internal processing systems.

Planned route: /api/seo/projects/[projectId]/crawl-runs

Placeholder state

No crawl run history is loaded yet.

Reports

Future API wiring

Report preview UI will display sanitized app-owned summaries only.

Planned route: /api/seo/projects/[projectId]/reports/preview

Placeholder state

No report preview is loaded yet.

Billing

Future API wiring

Billing UI will show safe plan and usage state without provider internals.

Planned route: /api/billing/checkout

Placeholder state

No live billing state is loaded yet.

Account

Future API wiring

Account UI will use trusted session state from the identity route.

Planned route: /api/identity/me

Placeholder state

No trusted account profile is loaded yet.

Project workspace

SEO Projects

A future project list belongs here, but this shell does not load or invent project rows.

List: Project list placeholder: no live projects are loaded in this static dashboard.

Create: Create project placeholder: future UI should submit only safe project fields through approved routes.

Access: Permission placeholder: project actions must use trusted session checks on the server.

Empty: Empty state: no projects are available in this static shell.

Error: Error state: show a generic retry message without request or storage details.

Future: Future wiring can connect to the existing project API from a reviewed client boundary.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Site inventory

Project Sites

A future site list belongs here, but this shell does not load or invent site rows.

List: Site list placeholder: no live sites are loaded in this static dashboard.

Add: Add site placeholder: future UI should submit only safe domain and display fields through approved routes.

Access: Entitlement placeholder: site actions must respect project ownership and plan limits on the server.

Empty: Empty state: no sites are available in this static shell.

Error: Error state: show safe guidance without provider, request, worker, or storage details.

Future: Future wiring can connect to the existing site API from a reviewed client boundary.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Keyword workspace

Tracked Keywords

A future keyword list belongs here, but this shell does not load or invent keyword rows.

List: Keyword list placeholder: no live keyword rows or position values are loaded in this static dashboard.

Add: Add keyword placeholder: future UI should submit only safe keyword, device, locale, and country fields through approved routes.

Access: Permission and entitlement placeholder: keyword actions must be checked by trusted server boundaries.

Device placeholderLocale placeholderCountry placeholder

Empty: Empty state: no tracked keywords are available in this static shell.

Error: Error state: show safe retry guidance without search-result payloads or storage details.

Future: Future wiring can connect to the existing keyword API from a reviewed client boundary.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Target inventory

Crawl Targets

A future crawl target list belongs here, but this shell does not load or invent target rows.

List: Target list placeholder: no live target rows are loaded in this static dashboard.

Add: Add target placeholder: future UI should submit only safe URL fields through approved routes.

Normalize: Normalized URL placeholder: canonical URL display belongs here after reviewed API wiring.

Access: Permission and entitlement placeholder: target actions must be checked by trusted server boundaries.

Empty: Empty state: no crawl targets are available in this static shell.

Error: Error state: show safe retry guidance without page content or storage details.

Future: Future wiring can connect to the existing crawl target API from a reviewed client boundary.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Run scheduling

Crawl Runs

A future crawl run history belongs here, but this shell does not load or invent run rows.

Schedule: Schedule placeholder: future UI should request scheduling through approved routes only.

Repeat safety: Repeat schedule requests should resolve to one safe scheduling window for the same target set.

Background: Background work placeholder: internal processing details stay hidden from the UI.

Queued placeholderRunning placeholderCompleted placeholderFailed placeholder

Empty: Empty state: no crawl runs are available in this static shell.

Error: Error state: show safe retry guidance without page content or processing details.

Future: Future wiring can connect to the existing crawl run scheduling API from a reviewed client boundary.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Computed preview

Report Preview

A future report preview belongs here, but this shell does not load or invent report rows.

Project: Project summary placeholder: no live project report data is loaded in this static dashboard.

Site: Site summary placeholder: no live site report data is loaded in this static dashboard.

Keywords: Tracked keyword summary placeholder: no live keyword report data is loaded in this static dashboard.

Crawl run: Crawl run summary placeholder: no live crawl run report data is loaded in this static dashboard.

Findings: Sanitized findings summary placeholder: future UI should display summarized safe finding counts only.

Empty: Empty state: no report preview is available in this static shell.

Error: Error state: show safe retry guidance without page content, storage details, or processing details.

Future: Future wiring can connect to the existing report preview API from a reviewed client boundary.

Delivery: Document download and email delivery remain unavailable until separately reviewed.

Loading: Use a stable placeholder while reviewed client wiring is absent.

Unavailable: Show that reviewed records are not available in this static shell.

Access: Use generic access guidance until trusted checks are connected.

Limit: Show a plan-limit placeholder without claiming measured usage.

Unknown: Keep unknown states neutral and avoid internal implementation details.

Static Site Summary

Demo site

Static Demo Bakery

example-small-business.test

Static demo placeholder only. No real site, account, database record, crawl, or provider connection exists.

Static Sync Status

Provider-free demo status

Last successful sync: No live sync has run

Static placeholder only. This does not connect to Google Search Console, run sync jobs, or read customer data.

Static Recommendation List

Clarify the services page title

/services

Static demo evidence summary only: placeholder crawl data suggests the title is short and non-specific.

A clearer title may help users understand the page topic. Ranking or traffic outcomes are not promised.

Impact: MediumConfidence: MediumEffort: Low

Suggested static task: Draft a specific title that includes the core service and local business context.

Review the menu page search snippet

/menu

Static demo evidence summary only: placeholder GSC-style data marks impressions high and CTR low.

Snippet improvements should be reviewed against fresh evidence before action. Result lift is not promised.

Impact: HighConfidence: MediumEffort: Medium

Suggested static task: Compare the title and meta description with the page intent and make the snippet more specific.

Add contextual internal links to catering

/catering

Static demo evidence summary only: placeholder crawl data shows few internal links pointing to the catering page.

Internal links can improve discovery and context. Ranking movement is not promised.

Impact: MediumConfidence: HighEffort: Low

Suggested static task: Add relevant links from service, menu, and contact pages where the catering topic naturally appears.

Static Task Workflow

Static task data only. These controls do not update records, assign users, or connect to a database.

New: 1Viewed: 1In progress: 1Completed: 1
  • Draft a clearer services page title

    Status: in progress. Owner: Static demo owner.

  • Review menu page title and description

    Status: new. Owner: Static demo owner.

  • Identify three natural internal link placements

    Status: viewed. Owner: Static demo owner.

  • Mark report follow-up as reviewed

    Status: completed. Owner: Static demo owner.

Static Account Health

Static yellow

Static health summary only. It does not read login, billing, support, sync, crawl, or monitoring data.

  • GSC connected

    Google OAuth is not implemented.

  • Site crawled

    Crawler and jobs are not implemented.

  • Recommendations viewed

    Static demo recommendations are visible only.

  • Fresh sync

    No live sync status exists in this milestone.

Safe Loading, Empty, And Error Patterns

loading

Loading safely

Use stable skeleton rows and avoid exposing request, session, provider, or queue details.

empty

Nothing here yet

Explain the next safe action without inventing data or asking for account identifiers.

error

Something needs attention

Show safe retry guidance for 400, 401, 403, 409, 429, and 500 responses without leaking internals.

permission_denied

Access not available

Explain that the user may need workspace access without revealing authorization details.

entitlement_limited

Plan limit reached

Use neutral upgrade or contact guidance without claiming measured values.

unavailable

Unavailable in this shell

Make clear that the UI is waiting for reviewed API wiring and is not loading records.

future_wiring

Future wiring

Point to the future user flow without exposing route internals or implementation details.

unknown

Unknown state

Prefer a calm neutral message when the UI cannot safely determine the current state.