[{"data":1,"prerenderedAt":3570},["ShallowReactive",2],{"/en/articles/organize-dev-environment-for-productivity":3,"seo-stack":3410,"seo-faq-data-en":3500},{"id":4,"title":5,"body":6,"date":3394,"description":3395,"extension":3396,"head":3397,"image":27,"meta":3398,"navigation":833,"ogImage":3397,"path":3399,"readingTime":3400,"robots":3397,"schemaOrg":3397,"seo":3401,"sitemap":3402,"stem":3403,"tags":3404,"__hash__":3409},"articles_en/en/articles/organize-dev-environment-for-productivity.md","How I Organize My Development Environment for Maximum Productivity",{"type":7,"value":8,"toc":3341},"minimark",[9,14,18,21,28,32,37,40,300,304,605,609,744,748,752,760,766,782,786,792,796,800,1275,1279,1530,1534,1537,1542,1593,1597,1604,1641,1646,1666,1670,1674,1680,1684,1690,1694,1837,1841,1845,1959,1963,2041,2044,2066,2070,2074,2312,2316,2447,2451,2455,2494,2498,2501,2521,2627,2631,2635,2718,2771,2775,2944,2948,2952,3036,3040,3070,3074,3078,3183,3187,3258,3262,3265,3297,3301,3304,3307,3313,3317,3334,3337],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17],"p",{},"My first development environment was a mess. 50+ browser tabs open, files scattered across my desktop, no consistent naming conventions, and a terminal setup that fought me at every step. After months of frustration, I finally took the time to optimize my workspace.",[15,19,20],{},"The result? I'm coding faster, making fewer mistakes, and actually enjoying the development process more. Here's exactly how I set up my environment, and why it works.",[15,22,23],{},[24,25],"img",{"alt":26,"src":27},"preview","/articles/dev-environment.jpg",[10,29,31],{"id":30},"the-foundation-vs-code-configuration","The Foundation: VS Code Configuration",[33,34,36],"h3",{"id":35},"essential-extensions","Essential Extensions",[15,38,39],{},"After trying dozens of extensions, these are the ones I actually use every day:",[41,42,47],"pre",{"className":43,"code":44,"language":45,"meta":46,"style":46},"language-json shiki shiki-themes github-light github-dark github-dark","// My essential VS Code extensions\n{\n  \"recommendations\": [\n    // Vue/Nuxt development\n    \"Vue.volar\",                    // Vue language support\n    \"Vue.vscode-typescript-vue-plugin\",\n    \n    // Code quality\n    \"dbaeumer.vscode-eslint\",       // Linting\n    \"esbenp.prettier-vscode\",       // Formatting\n    \"streetsidesoftware.code-spell-checker\",\n    \n    // Productivity\n    \"usernamehw.errorlens\",         // Inline errors\n    \"eamodio.gitlens\",             // Git superpowers\n    \"christian-kohler.path-intellisense\",\n    \"formulahendry.auto-rename-tag\",\n    \n    // UI/UX\n    \"PKief.material-icon-theme\",    // File icons\n    \"GitHub.github-vscode-theme\",   // Theme\n    \"oderwat.indent-rainbow\",       // Indent visualization\n    \n    // Utilities\n    \"wayou.vscode-todo-highlight\",  // Highlight TODOs\n    \"naumovs.color-highlight\",      // Color preview\n    \"ms-vscode.live-server\"         // Live preview\n  ]\n}\n","json","",[48,49,50,59,66,76,82,95,104,110,116,128,139,147,152,158,170,182,190,198,203,209,221,233,244,249,255,267,279,288,294],"code",{"__ignoreMap":46},[51,52,55],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"sCsY4","// My essential VS Code extensions\n",[51,60,62],{"class":53,"line":61},2,[51,63,65],{"class":64},"slsVL","{\n",[51,67,69,73],{"class":53,"line":68},3,[51,70,72],{"class":71},"suiK_","  \"recommendations\"",[51,74,75],{"class":64},": [\n",[51,77,79],{"class":53,"line":78},4,[51,80,81],{"class":57},"    // Vue/Nuxt development\n",[51,83,85,89,92],{"class":53,"line":84},5,[51,86,88],{"class":87},"sfrk1","    \"Vue.volar\"",[51,90,91],{"class":64},",                    ",[51,93,94],{"class":57},"// Vue language support\n",[51,96,98,101],{"class":53,"line":97},6,[51,99,100],{"class":87},"    \"Vue.vscode-typescript-vue-plugin\"",[51,102,103],{"class":64},",\n",[51,105,107],{"class":53,"line":106},7,[51,108,109],{"class":64},"    \n",[51,111,113],{"class":53,"line":112},8,[51,114,115],{"class":57},"    // Code quality\n",[51,117,119,122,125],{"class":53,"line":118},9,[51,120,121],{"class":87},"    \"dbaeumer.vscode-eslint\"",[51,123,124],{"class":64},",       ",[51,126,127],{"class":57},"// Linting\n",[51,129,131,134,136],{"class":53,"line":130},10,[51,132,133],{"class":87},"    \"esbenp.prettier-vscode\"",[51,135,124],{"class":64},[51,137,138],{"class":57},"// Formatting\n",[51,140,142,145],{"class":53,"line":141},11,[51,143,144],{"class":87},"    \"streetsidesoftware.code-spell-checker\"",[51,146,103],{"class":64},[51,148,150],{"class":53,"line":149},12,[51,151,109],{"class":64},[51,153,155],{"class":53,"line":154},13,[51,156,157],{"class":57},"    // Productivity\n",[51,159,161,164,167],{"class":53,"line":160},14,[51,162,163],{"class":87},"    \"usernamehw.errorlens\"",[51,165,166],{"class":64},",         ",[51,168,169],{"class":57},"// Inline errors\n",[51,171,173,176,179],{"class":53,"line":172},15,[51,174,175],{"class":87},"    \"eamodio.gitlens\"",[51,177,178],{"class":64},",             ",[51,180,181],{"class":57},"// Git superpowers\n",[51,183,185,188],{"class":53,"line":184},16,[51,186,187],{"class":87},"    \"christian-kohler.path-intellisense\"",[51,189,103],{"class":64},[51,191,193,196],{"class":53,"line":192},17,[51,194,195],{"class":87},"    \"formulahendry.auto-rename-tag\"",[51,197,103],{"class":64},[51,199,201],{"class":53,"line":200},18,[51,202,109],{"class":64},[51,204,206],{"class":53,"line":205},19,[51,207,208],{"class":57},"    // UI/UX\n",[51,210,212,215,218],{"class":53,"line":211},20,[51,213,214],{"class":87},"    \"PKief.material-icon-theme\"",[51,216,217],{"class":64},",    ",[51,219,220],{"class":57},"// File icons\n",[51,222,224,227,230],{"class":53,"line":223},21,[51,225,226],{"class":87},"    \"GitHub.github-vscode-theme\"",[51,228,229],{"class":64},",   ",[51,231,232],{"class":57},"// Theme\n",[51,234,236,239,241],{"class":53,"line":235},22,[51,237,238],{"class":87},"    \"oderwat.indent-rainbow\"",[51,240,124],{"class":64},[51,242,243],{"class":57},"// Indent visualization\n",[51,245,247],{"class":53,"line":246},23,[51,248,109],{"class":64},[51,250,252],{"class":53,"line":251},24,[51,253,254],{"class":57},"    // Utilities\n",[51,256,258,261,264],{"class":53,"line":257},25,[51,259,260],{"class":87},"    \"wayou.vscode-todo-highlight\"",[51,262,263],{"class":64},",  ",[51,265,266],{"class":57},"// Highlight TODOs\n",[51,268,270,273,276],{"class":53,"line":269},26,[51,271,272],{"class":87},"    \"naumovs.color-highlight\"",[51,274,275],{"class":64},",      ",[51,277,278],{"class":57},"// Color preview\n",[51,280,282,285],{"class":53,"line":281},27,[51,283,284],{"class":87},"    \"ms-vscode.live-server\"",[51,286,287],{"class":57},"         // Live preview\n",[51,289,291],{"class":53,"line":290},28,[51,292,293],{"class":64},"  ]\n",[51,295,297],{"class":53,"line":296},29,[51,298,299],{"class":64},"}\n",[33,301,303],{"id":302},"settings-that-make-a-difference","Settings That Make a Difference",[41,305,307],{"className":43,"code":306,"language":45,"meta":46,"style":46},"// settings.json\n{\n  // Editor behavior\n  \"editor.formatOnSave\": true,\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll.eslint\": true\n  },\n  \"editor.tabSize\": 2,\n  \"editor.linkedEditing\": true,\n  \"editor.bracketPairColorization.enabled\": true,\n  \"editor.guides.bracketPairs\": true,\n  \n  // File handling\n  \"files.autoSave\": \"onFocusChange\",\n  \"files.trimTrailingWhitespace\": true,\n  \"files.insertFinalNewline\": true,\n  \n  // Terminal\n  \"terminal.integrated.fontSize\": 14,\n  \"terminal.integrated.fontFamily\": \"MesloLGS NF\",\n  \n  // Git\n  \"git.autofetch\": true,\n  \"git.confirmSync\": false,\n  \"git.enableSmartCommit\": true,\n  \n  // Language-specific\n  \"[vue]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n  },\n  \"[typescript]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n  },\n  \"[json]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n  }\n}\n",[48,308,309,314,318,323,336,344,354,359,371,382,393,404,409,414,426,437,448,452,457,469,481,485,490,501,513,524,528,533,540,550,555,563,572,577,585,594,600],{"__ignoreMap":46},[51,310,311],{"class":53,"line":54},[51,312,313],{"class":57},"// settings.json\n",[51,315,316],{"class":53,"line":61},[51,317,65],{"class":64},[51,319,320],{"class":53,"line":68},[51,321,322],{"class":57},"  // Editor behavior\n",[51,324,325,328,331,334],{"class":53,"line":78},[51,326,327],{"class":71},"  \"editor.formatOnSave\"",[51,329,330],{"class":64},": ",[51,332,333],{"class":71},"true",[51,335,103],{"class":64},[51,337,338,341],{"class":53,"line":84},[51,339,340],{"class":71},"  \"editor.codeActionsOnSave\"",[51,342,343],{"class":64},": {\n",[51,345,346,349,351],{"class":53,"line":97},[51,347,348],{"class":71},"    \"source.fixAll.eslint\"",[51,350,330],{"class":64},[51,352,353],{"class":71},"true\n",[51,355,356],{"class":53,"line":106},[51,357,358],{"class":64},"  },\n",[51,360,361,364,366,369],{"class":53,"line":112},[51,362,363],{"class":71},"  \"editor.tabSize\"",[51,365,330],{"class":64},[51,367,368],{"class":71},"2",[51,370,103],{"class":64},[51,372,373,376,378,380],{"class":53,"line":118},[51,374,375],{"class":71},"  \"editor.linkedEditing\"",[51,377,330],{"class":64},[51,379,333],{"class":71},[51,381,103],{"class":64},[51,383,384,387,389,391],{"class":53,"line":130},[51,385,386],{"class":71},"  \"editor.bracketPairColorization.enabled\"",[51,388,330],{"class":64},[51,390,333],{"class":71},[51,392,103],{"class":64},[51,394,395,398,400,402],{"class":53,"line":141},[51,396,397],{"class":71},"  \"editor.guides.bracketPairs\"",[51,399,330],{"class":64},[51,401,333],{"class":71},[51,403,103],{"class":64},[51,405,406],{"class":53,"line":149},[51,407,408],{"class":64},"  \n",[51,410,411],{"class":53,"line":154},[51,412,413],{"class":57},"  // File handling\n",[51,415,416,419,421,424],{"class":53,"line":160},[51,417,418],{"class":71},"  \"files.autoSave\"",[51,420,330],{"class":64},[51,422,423],{"class":87},"\"onFocusChange\"",[51,425,103],{"class":64},[51,427,428,431,433,435],{"class":53,"line":172},[51,429,430],{"class":71},"  \"files.trimTrailingWhitespace\"",[51,432,330],{"class":64},[51,434,333],{"class":71},[51,436,103],{"class":64},[51,438,439,442,444,446],{"class":53,"line":184},[51,440,441],{"class":71},"  \"files.insertFinalNewline\"",[51,443,330],{"class":64},[51,445,333],{"class":71},[51,447,103],{"class":64},[51,449,450],{"class":53,"line":192},[51,451,408],{"class":64},[51,453,454],{"class":53,"line":200},[51,455,456],{"class":57},"  // Terminal\n",[51,458,459,462,464,467],{"class":53,"line":205},[51,460,461],{"class":71},"  \"terminal.integrated.fontSize\"",[51,463,330],{"class":64},[51,465,466],{"class":71},"14",[51,468,103],{"class":64},[51,470,471,474,476,479],{"class":53,"line":211},[51,472,473],{"class":71},"  \"terminal.integrated.fontFamily\"",[51,475,330],{"class":64},[51,477,478],{"class":87},"\"MesloLGS NF\"",[51,480,103],{"class":64},[51,482,483],{"class":53,"line":223},[51,484,408],{"class":64},[51,486,487],{"class":53,"line":235},[51,488,489],{"class":57},"  // Git\n",[51,491,492,495,497,499],{"class":53,"line":246},[51,493,494],{"class":71},"  \"git.autofetch\"",[51,496,330],{"class":64},[51,498,333],{"class":71},[51,500,103],{"class":64},[51,502,503,506,508,511],{"class":53,"line":251},[51,504,505],{"class":71},"  \"git.confirmSync\"",[51,507,330],{"class":64},[51,509,510],{"class":71},"false",[51,512,103],{"class":64},[51,514,515,518,520,522],{"class":53,"line":257},[51,516,517],{"class":71},"  \"git.enableSmartCommit\"",[51,519,330],{"class":64},[51,521,333],{"class":71},[51,523,103],{"class":64},[51,525,526],{"class":53,"line":269},[51,527,408],{"class":64},[51,529,530],{"class":53,"line":281},[51,531,532],{"class":57},"  // Language-specific\n",[51,534,535,538],{"class":53,"line":290},[51,536,537],{"class":71},"  \"[vue]\"",[51,539,343],{"class":64},[51,541,542,545,547],{"class":53,"line":296},[51,543,544],{"class":71},"    \"editor.defaultFormatter\"",[51,546,330],{"class":64},[51,548,549],{"class":87},"\"esbenp.prettier-vscode\"\n",[51,551,553],{"class":53,"line":552},30,[51,554,358],{"class":64},[51,556,558,561],{"class":53,"line":557},31,[51,559,560],{"class":71},"  \"[typescript]\"",[51,562,343],{"class":64},[51,564,566,568,570],{"class":53,"line":565},32,[51,567,544],{"class":71},[51,569,330],{"class":64},[51,571,549],{"class":87},[51,573,575],{"class":53,"line":574},33,[51,576,358],{"class":64},[51,578,580,583],{"class":53,"line":579},34,[51,581,582],{"class":71},"  \"[json]\"",[51,584,343],{"class":64},[51,586,588,590,592],{"class":53,"line":587},35,[51,589,544],{"class":71},[51,591,330],{"class":64},[51,593,549],{"class":87},[51,595,597],{"class":53,"line":596},36,[51,598,599],{"class":64},"  }\n",[51,601,603],{"class":53,"line":602},37,[51,604,299],{"class":64},[33,606,608],{"id":607},"keyboard-shortcuts-i-couldnt-live-without","Keyboard Shortcuts I Couldn't Live Without",[41,610,612],{"className":43,"code":611,"language":45,"meta":46,"style":46},"// keybindings.json\n[\n  {\n    \"key\": \"ctrl+shift+d\",\n    \"command\": \"editor.action.copyLinesDownAction\"\n  },\n  {\n    \"key\": \"ctrl+d\",\n    \"command\": \"editor.action.deleteLines\"\n  },\n  {\n    \"key\": \"ctrl+shift+k\",\n    \"command\": \"workbench.action.terminal.kill\"\n  },\n  {\n    \"key\": \"ctrl+shift+`\",\n    \"command\": \"workbench.action.terminal.new\"\n  }\n]\n",[48,613,614,619,624,629,641,651,655,659,670,679,683,687,698,707,711,715,726,735,739],{"__ignoreMap":46},[51,615,616],{"class":53,"line":54},[51,617,618],{"class":57},"// keybindings.json\n",[51,620,621],{"class":53,"line":61},[51,622,623],{"class":64},"[\n",[51,625,626],{"class":53,"line":68},[51,627,628],{"class":64},"  {\n",[51,630,631,634,636,639],{"class":53,"line":78},[51,632,633],{"class":71},"    \"key\"",[51,635,330],{"class":64},[51,637,638],{"class":87},"\"ctrl+shift+d\"",[51,640,103],{"class":64},[51,642,643,646,648],{"class":53,"line":84},[51,644,645],{"class":71},"    \"command\"",[51,647,330],{"class":64},[51,649,650],{"class":87},"\"editor.action.copyLinesDownAction\"\n",[51,652,653],{"class":53,"line":97},[51,654,358],{"class":64},[51,656,657],{"class":53,"line":106},[51,658,628],{"class":64},[51,660,661,663,665,668],{"class":53,"line":112},[51,662,633],{"class":71},[51,664,330],{"class":64},[51,666,667],{"class":87},"\"ctrl+d\"",[51,669,103],{"class":64},[51,671,672,674,676],{"class":53,"line":118},[51,673,645],{"class":71},[51,675,330],{"class":64},[51,677,678],{"class":87},"\"editor.action.deleteLines\"\n",[51,680,681],{"class":53,"line":130},[51,682,358],{"class":64},[51,684,685],{"class":53,"line":141},[51,686,628],{"class":64},[51,688,689,691,693,696],{"class":53,"line":149},[51,690,633],{"class":71},[51,692,330],{"class":64},[51,694,695],{"class":87},"\"ctrl+shift+k\"",[51,697,103],{"class":64},[51,699,700,702,704],{"class":53,"line":154},[51,701,645],{"class":71},[51,703,330],{"class":64},[51,705,706],{"class":87},"\"workbench.action.terminal.kill\"\n",[51,708,709],{"class":53,"line":160},[51,710,358],{"class":64},[51,712,713],{"class":53,"line":172},[51,714,628],{"class":64},[51,716,717,719,721,724],{"class":53,"line":184},[51,718,633],{"class":71},[51,720,330],{"class":64},[51,722,723],{"class":87},"\"ctrl+shift+`\"",[51,725,103],{"class":64},[51,727,728,730,732],{"class":53,"line":192},[51,729,645],{"class":71},[51,731,330],{"class":64},[51,733,734],{"class":87},"\"workbench.action.terminal.new\"\n",[51,736,737],{"class":53,"line":200},[51,738,599],{"class":64},[51,740,741],{"class":53,"line":205},[51,742,743],{"class":64},"]\n",[10,745,747],{"id":746},"project-structure-that-scales","Project Structure That Scales",[33,749,751],{"id":750},"folder-organization","Folder Organization",[41,753,758],{"className":754,"code":756,"language":757},[755],"language-text","~/Development/\n├── personal/           # Personal projects\n│   ├── portfolio/\n│   ├── blog/\n│   └── experiments/\n├── work/              # Work-related projects\n│   ├── client-a/\n│   └── client-b/\n├── learning/          # Tutorials and courses\n│   ├── vue-mastery/\n│   └── typescript-101/\n└── templates/         # Project starters\n    ├── nuxt-starter/\n    └── vue-component-library/\n","text",[48,759,756],{"__ignoreMap":46},[15,761,762],{},[763,764,765],"strong",{},"Why this works:",[767,768,769,773,776,779],"ul",{},[770,771,772],"li",{},"Clear separation of contexts",[770,774,775],{},"Easy to find projects",[770,777,778],{},"Backup strategies can target specific folders",[770,780,781],{},"Mental clarity: \"I'm in learning mode\" vs \"I'm in work mode\"",[33,783,785],{"id":784},"project-level-organization","Project-Level Organization",[41,787,790],{"className":788,"code":789,"language":757},[755],"my-nuxt-app/\n├── .vscode/                 # VS Code settings\n│   ├── settings.json\n│   └── extensions.json\n├── app/\n│   ├── components/\n│   │   ├── common/         # Reusable components\n│   │   ├── features/       # Feature-specific components\n│   │   └── layouts/        # Layout components\n│   ├── composables/        # Composition functions\n│   ├── utils/              # Helper functions\n│   └── types/              # TypeScript types\n├── content/                # Content files\n├── public/                 # Static assets\n├── server/                 # Backend code\n├── tests/                  # Test files\n│   ├── unit/\n│   └── e2e/\n├── .env.example           # Environment template\n├── .gitignore\n├── docker-compose.yml\n├── nuxt.config.ts\n├── package.json\n├── README.md\n└── tsconfig.json\n",[48,791,789],{"__ignoreMap":46},[10,793,795],{"id":794},"terminal-setup-from-pain-to-pleasure","Terminal Setup: From Pain to Pleasure",[33,797,799],{"id":798},"oh-my-zsh-configuration","Oh My Zsh Configuration",[41,801,805],{"className":802,"code":803,"language":804,"meta":46,"style":46},"language-bash shiki shiki-themes github-light github-dark github-dark","# ~/.zshrc\n# Theme\nZSH_THEME=\"powerlevel10k/powerlevel10k\"\n\n# Plugins that boost productivity\nplugins=(\n  git\n  node\n  npm\n  docker\n  docker-compose\n  vscode\n  colored-man-pages\n  zsh-autosuggestions\n  zsh-syntax-highlighting\n)\n\n# Aliases that save time\nalias gs='git status'\nalias ga='git add'\nalias gc='git commit -m'\nalias gp='git push'\nalias gl='git pull'\nalias gco='git checkout'\nalias gcb='git checkout -b'\nalias gd='git diff'\nalias gb='git branch'\n\n# Project shortcuts\nalias dev='cd ~/Development'\nalias personal='cd ~/Development/personal'\nalias work='cd ~/Development/work'\n\n# Common commands\nalias c='clear'\nalias nrd='npm run dev'\nalias nrb='npm run build'\nalias prd='pnpm run dev'\nalias prb='pnpm run build'\n\n# Docker shortcuts\nalias dcu='docker-compose up'\nalias dcd='docker-compose down'\nalias dcr='docker-compose restart'\n\n# VS Code\nalias code.='code .'\n\n# List with colors\nalias ls='ls --color=auto'\nalias ll='ls -alh'\n\n# Quick navigation\nalias ..='cd ..'\nalias ...='cd ../..'\nalias ....='cd ../../..'\n","bash",[48,806,807,812,817,829,835,840,850,855,860,865,870,875,880,885,890,895,900,904,909,922,934,946,958,970,982,994,1006,1018,1022,1027,1039,1051,1063,1067,1072,1084,1096,1108,1121,1134,1139,1145,1158,1171,1184,1189,1195,1203,1208,1214,1227,1240,1245,1251,1259,1267],{"__ignoreMap":46},[51,808,809],{"class":53,"line":54},[51,810,811],{"class":57},"# ~/.zshrc\n",[51,813,814],{"class":53,"line":61},[51,815,816],{"class":57},"# Theme\n",[51,818,819,822,826],{"class":53,"line":68},[51,820,821],{"class":64},"ZSH_THEME",[51,823,825],{"class":824},"so5gQ","=",[51,827,828],{"class":87},"\"powerlevel10k/powerlevel10k\"\n",[51,830,831],{"class":53,"line":78},[51,832,834],{"emptyLinePlaceholder":833},true,"\n",[51,836,837],{"class":53,"line":84},[51,838,839],{"class":57},"# Plugins that boost productivity\n",[51,841,842,845,847],{"class":53,"line":97},[51,843,844],{"class":64},"plugins",[51,846,825],{"class":824},[51,848,849],{"class":64},"(\n",[51,851,852],{"class":53,"line":106},[51,853,854],{"class":87},"  git\n",[51,856,857],{"class":53,"line":112},[51,858,859],{"class":87},"  node\n",[51,861,862],{"class":53,"line":118},[51,863,864],{"class":87},"  npm\n",[51,866,867],{"class":53,"line":130},[51,868,869],{"class":87},"  docker\n",[51,871,872],{"class":53,"line":141},[51,873,874],{"class":87},"  docker-compose\n",[51,876,877],{"class":53,"line":149},[51,878,879],{"class":87},"  vscode\n",[51,881,882],{"class":53,"line":154},[51,883,884],{"class":87},"  colored-man-pages\n",[51,886,887],{"class":53,"line":160},[51,888,889],{"class":87},"  zsh-autosuggestions\n",[51,891,892],{"class":53,"line":172},[51,893,894],{"class":87},"  zsh-syntax-highlighting\n",[51,896,897],{"class":53,"line":184},[51,898,899],{"class":64},")\n",[51,901,902],{"class":53,"line":192},[51,903,834],{"emptyLinePlaceholder":833},[51,905,906],{"class":53,"line":200},[51,907,908],{"class":57},"# Aliases that save time\n",[51,910,911,914,917,919],{"class":53,"line":205},[51,912,913],{"class":824},"alias",[51,915,916],{"class":64}," gs",[51,918,825],{"class":824},[51,920,921],{"class":87},"'git status'\n",[51,923,924,926,929,931],{"class":53,"line":211},[51,925,913],{"class":824},[51,927,928],{"class":64}," ga",[51,930,825],{"class":824},[51,932,933],{"class":87},"'git add'\n",[51,935,936,938,941,943],{"class":53,"line":223},[51,937,913],{"class":824},[51,939,940],{"class":64}," gc",[51,942,825],{"class":824},[51,944,945],{"class":87},"'git commit -m'\n",[51,947,948,950,953,955],{"class":53,"line":235},[51,949,913],{"class":824},[51,951,952],{"class":64}," gp",[51,954,825],{"class":824},[51,956,957],{"class":87},"'git push'\n",[51,959,960,962,965,967],{"class":53,"line":246},[51,961,913],{"class":824},[51,963,964],{"class":64}," gl",[51,966,825],{"class":824},[51,968,969],{"class":87},"'git pull'\n",[51,971,972,974,977,979],{"class":53,"line":251},[51,973,913],{"class":824},[51,975,976],{"class":64}," gco",[51,978,825],{"class":824},[51,980,981],{"class":87},"'git checkout'\n",[51,983,984,986,989,991],{"class":53,"line":257},[51,985,913],{"class":824},[51,987,988],{"class":64}," gcb",[51,990,825],{"class":824},[51,992,993],{"class":87},"'git checkout -b'\n",[51,995,996,998,1001,1003],{"class":53,"line":269},[51,997,913],{"class":824},[51,999,1000],{"class":64}," gd",[51,1002,825],{"class":824},[51,1004,1005],{"class":87},"'git diff'\n",[51,1007,1008,1010,1013,1015],{"class":53,"line":281},[51,1009,913],{"class":824},[51,1011,1012],{"class":64}," gb",[51,1014,825],{"class":824},[51,1016,1017],{"class":87},"'git branch'\n",[51,1019,1020],{"class":53,"line":290},[51,1021,834],{"emptyLinePlaceholder":833},[51,1023,1024],{"class":53,"line":296},[51,1025,1026],{"class":57},"# Project shortcuts\n",[51,1028,1029,1031,1034,1036],{"class":53,"line":552},[51,1030,913],{"class":824},[51,1032,1033],{"class":64}," dev",[51,1035,825],{"class":824},[51,1037,1038],{"class":87},"'cd ~/Development'\n",[51,1040,1041,1043,1046,1048],{"class":53,"line":557},[51,1042,913],{"class":824},[51,1044,1045],{"class":64}," personal",[51,1047,825],{"class":824},[51,1049,1050],{"class":87},"'cd ~/Development/personal'\n",[51,1052,1053,1055,1058,1060],{"class":53,"line":565},[51,1054,913],{"class":824},[51,1056,1057],{"class":64}," work",[51,1059,825],{"class":824},[51,1061,1062],{"class":87},"'cd ~/Development/work'\n",[51,1064,1065],{"class":53,"line":574},[51,1066,834],{"emptyLinePlaceholder":833},[51,1068,1069],{"class":53,"line":579},[51,1070,1071],{"class":57},"# Common commands\n",[51,1073,1074,1076,1079,1081],{"class":53,"line":587},[51,1075,913],{"class":824},[51,1077,1078],{"class":64}," c",[51,1080,825],{"class":824},[51,1082,1083],{"class":87},"'clear'\n",[51,1085,1086,1088,1091,1093],{"class":53,"line":596},[51,1087,913],{"class":824},[51,1089,1090],{"class":64}," nrd",[51,1092,825],{"class":824},[51,1094,1095],{"class":87},"'npm run dev'\n",[51,1097,1098,1100,1103,1105],{"class":53,"line":602},[51,1099,913],{"class":824},[51,1101,1102],{"class":64}," nrb",[51,1104,825],{"class":824},[51,1106,1107],{"class":87},"'npm run build'\n",[51,1109,1111,1113,1116,1118],{"class":53,"line":1110},38,[51,1112,913],{"class":824},[51,1114,1115],{"class":64}," prd",[51,1117,825],{"class":824},[51,1119,1120],{"class":87},"'pnpm run dev'\n",[51,1122,1124,1126,1129,1131],{"class":53,"line":1123},39,[51,1125,913],{"class":824},[51,1127,1128],{"class":64}," prb",[51,1130,825],{"class":824},[51,1132,1133],{"class":87},"'pnpm run build'\n",[51,1135,1137],{"class":53,"line":1136},40,[51,1138,834],{"emptyLinePlaceholder":833},[51,1140,1142],{"class":53,"line":1141},41,[51,1143,1144],{"class":57},"# Docker shortcuts\n",[51,1146,1148,1150,1153,1155],{"class":53,"line":1147},42,[51,1149,913],{"class":824},[51,1151,1152],{"class":64}," dcu",[51,1154,825],{"class":824},[51,1156,1157],{"class":87},"'docker-compose up'\n",[51,1159,1161,1163,1166,1168],{"class":53,"line":1160},43,[51,1162,913],{"class":824},[51,1164,1165],{"class":64}," dcd",[51,1167,825],{"class":824},[51,1169,1170],{"class":87},"'docker-compose down'\n",[51,1172,1174,1176,1179,1181],{"class":53,"line":1173},44,[51,1175,913],{"class":824},[51,1177,1178],{"class":64}," dcr",[51,1180,825],{"class":824},[51,1182,1183],{"class":87},"'docker-compose restart'\n",[51,1185,1187],{"class":53,"line":1186},45,[51,1188,834],{"emptyLinePlaceholder":833},[51,1190,1192],{"class":53,"line":1191},46,[51,1193,1194],{"class":57},"# VS Code\n",[51,1196,1198,1200],{"class":53,"line":1197},47,[51,1199,913],{"class":71},[51,1201,1202],{"class":87}," code.='code .'\n",[51,1204,1206],{"class":53,"line":1205},48,[51,1207,834],{"emptyLinePlaceholder":833},[51,1209,1211],{"class":53,"line":1210},49,[51,1212,1213],{"class":57},"# List with colors\n",[51,1215,1217,1219,1222,1224],{"class":53,"line":1216},50,[51,1218,913],{"class":824},[51,1220,1221],{"class":64}," ls",[51,1223,825],{"class":824},[51,1225,1226],{"class":87},"'ls --color=auto'\n",[51,1228,1230,1232,1235,1237],{"class":53,"line":1229},51,[51,1231,913],{"class":824},[51,1233,1234],{"class":64}," ll",[51,1236,825],{"class":824},[51,1238,1239],{"class":87},"'ls -alh'\n",[51,1241,1243],{"class":53,"line":1242},52,[51,1244,834],{"emptyLinePlaceholder":833},[51,1246,1248],{"class":53,"line":1247},53,[51,1249,1250],{"class":57},"# Quick navigation\n",[51,1252,1254,1256],{"class":53,"line":1253},54,[51,1255,913],{"class":71},[51,1257,1258],{"class":87}," ..='cd ..'\n",[51,1260,1262,1264],{"class":53,"line":1261},55,[51,1263,913],{"class":71},[51,1265,1266],{"class":87}," ...='cd ../..'\n",[51,1268,1270,1272],{"class":53,"line":1269},56,[51,1271,913],{"class":71},[51,1273,1274],{"class":87}," ....='cd ../../..'\n",[33,1276,1278],{"id":1277},"custom-functions","Custom Functions",[41,1280,1282],{"className":802,"code":1281,"language":804,"meta":46,"style":46},"# Create and enter directory\nmkcd() {\n  mkdir -p \"$1\" && cd \"$1\"\n}\n\n# Create new project from template\nnewproject() {\n  local template=$1\n  local name=$2\n  cp -r ~/Development/templates/$template ~/Development/personal/$name\n  cd ~/Development/personal/$name\n  code .\n}\n\n# Git commit with conventional commit format\ngccm() {\n  local type=$1\n  shift\n  local message=\"$@\"\n  git commit -m \"$type: $message\"\n}\n\n# Quick server\nserve() {\n  python3 -m http.server ${1:-8000}\n}\n",[48,1283,1284,1289,1298,1328,1332,1336,1341,1348,1362,1374,1394,1404,1412,1416,1420,1425,1432,1443,1448,1464,1487,1491,1495,1500,1507,1526],{"__ignoreMap":46},[51,1285,1286],{"class":53,"line":54},[51,1287,1288],{"class":57},"# Create and enter directory\n",[51,1290,1291,1295],{"class":53,"line":61},[51,1292,1294],{"class":1293},"shcOC","mkcd",[51,1296,1297],{"class":64},"() {\n",[51,1299,1300,1303,1306,1309,1312,1315,1318,1321,1323,1325],{"class":53,"line":68},[51,1301,1302],{"class":1293},"  mkdir",[51,1304,1305],{"class":71}," -p",[51,1307,1308],{"class":87}," \"",[51,1310,1311],{"class":71},"$1",[51,1313,1314],{"class":87},"\"",[51,1316,1317],{"class":64}," && ",[51,1319,1320],{"class":71},"cd",[51,1322,1308],{"class":87},[51,1324,1311],{"class":71},[51,1326,1327],{"class":87},"\"\n",[51,1329,1330],{"class":53,"line":78},[51,1331,299],{"class":64},[51,1333,1334],{"class":53,"line":84},[51,1335,834],{"emptyLinePlaceholder":833},[51,1337,1338],{"class":53,"line":97},[51,1339,1340],{"class":57},"# Create new project from template\n",[51,1342,1343,1346],{"class":53,"line":106},[51,1344,1345],{"class":1293},"newproject",[51,1347,1297],{"class":64},[51,1349,1350,1353,1356,1358],{"class":53,"line":112},[51,1351,1352],{"class":824},"  local",[51,1354,1355],{"class":64}," template",[51,1357,825],{"class":824},[51,1359,1361],{"class":1360},"sQHwn","$1\n",[51,1363,1364,1366,1369,1371],{"class":53,"line":118},[51,1365,1352],{"class":824},[51,1367,1368],{"class":64}," name",[51,1370,825],{"class":824},[51,1372,1373],{"class":1360},"$2\n",[51,1375,1376,1379,1382,1385,1388,1391],{"class":53,"line":130},[51,1377,1378],{"class":1293},"  cp",[51,1380,1381],{"class":71}," -r",[51,1383,1384],{"class":87}," ~/Development/templates/",[51,1386,1387],{"class":64},"$template ",[51,1389,1390],{"class":87},"~/Development/personal/",[51,1392,1393],{"class":64},"$name\n",[51,1395,1396,1399,1402],{"class":53,"line":141},[51,1397,1398],{"class":71},"  cd",[51,1400,1401],{"class":87}," ~/Development/personal/",[51,1403,1393],{"class":64},[51,1405,1406,1409],{"class":53,"line":149},[51,1407,1408],{"class":1293},"  code",[51,1410,1411],{"class":87}," .\n",[51,1413,1414],{"class":53,"line":154},[51,1415,299],{"class":64},[51,1417,1418],{"class":53,"line":160},[51,1419,834],{"emptyLinePlaceholder":833},[51,1421,1422],{"class":53,"line":172},[51,1423,1424],{"class":57},"# Git commit with conventional commit format\n",[51,1426,1427,1430],{"class":53,"line":184},[51,1428,1429],{"class":1293},"gccm",[51,1431,1297],{"class":64},[51,1433,1434,1436,1439,1441],{"class":53,"line":192},[51,1435,1352],{"class":824},[51,1437,1438],{"class":64}," type",[51,1440,825],{"class":824},[51,1442,1361],{"class":1360},[51,1444,1445],{"class":53,"line":200},[51,1446,1447],{"class":71},"  shift\n",[51,1449,1450,1452,1455,1457,1459,1462],{"class":53,"line":205},[51,1451,1352],{"class":824},[51,1453,1454],{"class":64}," message",[51,1456,825],{"class":824},[51,1458,1314],{"class":87},[51,1460,1461],{"class":71},"$@",[51,1463,1327],{"class":87},[51,1465,1466,1469,1472,1475,1477,1480,1482,1485],{"class":53,"line":211},[51,1467,1468],{"class":1293},"  git",[51,1470,1471],{"class":87}," commit",[51,1473,1474],{"class":71}," -m",[51,1476,1308],{"class":87},[51,1478,1479],{"class":64},"$type",[51,1481,330],{"class":87},[51,1483,1484],{"class":64},"$message",[51,1486,1327],{"class":87},[51,1488,1489],{"class":53,"line":223},[51,1490,299],{"class":64},[51,1492,1493],{"class":53,"line":235},[51,1494,834],{"emptyLinePlaceholder":833},[51,1496,1497],{"class":53,"line":246},[51,1498,1499],{"class":57},"# Quick server\n",[51,1501,1502,1505],{"class":53,"line":251},[51,1503,1504],{"class":1293},"serve",[51,1506,1297],{"class":64},[51,1508,1509,1512,1514,1517,1520,1523],{"class":53,"line":257},[51,1510,1511],{"class":1293},"  python3",[51,1513,1474],{"class":71},[51,1515,1516],{"class":87}," http.server",[51,1518,1519],{"class":1360}," ${1",[51,1521,1522],{"class":824},":-",[51,1524,1525],{"class":1360},"8000}\n",[51,1527,1528],{"class":53,"line":269},[51,1529,299],{"class":64},[10,1531,1533],{"id":1532},"browser-setup-for-development","Browser Setup for Development",[33,1535,36],{"id":1536},"essential-extensions-1",[15,1538,1539],{},[763,1540,1541],{},"Chrome/Edge:",[1543,1544,1545,1551,1557,1563,1569,1575,1581,1587],"ol",{},[770,1546,1547,1550],{},[763,1548,1549],{},"Vue DevTools"," - Debug Vue applications",[770,1552,1553,1556],{},[763,1554,1555],{},"React DevTools"," - Debug React applications",[770,1558,1559,1562],{},[763,1560,1561],{},"Redux DevTools"," - State management debugging",[770,1564,1565,1568],{},[763,1566,1567],{},"JSON Formatter"," - Pretty print JSON",[770,1570,1571,1574],{},[763,1572,1573],{},"Wappalyzer"," - Identify technologies",[770,1576,1577,1580],{},[763,1578,1579],{},"ColorZilla"," - Color picker",[770,1582,1583,1586],{},[763,1584,1585],{},"Lighthouse"," - Performance auditing",[770,1588,1589,1592],{},[763,1590,1591],{},"Octotree"," - GitHub code tree",[33,1594,1596],{"id":1595},"tab-management-strategy","Tab Management Strategy",[15,1598,1599,1600,1603],{},"I use ",[763,1601,1602],{},"session managers"," and follow these rules:",[41,1605,1609],{"className":1606,"code":1607,"language":1608,"meta":46,"style":46},"language-markdown shiki shiki-themes github-light github-dark github-dark","## Tab Organization Rules\n1. Max 10 tabs per window\n2. One window per project\n3. Pin frequently used tabs (localhost, docs)\n4. Close tabs at end of day\n5. Save sessions for active projects\n","markdown",[48,1610,1611,1616,1621,1626,1631,1636],{"__ignoreMap":46},[51,1612,1613],{"class":53,"line":54},[51,1614,1615],{},"## Tab Organization Rules\n",[51,1617,1618],{"class":53,"line":61},[51,1619,1620],{},"1. Max 10 tabs per window\n",[51,1622,1623],{"class":53,"line":68},[51,1624,1625],{},"2. One window per project\n",[51,1627,1628],{"class":53,"line":78},[51,1629,1630],{},"3. Pin frequently used tabs (localhost, docs)\n",[51,1632,1633],{"class":53,"line":84},[51,1634,1635],{},"4. Close tabs at end of day\n",[51,1637,1638],{"class":53,"line":97},[51,1639,1640],{},"5. Save sessions for active projects\n",[15,1642,1643],{},[763,1644,1645],{},"Pinned tabs in my dev window:",[767,1647,1648,1654,1657,1660,1663],{},[770,1649,1650,1653],{},[48,1651,1652],{},"localhost:3000"," - Development server",[770,1655,1656],{},"Vue.js Documentation",[770,1658,1659],{},"MDN Web Docs",[770,1661,1662],{},"GitHub Repository",[770,1664,1665],{},"Project management tool",[10,1667,1669],{"id":1668},"file-naming-conventions","File Naming Conventions",[33,1671,1673],{"id":1672},"component-files","Component Files",[41,1675,1678],{"className":1676,"code":1677,"language":757},[755],"✅ Good:\nUserProfile.vue\nLoginForm.vue\nNavigationBar.vue\nProductCard.vue\n\n❌ Bad:\nuserprofile.vue\nlogin_form.vue\nNav-Bar.vue\nproduct-card-component.vue\n",[48,1679,1677],{"__ignoreMap":46},[33,1681,1683],{"id":1682},"utility-files","Utility Files",[41,1685,1688],{"className":1686,"code":1687,"language":757},[755],"✅ Good:\nformatDate.ts\nvalidateEmail.ts\nfetchUserData.ts\n\n❌ Bad:\nutils.ts\nhelpers.ts\nfunctions.ts\n",[48,1689,1687],{"__ignoreMap":46},[33,1691,1693],{"id":1692},"general-rules","General Rules",[41,1695,1699],{"className":1696,"code":1697,"language":1698,"meta":46,"style":46},"language-typescript shiki shiki-themes github-light github-dark github-dark","// PascalCase for components\n// camelCase for utilities, functions, variables\n// kebab-case for file paths in URLs\n// SCREAMING_SNAKE_CASE for constants\n\n// Components\nexport default defineComponent({\n  name: 'UserProfile'\n});\n\n// Functions\nfunction calculateTotal(items: Item[]): number {}\n\n// Constants\nconst MAX_RETRY_ATTEMPTS = 3;\nconst API_BASE_URL = 'https://api.example.com';\n","typescript",[48,1700,1701,1706,1711,1716,1721,1725,1730,1744,1752,1757,1761,1766,1797,1801,1806,1823],{"__ignoreMap":46},[51,1702,1703],{"class":53,"line":54},[51,1704,1705],{"class":57},"// PascalCase for components\n",[51,1707,1708],{"class":53,"line":61},[51,1709,1710],{"class":57},"// camelCase for utilities, functions, variables\n",[51,1712,1713],{"class":53,"line":68},[51,1714,1715],{"class":57},"// kebab-case for file paths in URLs\n",[51,1717,1718],{"class":53,"line":78},[51,1719,1720],{"class":57},"// SCREAMING_SNAKE_CASE for constants\n",[51,1722,1723],{"class":53,"line":84},[51,1724,834],{"emptyLinePlaceholder":833},[51,1726,1727],{"class":53,"line":97},[51,1728,1729],{"class":57},"// Components\n",[51,1731,1732,1735,1738,1741],{"class":53,"line":106},[51,1733,1734],{"class":824},"export",[51,1736,1737],{"class":824}," default",[51,1739,1740],{"class":1293}," defineComponent",[51,1742,1743],{"class":64},"({\n",[51,1745,1746,1749],{"class":53,"line":112},[51,1747,1748],{"class":64},"  name: ",[51,1750,1751],{"class":87},"'UserProfile'\n",[51,1753,1754],{"class":53,"line":118},[51,1755,1756],{"class":64},"});\n",[51,1758,1759],{"class":53,"line":130},[51,1760,834],{"emptyLinePlaceholder":833},[51,1762,1763],{"class":53,"line":141},[51,1764,1765],{"class":57},"// Functions\n",[51,1767,1768,1771,1774,1777,1780,1783,1786,1789,1791,1794],{"class":53,"line":149},[51,1769,1770],{"class":824},"function",[51,1772,1773],{"class":1293}," calculateTotal",[51,1775,1776],{"class":64},"(",[51,1778,1779],{"class":1360},"items",[51,1781,1782],{"class":824},":",[51,1784,1785],{"class":1293}," Item",[51,1787,1788],{"class":64},"[])",[51,1790,1782],{"class":824},[51,1792,1793],{"class":71}," number",[51,1795,1796],{"class":64}," {}\n",[51,1798,1799],{"class":53,"line":154},[51,1800,834],{"emptyLinePlaceholder":833},[51,1802,1803],{"class":53,"line":160},[51,1804,1805],{"class":57},"// Constants\n",[51,1807,1808,1811,1814,1817,1820],{"class":53,"line":172},[51,1809,1810],{"class":824},"const",[51,1812,1813],{"class":71}," MAX_RETRY_ATTEMPTS",[51,1815,1816],{"class":824}," =",[51,1818,1819],{"class":71}," 3",[51,1821,1822],{"class":64},";\n",[51,1824,1825,1827,1830,1832,1835],{"class":53,"line":184},[51,1826,1810],{"class":824},[51,1828,1829],{"class":71}," API_BASE_URL",[51,1831,1816],{"class":824},[51,1833,1834],{"class":87}," 'https://api.example.com'",[51,1836,1822],{"class":64},[10,1838,1840],{"id":1839},"git-workflow-automation","Git Workflow Automation",[33,1842,1844],{"id":1843},"git-hooks-with-husky","Git Hooks with Husky",[41,1846,1848],{"className":43,"code":1847,"language":45,"meta":46,"style":46},"// package.json\n{\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"lint-staged\",\n      \"commit-msg\": \"commitlint -E HUSKY_GIT_PARAMS\"\n    }\n  },\n  \"lint-staged\": {\n    \"*.{js,ts,vue}\": [\n      \"eslint --fix\",\n      \"prettier --write\"\n    ],\n    \"*.{css,scss}\": [\n      \"prettier --write\"\n    ]\n  }\n}\n",[48,1849,1850,1855,1859,1866,1873,1885,1895,1900,1904,1911,1918,1925,1930,1935,1942,1946,1951,1955],{"__ignoreMap":46},[51,1851,1852],{"class":53,"line":54},[51,1853,1854],{"class":57},"// package.json\n",[51,1856,1857],{"class":53,"line":61},[51,1858,65],{"class":64},[51,1860,1861,1864],{"class":53,"line":68},[51,1862,1863],{"class":71},"  \"husky\"",[51,1865,343],{"class":64},[51,1867,1868,1871],{"class":53,"line":78},[51,1869,1870],{"class":71},"    \"hooks\"",[51,1872,343],{"class":64},[51,1874,1875,1878,1880,1883],{"class":53,"line":84},[51,1876,1877],{"class":71},"      \"pre-commit\"",[51,1879,330],{"class":64},[51,1881,1882],{"class":87},"\"lint-staged\"",[51,1884,103],{"class":64},[51,1886,1887,1890,1892],{"class":53,"line":97},[51,1888,1889],{"class":71},"      \"commit-msg\"",[51,1891,330],{"class":64},[51,1893,1894],{"class":87},"\"commitlint -E HUSKY_GIT_PARAMS\"\n",[51,1896,1897],{"class":53,"line":106},[51,1898,1899],{"class":64},"    }\n",[51,1901,1902],{"class":53,"line":112},[51,1903,358],{"class":64},[51,1905,1906,1909],{"class":53,"line":118},[51,1907,1908],{"class":71},"  \"lint-staged\"",[51,1910,343],{"class":64},[51,1912,1913,1916],{"class":53,"line":130},[51,1914,1915],{"class":71},"    \"*.{js,ts,vue}\"",[51,1917,75],{"class":64},[51,1919,1920,1923],{"class":53,"line":141},[51,1921,1922],{"class":87},"      \"eslint --fix\"",[51,1924,103],{"class":64},[51,1926,1927],{"class":53,"line":149},[51,1928,1929],{"class":87},"      \"prettier --write\"\n",[51,1931,1932],{"class":53,"line":154},[51,1933,1934],{"class":64},"    ],\n",[51,1936,1937,1940],{"class":53,"line":160},[51,1938,1939],{"class":71},"    \"*.{css,scss}\"",[51,1941,75],{"class":64},[51,1943,1944],{"class":53,"line":172},[51,1945,1929],{"class":87},[51,1947,1948],{"class":53,"line":184},[51,1949,1950],{"class":64},"    ]\n",[51,1952,1953],{"class":53,"line":192},[51,1954,599],{"class":64},[51,1956,1957],{"class":53,"line":200},[51,1958,299],{"class":64},[33,1960,1962],{"id":1961},"commit-message-template","Commit Message Template",[41,1964,1966],{"className":802,"code":1965,"language":804,"meta":46,"style":46},"# ~/.gitmessage\n# \u003Ctype>: \u003Csubject>\n#\n# \u003Cbody>\n#\n# \u003Cfooter>\n\n# Types:\n# feat:     New feature\n# fix:      Bug fix\n# docs:     Documentation only changes\n# style:    Code style changes (formatting, etc)\n# refactor: Code refactoring\n# test:     Adding or updating tests\n# chore:    Maintenance tasks\n",[48,1967,1968,1973,1978,1983,1988,1992,1997,2001,2006,2011,2016,2021,2026,2031,2036],{"__ignoreMap":46},[51,1969,1970],{"class":53,"line":54},[51,1971,1972],{"class":57},"# ~/.gitmessage\n",[51,1974,1975],{"class":53,"line":61},[51,1976,1977],{"class":57},"# \u003Ctype>: \u003Csubject>\n",[51,1979,1980],{"class":53,"line":68},[51,1981,1982],{"class":57},"#\n",[51,1984,1985],{"class":53,"line":78},[51,1986,1987],{"class":57},"# \u003Cbody>\n",[51,1989,1990],{"class":53,"line":84},[51,1991,1982],{"class":57},[51,1993,1994],{"class":53,"line":97},[51,1995,1996],{"class":57},"# \u003Cfooter>\n",[51,1998,1999],{"class":53,"line":106},[51,2000,834],{"emptyLinePlaceholder":833},[51,2002,2003],{"class":53,"line":112},[51,2004,2005],{"class":57},"# Types:\n",[51,2007,2008],{"class":53,"line":118},[51,2009,2010],{"class":57},"# feat:     New feature\n",[51,2012,2013],{"class":53,"line":130},[51,2014,2015],{"class":57},"# fix:      Bug fix\n",[51,2017,2018],{"class":53,"line":141},[51,2019,2020],{"class":57},"# docs:     Documentation only changes\n",[51,2022,2023],{"class":53,"line":149},[51,2024,2025],{"class":57},"# style:    Code style changes (formatting, etc)\n",[51,2027,2028],{"class":53,"line":154},[51,2029,2030],{"class":57},"# refactor: Code refactoring\n",[51,2032,2033],{"class":53,"line":160},[51,2034,2035],{"class":57},"# test:     Adding or updating tests\n",[51,2037,2038],{"class":53,"line":172},[51,2039,2040],{"class":57},"# chore:    Maintenance tasks\n",[15,2042,2043],{},"Set as default:",[41,2045,2047],{"className":802,"code":2046,"language":804,"meta":46,"style":46},"git config --global commit.template ~/.gitmessage\n",[48,2048,2049],{"__ignoreMap":46},[51,2050,2051,2054,2057,2060,2063],{"class":53,"line":54},[51,2052,2053],{"class":1293},"git",[51,2055,2056],{"class":87}," config",[51,2058,2059],{"class":71}," --global",[51,2061,2062],{"class":87}," commit.template",[51,2064,2065],{"class":87}," ~/.gitmessage\n",[10,2067,2069],{"id":2068},"documentation-system","Documentation System",[33,2071,2073],{"id":2072},"readme-template","README Template",[41,2075,2077],{"className":1606,"code":2076,"language":1608,"meta":46,"style":46},"# Project Name\n\nBrief description of what this project does.\n\n## 🚀 Quick Start\n\n\\`\\`\\`bash\n# Clone the repository\ngit clone https://github.com/username/project.git\n\n# Install dependencies\nnpm install\n\n# Start development server\nnpm run dev\n\\`\\`\\`\n\n## 📁 Project Structure\n\n\\`\\`\\`\nsrc/\n├── components/    # Reusable components\n├── pages/        # Page components\n└── utils/        # Utility functions\n\\`\\`\\`\n\n## 🛠️ Tech Stack\n\n- **Framework:** Nuxt 3\n- **Language:** TypeScript\n- **Styling:** Tailwind CSS\n- **State:** Pinia\n\n## 📝 Available Scripts\n\n- \\`npm run dev\\` - Start development server\n- \\`npm run build\\` - Build for production\n- \\`npm run test\\` - Run tests\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create your feature branch\n3. Commit your changes\n4. Push to the branch\n5. Open a Pull Request\n\n## 📄 License\n\nMIT\n",[48,2078,2079,2084,2088,2093,2097,2102,2106,2111,2116,2121,2125,2130,2135,2139,2144,2149,2154,2158,2163,2167,2171,2176,2181,2186,2191,2195,2199,2204,2208,2213,2218,2223,2228,2232,2237,2241,2246,2251,2256,2260,2265,2269,2274,2279,2284,2289,2294,2298,2303,2307],{"__ignoreMap":46},[51,2080,2081],{"class":53,"line":54},[51,2082,2083],{},"# Project Name\n",[51,2085,2086],{"class":53,"line":61},[51,2087,834],{"emptyLinePlaceholder":833},[51,2089,2090],{"class":53,"line":68},[51,2091,2092],{},"Brief description of what this project does.\n",[51,2094,2095],{"class":53,"line":78},[51,2096,834],{"emptyLinePlaceholder":833},[51,2098,2099],{"class":53,"line":84},[51,2100,2101],{},"## 🚀 Quick Start\n",[51,2103,2104],{"class":53,"line":97},[51,2105,834],{"emptyLinePlaceholder":833},[51,2107,2108],{"class":53,"line":106},[51,2109,2110],{},"\\`\\`\\`bash\n",[51,2112,2113],{"class":53,"line":112},[51,2114,2115],{},"# Clone the repository\n",[51,2117,2118],{"class":53,"line":118},[51,2119,2120],{},"git clone https://github.com/username/project.git\n",[51,2122,2123],{"class":53,"line":130},[51,2124,834],{"emptyLinePlaceholder":833},[51,2126,2127],{"class":53,"line":141},[51,2128,2129],{},"# Install dependencies\n",[51,2131,2132],{"class":53,"line":149},[51,2133,2134],{},"npm install\n",[51,2136,2137],{"class":53,"line":154},[51,2138,834],{"emptyLinePlaceholder":833},[51,2140,2141],{"class":53,"line":160},[51,2142,2143],{},"# Start development server\n",[51,2145,2146],{"class":53,"line":172},[51,2147,2148],{},"npm run dev\n",[51,2150,2151],{"class":53,"line":184},[51,2152,2153],{},"\\`\\`\\`\n",[51,2155,2156],{"class":53,"line":192},[51,2157,834],{"emptyLinePlaceholder":833},[51,2159,2160],{"class":53,"line":200},[51,2161,2162],{},"## 📁 Project Structure\n",[51,2164,2165],{"class":53,"line":205},[51,2166,834],{"emptyLinePlaceholder":833},[51,2168,2169],{"class":53,"line":211},[51,2170,2153],{},[51,2172,2173],{"class":53,"line":223},[51,2174,2175],{},"src/\n",[51,2177,2178],{"class":53,"line":235},[51,2179,2180],{},"├── components/    # Reusable components\n",[51,2182,2183],{"class":53,"line":246},[51,2184,2185],{},"├── pages/        # Page components\n",[51,2187,2188],{"class":53,"line":251},[51,2189,2190],{},"└── utils/        # Utility functions\n",[51,2192,2193],{"class":53,"line":257},[51,2194,2153],{},[51,2196,2197],{"class":53,"line":269},[51,2198,834],{"emptyLinePlaceholder":833},[51,2200,2201],{"class":53,"line":281},[51,2202,2203],{},"## 🛠️ Tech Stack\n",[51,2205,2206],{"class":53,"line":290},[51,2207,834],{"emptyLinePlaceholder":833},[51,2209,2210],{"class":53,"line":296},[51,2211,2212],{},"- **Framework:** Nuxt 3\n",[51,2214,2215],{"class":53,"line":552},[51,2216,2217],{},"- **Language:** TypeScript\n",[51,2219,2220],{"class":53,"line":557},[51,2221,2222],{},"- **Styling:** Tailwind CSS\n",[51,2224,2225],{"class":53,"line":565},[51,2226,2227],{},"- **State:** Pinia\n",[51,2229,2230],{"class":53,"line":574},[51,2231,834],{"emptyLinePlaceholder":833},[51,2233,2234],{"class":53,"line":579},[51,2235,2236],{},"## 📝 Available Scripts\n",[51,2238,2239],{"class":53,"line":587},[51,2240,834],{"emptyLinePlaceholder":833},[51,2242,2243],{"class":53,"line":596},[51,2244,2245],{},"- \\`npm run dev\\` - Start development server\n",[51,2247,2248],{"class":53,"line":602},[51,2249,2250],{},"- \\`npm run build\\` - Build for production\n",[51,2252,2253],{"class":53,"line":1110},[51,2254,2255],{},"- \\`npm run test\\` - Run tests\n",[51,2257,2258],{"class":53,"line":1123},[51,2259,834],{"emptyLinePlaceholder":833},[51,2261,2262],{"class":53,"line":1136},[51,2263,2264],{},"## 🤝 Contributing\n",[51,2266,2267],{"class":53,"line":1141},[51,2268,834],{"emptyLinePlaceholder":833},[51,2270,2271],{"class":53,"line":1147},[51,2272,2273],{},"1. Fork the repository\n",[51,2275,2276],{"class":53,"line":1160},[51,2277,2278],{},"2. Create your feature branch\n",[51,2280,2281],{"class":53,"line":1173},[51,2282,2283],{},"3. Commit your changes\n",[51,2285,2286],{"class":53,"line":1186},[51,2287,2288],{},"4. Push to the branch\n",[51,2290,2291],{"class":53,"line":1191},[51,2292,2293],{},"5. Open a Pull Request\n",[51,2295,2296],{"class":53,"line":1197},[51,2297,834],{"emptyLinePlaceholder":833},[51,2299,2300],{"class":53,"line":1205},[51,2301,2302],{},"## 📄 License\n",[51,2304,2305],{"class":53,"line":1210},[51,2306,834],{"emptyLinePlaceholder":833},[51,2308,2309],{"class":53,"line":1216},[51,2310,2311],{},"MIT\n",[33,2313,2315],{"id":2314},"code-documentation","Code Documentation",[41,2317,2319],{"className":1696,"code":2318,"language":1698,"meta":46,"style":46},"/**\n * Fetches user data from the API\n * @param userId - The unique identifier for the user\n * @returns Promise containing user data\n * @throws {Error} If user is not found or network request fails\n * @example\n * ```ts\n * const user = await fetchUser('123');\n * console.log(user.name);\n * ```\n */\nasync function fetchUser(userId: string): Promise\u003CUser> {\n  // Implementation\n}\n",[48,2320,2321,2326,2331,2345,2355,2368,2375,2380,2385,2390,2395,2400,2438,2443],{"__ignoreMap":46},[51,2322,2323],{"class":53,"line":54},[51,2324,2325],{"class":57},"/**\n",[51,2327,2328],{"class":53,"line":61},[51,2329,2330],{"class":57}," * Fetches user data from the API\n",[51,2332,2333,2336,2339,2342],{"class":53,"line":68},[51,2334,2335],{"class":57}," * ",[51,2337,2338],{"class":824},"@param",[51,2340,2341],{"class":64}," userId",[51,2343,2344],{"class":57}," - The unique identifier for the user\n",[51,2346,2347,2349,2352],{"class":53,"line":78},[51,2348,2335],{"class":57},[51,2350,2351],{"class":824},"@returns",[51,2353,2354],{"class":57}," Promise containing user data\n",[51,2356,2357,2359,2362,2365],{"class":53,"line":84},[51,2358,2335],{"class":57},[51,2360,2361],{"class":824},"@throws",[51,2363,2364],{"class":1293}," {Error}",[51,2366,2367],{"class":57}," If user is not found or network request fails\n",[51,2369,2370,2372],{"class":53,"line":97},[51,2371,2335],{"class":57},[51,2373,2374],{"class":824},"@example\n",[51,2376,2377],{"class":53,"line":106},[51,2378,2379],{"class":57}," * ```ts\n",[51,2381,2382],{"class":53,"line":112},[51,2383,2384],{"class":57}," * const user = await fetchUser('123');\n",[51,2386,2387],{"class":53,"line":118},[51,2388,2389],{"class":57}," * console.log(user.name);\n",[51,2391,2392],{"class":53,"line":130},[51,2393,2394],{"class":57}," * ```\n",[51,2396,2397],{"class":53,"line":141},[51,2398,2399],{"class":57}," */\n",[51,2401,2402,2405,2408,2411,2413,2416,2418,2421,2424,2426,2429,2432,2435],{"class":53,"line":149},[51,2403,2404],{"class":824},"async",[51,2406,2407],{"class":824}," function",[51,2409,2410],{"class":1293}," fetchUser",[51,2412,1776],{"class":64},[51,2414,2415],{"class":1360},"userId",[51,2417,1782],{"class":824},[51,2419,2420],{"class":71}," string",[51,2422,2423],{"class":64},")",[51,2425,1782],{"class":824},[51,2427,2428],{"class":1293}," Promise",[51,2430,2431],{"class":64},"\u003C",[51,2433,2434],{"class":1293},"User",[51,2436,2437],{"class":64},"> {\n",[51,2439,2440],{"class":53,"line":154},[51,2441,2442],{"class":57},"  // Implementation\n",[51,2444,2445],{"class":53,"line":160},[51,2446,299],{"class":64},[10,2448,2450],{"id":2449},"task-management","Task Management",[33,2452,2454],{"id":2453},"todo-system-in-code","TODO System in Code",[41,2456,2458],{"className":1696,"code":2457,"language":1698,"meta":46,"style":46},"// TODO: Implement error handling\n// FIXME: This breaks when user is null\n// HACK: Temporary solution until API is fixed\n// NOTE: This logic matches the mobile app\n// OPTIMIZE: Consider caching this result\n\n// With VS Code extension, these are highlighted!\n",[48,2459,2460,2465,2470,2475,2480,2485,2489],{"__ignoreMap":46},[51,2461,2462],{"class":53,"line":54},[51,2463,2464],{"class":57},"// TODO: Implement error handling\n",[51,2466,2467],{"class":53,"line":61},[51,2468,2469],{"class":57},"// FIXME: This breaks when user is null\n",[51,2471,2472],{"class":53,"line":68},[51,2473,2474],{"class":57},"// HACK: Temporary solution until API is fixed\n",[51,2476,2477],{"class":53,"line":78},[51,2478,2479],{"class":57},"// NOTE: This logic matches the mobile app\n",[51,2481,2482],{"class":53,"line":84},[51,2483,2484],{"class":57},"// OPTIMIZE: Consider caching this result\n",[51,2486,2487],{"class":53,"line":97},[51,2488,834],{"emptyLinePlaceholder":833},[51,2490,2491],{"class":53,"line":106},[51,2492,2493],{"class":57},"// With VS Code extension, these are highlighted!\n",[33,2495,2497],{"id":2496},"project-task-management","Project Task Management",[15,2499,2500],{},"I use a combination of:",[1543,2502,2503,2509,2515],{},[770,2504,2505,2508],{},[763,2506,2507],{},"GitHub Issues"," - For project-level tasks",[770,2510,2511,2514],{},[763,2512,2513],{},"TODO.md"," in project root - For quick notes",[770,2516,2517,2520],{},[763,2518,2519],{},"Code comments"," - For inline reminders",[41,2522,2524],{"className":1606,"code":2523,"language":1608,"meta":46,"style":46},"\u003C!-- TODO.md -->\n# TODO\n\n## High Priority\n- [ ] Fix authentication bug\n- [ ] Add error boundaries\n- [ ] Write tests for API layer\n\n## Medium Priority\n- [ ] Refactor user service\n- [ ] Update documentation\n- [ ] Optimize image loading\n\n## Low Priority\n- [ ] Add dark mode\n- [ ] Improve accessibility\n- [ ] Add animations\n\n## Done ✅\n- [x] Set up CI/CD\n- [x] Configure ESLint\n",[48,2525,2526,2531,2536,2540,2545,2550,2555,2560,2564,2569,2574,2579,2584,2588,2593,2598,2603,2608,2612,2617,2622],{"__ignoreMap":46},[51,2527,2528],{"class":53,"line":54},[51,2529,2530],{},"\u003C!-- TODO.md -->\n",[51,2532,2533],{"class":53,"line":61},[51,2534,2535],{},"# TODO\n",[51,2537,2538],{"class":53,"line":68},[51,2539,834],{"emptyLinePlaceholder":833},[51,2541,2542],{"class":53,"line":78},[51,2543,2544],{},"## High Priority\n",[51,2546,2547],{"class":53,"line":84},[51,2548,2549],{},"- [ ] Fix authentication bug\n",[51,2551,2552],{"class":53,"line":97},[51,2553,2554],{},"- [ ] Add error boundaries\n",[51,2556,2557],{"class":53,"line":106},[51,2558,2559],{},"- [ ] Write tests for API layer\n",[51,2561,2562],{"class":53,"line":112},[51,2563,834],{"emptyLinePlaceholder":833},[51,2565,2566],{"class":53,"line":118},[51,2567,2568],{},"## Medium Priority\n",[51,2570,2571],{"class":53,"line":130},[51,2572,2573],{},"- [ ] Refactor user service\n",[51,2575,2576],{"class":53,"line":141},[51,2577,2578],{},"- [ ] Update documentation\n",[51,2580,2581],{"class":53,"line":149},[51,2582,2583],{},"- [ ] Optimize image loading\n",[51,2585,2586],{"class":53,"line":154},[51,2587,834],{"emptyLinePlaceholder":833},[51,2589,2590],{"class":53,"line":160},[51,2591,2592],{},"## Low Priority\n",[51,2594,2595],{"class":53,"line":172},[51,2596,2597],{},"- [ ] Add dark mode\n",[51,2599,2600],{"class":53,"line":184},[51,2601,2602],{},"- [ ] Improve accessibility\n",[51,2604,2605],{"class":53,"line":192},[51,2606,2607],{},"- [ ] Add animations\n",[51,2609,2610],{"class":53,"line":200},[51,2611,834],{"emptyLinePlaceholder":833},[51,2613,2614],{"class":53,"line":205},[51,2615,2616],{},"## Done ✅\n",[51,2618,2619],{"class":53,"line":211},[51,2620,2621],{},"- [x] Set up CI/CD\n",[51,2623,2624],{"class":53,"line":223},[51,2625,2626],{},"- [x] Configure ESLint\n",[10,2628,2630],{"id":2629},"environment-variables-management","Environment Variables Management",[33,2632,2634],{"id":2633},"env-structure",".env Structure",[41,2636,2638],{"className":802,"code":2637,"language":804,"meta":46,"style":46},"# .env.example (committed to repo)\n# Database\nDATABASE_URL=postgresql://localhost:5432/myapp\n\n# API Keys (get from dashboard)\nAPI_KEY=your_api_key_here\nSECRET_KEY=your_secret_key_here\n\n# App Config\nNODE_ENV=development\nPORT=3000\n",[48,2639,2640,2645,2650,2660,2664,2669,2679,2689,2693,2698,2708],{"__ignoreMap":46},[51,2641,2642],{"class":53,"line":54},[51,2643,2644],{"class":57},"# .env.example (committed to repo)\n",[51,2646,2647],{"class":53,"line":61},[51,2648,2649],{"class":57},"# Database\n",[51,2651,2652,2655,2657],{"class":53,"line":68},[51,2653,2654],{"class":64},"DATABASE_URL",[51,2656,825],{"class":824},[51,2658,2659],{"class":87},"postgresql://localhost:5432/myapp\n",[51,2661,2662],{"class":53,"line":78},[51,2663,834],{"emptyLinePlaceholder":833},[51,2665,2666],{"class":53,"line":84},[51,2667,2668],{"class":57},"# API Keys (get from dashboard)\n",[51,2670,2671,2674,2676],{"class":53,"line":97},[51,2672,2673],{"class":64},"API_KEY",[51,2675,825],{"class":824},[51,2677,2678],{"class":87},"your_api_key_here\n",[51,2680,2681,2684,2686],{"class":53,"line":106},[51,2682,2683],{"class":64},"SECRET_KEY",[51,2685,825],{"class":824},[51,2687,2688],{"class":87},"your_secret_key_here\n",[51,2690,2691],{"class":53,"line":112},[51,2692,834],{"emptyLinePlaceholder":833},[51,2694,2695],{"class":53,"line":118},[51,2696,2697],{"class":57},"# App Config\n",[51,2699,2700,2703,2705],{"class":53,"line":130},[51,2701,2702],{"class":64},"NODE_ENV",[51,2704,825],{"class":824},[51,2706,2707],{"class":87},"development\n",[51,2709,2710,2713,2715],{"class":53,"line":141},[51,2711,2712],{"class":64},"PORT",[51,2714,825],{"class":824},[51,2716,2717],{"class":87},"3000\n",[41,2719,2721],{"className":802,"code":2720,"language":804,"meta":46,"style":46},"# .env (not committed, in .gitignore)\nDATABASE_URL=postgresql://localhost:5432/myapp_dev\nAPI_KEY=actual_api_key_123abc\nSECRET_KEY=actual_secret_xyz789\nNODE_ENV=development\nPORT=3000\n",[48,2722,2723,2728,2737,2746,2755,2763],{"__ignoreMap":46},[51,2724,2725],{"class":53,"line":54},[51,2726,2727],{"class":57},"# .env (not committed, in .gitignore)\n",[51,2729,2730,2732,2734],{"class":53,"line":61},[51,2731,2654],{"class":64},[51,2733,825],{"class":824},[51,2735,2736],{"class":87},"postgresql://localhost:5432/myapp_dev\n",[51,2738,2739,2741,2743],{"class":53,"line":68},[51,2740,2673],{"class":64},[51,2742,825],{"class":824},[51,2744,2745],{"class":87},"actual_api_key_123abc\n",[51,2747,2748,2750,2752],{"class":53,"line":78},[51,2749,2683],{"class":64},[51,2751,825],{"class":824},[51,2753,2754],{"class":87},"actual_secret_xyz789\n",[51,2756,2757,2759,2761],{"class":53,"line":84},[51,2758,2702],{"class":64},[51,2760,825],{"class":824},[51,2762,2707],{"class":87},[51,2764,2765,2767,2769],{"class":53,"line":97},[51,2766,2712],{"class":64},[51,2768,825],{"class":824},[51,2770,2717],{"class":87},[33,2772,2774],{"id":2773},"type-safe-environment-variables","Type-Safe Environment Variables",[41,2776,2778],{"className":1696,"code":2777,"language":1698,"meta":46,"style":46},"// ~/env.ts\nexport const env = {\n  API_KEY: process.env.API_KEY!,\n  DATABASE_URL: process.env.DATABASE_URL!,\n  NODE_ENV: process.env.NODE_ENV as 'development' | 'production',\n} as const;\n\n// Validate at startup\nObject.entries(env).forEach(([key, value]) => {\n  if (!value) {\n    throw new Error(`Missing environment variable: ${key}`);\n  }\n});\n",[48,2779,2780,2785,2800,2812,2823,2844,2856,2860,2865,2899,2912,2936,2940],{"__ignoreMap":46},[51,2781,2782],{"class":53,"line":54},[51,2783,2784],{"class":57},"// ~/env.ts\n",[51,2786,2787,2789,2792,2795,2797],{"class":53,"line":61},[51,2788,1734],{"class":824},[51,2790,2791],{"class":824}," const",[51,2793,2794],{"class":71}," env",[51,2796,1816],{"class":824},[51,2798,2799],{"class":64}," {\n",[51,2801,2802,2805,2807,2810],{"class":53,"line":68},[51,2803,2804],{"class":64},"  API_KEY: process.env.",[51,2806,2673],{"class":71},[51,2808,2809],{"class":824},"!",[51,2811,103],{"class":64},[51,2813,2814,2817,2819,2821],{"class":53,"line":78},[51,2815,2816],{"class":64},"  DATABASE_URL: process.env.",[51,2818,2654],{"class":71},[51,2820,2809],{"class":824},[51,2822,103],{"class":64},[51,2824,2825,2828,2830,2833,2836,2839,2842],{"class":53,"line":84},[51,2826,2827],{"class":64},"  NODE_ENV: process.env.",[51,2829,2702],{"class":71},[51,2831,2832],{"class":824}," as",[51,2834,2835],{"class":87}," 'development'",[51,2837,2838],{"class":824}," |",[51,2840,2841],{"class":87}," 'production'",[51,2843,103],{"class":64},[51,2845,2846,2849,2852,2854],{"class":53,"line":97},[51,2847,2848],{"class":64},"} ",[51,2850,2851],{"class":824},"as",[51,2853,2791],{"class":824},[51,2855,1822],{"class":64},[51,2857,2858],{"class":53,"line":106},[51,2859,834],{"emptyLinePlaceholder":833},[51,2861,2862],{"class":53,"line":112},[51,2863,2864],{"class":57},"// Validate at startup\n",[51,2866,2867,2870,2873,2876,2879,2882,2885,2888,2891,2894,2897],{"class":53,"line":118},[51,2868,2869],{"class":64},"Object.",[51,2871,2872],{"class":1293},"entries",[51,2874,2875],{"class":64},"(env).",[51,2877,2878],{"class":1293},"forEach",[51,2880,2881],{"class":64},"(([",[51,2883,2884],{"class":1360},"key",[51,2886,2887],{"class":64},", ",[51,2889,2890],{"class":1360},"value",[51,2892,2893],{"class":64},"]) ",[51,2895,2896],{"class":824},"=>",[51,2898,2799],{"class":64},[51,2900,2901,2904,2907,2909],{"class":53,"line":130},[51,2902,2903],{"class":824},"  if",[51,2905,2906],{"class":64}," (",[51,2908,2809],{"class":824},[51,2910,2911],{"class":64},"value) {\n",[51,2913,2914,2917,2920,2923,2925,2928,2930,2933],{"class":53,"line":141},[51,2915,2916],{"class":824},"    throw",[51,2918,2919],{"class":824}," new",[51,2921,2922],{"class":1293}," Error",[51,2924,1776],{"class":64},[51,2926,2927],{"class":87},"`Missing environment variable: ${",[51,2929,2884],{"class":64},[51,2931,2932],{"class":87},"}`",[51,2934,2935],{"class":64},");\n",[51,2937,2938],{"class":53,"line":149},[51,2939,599],{"class":64},[51,2941,2942],{"class":53,"line":154},[51,2943,1756],{"class":64},[10,2945,2947],{"id":2946},"backup-strategy","Backup Strategy",[33,2949,2951],{"id":2950},"what-i-back-up","What I Back Up",[41,2953,2955],{"className":802,"code":2954,"language":804,"meta":46,"style":46},"# Daily automated backups\n~/Development/personal     # Personal projects\n~/Development/work         # Work projects\n~/.zshrc                   # Shell config\n~/.gitconfig               # Git config\n~/.ssh                     # SSH keys (encrypted)\n\n# Weekly backups\n~/Documents\n~/Desktop\n",[48,2956,2957,2962,2973,2983,2993,3003,3013,3017,3022,3029],{"__ignoreMap":46},[51,2958,2959],{"class":53,"line":54},[51,2960,2961],{"class":57},"# Daily automated backups\n",[51,2963,2964,2967,2970],{"class":53,"line":61},[51,2965,2966],{"class":824},"~",[51,2968,2969],{"class":64},"/Development/personal     ",[51,2971,2972],{"class":57},"# Personal projects\n",[51,2974,2975,2977,2980],{"class":53,"line":68},[51,2976,2966],{"class":824},[51,2978,2979],{"class":64},"/Development/work         ",[51,2981,2982],{"class":57},"# Work projects\n",[51,2984,2985,2987,2990],{"class":53,"line":78},[51,2986,2966],{"class":824},[51,2988,2989],{"class":64},"/.zshrc                   ",[51,2991,2992],{"class":57},"# Shell config\n",[51,2994,2995,2997,3000],{"class":53,"line":84},[51,2996,2966],{"class":824},[51,2998,2999],{"class":64},"/.gitconfig               ",[51,3001,3002],{"class":57},"# Git config\n",[51,3004,3005,3007,3010],{"class":53,"line":97},[51,3006,2966],{"class":824},[51,3008,3009],{"class":64},"/.ssh                     ",[51,3011,3012],{"class":57},"# SSH keys (encrypted)\n",[51,3014,3015],{"class":53,"line":106},[51,3016,834],{"emptyLinePlaceholder":833},[51,3018,3019],{"class":53,"line":112},[51,3020,3021],{"class":57},"# Weekly backups\n",[51,3023,3024,3026],{"class":53,"line":118},[51,3025,2966],{"class":824},[51,3027,3028],{"class":64},"/Documents\n",[51,3030,3031,3033],{"class":53,"line":130},[51,3032,2966],{"class":824},[51,3034,3035],{"class":64},"/Desktop\n",[33,3037,3039],{"id":3038},"tools-i-use","Tools I Use",[767,3041,3042,3048,3054,3064],{},[770,3043,3044,3047],{},[763,3045,3046],{},"Git"," - Code versioning",[770,3049,3050,3053],{},[763,3051,3052],{},"GitHub"," - Remote backup",[770,3055,3056,3059,3060,3063],{},[763,3057,3058],{},"Time Machine"," (Mac) / ",[763,3061,3062],{},"Backblaze"," - Full system backup",[770,3065,3066,3069],{},[763,3067,3068],{},"Dotfiles repo"," - Configuration files",[10,3071,3073],{"id":3072},"daily-workflow","Daily Workflow",[33,3075,3077],{"id":3076},"morning-routine","Morning Routine",[41,3079,3081],{"className":802,"code":3080,"language":804,"meta":46,"style":46},"# 1. Start the day fresh\ncd ~/Development/work/current-project\ngit switch main\ngit pull\n\n# 2. Check what's new\ngit log --since=\"yesterday\" --oneline\n\n# 3. Start dev environment\ndocker-compose up -d\nnpm run dev\n\n# 4. Open VS Code\ncode .\n",[48,3082,3083,3088,3095,3105,3112,3116,3121,3137,3141,3146,3157,3168,3172,3177],{"__ignoreMap":46},[51,3084,3085],{"class":53,"line":54},[51,3086,3087],{"class":57},"# 1. Start the day fresh\n",[51,3089,3090,3092],{"class":53,"line":61},[51,3091,1320],{"class":71},[51,3093,3094],{"class":87}," ~/Development/work/current-project\n",[51,3096,3097,3099,3102],{"class":53,"line":68},[51,3098,2053],{"class":1293},[51,3100,3101],{"class":87}," switch",[51,3103,3104],{"class":87}," main\n",[51,3106,3107,3109],{"class":53,"line":78},[51,3108,2053],{"class":1293},[51,3110,3111],{"class":87}," pull\n",[51,3113,3114],{"class":53,"line":84},[51,3115,834],{"emptyLinePlaceholder":833},[51,3117,3118],{"class":53,"line":97},[51,3119,3120],{"class":57},"# 2. Check what's new\n",[51,3122,3123,3125,3128,3131,3134],{"class":53,"line":106},[51,3124,2053],{"class":1293},[51,3126,3127],{"class":87}," log",[51,3129,3130],{"class":71}," --since=",[51,3132,3133],{"class":87},"\"yesterday\"",[51,3135,3136],{"class":71}," --oneline\n",[51,3138,3139],{"class":53,"line":112},[51,3140,834],{"emptyLinePlaceholder":833},[51,3142,3143],{"class":53,"line":118},[51,3144,3145],{"class":57},"# 3. Start dev environment\n",[51,3147,3148,3151,3154],{"class":53,"line":130},[51,3149,3150],{"class":1293},"docker-compose",[51,3152,3153],{"class":87}," up",[51,3155,3156],{"class":71}," -d\n",[51,3158,3159,3162,3165],{"class":53,"line":141},[51,3160,3161],{"class":1293},"npm",[51,3163,3164],{"class":87}," run",[51,3166,3167],{"class":87}," dev\n",[51,3169,3170],{"class":53,"line":149},[51,3171,834],{"emptyLinePlaceholder":833},[51,3173,3174],{"class":53,"line":154},[51,3175,3176],{"class":57},"# 4. Open VS Code\n",[51,3178,3179,3181],{"class":53,"line":160},[51,3180,48],{"class":1293},[51,3182,1411],{"class":87},[33,3184,3186],{"id":3185},"end-of-day","End of Day",[41,3188,3190],{"className":802,"code":3189,"language":804,"meta":46,"style":46},"# 1. Commit work\ngit add .\ngit commit -m \"wip: feature progress\"\n\n# 2. Push to remote (safety net)\ngit push\n\n# 3. Close dev environment\ndocker-compose down\n\n# 4. Close all terminals and tabs\n",[48,3191,3192,3197,3206,3217,3221,3226,3233,3237,3242,3249,3253],{"__ignoreMap":46},[51,3193,3194],{"class":53,"line":54},[51,3195,3196],{"class":57},"# 1. Commit work\n",[51,3198,3199,3201,3204],{"class":53,"line":61},[51,3200,2053],{"class":1293},[51,3202,3203],{"class":87}," add",[51,3205,1411],{"class":87},[51,3207,3208,3210,3212,3214],{"class":53,"line":68},[51,3209,2053],{"class":1293},[51,3211,1471],{"class":87},[51,3213,1474],{"class":71},[51,3215,3216],{"class":87}," \"wip: feature progress\"\n",[51,3218,3219],{"class":53,"line":78},[51,3220,834],{"emptyLinePlaceholder":833},[51,3222,3223],{"class":53,"line":84},[51,3224,3225],{"class":57},"# 2. Push to remote (safety net)\n",[51,3227,3228,3230],{"class":53,"line":97},[51,3229,2053],{"class":1293},[51,3231,3232],{"class":87}," push\n",[51,3234,3235],{"class":53,"line":106},[51,3236,834],{"emptyLinePlaceholder":833},[51,3238,3239],{"class":53,"line":112},[51,3240,3241],{"class":57},"# 3. Close dev environment\n",[51,3243,3244,3246],{"class":53,"line":118},[51,3245,3150],{"class":1293},[51,3247,3248],{"class":87}," down\n",[51,3250,3251],{"class":53,"line":130},[51,3252,834],{"emptyLinePlaceholder":833},[51,3254,3255],{"class":53,"line":141},[51,3256,3257],{"class":57},"# 4. Close all terminals and tabs\n",[10,3259,3261],{"id":3260},"the-results","The Results",[15,3263,3264],{},"Since optimizing my environment:",[767,3266,3267,3273,3279,3285,3291],{},[770,3268,3269,3272],{},[763,3270,3271],{},"50% faster"," at starting new projects",[770,3274,3275,3278],{},[763,3276,3277],{},"Fewer mistakes"," thanks to linting and formatting",[770,3280,3281,3284],{},[763,3282,3283],{},"Better focus"," with organized files and tabs",[770,3286,3287,3290],{},[763,3288,3289],{},"Less stress"," knowing everything is backed up",[770,3292,3293,3296],{},[763,3294,3295],{},"More enjoyment"," coding with a smooth workflow",[10,3298,3300],{"id":3299},"conclusion","Conclusion",[15,3302,3303],{},"Your development environment is your workshop. Invest time in setting it up right, and you'll reap the benefits every single day you code.",[15,3305,3306],{},"Start small—pick one area from this guide and improve it this week. Next week, tackle another. Before you know it, you'll have a development environment that feels like home.",[15,3308,3309,3312],{},[763,3310,3311],{},"Your future productive self will thank you!"," 🚀",[33,3314,3316],{"id":3315},"quick-wins-to-start-today","Quick Wins to Start Today",[1543,3318,3319,3322,3325,3328,3331],{},[770,3320,3321],{},"Install 3 essential VS Code extensions",[770,3323,3324],{},"Set up auto-save and format-on-save",[770,3326,3327],{},"Create one useful terminal alias",[770,3329,3330],{},"Organize your projects folder",[770,3332,3333],{},"Set up a proper .gitignore",[15,3335,3336],{},"Small improvements compound into massive productivity gains over time.",[3338,3339,3340],"style",{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":46,"searchDepth":61,"depth":61,"links":3342},[3343,3344,3349,3353,3357,3361,3366,3370,3374,3378,3382,3386,3390,3391],{"id":12,"depth":61,"text":13},{"id":30,"depth":61,"text":31,"children":3345},[3346,3347,3348],{"id":35,"depth":68,"text":36},{"id":302,"depth":68,"text":303},{"id":607,"depth":68,"text":608},{"id":746,"depth":61,"text":747,"children":3350},[3351,3352],{"id":750,"depth":68,"text":751},{"id":784,"depth":68,"text":785},{"id":794,"depth":61,"text":795,"children":3354},[3355,3356],{"id":798,"depth":68,"text":799},{"id":1277,"depth":68,"text":1278},{"id":1532,"depth":61,"text":1533,"children":3358},[3359,3360],{"id":1536,"depth":68,"text":36},{"id":1595,"depth":68,"text":1596},{"id":1668,"depth":61,"text":1669,"children":3362},[3363,3364,3365],{"id":1672,"depth":68,"text":1673},{"id":1682,"depth":68,"text":1683},{"id":1692,"depth":68,"text":1693},{"id":1839,"depth":61,"text":1840,"children":3367},[3368,3369],{"id":1843,"depth":68,"text":1844},{"id":1961,"depth":68,"text":1962},{"id":2068,"depth":61,"text":2069,"children":3371},[3372,3373],{"id":2072,"depth":68,"text":2073},{"id":2314,"depth":68,"text":2315},{"id":2449,"depth":61,"text":2450,"children":3375},[3376,3377],{"id":2453,"depth":68,"text":2454},{"id":2496,"depth":68,"text":2497},{"id":2629,"depth":61,"text":2630,"children":3379},[3380,3381],{"id":2633,"depth":68,"text":2634},{"id":2773,"depth":68,"text":2774},{"id":2946,"depth":61,"text":2947,"children":3383},[3384,3385],{"id":2950,"depth":68,"text":2951},{"id":3038,"depth":68,"text":3039},{"id":3072,"depth":61,"text":3073,"children":3387},[3388,3389],{"id":3076,"depth":68,"text":3077},{"id":3185,"depth":68,"text":3186},{"id":3260,"depth":61,"text":3261},{"id":3299,"depth":61,"text":3300,"children":3392},[3393],{"id":3315,"depth":68,"text":3316},"08/10/2025","From a chaotic desktop to a streamlined workflow—here's how I set up my development environment to minimize friction and maximize focus.","md",null,{},"/en/articles/organize-dev-environment-for-productivity","10",{"title":5,"description":3395},{"loc":3399},"en/articles/organize-dev-environment-for-productivity",[3405,3406,3407,3408],"Productivity","Development Setup","Tools","Workflow","rf5Geh2so10WFeGjj7ms87vg4fmck8PKG6b8XV1D2hs",{"id":3411,"extension":45,"items":3412,"meta":3477,"stem":3498,"__hash__":3499},"stack/stack.json",[3413,3417,3421,3425,3429,3433,3437,3441,3445,3449,3453,3457,3461,3465,3469,3473],{"name":3414,"link":3415,"icon":3416},"Nuxt","https://nuxt.com/","custom:nuxt",{"name":3418,"link":3419,"icon":3420},"Vue","https://vuejs.org/","custom:vue",{"name":3422,"link":3423,"icon":3424},"TypeScript","https://www.typescriptlang.org/","custom:typescript",{"name":3426,"link":3427,"icon":3428},"Node.js","https://nodejs.org/","custom:node-js",{"name":3430,"link":3431,"icon":3432},"React/React Native","https://react.dev/","custom:reactjs",{"name":3434,"link":3435,"icon":3436},"TailwindCSS","https://tailwindcss.com/","custom:tailwind",{"name":3438,"link":3439,"icon":3440},"Supabase","https://www.prisma.io/","custom:supabase",{"name":3442,"link":3443,"icon":3444},"Postgre","https://www.postgresql.org/","custom:pgsql",{"name":3446,"link":3447,"icon":3448},"Rust","https://www.rust-lang.org/","custom:rust",{"name":3450,"link":3451,"icon":3452},"Python","https://www.python.org/","custom:python",{"name":3454,"link":3455,"icon":3456},"Lua","https://www.lua.org/","custom:lua",{"name":3458,"link":3459,"icon":3460},"C++","https://isocpp.org/","custom:cpp",{"name":3462,"link":3463,"icon":3464},"Golang","https://go.dev/","custom:go",{"name":3466,"link":3467,"icon":3468},"Figma","https://www.figma.com/","custom:figma",{"name":3470,"link":3471,"icon":3472},"Photoshop","https://www.adobe.com/products/photoshop.html","custom:photoshop",{"name":3474,"link":3475,"icon":3476},"Illustrator","https://www.adobe.com/products/illustrator.html","custom:illustrator",{"path":3478,"body":3479,"title":3497},"/stack",{"items":3480},[3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496],{"name":3414,"link":3415,"icon":3416},{"name":3418,"link":3419,"icon":3420},{"name":3422,"link":3423,"icon":3424},{"name":3426,"link":3427,"icon":3428},{"name":3430,"link":3431,"icon":3432},{"name":3434,"link":3435,"icon":3436},{"name":3438,"link":3439,"icon":3440},{"name":3442,"link":3443,"icon":3444},{"name":3446,"link":3447,"icon":3448},{"name":3450,"link":3451,"icon":3452},{"name":3454,"link":3455,"icon":3456},{"name":3458,"link":3459,"icon":3460},{"name":3462,"link":3463,"icon":3464},{"name":3466,"link":3467,"icon":3468},{"name":3470,"link":3471,"icon":3472},{"name":3474,"link":3475,"icon":3476},"Stack","stack","aWyFpcVGYuaHymPCKadQyiY7s0WWw_rDYWJaXBNtvoc",{"id":3501,"title":3502,"extension":45,"faqQuestions":3503,"meta":3546,"stem":3568,"subtitle":3549,"__hash__":3569},"faq_en/en/faq.json","FAQ",[3504,3516,3534],{"title":3505,"questions":3506},"Services & Skills",[3507,3510,3513],{"label":3508,"content":3509},"What services do you offer?","**Web Development**: Responsive websites, landing pages, web applications, UI implementation | **Mobile Development**: Cross-platform mobile apps (learning) | **Game Development**: Mainly writing script to FiveM (in Lua), 3D Moddeling (buildings, cars etc) | **Backend & DevOps**: API integration, database setup, deployment assistance. **I'm eager to take on projects that help me grow while delivering quality results!**",{"label":3511,"content":3512},"What technologies do you work with?","**Web**: HTML, CSS, JavaScript, TypeScript, Vue.js, Nuxt.js, React (basics), Tailwind CSS, SASS | **Mobile**: React Native (learning), Flutter (basics) | **Game Development**: C++ (basics), Lua, | **DevOps/Servers**: Git, Docker, Linux basics, Node.js, Express.js, PostgreSQL, MongoDB. **I'm always learning and expanding my skill set across different areas!**",{"label":3514,"content":3515},"Are you available for freelance work?","Yes! I'm open to freelance projects, internships, and full-time opportunities. I'm particularly interested in projects that allow me to grow my skills while delivering value.",{"title":3517,"questions":3518},"Collaboration",[3519,3522,3525,3528,3531],{"label":3520,"content":3521},"How much do you charge?","My rates are flexible and depend on the project scope and duration. For freelance work, I typically charge between €25-40 per hour. I'm also open to discussing project-based pricing for the right opportunity.",{"label":3523,"content":3524},"How does payment work for a project?","For freelance projects, I typically ask for a 40% deposit upfront to begin work, with the remaining 60% due upon completion and delivery. I accept payments via bank transfer, PayPal, or other methods we can agree upon. For larger projects, we can discuss milestone-based payments.",{"label":3526,"content":3527},"How long does a project take?","Project timelines vary depending on complexity and scope. A simple landing page might take 1-2 weeks, while a more complex web application could take 1-2 months. I always provide a realistic timeline estimate after discussing the project requirements, and I keep you updated on progress throughout.",{"label":3529,"content":3530},"How do you approach new projects?","I start by understanding the requirements, then break down the project into manageable tasks. I believe in clear communication, regular updates, and delivering clean, maintainable code. I'm not afraid to ask questions when I need clarification!",{"label":3532,"content":3533},"Do you work in teams?","Absolutely! I enjoy collaborating with other developers and designers. I'm comfortable using Git for version control, participating in code reviews, and following established coding standards.",{"title":3535,"questions":3536},"Personal",[3537,3540,3543],{"label":3538,"content":3539},"What motivates you as a developer?","I love solving problems and seeing ideas come to life through code. Every project is an opportunity to learn something new and improve my craft. The feeling of building something that people actually use is incredibly rewarding!",{"label":3541,"content":3542},"How do you stay up to date?","I follow tech blogs, participate in developer communities, work on personal projects, and take online courses. I believe continuous learning is essential in this field, and I'm always exploring new tools and best practices.",{"label":3544,"content":3545},"What are you currently learning?","I'm currently deepening my knowledge of TypeScript, exploring advanced Vue.js patterns, and learning more about performance optimization and accessibility. I'm also interested in diving deeper into backend development and DevOps.",{"path":3547,"body":3548},"/en/faq",{"title":3502,"subtitle":3549,"faqQuestions":3550},"Things I get asked a lot",[3551,3556,3563],{"title":3505,"questions":3552},[3553,3554,3555],{"label":3508,"content":3509},{"label":3511,"content":3512},{"label":3514,"content":3515},{"title":3517,"questions":3557},[3558,3559,3560,3561,3562],{"label":3520,"content":3521},{"label":3523,"content":3524},{"label":3526,"content":3527},{"label":3529,"content":3530},{"label":3532,"content":3533},{"title":3535,"questions":3564},[3565,3566,3567],{"label":3538,"content":3539},{"label":3541,"content":3542},{"label":3544,"content":3545},"en/faq","g8WlXqYfNG0mRe8GJ3xTst3K2IecqLi2uDs7IuImrEY",1785840166958]