35
Flows
35
Passed
0
Failed
212
Steps
0
Failed steps
88.08s
Duration
Target
Browser Flows
Home page loads with hero and navbar
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.86s |
| Page title mentions Marcelo Costa | passed | 13ms |
| Primary navbar is present | passed | 46ms |
| Hero name is visible | passed | 11ms |
Cookie consent accept hides banner and stores consent
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.86s |
| Cookie banner is shown | passed | 39ms |
| Click "Accept all cookies" | passed | 70ms |
| Banner is dismissed | passed | 9ms |
| Consent cookie is stored | passed | 2ms |
Navbar navigates to the Side Projects route
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.64s |
| Dismiss cookie banner | passed | 123ms |
| Click "Side Projects" nav link | passed | 36ms |
| URL becomes /side-projects | passed | 69ms |
| Side Projects page renders | passed | 6ms |
| Page has visible content | passed | 8ms |
Navbar navigates to the Frameworks route
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.68s |
| Dismiss cookie banner | passed | 108ms |
| Click "Frameworks" nav link | passed | 59ms |
| URL becomes /frameworks | passed | 86ms |
| Frameworks page renders | passed | 10ms |
| Heading reads "Testing Frameworks" | passed | 19ms |
Navbar navigates to the Test Results route
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.70s |
| Dismiss cookie banner | passed | 122ms |
| Click "Test Results" nav link | passed | 55ms |
| URL becomes /test-results | passed | 122ms |
| Page heading reads "This site tests itself" | passed | 16ms |
| CI metric cards render | passed | 13ms |
| Four code samples are highlighted | passed | 152ms |
| Report links point at the static HTML reports | passed | 16ms |
Contact form renders with required fields
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.68s |
| Dismiss cookie banner | passed | 124ms |
| Open contact modal | passed | 526ms |
| Field #cv-email exists | passed | 21ms |
| Field #cv-name exists | passed | 10ms |
| Field #cv-subject exists | passed | 7ms |
| Field #cv-message exists | passed | 2ms |
| Field #submit-btn exists | passed | 5ms |
Footer renders portfolio message
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.74s |
| Footer message is present | passed | 56ms |
Side Projects page renders all content sections
| Step | Status | Duration |
|---|---|---|
| Open /side-projects directly | passed | 1.36s |
| Page container renders | passed | 10ms |
| At least one section heading is present | passed | 14ms |
| Project cards / content blocks render | passed | 13ms |
Frameworks page lists framework cards
| Step | Status | Duration |
|---|---|---|
| Open /frameworks directly | passed | 1.43s |
| Framework grid renders | passed | 9ms |
| At least one framework card with a title | passed | 14ms |
Mobile menu toggle reveals navigation and navigates
| Step | Status | Duration |
|---|---|---|
| Switch to a mobile viewport | passed | 2ms |
| Navigate to home page | passed | 1.52s |
| Dismiss cookie banner | passed | 88ms |
| Hamburger toggle is visible | passed | 4ms |
| Open the mobile menu | passed | 14ms |
| Menu is marked open | passed | 5ms |
| Tap "Side Projects" from the menu | passed | 32ms |
| URL becomes /side-projects | passed | 2ms |
Brand logo returns home from a route
| Step | Status | Duration |
|---|---|---|
| Open /frameworks directly | passed | 1.41s |
| Dismiss cookie banner | passed | 41ms |
| Click the brand logo | passed | 22ms |
| URL returns to home | passed | 38ms |
| Hero is visible again | passed | 89ms |
Contact form accepts input
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.67s |
| Dismiss cookie banner | passed | 108ms |
| Open contact modal | passed | 448ms |
| Type into name, email, subject and message | passed | 443ms |
| Entered values are reflected | passed | 1ms |
Cookie consent decline stores choice and survives reload
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.78s |
| Click "Decline" | passed | 100ms |
| Banner is dismissed | passed | 4ms |
| Declined cookie is stored | passed | 2ms |
| Reload the page | passed | 1.50s |
| Banner stays hidden after reload | passed | 63ms |
Theme toggle switches theme and persists across reload
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.71s |
| Dismiss cookie banner | passed | 115ms |
| Click the theme toggle | passed | 70ms |
| <html data-theme> becomes "dark" | passed | 25ms |
| Choice is saved to localStorage | passed | 2ms |
| Reload the page | passed | 1.48s |
| Theme is kept after reload | passed | 6ms |
Language switcher changes locale and URL prefix
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.90s |
| Dismiss cookie banner | passed | 181ms |
| Open the language menu | passed | 43ms |
| Language menu is expanded | passed | 8ms |
| Pick Português | passed | 44ms |
| URL gains the /pt prefix | passed | 246ms |
| Hero is translated to Portuguese | passed | 9ms |
| Switch back to English | passed | 266ms |
| URL drops the language prefix | passed | 119ms |
| Hero is back in English | passed | 4ms |
Language menu closes on Escape and returns focus
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 2.00s |
| Dismiss cookie banner | passed | 198ms |
| Open the language menu | passed | 62ms |
| Focus lands on the active option | passed | 14ms |
| Press Escape | passed | 15ms |
| Menu collapses | passed | 19ms |
| Focus is back on the trigger | passed | 2ms |
Localized deep link renders the Spanish Frameworks page
| Step | Status | Duration |
|---|---|---|
| Open /es/frameworks directly | passed | 2.00s |
| Heading is in Spanish | passed | 8ms |
| Language trigger shows ES | passed | 3ms |
Navbar navigates to the Articles route
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.94s |
| Dismiss cookie banner | passed | 130ms |
| Click "Articles" nav link | passed | 54ms |
| URL becomes /articles | passed | 118ms |
| Heading reads "Published Articles" | passed | 10ms |
| Article cards render | passed | 39ms |
Articles search filters, shows empty state and resets
| Step | Status | Duration |
|---|---|---|
| Open /articles directly | passed | 1.55s |
| Dismiss cookie banner | passed | 58ms |
| Type a query with no matches | passed | 403ms |
| Empty state is shown | passed | 8ms |
| Query is mirrored into ?q= | passed | 1ms |
| Click "Clear filters" in the empty state | passed | 141ms |
| Search box is cleared and all cards return | passed | 7ms |
Articles theme tab filters cards to match its count
| Step | Status | Duration |
|---|---|---|
| Open /articles directly | passed | 1.69s |
| Dismiss cookie banner | passed | 54ms |
| Click the "Cypress" theme tab | passed | 87ms |
| Tab is selected | passed | 61ms |
| URL carries ?theme=cypress | passed | 3ms |
| Rendered card count equals the tab badge | passed | 5ms |
Articles tag deep link pre-selects the tag pill
| Step | Status | Duration |
|---|---|---|
| Open /articles?tag=cypress directly | passed | 1.59s |
| Tag disclosure is expanded | passed | 14ms |
| "#cypress" pill is active | passed | 7ms |
| Filter status summarises the tag | passed | 3ms |
Blog post renders from a direct link and navigates back
| Step | Status | Duration |
|---|---|---|
| Open /articles/home-assistant-made-me-love-automation-flows-in-real-life directly | passed | 1.51s |
| Post title is rendered | passed | 7ms |
| Document title names the post | passed | 1ms |
| Post body has content | passed | 8ms |
| Dismiss cookie banner | passed | 23ms |
| Click "Back to Published Articles" | passed | 26ms |
| URL returns to /articles | passed | 2ms |
Unknown blog slug shows the not-found page
| Step | Status | Duration |
|---|---|---|
| Open a non-existent post | passed | 1.29s |
| Not-found message is shown | passed | 7ms |
| Back link points to /articles | passed | 7ms |
Frameworks category tabs filter the sections
| Step | Status | Duration |
|---|---|---|
| Open /frameworks directly | passed | 1.38s |
| Dismiss cookie banner | passed | 44ms |
| "All" shows every section | passed | 10ms |
| Click the "E2E" tab | passed | 22ms |
| Tab is pressed | passed | 4ms |
| Only the E2E section remains | passed | 8ms |
| E2E grid still lists cards | passed | 8ms |
Home shows the last CI run, the career rail and shipped builds
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.74s |
| Dismiss cookie banner | passed | 108ms |
| Hero keeps two columns: claim and portrait | passed | 4ms |
| CI run log finishes reading the last run | passed | 9ms |
| Shipped stage pins three builds and swaps to the step in view | passed | 752ms |
| Stack lists the production toolchain by category | passed | 134ms |
| Rail carries five year rows that count their metric in view | passed | 594ms |
| Nothing on the home page collapses | passed | 15ms |
| Shipped step deep-links to its project | passed | 105ms |
Contact modal closes via button, Escape and backdrop
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.72s |
| Dismiss cookie banner | passed | 108ms |
| Open contact modal | passed | 435ms |
| Close with the × button | passed | 178ms |
| Re-open and close with Escape | passed | 659ms |
| Re-open and close by clicking the backdrop | passed | 700ms |
| Body scroll lock is released | passed | 2ms |
Contact form blocks an empty submission
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.83s |
| Dismiss cookie banner | passed | 113ms |
| Open contact modal | passed | 468ms |
| Click Send with every field empty | passed | 119ms |
| Form reports invalid fields | passed | 19ms |
| Invalid email is rejected | passed | 88ms |
| No request reached Web3Forms | passed | 501ms |
Contact form shows success when the API accepts
| Step | Status | Duration |
|---|---|---|
| Stub the Web3Forms API (success) | passed | 3ms |
| Navigate to home page | passed | 1.78s |
| Dismiss cookie banner | passed | 86ms |
| Open contact modal | passed | 325ms |
| Fill in a valid message | passed | 1.08s |
| Submit reaches the stubbed API | passed | 60ms |
| Success message is shown | passed | 100ms |
| Form is reset | passed | 5ms |
Contact form shows an error when the API rejects
| Step | Status | Duration |
|---|---|---|
| Stub the Web3Forms API (failure) | passed | 1ms |
| Navigate to home page | passed | 1.75s |
| Dismiss cookie banner | passed | 95ms |
| Open contact modal | passed | 330ms |
| Fill in a valid message | passed | 1.07s |
| Submit reaches the stubbed API | passed | 63ms |
| Error message is shown | passed | 101ms |
| Entered values are kept for a retry | passed | 5ms |
Hero CI log opens Test Results and the in-browser runner completes
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.84s |
| Dismiss cookie banner | passed | 115ms |
| Click the CI log dashboard link | passed | 29ms |
| URL becomes /test-results | passed | 55ms |
| In-browser runner is ready | passed | 83ms |
| Click "Run All Tests" | passed | 157ms |
| Runner reaches a completed state | passed | 563ms |
| Every in-browser test reports a result | passed | 12ms |
Footer links navigate and open the contact modal
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.72s |
| Dismiss cookie banner | passed | 114ms |
| Click the footer "Frameworks" link | passed | 33ms |
| URL becomes /frameworks | passed | 63ms |
| Page is scrolled back to the top | passed | 1.06s |
| Click the footer "Send message" button | passed | 70ms |
| Contact modal opens | passed | 6ms |
Mobile menu closes on Escape
| Step | Status | Duration |
|---|---|---|
| Switch to a mobile viewport | passed | 1ms |
| Navigate to home page | passed | 1.49s |
| Dismiss cookie banner | passed | 103ms |
| Open the mobile menu | passed | 34ms |
| Toggle reports expanded | passed | 4ms |
| Press Escape | passed | 3ms |
| Menu closes | passed | 369ms |
| Toggle reports collapsed | passed | 9ms |
Skip link moves focus to main content
| Step | Status | Duration |
|---|---|---|
| Navigate to home page | passed | 1.84s |
| Tab to the skip link | passed | 28ms |
| Activate it | passed | 33ms |
| Focus is on #main-content | passed | 24ms |
External links open safely in a new tab
| Step | Status | Duration |
|---|---|---|
| Check target="_blank" links on / | passed | 1.84s |
| Check target="_blank" links on /frameworks | passed | 1.30s |
| Check target="_blank" links on /articles | passed | 1.24s |
| Check target="_blank" links on /side-projects | passed | 1.15s |
Main routes load without uncaught errors
| Step | Status | Duration |
|---|---|---|
| Load / | passed | 1.74s |
| Load /side-projects | passed | 922ms |
| Load /frameworks | passed | 1.16s |
| Load /articles | passed | 816ms |
| Load /blog/home-assistant-made-me-love-automation-flows-in-real-life | passed | 1.49s |