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