Emil Kowalski
- 18 skills
- 0 followers
- 43k repo stars
- 6 days ago last updated
- ▌ Write Swift · emilkowalskiHow to write modern Swift well — modeling with value types, Swift 6 data-race safety and approachable concurrency (@concurrent, main-actor-by-default, actors, task groups), protocols and generics (some vs any), API design, performance and ARC, Swift Testing, macros, and the modern language features agents don't know about yet. Use when writing, reviewing, or migrating Swift, or when a concurrency error, a hang, a data race, a retain cycle, or a performance problem needs fixing.
- ▌ Animate Expo · emilkowalski bundleBuild animations in React Native and Expo, making the decisions in the order that determines whether they feel right — should it animate, which thread it runs on, which properties, spring or timing, how the gesture hands off, how it degrades. Writes the implementation with Reanimated, Gesture Handler, Expo Router and expo-haptics. Use when animating anything in an Expo app, adding gestures, sheets, screen transitions, press feedback or haptics, or fixing motion that stutters on device. For web animation use `animate`.
- ▌ Mobile Native · emilkowalskiMake a web app feel native on a phone — the small CSS and meta-tag fixes that separate "a website in a browser" from something that feels installed. Covers sticky hover states, tap highlight flashes, the 100vh bug, inputs that zoom the page, laggy taps, pull-to-refresh hijacking scroll, content under the notch, long-press selecting button text, carousels that scroll the wrong way, mismatched status bars, and the rule that you test on real hardware. Use when a web app is being built for or reviewed on mobile, when something "works in Chrome but feels wrong on my phone", when building a PWA, a bottom sheet, a carousel, a full-screen layout, or any touch interaction. For motion itself use animate; for React Native use animate-expo.
- ▌ Break UI · emilkowalski bundleTry to break a piece of UI by feeding it worst-case data — long names, unbreakable emails, one-letter names, missing fields, huge counts, zero items, long labels, non-Latin text, emoji, extreme numbers — then render it behind a "Demo data / Worst case" toggle and report everything that broke, with the fix for each. Use when the user asks to stress-test, break, or find edge cases in a component or screen, or to "try the worst case". For visual design critique use emil-design-eng; for motion use review-animations.
- ▌ Prototype · emilkowalski bundleBuild multiple genuinely different versions of a UI piece you describe, rendered behind a visual picker so you can flip through them live and promote the one that feels right. Only runs when explicitly invoked; it does not trigger on its own.
- ▌ Ask Sonner · emilkowalski bundleGuide to Sonner, the React toast library — install and wire up the Toaster, pick the right toast() call, promise and loading toasts, updating, dismissing and persisting toasts, styling, theming and icons, positioning and multiple toasters. Use when working with Sonner or troubleshooting it — toasts that don't appear, appear twice, lose their styles, ignore Tailwind classes, sit behind a modal, or don't follow dark mode.
- ▌ Animate · emilkowalski bundleBuild an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Writes the implementation. Use when asked to animate something, add motion, make a component feel alive, or build a transition. For critiquing existing motion use review-animations; for auditing a whole codebase use improve-animations.
- ▌ Prototype 3 · emilkowalski bundleBuild multiple genuinely different versions of a UI piece you describe, rendered behind a visual picker so you can flip through them live and promote the one that feels right. Only runs when explicitly invoked; it does not trigger on its own.
- ▌ Pick UI Library · emilkowalskiPick the right library for a given frontend task from a curated, opinionated list — numbers, OTP inputs, charts, command menus, virtualization, drag and drop, toasts, state, styling, and more. Only runs when explicitly invoked; it does not trigger on its own.
- ▌ Emil Design Eng 2 · emilkowalskiProvides design engineering guidance focused on animation principles, UI review, and interface craftsmanship.
- ▌ Apple Design · emilkowalskiTranslates Apple's fluid interface design principles—spring animations, direct manipulation, interruptibility, and velocity handoff—into web implementations using CSS, Pointer Events, and spring libraries like Motion/Framer Motion.
- ▌ Improve Animations · emilkowalskiAudits a codebase's animation and motion code, then produces a prioritized list of findings and self-contained implementation plans for other agents to execute.
- ▌ Review Animations 2 · emilkowalski bundleReviews animation and motion code against a high craft bar derived from Emil Kowalski's design engineering philosophy, flagging issues with easing, duration, performance, and accessibility.
- ▌ Animation Vocabulary 2 · emilkowalskiReverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term, helping users name effects for prompting AI or designers.
- ▌ Find Animation Opportunities · emilkowalskiSweeps a codebase or UI for places that would genuinely benefit from motion, applying a strict gate to reject over-animation, and proposes precise animation recipes without implementing them.
- ▌ Emil Design Eng · emilkowalskiEncodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great.
- ▌ Review Animations · emilkowalski bundleReviews animation and motion code against a high craft bar derived from Emil Kowalski's design engineering philosophy. Default to flagging; approval is earned.
- ▌ Animation Vocabulary · emilkowalskiLook up the precise term for a web animation or motion effect from a vague description, such as 'the bouncy thing when a popover opens' → 'Pop in'.