Framer Motion & Choosing No-Code vs. Custom Code
Framer Motion: A Separate, Code-Based Library
// Framer Motion (now sometimes "Motion") is a standalone npm-installed
// React animation library -- distinct from the visual, no-code product,
// but sharing the same animation-focused heritage
import { motion } from 'framer-motion'
function DraggableCard() {
return (
<motion.div
drag
dragConstraints={{ left: 0, right: 300 }}
animate={{ scale: 1 }}
whileHover={{ scale: 1.05 }}
>
Card content
</motion.div>
)
}
// A developer writes this directly in a React codebase -- a genuinely
// different tool/audience than a designer using the visual productWhy Reach for Framer Motion Over Raw CSS
Spring physics, gesture-based drag interactions, orchestrated multi-element sequences, and animating between layout states are all tricky to hand-implement in raw CSS. Framer Motion provides a higher-level API for these patterns with meaningfully less implementation effort.
The Real Tradeoff: No-Code vs. Custom Code
No-code (Framer): faster time-to-launch, lower technical barrier, works well within the tool's capability boundaries.
Custom code: essentially unlimited flexibility for complex or unusual requirements, at the cost of more development time/cost.
A project needing genuinely custom backend integration beyond what the tool supports may need an escape hatch, a different tool, or eventual migration to hand-coded implementation.
Neither choice is universally correct -- reassess periodically as a project's actual requirements evolve past what was true at the initial tooling decision.
Testing on Real Devices
A desktop browser's simulated mobile viewport approximates but doesn't perfectly replicate real touch-interaction feel or device performance. Previewing directly on an actual phone catches discrepancies -- a swipe gesture that feels different, text that's harder to read at real scale -- a simulation alone might miss.
Keep your own version of these notes — editable, searchable, and organised by your stack.
Start free