[{"data":1,"prerenderedAt":270},["ShallowReactive",2],{"post-portable-ssds-worth-carrying":3,"blog-posts":14},{"_path":4,"title":5,"description":6,"date":7,"tags":8,"readingTime":12,"body":13},"\u002Fblog\u002Fportable-ssds-worth-carrying\u002F","Portable SSDs Worth Carrying","When a pocket SSD beats cloud sync for travel, backups, and large media—and how to pick one that stays fast and durable.","2026-06-26",[9,10,11],"gadgets","storage","productivity",5,"# Portable SSDs Worth Carrying\n\nA pocket SSD is one of the few gadgets that still feels like a superpower: big files move fast, offline, without waiting on an upload bar.\n\n## When local beats the cloud\n\nCloud sync is great for documents. It is slow and expensive for RAW photo dumps, game installs, video edits, and offline travel days. A USB-C SSD shines when you need gigabytes now and you cannot assume Wi‑Fi. Hotels, sets, client sites, and flights are still real places with unreal bandwidth.\n\nKeep a simple layout: a `Projects` folder for active work, a dated `Backups` folder for weekly copies, and leave free space so the drive does not crawl when nearly full. Full disks get slow and stressful. Aim to keep a cushion—enough headroom that a sudden export does not fail at 99%.\n\nDecide what the drive is for. A travel work disk is not the same as a game library brick or a photo archive. Mixing every role onto one pocket drive works until it does not—usually in an airport security line when you realize the only copy of a project is also your entertainment stash. Separate roles when the stakes differ.\n\nCloud still wins for light collaboration and off-site redundancy. The portable SSD wins for bulk, speed, and sovereignty over your bits when the network is a rumor. Use both on purpose: local for the heavy lift, cloud for the safety net of the files that must survive a lost bag.\n\n## Buy for the port you use\n\nSpeed ratings assume a matching port. A drive that can hit USB 3.2 speeds will look ordinary on an older USB‑A adapter. Prefer a short USB-C cable that stays attached or nests in the case—lost cables kill the habit. The best drive you leave at home because the cable vanished is not a good drive.\n\nCheck your laptop’s real ports, not the marketing of the SSD alone. Thunderbolt or USB4 enclosures need matching hosts to sing. If your daily machine is USB-C 10Gbps, buy for that reality. Paying for a peak you cannot reach is how drawers fill with regret.\n\nMetal enclosures run warmer under heavy copy. That is normal. Avoid stacking the drive under a laptop vent or in a sealed pocket during multi-hour transfers. Give it air. If a drive thermal-throttles, pausing and cooling beats wrapping it in a hoodie for “protection.”\n\nDurability claims vary. No pocket drive is invincible. Shock resistance marketing is not a license to toss it like keys. A small sleeve or the original case reduces abrasion in a bag. Keep it away from loose coins and magnets-of-unknown-origin in the same pouch.\n\nCapacity sweet spots depend on your media. Photos and video grow faster than people plan. Buy the size that covers a trip plus margin, not the size that was on sale if it guarantees a mid-project shuffle.\n\n## Treat it like a backup, not a vault\n\nPortable drives get dropped, left in bags, and borrowed. Encrypt sensitive folders if the drive ever leaves your desk, and keep a second copy of anything you cannot recreate. An SSD is fast insurance, not a single source of truth.\n\nA practical habit: after a big shoot or project milestone, copy to the pocket SSD and to one other place—NAS, desktop disk, or cloud cold storage—before you relax. “Backup” means copies in different failure domains. One fast disk in one backpack is a single point of failure with a reassuring LED.\n\nEncryption should match your risk. Full-disk encryption tools and password-protected containers are annoying until the drive is missing. If the disk holds client data or personal archives, enable protection before the first trip, not after the scare.\n\nName volumes clearly. `TRAVEL-SSD` beats `NO NAME`. Date your backup folders. Delete stale project trees on purpose so the disk stays a working tool, not a museum of half-finished exports.\n\nTest restores occasionally. A backup you have never opened is a rumor. Plug in, open a random file, confirm the cable and port still behave. Five minutes now beats discovering corruption when a client is waiting.\n\n## Carry habits that keep it useful\n\nAttach the cable, pick a bag pocket that is always the SSD pocket, and plug in as part of shutdown or end-of-day routine. Tools you have to hunt for stop being tools. If you use the drive for game loads or sample libraries, eject properly before yanking—surprise disconnects corrupt more than pride.\n\nFor team or family sharing, agree on a folder contract. Who may delete? Where do incoming dumps go? Shared disks without rules become shared messes.\n\n## Wrap-up\n\nCarry a portable SSD for the jobs cloud is bad at: big offline transfers and quick local backups. Match the interface to your laptop, leave headroom on the disk, and assume the drive can vanish—so important files still live somewhere else too. Speed is the headline; habits and redundancy are why the gadget stays worth the pocket space.",[15,24,32,41,43,51,58,66,73,80,87,95,102,109,116,124,130,138,147,155,161,168,174,182,190,197,203,209,216,222,228,234,241,248,255,263],{"_path":16,"title":17,"description":18,"date":19,"tags":20,"readingTime":12},"\u002Fblog\u002Fclient-side-tools-that-earn-trust\u002F","Client-Side Tools That Earn Trust","How to design browser tools that feel private by default—local processing, clear data boundaries, and UX that never asks people to guess where their files go.","2026-07-20",[21,22,23],"privacy","frontend","tools",{"_path":25,"title":26,"description":27,"date":28,"tags":29,"readingTime":31},"\u002Fblog\u002Fusb-c-cables-that-actually-matter\u002F","USB-C Cables That Actually Matter","How to buy USB-C cables by wattage and data speed so you stop guessing which cord charges slowly or fails a file transfer.","2026-07-14",[9,30,11],"hardware",4,{"_path":33,"title":34,"description":35,"date":36,"tags":37,"readingTime":12},"\u002Fblog\u002Fcolor-contrast-people-can-read\u002F","Color Contrast People Can Actually Read","Quick checks for text and UI colors that stay legible in light mode, dark mode, and on mediocre displays.","2026-07-07",[38,39,40],"accessibility","css","design",{"_path":4,"title":5,"description":6,"date":7,"tags":42,"readingTime":12},[9,10,11],{"_path":44,"title":45,"description":46,"date":47,"tags":48,"readingTime":12},"\u002Fblog\u002Fwireless-earbuds-that-last-the-day\u002F","Wireless Earbuds That Last the Day","Simple charging and fit habits that stretch earbud battery life without babysitting the case every few hours.","2026-06-18",[9,49,50],"audio","habits",{"_path":52,"title":53,"description":54,"date":55,"tags":56,"readingTime":31},"\u002Fblog\u002Fwhen-a-second-monitor-helps\u002F","When a Second Monitor Actually Helps","A practical take on dual screens for coding, writing, and research—plus when a single good display is still the better desk.","2026-06-10",[9,11,57],"workspace",{"_path":59,"title":60,"description":61,"date":62,"tags":63,"readingTime":31},"\u002Fblog\u002Fshort-session-game-picks\u002F","Short-Session Games That Respect Your Evening","Genres and design patterns that fit a 30-minute window without the “one more hour” trap.","2026-06-04",[64,50,65],"gaming","indie",{"_path":67,"title":68,"description":69,"date":70,"tags":71,"readingTime":12},"\u002Fblog\u002Fphone-charging-habits-that-age-better\u002F","Phone Charging Habits That Age Better","Practical charging routines that keep a phone useful longer—without obsessing over the perfect battery percentage.","2026-05-23",[9,72,50],"mobile",{"_path":74,"title":75,"description":76,"date":77,"tags":78,"readingTime":12},"\u002Fblog\u002Ffinishing-side-projects-without-burning-out\u002F","Finishing Side Projects Without Burning Out","A practical playbook for shrinking scope, shipping thin vertical slices, and keeping personal projects fun long enough to actually launch.","2026-05-14",[11,79,50],"side-projects",{"_path":81,"title":82,"description":83,"date":84,"tags":85,"readingTime":12},"\u002Fblog\u002Faccessible-forms-people-finish\u002F","Accessible Forms That People Actually Finish","Practical accessibility checks for labels, errors, and focus so your forms work for more users.","2026-05-07",[38,86,22],"html",{"_path":88,"title":89,"description":90,"date":91,"tags":92,"readingTime":12},"\u002Fblog\u002Fvue-composition-api-patterns\u002F","Practical Vue Composition API Patterns","Reusable patterns for composables, shared state, and cleaner component logic in Vue 3.","2026-04-27",[93,94,22],"vue","javascript",{"_path":96,"title":97,"description":98,"date":99,"tags":100,"readingTime":12},"\u002Fblog\u002Fdesigning-empty-states-that-teach\u002F","Designing Empty States That Teach the Product","Empty screens are not placeholders—they are onboarding. How to write, layout, and sequence first-run UI so people know what to do next.","2026-04-19",[101,22,40],"ux",{"_path":103,"title":104,"description":105,"date":106,"tags":107,"readingTime":12},"\u002Fblog\u002Fwhy-indie-games-keep-winning\u002F","Why Indie Games Keep Winning Attention","How small teams punch above their weight with focused design, personality, and smart scope.","2026-04-13",[64,65,108],"industry",{"_path":110,"title":111,"description":112,"date":113,"tags":114,"readingTime":12},"\u002Fblog\u002Fkeeping-component-props-simple\u002F","Keeping Component Props Simple","When to split a component, when to use slots, and how to avoid prop objects that grow forever.","2026-04-03",[93,22,115],"best-practices",{"_path":117,"title":118,"description":119,"date":120,"tags":121,"readingTime":12},"\u002Fblog\u002Fcalm-frontend-performance\u002F","A Calm Approach to Frontend Performance","Performance work that sticks: measure what users feel, fix the critical path first, and avoid optimization theater on personal and portfolio sites.","2026-03-26",[122,22,123],"performance","web",{"_path":125,"title":126,"description":127,"date":128,"tags":129,"readingTime":12},"\u002Fblog\u002Fcss-layout-without-the-hacks\u002F","CSS Layout Without the Hacks","Modern Flexbox and Grid techniques that replace brittle floats, magic numbers, and overflow tricks.","2026-03-17",[39,22,40],{"_path":131,"title":132,"description":133,"date":134,"tags":135,"readingTime":12},"\u002Fblog\u002Fcloud-gaming-what-gets-in-the-way\u002F","Cloud Gaming: What Still Gets in the Way","Latency, input feel, and library lock-in—why streaming games is impressive and still uneven.","2026-03-10",[64,136,137],"cloud-gaming","tech",{"_path":139,"title":140,"description":141,"date":142,"tags":143,"readingTime":12},"\u002Fblog\u002Fshipping-static-sites-with-nuxt\u002F","Shipping Static Sites with Nuxt","How I build and deploy a Nuxt site to Cloudflare Pages with predictable routes and content.","2026-03-02",[144,145,146],"nuxt","ssg","devops",{"_path":148,"title":149,"description":150,"date":151,"tags":152,"readingTime":12},"\u002Fblog\u002Fdebugging-faster-in-the-browser\u002F","Debugging Faster in the Browser","A short toolkit of DevTools habits—breakpoints, network filters, and DOM inspection—that cut debug time.","2026-02-24",[94,153,154],"devtools","debugging",{"_path":156,"title":157,"description":158,"date":159,"tags":160,"readingTime":12},"\u002Fblog\u002Fsmall-javascript-habits-that-scale\u002F","Small JavaScript Habits That Scale","Everyday habits—naming, early returns, and clearer async flow—that keep front-end codebases maintainable.","2026-02-18",[94,115,22],{"_path":162,"title":163,"description":164,"date":165,"tags":166,"readingTime":31},"\u002Fblog\u002Fhealthier-gaming-routine\u002F","Building a Healthier Gaming Routine","Simple habits for sessions that stay fun—breaks, goals, and knowing when to stop.","2026-02-02",[64,50,167],"wellness",{"_path":169,"title":170,"description":171,"date":172,"tags":173,"readingTime":12},"\u002Fblog\u002Fresponsive-images-without-layout-shift\u002F","Responsive Images Without Layout Shift","Width, height, srcset, and lazy loading patterns that keep pages stable while images load.","2026-01-22",[86,122,22],{"_path":175,"title":176,"description":177,"date":178,"tags":179,"readingTime":12},"\u002Fblog\u002Fgit-habits-for-small-teams\u002F","Git Habits for Solo and Small Teams","Branch naming, commit messages, and PR hygiene that keep history useful without slowing you down.","2026-01-09",[180,181,11],"git","workflow",{"_path":183,"title":184,"description":185,"date":186,"tags":187,"readingTime":12},"\u002Fblog\u002Fwhat-makes-a-game-stream-worth-watching\u002F","What Makes a Game Stream Worth Watching","Commentary, pacing, and community—why some streams click even when the gameplay is messy.","2025-12-14",[64,188,189],"streaming","content",{"_path":191,"title":192,"description":193,"date":194,"tags":195,"readingTime":12},"\u002Fblog\u002Fwhen-to-reach-for-typescript-vue\u002F","When to Reach for TypeScript on a Vue App","A pragmatic take on where TypeScript pays off in Vue—and where plain JS is still fine.","2025-11-30",[196,93,22],"typescript",{"_path":198,"title":199,"description":200,"date":201,"tags":202,"readingTime":12},"\u002Fblog\u002Fenvironment-variables-for-static-sites\u002F","Environment Variables for Static Sites","How to use build-time env vars in Nuxt and other static generators without leaking secrets or breaking CI.","2025-10-05",[144,146,22],{"_path":204,"title":205,"description":206,"date":207,"tags":208,"readingTime":12},"\u002Fblog\u002Fpicking-a-side-project-stack\u002F","Picking a Side Project Stack Without Overthinking It","How to choose tools for a personal project when the goal is shipping, not building the perfect architecture.","2025-09-18",[11,22,115],{"_path":210,"title":211,"description":212,"date":213,"tags":214,"readingTime":31},"\u002Fblog\u002Fco-op-games-for-busy-friends\u002F","Co-op Games That Work When Everyone Is Busy","Async-friendly and drop-in co-op picks for friend groups that rarely share the same free evening.","2025-08-22",[64,215,50],"co-op",{"_path":217,"title":218,"description":219,"date":220,"tags":221,"readingTime":12},"\u002Fblog\u002Fsemantic-html-still-matters\u002F","Semantic HTML Still Matters","Landmarks, headings, and native elements that make pages easier to use, style, and maintain.","2025-07-06",[86,38,22],{"_path":223,"title":224,"description":225,"date":226,"tags":227,"readingTime":12},"\u002Fblog\u002Fgit-without-the-jargon\u002F","Learning Git Without the Jargon","A plain-language mental model for commits, branches, and merges when tutorials assume you already know Git.","2025-05-14",[180,181,11],{"_path":229,"title":230,"description":231,"date":232,"tags":233,"readingTime":12},"\u002Fblog\u002Fwhy-loading-states-matter\u002F","Why Loading States Matter More Than Animations","Skeletons, disabled buttons, and honest feedback beat flashy spinners when data takes time to arrive.","2025-03-28",[101,22,40],{"_path":235,"title":236,"description":237,"date":238,"tags":239,"readingTime":12},"\u002Fblog\u002Fnaming-things-so-future-you-survives\u002F","Naming Things So Future You Survives","Practical rules for naming variables, components, and files so a codebase stays readable months after the clever jokes fade.","2025-03-10",[94,115,240],"maintainability",{"_path":242,"title":243,"description":244,"date":245,"tags":246,"readingTime":12},"\u002Fblog\u002Fsave-systems-that-respect-time\u002F","Save Systems That Respect the Player’s Time","Checkpoints, autosaves, and manual slots are design choices. How thoughtful saving reduces rage-quits without deleting tension from the game.","2025-02-28",[64,247,101],"game-design",{"_path":249,"title":250,"description":251,"date":252,"tags":253,"readingTime":12},"\u002Fblog\u002Fmicrocopy-that-makes-interfaces-human\u002F","Microcopy That Makes Interfaces Feel Human","Button labels, error lines, and helper text are product design. How to write UI words that reduce hesitation without sounding like a chatbot.","2025-01-22",[101,254,40],"writing",{"_path":256,"title":257,"description":258,"date":259,"tags":260,"readingTime":12},"\u002Fblog\u002Freadmes-that-get-projects-running\u002F","READMEs That Get Projects Running","How to write a README that helps someone—including future you—install, run, and understand a project without opening a support chat.","2024-12-18",[261,262,50],"documentation","open-source",{"_path":264,"title":265,"description":266,"date":267,"tags":268,"readingTime":12},"\u002Fblog\u002Fprogressive-enhancement-still-pays-off\u002F","Progressive Enhancement Still Pays Off","Build the core experience in HTML first, then layer CSS and JavaScript so your site stays useful when networks, scripts, or devices misbehave.","2024-11-05",[86,22,269],"architecture",1784620504460]