All blogs / JavaScript / TypeScript
Flavio Copes
Learn to build software products, put them on the internet, find customers, and create an independent business that can make a great living.
JavaScript / TypeScriptWeb developmentAI / MLMobile / iOS / Android
- Posts
- 2,153 from 16 Jul 2012 to 7 Nov 2026
- Posting
- about daily (443 in the last year)
- Kind
- personal blog
- Feed
- https://flaviocopes.com/rss.xml
Latest
November 2026
- Build a private AI feature with a local model, Ollama and Node.js
- Migrating a Ghost blog to EmDash on Cloudflare
- Migrating a WordPress blog to EmDash: the checklist
- EmDash: Cloudflare's CMS for Astro, explained
- Tailscale vs Cloudflare Tunnel vs a cloud firewall
- Tailscale tutorial: your Mac and a server on one private network
- GPT-Live 1 tutorial: build a voice agent you can interrupt
- Conductor alternatives after the Meta acquisition
- The complete guide to the Chrome DevTools Protocol
- I want my coding agent to do what I ask
- Cloudflare Zero Wire: what it is and how to use it
- terminal-mac: give your computer-use agent its own Mac
- The complete guide to Cursor
- How to run SEO checks from the terminal
- Tailscale alternatives for your own servers
- How to move a DigitalOcean Droplet from Ubuntu to Debian
- How to move a Deno app to Cloudflare Workers
- Use different models for planning and coding
- What changes when an agent improves its own harness?
- Write agent instructions that explain the decision
- CVE-2026-98432: check your Linux server and close public ports
- A deep dive into agent-desktop
- How to use Hex for voice dictation
- The complete guide to doctl, the DigitalOcean CLI
- Why parallel coding agents can make your Mac work harder
- How Claude Code mods change the agent loop
- What to do when an AI tool exposes your provider keys
- How to package and publish an OpenCode plugin
October 2026
- How to run an LLM locally on macOS, Linux, and Windows
- Proton's AI manifesto and what it means to lead coding agents
- Void, vinext, or React Router for a Cloudflare app?
- Try Muse Spark Open in OpenCode through Ollama Cloud
- Test your SaaS replacement before cancelling the original
- How to make it easy to leave your SaaS
- Build or buy calculator: when does your replacement cost less?
- Research keywords through OpenSEO MCP
- Build a tiny site-audit crawler with Workers and Queues
- The best voice to text apps for a Mac
- Build an agent approval flow that survives a restart
- Lessons for builders from Sam Altman's Cheeky Pint interview
- When one product pays another
- Pi Durable, Cloudflare Workflows, or Vercel Workflow?
- How to customize Cloudflare Access pages
- How to use TinyFish
- The best macOS browsers for AI agents, and how to use them
- Give coding agents checks they can learn from
- Practicing engineering judgment with AI
- The complete guide to AI image generation
- The big players in AI coding: models, tools, and who to follow
- Internet Business Lab is open
- Which business advantages can a solo developer build?
- How to use GPT-6.1 Terra, OpenAI's new fast vision model
- Chrome Alternatives in 2026: 50 Web Browsers Compared
- How to work with coding agents from your phone
- How to protect secrets when coding agents deploy your app
- How to use MCP Tasks and Elicitations in Claude Code
- The complete guide to Convex
- How to use Grok Build
- A pull request workflow for code written by agents
- Prompt caching, compression, and compaction in coding agents
- Pushing to main still needs a process
- What changes when you stop opening the code editor?
- Cloudflare Hyperdrive tutorial: use PostgreSQL with Workers
- What teaching can tell us about prompting
- Too many conversations with coding agents
- Software with a point of view
- What would make an overnight agent useful?
- I care more about the AI product I can use
- How to use Cursor Computer Use
- The complete guide to LM Studio Bionic
- How to secure a VPS with Tailscale and Cloudflare Tunnel
- What to check before submitting a native app to App Review
- Triage support tickets in one request with OpenAI's Decisions API
- How to publish a Chrome extension to the Chrome Web Store
- What to check before upgrading the Anthropic SDK
- How to use a coding agent without another subscription
- How to create a DMG installer for a Mac app
- AI video editing tools: what agents need to work safely
- A deep dive into Claude Duet
- Paid traffic for SaaS validation: how to test product demand
- Security in the age of AI
- Give your coding agent a state machine
- PSA: update PHP today
- Jev vs structured outputs: when to use each
- Vite toolchain: Cloudflare, vinext, and shared web tooling
- SPA vs server-side rendering: which should you choose?
- A deep dive into tsrs
- How to update all global npm packages
- Cloudflare Pages vs Workers: which should you choose?
- How AI agents make existing software more useful
- AI-assisted code migration: how to switch frameworks safely
- AI coding agent context: how to document project decisions
- How to speed up tests for AI coding agents
- How to compare OpenCode, Claude Code, and Codex CLI
- How I would evaluate Muse Wonder in Cursor
- 15 apps you can vibe code instead of subscribing
- See all news →
- Codex vs Claude Code vs Cursor: how to choose
- Parallel coding agents: how to coordinate and review changes
- How to use OpenCode with a local model in LM Studio
- A practical review workflow for T3 Code threads
- Selling SaaS to developers: how to find paying customers
- MCP server design: tools, authentication, and rate limits
- OpenCode Code Mode explained: JavaScript instead of repeated tool calls
- Changing package managers doesn't remove your npm registry dependency
- How to compete with AI-generated SaaS clones
- Build vs buy software: when AI can replace a SaaS
- How to write an OpenCode plugin with the v2 API
- How OpenSEO works and how to self-host it
- How to build agents that survive crashes with Pi Durable
- How to use OpenCode
- The complete guide to Void: full-stack Vite apps with Hono and Cloudflare
- Meta released Muse Spark Open: what you can run, and what it takes
- How to handle web requests in C with CGI 1.1
- What “open weights” means for AI models
- How to build AI agents with LangChain and LangGraph in TypeScript
- How I fixed a full Ubuntu server disk with Codex
- How to create an Apple TV app
- How to install your own apps on your iPhone with Xcode
- LiveKit tutorial: how to build a voice AI agent
- How to use Jev with Claude Code, Codex and Cursor
- See all posts →
- How to avoid the "Open Anyway" message when building macOS apps
- Use WhatCable to figure out what your USB cable can do
- How to compile JavaScript into a single executable
- How to use Jev with the Vercel AI SDK
- Use npkill to find and delete old node_modules folders
- What happens when AI agents shop for us
- I built Footage Ferry, a Mac app to import Blackmagic Camera videos
- I open sourced testvm, so your coding agents can test Mac apps in a VM
- I built Repo Foyer, a Chrome extension that puts my repos on the GitHub home page
- Planning CloudKit sync between a Mac app and an iPhone app
- How to schedule cron jobs on Linux and macOS
- Payment picker: find how to get paid for your app
- Which web host should I use? Hosting comparison tool
- How to use cf, the new Cloudflare CLI
- I built Architecture Dissector, a Mac app that shows how my apps are built
- I built Couch Snake, the classic phone game for the Apple TV
- I built Chip Pops, 6,000 8-bit sound effects for my apps
- How to use Jev confidence scores
- How to fix "Stacked PRs are not enabled for this repository"
- Should you pay for the Apple Developer Program?
- How to let coding agents test Mac apps in a VM
- How to add automatic updates to a Mac app using GitHub Releases
- I built Slide Lookout, a Chrome extension that shows your next slide
- What running a one-person software business costs per month
- Herdr alternatives: terminal workspaces and agent managers compared
- How to create and publish a ChatGPT plugin
- What is poteto-mode in pstack?
- How to classify text with Jev
Every year
2026 4432025 202024 682023 1062022 1372021 2962020 3172019 3692018 3582017 242014 42013 62012 1