[{"data":1,"prerenderedAt":270},["ShallowReactive",2],{"post-short-session-game-picks":3,"blog-posts":14},{"_path":4,"title":5,"description":6,"date":7,"tags":8,"readingTime":12,"body":13},"\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",[9,10,11],"gaming","habits","indie",4,"# Short-Session Games That Respect Your Evening\n\nNot every game needs to be a 60-hour open world. Some of the best weeknight sessions come from titles built around clear stopping points.\n\n## Roguelikes and run-based design\n\nA full “run” that ends in 20–40 minutes gives natural closure. Win or lose, you can log off without abandoning a save mid-quest. Progression still matters—meta unlocks, better starting options, knowledge of routes—but the unit of play matches a real evening, not a fantasy calendar.\n\nLook for design that tells you when a loop is complete. Boss cleared, death screen, daily seed finished: those are honest endpoints. Beware run-based games that quietly expect three runs to “feel right,” or that hide meaningful progression behind long wipes with no mid-run pause. The genre is friendly to short sessions only when the developer respects the run as a full meal.\n\nDeckbuilders, action roguelikes, and turn-based expeditions often excel here. You get a complete arc—build, spike, resolve—without needing a wiki open for an hour beforehand. If you only have half an hour, one intentional run beats half a sprawling campaign mission you will resent leaving unfinished.\n\n## Puzzle and narrative bites\n\nPoint-and-click chapters, daily puzzle modes, and anthology adventures often structure content in discrete chunks. You finish a level or scene and the game tells you it is okay to stop. That permission is design, not weakness.\n\nNarrative bites work when chapters end on emotional punctuation instead of cliffhangers that demand the next hour immediately. Some stories do both: a clean chapter break plus a tease. Prefer the ones that still feel satisfying if you close the laptop. Your future self will thank you when tomorrow is busy.\n\nPuzzle games with daily or bite-sized modes are ideal commute and couch companions. The scoreboard can wait. What matters is that a single puzzle or pack does not require relearning a dozen systems every time you return. Low re-entry friction is part of short-session respect.\n\nVisual novels, narrative adventures, and story-focused indies also fit when they auto-save generously and show chapter length honestly. “15 minutes remaining in this episode” is a gift. Hidden multi-hour acts dressed as “one more scene” are not.\n\n## What to avoid on a tight clock\n\nMassive sandbox quests with no quest log urgency, always-online live events, and MMO dailies are built to extend sessions. They are fine when you have the time—they are rough when you only wanted half an hour.\n\nRed flags for weeknights:\n\n- Long forced multiplayer queues with penalties for leaving\n- Missions that punish mid-objective quits\n- Collection trackers that make rest feel like falling behind\n- “Just one more” crafting or upgrade loops with no natural stop\n\nOpen worlds can still work in short windows if you set a geographic or quest-sized goal—“clear this region marker,” “finish this side job”—and ignore the map fog elsewhere. The game will not enforce that boundary; you will. Prefer titles that make small goals feel complete rather than incomplete forever.\n\nLive-service FOMO is especially hard on short evenings. If a battle pass only feels good when you grind nightly, it is scheduling your life. Skip seasons that demand more than you can give, or play them casually without chasing completion. Missing cosmetics is cheaper than missing sleep.\n\n## Set a timer anyway\n\nEven friendly games benefit from a hard stop. Pause menus that show “time played this session” or a phone alarm at 30 minutes prevent the slow drift into midnight. Willpower after a hype win is weak; alarms are boring and effective.\n\nPut the timer where you cannot ignore it. A watch buzz beats a silent phone face-down. Tell co-op partners your cutoff before you start. Ending on time is easier when it is a shared rule, not a surprise exit.\n\nPair the timer with a shutdown ritual: save, note where you left off in one sentence, close the game fully. Lingering in menus “for a second” is how second hours begin. If you want longer sessions on weekends, schedule them on purpose instead of accidentally inventing them on Tuesday.\n\n## Wrap-up\n\nMatch the game to the window you have. Run-based, level-based, and chapter-based design makes short sessions satisfying instead of frustrating—and makes it easier to come back tomorrow. Avoid systems built to erase your clock, set a real stop, and treat a complete small loop as a successful night. Respect for your evening starts with what you install—and how you leave.",[15,25,34,43,50,57,64,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":24},"\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",5,{"_path":26,"title":27,"description":28,"date":29,"tags":30,"readingTime":12},"\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",[31,32,33],"gadgets","hardware","productivity",{"_path":35,"title":36,"description":37,"date":38,"tags":39,"readingTime":24},"\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",[40,41,42],"accessibility","css","design",{"_path":44,"title":45,"description":46,"date":47,"tags":48,"readingTime":24},"\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",[31,49,33],"storage",{"_path":51,"title":52,"description":53,"date":54,"tags":55,"readingTime":24},"\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",[31,56,10],"audio",{"_path":58,"title":59,"description":60,"date":61,"tags":62,"readingTime":12},"\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",[31,33,63],"workspace",{"_path":4,"title":5,"description":6,"date":7,"tags":65,"readingTime":12},[9,10,11],{"_path":67,"title":68,"description":69,"date":70,"tags":71,"readingTime":24},"\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",[31,72,10],"mobile",{"_path":74,"title":75,"description":76,"date":77,"tags":78,"readingTime":24},"\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",[33,79,10],"side-projects",{"_path":81,"title":82,"description":83,"date":84,"tags":85,"readingTime":24},"\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",[40,86,22],"html",{"_path":88,"title":89,"description":90,"date":91,"tags":92,"readingTime":24},"\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":24},"\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,42],"ux",{"_path":103,"title":104,"description":105,"date":106,"tags":107,"readingTime":24},"\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",[9,11,108],"industry",{"_path":110,"title":111,"description":112,"date":113,"tags":114,"readingTime":24},"\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":24},"\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":24},"\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",[41,22,42],{"_path":131,"title":132,"description":133,"date":134,"tags":135,"readingTime":24},"\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",[9,136,137],"cloud-gaming","tech",{"_path":139,"title":140,"description":141,"date":142,"tags":143,"readingTime":24},"\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":24},"\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":24},"\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":12},"\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",[9,10,167],"wellness",{"_path":169,"title":170,"description":171,"date":172,"tags":173,"readingTime":24},"\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":24},"\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,33],"git","workflow",{"_path":183,"title":184,"description":185,"date":186,"tags":187,"readingTime":24},"\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",[9,188,189],"streaming","content",{"_path":191,"title":192,"description":193,"date":194,"tags":195,"readingTime":24},"\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":24},"\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":24},"\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",[33,22,115],{"_path":210,"title":211,"description":212,"date":213,"tags":214,"readingTime":12},"\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",[9,215,10],"co-op",{"_path":217,"title":218,"description":219,"date":220,"tags":221,"readingTime":24},"\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,40,22],{"_path":223,"title":224,"description":225,"date":226,"tags":227,"readingTime":24},"\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,33],{"_path":229,"title":230,"description":231,"date":232,"tags":233,"readingTime":24},"\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,42],{"_path":235,"title":236,"description":237,"date":238,"tags":239,"readingTime":24},"\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":24},"\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",[9,247,101],"game-design",{"_path":249,"title":250,"description":251,"date":252,"tags":253,"readingTime":24},"\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,42],"writing",{"_path":256,"title":257,"description":258,"date":259,"tags":260,"readingTime":24},"\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,10],"documentation","open-source",{"_path":264,"title":265,"description":266,"date":267,"tags":268,"readingTime":24},"\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",1784620504461]