get-api-docs
Use this skill to get documentation for third-party APIs, SDKs or libraries before writing code that uses them to ensure you have…
Common login automation patterns for web apps using Playwright
Claude Code
$ npx -y skills add andrewyng/context-hub --skill login-flows --agent claude-code
Codex
$ npx skills add andrewyng/context-hub --skill login-flows -a codex -y
Cursor
$ npx skills add andrewyng/context-hub --skill login-flows -a cursor -y
Gemini CLI
$ npx skills add andrewyng/context-hub --skill login-flows -a gemini-cli -y
GitHub Copilot
$ npx skills add andrewyng/context-hub --skill login-flows -a github-copilot -y
OpenCode
$ npx skills add andrewyng/context-hub --skill login-flows -a opencode -y
Windsurf
$ npx skills add andrewyng/context-hub --skill login-flows -a windsurf -y
name: login-flows description: Common login automation patterns for web apps using Playwright metadata: updated-on: "2026-02-01" source: community tags: "browser,automation,playwright,login,testing"
Reusable patterns for automating login flows in end-to-end tests.
import { Page } from '@playwright/test';
async function login(page: Page, username: string, password: string) {
await page.goto('/login');
await page.fill('[name="username"]', username);
await page.fill('[name="password"]', password);
await page.click('button[type="submit"]');
await page.waitForURL('/dashboard');
}For OAuth flows that redirect to an external provider:
async function loginWithOAuth(page: Page) {
await page.goto('/login');
await page.click('text=Sign in with Google');
// Handle the OAuth popup or redirect
await page.fill('input[type="email"]', process.env.TEST_EMAIL!);
await page.click('text=Next');
await page.fill('input[type="password"]', process.env.TEST_PASSWORD!);
await page.click('text=Next');
// Wait for redirect back to app
await page.waitForURL('**/dashboard');
}Avoid logging in before every test by saving and reusing browser state:
// global-setup.ts — runs once before all tests
import { chromium } from '@playwright/test';
async function globalSetup() {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('/login');
await page.fill('[name="username"]', 'testuser');
await page.fill('[name="password"]', 'testpass');
await page.click('button[type="submit"]');
await page.waitForURL('/dashboard');
// Save signed-in state
await page.context().storageState({ path: './auth.json' });
await browser.close();
}
export default globalSetup;Then in `playwright.config.ts`:
export default defineConfig({
globalSetup: './global-setup.ts',
use: {
storageState: './auth.json',
},
});For test environments with TOTP-based 2FA:
import { authenticator } from 'otplib';
async function loginWithMFA(page: Page, secret: string) {
await login(page, 'user', 'pass');
// Generate TOTP code
const code = authenticator.generate(secret);
await page.fill('[name="totp"]', code);
await page.click('button[type="submit"]');
await page.waitForURL('/dashboard');
}Coding agents hallucinate APIs and forget what they learn in a session. Context Hub gives them curated, versioned docs, plus the ability to get smarter with every task.
Use this skill to get documentation for third-party APIs, SDKs or libraries before writing code that uses them to ensure you have…
Use when working with Flutter Bloc/Cubit state management. Covers when to choose Bloc vs Cubit, how to use bloc and flutter_bloc…
Use when working with Flutter Riverpod state management. Covers providers, consumers, refs, containers, overrides, async state,…
Use this skill for intelligent document processing and content extraction using LandingAI's Agentic Document Extraction (ADE).…
Use this skill for building end-to-end document processing workflows and pipelines using LandingAI ADE. Trigger when users need…
Add Olakai monitoring to existing AI code — wrap your LLM client, configure custom KPIs, and validate the integration end-to-end
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.