Side-by-side, plain English.
JavaScript vs TypeScript
Same language, different safety net.
JavaScript
- • Loose — any shape, anywhere
- • No build step required
- • Errors at runtime
- • Fast to start
Pick when
- Tiny script
- One-off prototype
TypeScript
- • Strict — declared shapes
- • Build step (or transpile)
- • Errors at compile time
- • Slower to start, faster to evolve
Pick when
- Anything you'll ship
- Any project where an AI agent edits code
| Axis | JavaScript | TypeScript |
|---|
| Bug catching | Runtime | Build time |
| Editor help | Limited | Excellent autocomplete |
| AI agents | Free to invent shapes | Constrained by types |
Frontend vs Backend
What the user sees vs what you trust.
Frontend
- • Runs in the browser
- • Holds UI state
- • Cannot keep secrets
- • Reachable by anyone
Pick when
- Render, react to clicks, hold drafts
Backend
- • Runs on a server
- • Holds business logic
- • Holds secrets (API keys, DB creds)
- • Reachable only via defined endpoints
Pick when
- Validate, authorize, persist, call external services
| Axis | Frontend | Backend |
|---|
| Trust | None | Full |
| Secrets | Never | Yes (env vars) |
| Owns auth checks | Hides UI | Enforces rules |
Query vs Mutation vs Action
Read, write your DB, call the outside world.
Query / Mutation
- • Deterministic
- • Transactional (mutation)
- • Cached & live (query)
- • No external fetch
Pick when
- Read or write your own data
Action
- • Non-deterministic
- • Not transactional
- • Can call any external API
- • Must persist via mutation
Pick when
- Send emails, call Stripe, hit an LLM, talk to WhatsApp
| Axis | Query / Mutation | Action |
|---|
| Database write | Mutation only | Via mutation it calls |
| External API | ❌ | ✅ |
| Realtime cache | Auto | N/A |
Convex Cloud vs local dev
Hosted deployment vs anonymous/local Convex for learning.
Convex Cloud
- • Persistent prod + dev projects
- • Dashboard + deploy keys
- • Custom domains
- • What you ship to clients
Pick when
- agentify, Jmcon, click, nico prod
Local / anonymous
- • 127.0.0.1:3210
- • Great for academy progress
- • Ephemeral unless linked
- • convex dev on laptop/VPS
Pick when
- vibe-coder-academy quick start
- offline experiments
| Axis | Convex Cloud | Local / anonymous |
|---|
| Persistence | Yes | Until reset |
| Your product repos | Default | Rare |
Vercel vs VPS
Managed convenience vs raw control.
Vercel
- • Git push to deploy
- • Preview per branch
- • Managed CDN + functions
- • No SSH
Pick when
- Default for React/TS apps
VPS
- • You install nginx & systemd
- • Manual deploys (or scripts)
- • Full Linux control
- • You own backups & security
Pick when
- Long-running processes, custom binaries, strict data residency
| Axis | Vercel | VPS |
|---|
| Ops time | ~0 | Ongoing |
| Cost at small scale | Free / low | $5–20/mo |
| Custom processes | Limited | Anything |
Local state vs Server data
What the screen remembers vs what the database remembers.
Local state (UI)
- • useState / form drafts
- • Lost on refresh
- • Per browser tab
- • Fast
Pick when
- Form drafts
- Open/close state
- Hover state
Server data
- • Persisted in DB
- • Survives refresh
- • Shared across users
- • Slower (network)
Pick when
- Anything the user expects to find again later
| Axis | Local state (UI) | Server data |
|---|
| Persistence | None | Yes |
| Shared | No | Yes |
| Speed | Instant | Network-bound |
REST API vs Convex functions
Generic HTTP contract vs typed in-app RPC.
REST API
- • URL + method + body
- • Manual types
- • Manual caching
- • Universal
Pick when
Convex functions
- • Typed call from React
- • Auto cache + realtime
- • No HTTP plumbing
- • Convex-only
Pick when
- Your own app's reads and writes
| Axis | REST API | Convex functions |
|---|
| External callers | Easy | Use HTTP actions |
| Types end-to-end | Manual | Automatic |
API vs MCP
App-to-app vs AI-to-tools.
API
- • Arbitrary contract
- • Any client
- • You document it
- • Stable for years
Pick when
- Frontend↔backend, webhooks, public APIs
MCP
- • Self-describing tools
- • AI clients
- • Discovery built in
- • Permissioned per tool
Pick when
- Letting Claude/Cursor act on your systems safely
| Axis | API | MCP |
|---|
| Audience | App code | AI assistants |
| Discoverability | Docs | list_tools |
| Permission UX | Per app | Per tool, host-mediated |
SSH password vs SSH key
Guess-able vs cryptographic.
Password
- • Memorized string
- • Bruteforce-able
- • Easy to share (badly)
- • Weakest link
Pick when
Key pair
- • Public + private key
- • Effectively unbruteforceable
- • Per-device control
- • Standard practice
Pick when
| Axis | Password | Key pair |
|---|
| Security | Low | High |
| Setup | None | ssh-copy-id once |
Managed cloud vs Self-hosting
Someone else's ops vs yours.
Managed
- • Provider handles uptime
- • Auto scaling
- • Auto backups
- • Predictable bill
Pick when
- Default, especially solo and small teams
Self-hosted
- • You handle uptime
- • Manual scaling
- • Your backups
- • Variable bill
Pick when
- Data residency, custom binaries, specific cost targets
| Axis | Managed | Self-hosted |
|---|
| Control | Limited | Full |
| Ops effort | Low | Ongoing |
Browser vs Server
Where the code runs decides what it can do.
Browser
- • User's device
- • Untrusted
- • No secrets
- • Direct DOM access
Pick when
Server
- • Your machine
- • Trusted
- • Holds secrets
- • Talks to the DB
Pick when
- Authorize, validate, persist
| Axis | Browser | Server |
|---|
| Trust | None | Full |
| Owns business rules | ❌ | ✅ |
Development vs Production
Loose and fast vs strict and shipped.
Development
- • Hot reload
- • Source maps
- • Verbose logs
- • Mock data ok
Pick when
Production
- • Minified bundles
- • Real users
- • Real money
- • Real consequences
Pick when
| Axis | Development | Production |
|---|
| Speed of change | Instant | Deploy |
| Tolerance for errors | High | Low |