feat: The Other Dude v9.0.1 — full-featured email system

ci: add GitHub Pages deployment workflow for docs site

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jason Staack
2026-03-08 17:46:37 -05:00
commit b840047e19
511 changed files with 106948 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
import type { Page } from '@playwright/test'
/**
* Page Object Model for the fleet dashboard (/).
* Encapsulates selectors for dashboard elements.
*/
export class DashboardPage {
constructor(private page: Page) {}
async goto() {
await this.page.goto('/')
}
get heading() {
return this.page.getByRole('heading').first()
}
get sidebar() {
return this.page.locator('nav').first()
}
get deviceRows() {
return this.page.locator('table tbody tr, [role="row"]')
}
get kpiCards() {
return this.page.locator('[class*="card"], [class*="Card"]')
}
}

View File

@@ -0,0 +1,35 @@
import type { Page } from '@playwright/test'
/**
* Page Object Model for the login page (/login).
* Encapsulates selectors and actions for login form interaction.
*/
export class LoginPage {
constructor(private page: Page) {}
async goto() {
await this.page.goto('/login')
}
async login(email: string, password: string) {
await this.page.getByLabel(/email/i).fill(email)
await this.page.getByLabel(/password/i).fill(password)
await this.page.getByRole('button', { name: /sign in/i }).click()
}
get emailInput() {
return this.page.getByLabel(/email/i)
}
get passwordInput() {
return this.page.getByLabel(/password/i)
}
get submitButton() {
return this.page.getByRole('button', { name: /sign in/i })
}
get errorMessage() {
return this.page.locator('.text-error')
}
}