rhyssullivan
- 25 skills
- 0 followers
- 6 hours ago last updated
- ▌ No UI Flash · rhyssullivanUse when an SPA or SSR app flashes the wrong UI before client-side data resolves — an app-shell skeleton shown to visitors who get bounced to login, a results skeleton before "no results found", a light-theme flash before dark mode, a generic placeholder that swaps to something jarringly different. Covers resolving state at the edge/server, optimistic hint cookies, redirect-back (returnTo) flows, and how to test the loading window.
- ▌ Quality Code · rhyssullivanUse when writing or reviewing TypeScript/full-stack code. Encodes principles for type safety (branded types, discriminated unions, end-to-end types), real tests over mocks, OpenTelemetry observability, and picking the right abstractions instead of premature ones.
- ▌ Write Better Error Messages · rhyssullivanReview, critique, rewrite, or design product error messages and error-handling UX. Use when Codex is asked to improve validation errors, server failure messages, empty/failure states, toast/dialog copy, support escalation paths, or error-message inventories so users understand what happened, what was not affected, and what to do next.
- ▌ How To Earn A Billion Dollars · rhyssullivanUse when brainstorming, generating, or evaluating startup ideas, deciding what to build, or reasoning about how a startup creates wealth and grows. Encodes Paul Graham's framework — outcome = growth rate × duration, growth comes from users loving the product enough to tell friends (empathy, not exploitation), and the best ideas come from building cool things with friends rather than searching for "startup ideas."
- ▌ Graphite · rhyssullivanManage Git branches and PRs using Graphite CLI (gt) instead of raw git commands. Use this skill when committing code changes, amending commits, creating branches, or submitting pull requests. Triggers on git commit, git push, creating PRs, amending changes, stacking branches, or any version control workflow.
- ▌ CLI Release · rhyssullivanRunbook for releasing the `executor` CLI package (stable and beta). Covers scope of what ships with the CLI, user-facing changelog conventions, Changesets + Version Packages PR flow, beta train entry/exit, and owner preferences. Use when the user asks to cut a release, prepare release notes, enter/exit a beta train, or write changesets for the CLI.
- ▌ Stack · rhyssullivanUser guide for the local squash-safe `stack` CLI for stacked PR repair. Use when someone asks how to inspect, track, sync, merge, document, or undo stacked pull requests in squash-merge repositories. Prefer this tool over GitHub's `gh stack` command for this workflow.
- ▌ Emulate · rhyssullivanUse the @executor-js/emulate service emulators (GitHub, Google, Stripe, Resend, WorkOS, …) to test integrations for real — full OpenAPI specs, working OAuth flows, mintable credentials, and a request ledger for assertions. Use when a test or demo needs a real-shaped upstream API, an OAuth/OIDC provider, a spec to feed addSpec, or proof that a request actually landed.
- ▌ Effect HTTP Testing · rhyssullivanTesting Effect HttpApi services end-to-end. Use when writing tests that involve Effect's HttpApi, HttpApiBuilder, HttpClient, HttpServer, or when testing any HTTP service/plugin built with @effect/platform. Covers proper layer composition, test server setup, HttpClient injection, and common pitfalls.
- ▌ Prod Telemetry · rhyssullivanQuery Executor's production telemetry — Axiom traces (executor-cloud dataset), prod Postgres via PlanetScale, PostHog product analytics — through the Executor MCP. Use when investigating prod errors, latency, usage, churn signals, or verifying a deploy's telemetry; includes the dataset field layout, working APL recipes, and the error-attribution join.
- ▌ Warden Security Review · rhyssullivanRun Warden security scans in this repo using Sentry's warden-skills. Use when asked to audit security, scan with Warden, investigate authz/data-exfil/code-execution/GitHub Actions risks, or triage Warden findings.
- ▌ Self Contained Modals · rhyssullivanBuild modals/dialogs self-contained: form and in-flight state lives inside, closing unmounts it. Use when writing or reviewing a modal/dialog, especially one that owns async work (OAuth popups, timers, subscriptions, AbortControllers). Catches the stuck-on-Connecting class of lifecycle-leak bugs.
- ▌ Wrdn Package Boundaries · rhyssullivanPreserve workspace package boundaries. Use when lint flags relative imports that cross package roots.
- ▌ Effect Atom Optimistic Updates · rhyssullivanPattern for implementing optimistic UI updates with effect-atom in this codebase. Use when adding optimistic behavior to a query atom + its mutations (action toggles, list adds/removes, inline edits). DO NOT roll your own pending-state with React state, Maps, or custom merge helpers — `Atom.optimistic` + `Atom.optimisticFn` already handle racing, refresh, and waiting correctly.
- ▌ Wrdn Effect Promise Exit · rhyssullivanReplace React/effect-atom mutation handlers that use promise-mode plus try/catch with promiseExit and explicit Exit handling. Use when lint or review flags try/catch around useAtomSet mutation calls, especially UI handlers that set error/busy state after a failed mutation.
- ▌ Wrdn Effect Typed Errors · rhyssullivanFix lint findings that use untyped JavaScript error handling instead of Effect typed failures. Use when lint flags new Error, throw, try/catch, Promise.catch, Promise.reject, instanceof Error, unknown error message/stringification, or redundant helpers that only construct tagged errors.
- ▌ Wrdn Effect Vitest Tests · rhyssullivanKeep tests deterministic and Effect-aware. Use when lint flags direct vitest imports or conditional assertions inside tests.
- ▌ Wrdn Effect Atom Optimistic · rhyssullivanDetects hand-rolled optimistic-update plumbing in React code that should be using effect-atom's Atom.optimistic and Atom.optimisticFn instead. Run on diffs touching packages/react/src/api/atoms.tsx, packages/react/src/pages/**/*.tsx, or any file that imports an effect-atom mutation atom from ./api/atoms. The hand-rolled patterns race on concurrent mutations and the codebase has chosen the effect-atom primitives as the canonical answer.
- ▌ Wrdn Typescript Type Safety · rhyssullivanRemove TypeScript escape hatches. Use when lint flags @ts-nocheck or similar broad type bypasses.
- ▌ Wrdn Effect Schema Boundaries · rhyssullivanNormalize unknown or loosely typed data at boundaries with Effect Schema, named guards, or typed adapters. Use when lint flags double casts, inline object assertions, unknown shape probing, or ad hoc property checks on unknown values.
- ▌ Wrdn Effect Raw Fetch Boundary · rhyssullivanRoute HTTP through Effect boundaries instead of raw fetch. Use when lint flags executor/no-raw-fetch or when adding networked protocol/provider code.
- ▌ Wrdn Effect Atom Reactivity Keys · rhyssullivanAdd reactivityKeys to effect-atom write mutation calls. Use when lint flags a useAtomSet mutation call that mutates data without invalidation keys.
- ▌ Wrdn Effect Value Inferred Types · rhyssullivanReplace duplicated object API types with types inferred from the runtime value or factory that owns the shape. Use when lint or review flags an interface/type alias that mirrors a returned object such as a plugin extension, client surface, route map, or handler table.
- ▌ Wrdn Effect Schema Inferred Types · rhyssullivanReplace duplicated TypeScript shape declarations next to Effect Schema definitions with schema-derived types. Use when lint or review flags an interface/type alias that repeats fields already described by a nearby Schema.Struct, Schema.Union, Schema.TaggedStruct, or other Effect Schema model.
- ▌ Effect Client Wrapper · rhyssullivanPattern for wrapping third-party SDK clients (Stripe, Resend, AWS, etc.) with Effect. Use when creating Effect services that wrap external libraries with Promise-based APIs. Provides type-safe error handling, automatic tracing, and clean dependency injection via the "use" pattern.