Upload index.html with huggingface_hub
Browse files- index.html +128 -17
index.html
CHANGED
|
@@ -1,19 +1,130 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 6 |
+
<title>VS Code config auditor — 26 rules, free, in your browser</title>
|
| 7 |
+
<meta name="description" content="Paste a .vscode/settings.json, tasks.json, c_cpp_properties.json or .globalrc and see every misconfiguration with its line number. The same 26 rules the GNU GLOBAL (gtags) Workspace Setup Kit runs inside VS Code.">
|
| 8 |
+
<script defer data-auto-init src="https://cdn.jsdelivr.net/npm/@polar-sh/checkout@latest/dist/embed.global.js"></script>
|
| 9 |
+
<style>
|
| 10 |
+
:root{--bg:#0e1116;--panel:#161b22;--line:#272e38;--ink:#e6edf3;--dim:#8b949e;--bad:#ff7b72;--good:#3fb950;--acc:#58a6ff}
|
| 11 |
+
*{box-sizing:border-box}
|
| 12 |
+
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
|
| 13 |
+
.wrap{max-width:1180px;margin:0 auto;padding:22px 18px 60px}
|
| 14 |
+
h1{font-size:23px;margin:0 0 4px;letter-spacing:-.2px}
|
| 15 |
+
.sub{color:var(--dim);margin:0 0 18px;font-size:14px}
|
| 16 |
+
.grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
|
| 17 |
+
@media(max-width:900px){.grid{grid-template-columns:1fr}}
|
| 18 |
+
.panel{background:var(--panel);border:1px solid var(--line);border-radius:9px;overflow:hidden}
|
| 19 |
+
.ph{padding:9px 13px;border-bottom:1px solid var(--line);font-size:12px;color:var(--dim);text-transform:uppercase;letter-spacing:.7px;display:flex;justify-content:space-between;align-items:center}
|
| 20 |
+
textarea{width:100%;height:430px;border:0;background:transparent;color:var(--ink);padding:13px;font:13px/1.65 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical;outline:none;tab-size:2}
|
| 21 |
+
#out{height:430px;overflow:auto;padding:6px 0}
|
| 22 |
+
.hit{padding:9px 13px;border-bottom:1px solid #1d232c;display:grid;grid-template-columns:52px 1fr;gap:10px}
|
| 23 |
+
.hit:last-child{border-bottom:0}
|
| 24 |
+
.ln{color:var(--bad);font:12px ui-monospace,Menlo,monospace;text-align:right;padding-top:1px}
|
| 25 |
+
.msg{font-size:13px;color:#c9d1d9}
|
| 26 |
+
.fix{display:block;margin-top:5px;font:12px ui-monospace,Menlo,monospace;color:var(--good);word-break:break-all}
|
| 27 |
+
.fix b{color:var(--dim);font-weight:400}
|
| 28 |
+
.clean{padding:26px 14px;text-align:center;color:var(--good);font-size:14px}
|
| 29 |
+
.count{color:var(--bad);font-weight:600;text-transform:none;letter-spacing:0;font-size:13px}
|
| 30 |
+
.count.ok{color:var(--good)}
|
| 31 |
+
.buy{margin-top:16px;background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acc);border-radius:9px;padding:15px 17px}
|
| 32 |
+
.buy h2{margin:0 0 6px;font-size:15px}
|
| 33 |
+
.buy p{margin:0 0 11px;color:var(--dim);font-size:13.5px}
|
| 34 |
+
a.cta{display:inline-block;background:var(--acc);color:#06121f;font-weight:600;font-size:14px;text-decoration:none;padding:9px 18px;border-radius:6px}
|
| 35 |
+
a.cta:hover{filter:brightness(1.08)}
|
| 36 |
+
.free{margin-top:9px;font-size:12.5px;color:var(--dim)}
|
| 37 |
+
footer{margin-top:30px;color:var(--dim);font-size:12.5px;border-top:1px solid var(--line);padding-top:14px}
|
| 38 |
+
code{background:#1d232c;padding:1px 5px;border-radius:3px;font-size:12.5px}
|
| 39 |
+
</style>
|
| 40 |
+
<script data-grow-initializer="">!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement("script");(e.type="text/javascript"),(e.src="https://faves.grow.me/main.js"),(e.defer=!0),e.setAttribute("data-grow-faves-site-id","U2l0ZTphZjljMzgyMC0yMmU5LTRhYjgtYTIxNS03OTRhMGY1N2ExYzM=");var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t);})();</script>
|
| 41 |
+
<!--yj-canon-s101--><link rel="canonical" href="https://getreadystack.com/tools/gtags-workspace-config-kit"></head>
|
| 42 |
+
<body>
|
| 43 |
+
<div class="wrap">
|
| 44 |
+
<h1>VS Code config auditor — 26 rules, free</h1>
|
| 45 |
+
<p class="sub">Paste any <code>.vscode/settings.json</code>, <code>tasks.json</code>, <code>c_cpp_properties.json</code>, <code>.globalrc</code> or <code>gtags.conf</code>. Findings appear as you type — nothing is uploaded, the check runs in this tab. These are the same 26 rules the extension runs inside VS Code.</p>
|
| 46 |
+
|
| 47 |
+
<div class="grid">
|
| 48 |
+
<div class="panel">
|
| 49 |
+
<div class="ph"><span>Your config file</span><span class="count" id="lines"></span></div>
|
| 50 |
+
<textarea id="in" spellcheck="false" aria-label="Paste your configuration file"></textarea>
|
| 51 |
+
</div>
|
| 52 |
+
<div class="panel">
|
| 53 |
+
<div class="ph"><span>Findings</span><span class="count" id="n"></span></div>
|
| 54 |
+
<div id="out"></div>
|
| 55 |
+
</div>
|
| 56 |
+
</div>
|
| 57 |
+
|
| 58 |
+
<div class="buy">
|
| 59 |
+
<h2>This checked one file. A repository has dozens.</h2>
|
| 60 |
+
<p>The browser page and the extension both audit <b>the one file in front of you</b>, free and forever. A licence adds the two things you cannot do by hand: <b>audit every config file in the workspace in one run</b>, and <b>re-run the audit on every save</b> so a machine-specific path someone pastes back in is caught the same minute.</p>
|
| 61 |
+
<a href="https://buy.polar.sh/polar_cl_uobf0e1SXkBfCizSA6fpj4XMwWyXUKrY35d1P2SmCPE" data-polar-checkout data-polar-checkout-theme="dark" class="cta">Get a licence — workspace-wide audit + re-check on save</a>
|
| 62 |
+
<p class="free">Free forever, no key: all 26 rules on the open file · all 46 setup blocks · no watermark, no countdown, no lock after N runs.</p>
|
| 63 |
+
</div>
|
| 64 |
+
|
| 65 |
+
<footer>
|
| 66 |
+
GNU GLOBAL (gtags) Workspace Setup Kit — 26 audit rules, 46 setup blocks, 8 setups.
|
| 67 |
+
</footer>
|
| 68 |
+
</div>
|
| 69 |
+
|
| 70 |
+
<script>
|
| 71 |
+
var RULES = [{"pattern":"\\$\\{workspaceRoot\\}","flags":"g","message":"${workspaceRoot} was replaced by ${workspaceFolder}. It no longer expands, so this task or include path resolves relative to the wrong directory and the failure is silent.","fix":"${workspaceFolder}"},{"pattern":"\"version\"\\s*:\\s*\"0\\.1\\.0\"","flags":"","message":"This tasks.json uses the legacy 0.1.0 schema. Keys such as group and presentation are ignored under it.","fix":"\"version\": \"2.0.0\""},{"pattern":"\"[A-Za-z0-9_.]*[Pp]ath\"\\s*:\\s*\"(/home/|/Users/|[A-Za-z]:)","flags":"","message":"A machine-specific absolute path in a committed config file. It works on your machine and breaks for everyone who clones the repository. Use ${workspaceFolder} or a settings key each developer sets locally.","fix":""},{"pattern":"\"C_Cpp\\.intelliSenseEngine\"\\s*:\\s*\"Tag Parser\"","flags":"","message":"The Tag Parser is the fallback engine: it matches symbols by name only, so Go-to-Definition lands on the wrong overload and macro-guarded code is not understood.","fix":""},{"pattern":"\"compilerPath\"\\s*:\\s*\"\"","flags":"","message":"compilerPath is empty, so system include directories are never discovered and every standard header shows as unresolved.","fix":""},{"pattern":"\"cppStandard\"\\s*:\\s*\"c\\+\\+(98|03)\"","flags":"","message":"cppStandard is set to a pre-C++11 standard. Anything using auto, lambdas or range-for will be parsed as an error even though it compiles.","fix":""},{"pattern":"\"limitSymbolsToIncludedHeaders\"\\s*:\\s*true","flags":"","message":"Cross-references are limited to headers this file already includes, so a caller in another translation unit will not be found.","fix":"\"limitSymbolsToIncludedHeaders\": false"},{"pattern":"\"C_Cpp\\.autocomplete\"\\s*:\\s*\"[Dd]isabled\"","flags":"","message":"C/C++ autocomplete is switched off in this configuration. Symbol completion will be word-based only.","fix":""},{"pattern":"\"C_Cpp\\.errorSquiggles\"\\s*:\\s*\"[Dd]isabled\"","flags":"","message":"Error squiggles are off, so a broken includePath produces no visible signal at all — the tree just stops resolving quietly.","fix":""},{"pattern":"\"editor\\.formatOnSave\"\\s*:\\s*false","flags":"","message":"Format on save is off in a committed setting. Formatting differences will surface as unrelated diff noise in review.","fix":"\"editor.formatOnSave\": true"},{"pattern":"\"editor\\.defaultFormatter\"\\s*:\\s*null","flags":"","message":"No default formatter is named, so VS Code asks which formatter to use on every save instead of formatting.","fix":""},{"pattern":"\"files\\.autoSave\"\\s*:\\s*\"afterDelay\"","flags":"","message":"With autoSave set to afterDelay, format on save does not run on the delayed saves. Use onFocusChange or off if you rely on formatting.","fix":""},{"pattern":"\"(css|scss|less)\\.lint\\.unknownAtRules\"\\s*:\\s*\"(error|warning)\"","flags":"","message":"@tailwind and @apply are reported as unknown at-rules with this setting, so the stylesheet shows errors that are not errors.","fix":"\"css.lint.unknownAtRules\": \"ignore\""},{"pattern":"\"editor\\.quickSuggestions\"\\s*:\\s*false","flags":"","message":"Quick suggestions are off entirely, which switches off class completion inside strings — the only place utility class names are written.","fix":""},{"pattern":"\"tailwindCSS\\.emmetCompletions\"\\s*:\\s*false","flags":"","message":"Emmet-style class completion is off, so abbreviations in class attributes will not expand.","fix":"\"tailwindCSS.emmetCompletions\": true"},{"pattern":"\"editor\\.semanticHighlighting\\.enabled\"\\s*:\\s*false","flags":"","message":"Semantic highlighting is off, so parameters, fields and macros all fall back to the same TextMate colour and your token customisations do nothing.","fix":"\"editor.semanticHighlighting.enabled\": true"},{"pattern":"\"workbench\\.colorCustomizations\"\\s*:\\s*\\{\\s*\\}","flags":"","message":"An empty colorCustomizations block has no effect. Either fill it or remove it, so nobody assumes the theme is being overridden here.","fix":""},{"pattern":"\"(password|passwd|token|secret|apiKey|api_key|client_secret|access_token)\"\\s*:\\s*\"[^\"$\\s]{8,}\"","flags":"i","message":"A literal credential in a configuration file that is committed. Once it is in git history, rotating the secret is the only fix. Move it to an environment variable or a local, ignored file.","fix":""},{"pattern":"\"http\\.proxyStrictSSL\"\\s*:\\s*false","flags":"","message":"Certificate verification for extension and proxy traffic is switched off for anyone who opens this workspace.","fix":"\"http.proxyStrictSSL\": true"},{"pattern":"\"security\\.workspace\\.trust\\.enabled\"\\s*:\\s*false","flags":"","message":"Workspace trust is disabled, so tasks and extensions in any folder you open run without the trust prompt.","fix":"\"security.workspace.trust.enabled\": true"},{"pattern":"\"terminal\\.integrated\\.shellArgs\\.(windows|linux|osx)\"","flags":"","message":"The shellArgs keys were removed in favour of terminal profiles. This setting is read by nothing and the shell starts with default arguments.","fix":""},{"pattern":"\"telemetry\\.enableTelemetry\"","flags":"","message":"telemetry.enableTelemetry is deprecated and no longer controls telemetry on its own. Use telemetry.telemetryLevel.","fix":"\"telemetry.telemetryLevel\""},{"pattern":"\"ASPNETCORE_ENVIRONMENT\"\\s*:\\s*\"Production\"","flags":"","message":"A debug configuration set to the Production environment: the developer exception page is suppressed, so a failing request returns a blank 500 with no stack.","fix":"\"ASPNETCORE_ENVIRONMENT\": \"Development\""},{"pattern":"\"java\\.import\\.maven\\.enabled\"\\s*:\\s*false","flags":"","message":"Maven import is disabled, so the MicroProfile project's dependencies are never put on the classpath and every import resolves as an error.","fix":"\"java.import.maven.enabled\": true"},{"pattern":"\"java\\.configuration\\.updateBuildConfiguration\"\\s*:\\s*\"disabled\"","flags":"","message":"Build configuration updates are disabled, so a change to pom.xml is ignored until the project is reloaded by hand.","fix":"\"java.configuration.updateBuildConfiguration\": \"automatic\""},{"pattern":"\"key\"\\s*:\\s*\"ctrl\\+[a-z]\"","flags":"","message":"A single Ctrl plus letter binding. Most of these are assigned by default in the editor; open Keyboard Shortcuts and check for a conflict, or use a two-key chord such as ctrl+k ctrl+t.","fix":""}];
|
| 72 |
+
var SAMPLE = "{\n \"version\": \"0.1.0\",\n \"C_Cpp.intelliSenseEngine\": \"Tag Parser\",\n \"compilerPath\": \"/home/dave/toolchain/bin/g++\",\n \"cppStandard\": \"c++03\",\n \"limitSymbolsToIncludedHeaders\": true,\n \"editor.formatOnSave\": false,\n \"css.lint.unknownAtRules\": \"error\",\n \"http.proxyStrictSSL\": false,\n \"security.workspace.trust.enabled\": false,\n \"terminal.integrated.shellArgs.linux\": [\"-l\"],\n \"telemetry.enableTelemetry\": true,\n \"apiKey\": \"sk_live_9f2b7c41d8e6\",\n \"gtagsRoot\": \"${workspaceRoot}/src\"\n}";
|
| 73 |
+
|
| 74 |
+
// ★확장(extension.js)의 scan() 과 ★같은 논리 — 줄마다, 규칙마다, 정규식 하나씩.
|
| 75 |
+
function scan(text){
|
| 76 |
+
var lines = String(text).split(/\r?\n/), hits = [];
|
| 77 |
+
for (var i = 0; i < lines.length; i++) {
|
| 78 |
+
for (var k = 0; k < RULES.length; k++) {
|
| 79 |
+
var r = RULES[k], re;
|
| 80 |
+
try { re = new RegExp(r.pattern, r.flags || ''); } catch (e) { continue; }
|
| 81 |
+
if (re.test(lines[i])) hits.push({ line: i + 1, msg: r.message, fix: r.fix || null });
|
| 82 |
+
}
|
| 83 |
+
}
|
| 84 |
+
return hits;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
var inEl = document.getElementById('in'),
|
| 88 |
+
outEl = document.getElementById('out'),
|
| 89 |
+
nEl = document.getElementById('n'),
|
| 90 |
+
lnEl = document.getElementById('lines');
|
| 91 |
+
|
| 92 |
+
function esc(s){ return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); }
|
| 93 |
+
|
| 94 |
+
function render(){
|
| 95 |
+
var text = inEl.value;
|
| 96 |
+
var hits = scan(text);
|
| 97 |
+
lnEl.textContent = text.split(/\r?\n/).length + ' lines';
|
| 98 |
+
lnEl.className = 'count ok';
|
| 99 |
+
if (!hits.length) {
|
| 100 |
+
nEl.textContent = 'clean'; nEl.className = 'count ok';
|
| 101 |
+
outEl.innerHTML = '<div class="clean">No misconfiguration found — this file passes all ' + RULES.length + ' rules.</div>';
|
| 102 |
+
return;
|
| 103 |
+
}
|
| 104 |
+
nEl.textContent = hits.length + (hits.length === 1 ? ' finding' : ' findings');
|
| 105 |
+
nEl.className = 'count';
|
| 106 |
+
outEl.innerHTML = hits.map(function(h){
|
| 107 |
+
return '<div class="hit"><div class="ln">line ' + h.line + '</div><div class="msg">' + esc(h.msg) +
|
| 108 |
+
(h.fix ? '<span class="fix"><b>fix →</b> ' + esc(h.fix) + '</span>' : '') + '</div></div>';
|
| 109 |
+
}).join('');
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
inEl.addEventListener('input', render);
|
| 113 |
+
inEl.value = SAMPLE; // ★첫 3초에 ★완성된 결과가 보인다 — ⛔빈 칸이 아니라
|
| 114 |
+
render();
|
| 115 |
+
</script>
|
| 116 |
+
|
| 117 |
+
<section data-yj-alert="rule" style="margin:1rem auto 1.5rem;max-width:46rem;padding:1.1rem 1.25rem;border:1px solid #d9dee6;border-radius:12px;background:#fbfcfd;font:15px/1.55 system-ui,-apple-system,Segoe UI,sans-serif"><b style="font-size:1.05rem">Get one email when this rule changes</b><div style="opacity:.78;margin:.35rem 0 .8rem">We watch the regulation and vendor sources behind GNU GLOBAL (gtags) Workspace Setup Kit every day. When a rule changes, you get a single email with what changed and the updated check. No newsletter.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjae" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:#fff;color:inherit"><button id="yjab" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;background:#0f7b3f;color:#fff;font:600 15px system-ui,sans-serif">Notify me</button></div><div id="yjao" hidden style="margin-top:.6rem;color:#0f7b3f">You're on the list. One email when it changes.</div><script>(function(){var b=document.getElementById("yjab"),e=document.getElementById("yjae");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"gtags-workspace-config-kit",lang:"en",source:"rule_alert"})}).then(function(r){var o=document.getElementById("yjao");o.hidden=false;if(!r.ok){o.textContent="Could not save - please try again.";}}).catch(function(){var o=document.getElementById("yjao");o.hidden=false;o.textContent="Could not save - please try again.";});});})();</script></section>
|
| 118 |
+
|
| 119 |
+
|
| 120 |
+
<section data-yj-install="free" style="margin:2rem auto 1rem;max-width:46rem;padding:1.25rem 1.25rem;border:1px solid #cfe3d6;border-radius:12px;background:#f6fbf8;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .4rem;font-size:1.2rem">Install free</h2><p style="margin:0 0 .8rem;color:#41505f">Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.</p><a href="https://www.npmjs.com/package/@readystack/gtags-workspace-config-kit" rel="noopener" data-yj-install-door="npm" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'gtags-workspace-config-kit',src:'npm',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">npm</a><a href="https://hub.docker.com/r/getreadystack/gtags-workspace-config-kit" rel="noopener" data-yj-install-door="docker" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'gtags-workspace-config-kit',src:'docker',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Docker Hub</a><pre style="margin:.5rem 0 0;padding:.6rem .8rem;background:#f3f5f8;border-radius:8px;font-size:.9rem;overflow:auto">npx @readystack/gtags-workspace-config-kit <file>
|
| 121 |
+
docker run --rm -v "$PWD:/w" getreadystack/gtags-workspace-config-kit /w</pre><p style="margin:.6rem 0 0;font-size:.92rem;color:#41505f"><a href="https://buy.polar.sh/polar_cl_l6iN1uWt0FwWu7tBsczD0jWpP2vxFM54Wdwqb3KPi1G" rel="nofollow" style="color:#0f7b3f;text-decoration:underline">Team? One key for every ReadyStack linter, 5 seats, $149 once</a></p></section>
|
| 122 |
+
<section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the complete version <span class="yj-price">$29</span></h2><p style="margin:.25rem 0 1rem;color:#41505f">This page is the working piece. The full pack has everything below.</p><p style="margin:0 0 1rem;color:#41505f">46 config snippets, 26 audit rules, 8 setups in one extension — because one absolute path like /home/you/ in .vscode/settings.json breaks Go-to-Definition for every teammate who clones the r</p><p style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">A senior C++ developer's hour costs $73 in the United States (Salary.com, 1 September 2026); mid-to-senior software contractors bill $60-110/hour (KORE1, 2026). One hour spent hand-reading a repository's .vscode configs costs more</p><a href="https://buy.polar.sh/polar_cl_uobf0e1SXkBfCizSA6fpj4XMwWyXUKrY35d1P2SmCPE" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $29</a></section>
|
| 123 |
+
<section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">More from ReadyStack</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Ready-to-use files. One-time download, no subscription.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/revit-window-family"><span class="yj-rel-t">Revit Window Family Starter Blocks — 12 Dimensioned DXF Window Blocks for Impo</span><span class="yj-rel-p">$100</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/wedding-planning-template-budget-calculator"><span class="yj-rel-t">Wedding Planning Template — US Catering Contract Budget: Service Charge, Sales</span><span class="yj-rel-p">$90</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/payroll-wordpress-plugin"><span class="yj-rel-t">FLSA Payroll Timesheet Plugin for Small US Employers</span><span class="yj-rel-p">$60</span></a><a class="yj-rel-c" href="https://getreadystack.com/en/p/indien-visum-in-6-schritten-beantragen-vorlage-checkliste-bo"><span class="yj-rel-t">Indien-Visum in 6 Schritten beantragen: Vorlage, Checkliste & Botschafts-Ansch</span><span class="yj-rel-p">$39</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/bakery-shopify-theme"><span class="yj-rel-t">Bakery Shopify Theme</span><span class="yj-rel-p">$180</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/construction-website-template"><span class="yj-rel-t">Construction Website Template — 7-Page Contractor Site in Plain HTML, No Subsc</span><span class="yj-rel-p">$49</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section><!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button><button id="yjimg" type="button" style="font:inherit;padding:10px 18px;margin-left:8px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Save result as image</button></div><script>(function(){var b=document.getElementById("yjimg");if(!b)return;b.addEventListener("click",function(){var o=document.getElementById("out");var txt=(o&&(o.innerText||o.textContent)||"").trim();if(!txt){b.textContent="(no result yet)";setTimeout(function(){b.textContent="Save result as image";},1500);return;}var lines=txt.split(String.fromCharCode(10)).filter(function(x){return x.trim();}).slice(0,10);var W=1200,P=56,c=document.createElement("canvas");c.width=W;var lh=38,H=P*2+70+lines.length*lh+60;c.height=H;var x=c.getContext("2d");x.fillStyle="#1a1512";x.fillRect(0,0,W,H);x.fillStyle="#f3e9d2";x.font="600 34px system-ui,Segoe UI,Arial";var t=(document.title||"").split("|")[0].trim();x.fillText(t.slice(0,54),P,P+34);x.font="22px ui-monospace,Menlo,Consolas,monospace";x.fillStyle="#e8dcc4";for(var i=0;i<lines.length;i++){x.fillText(lines[i].slice(0,88),P,P+70+i*lh+22);}x.font="600 22px system-ui,Segoe UI,Arial";x.fillStyle="#c9a227";var d=location.hostname.replace("www.","");x.fillText(d,W-P-x.measureText(d).width,H-P+6);c.toBlob(function(bl){var u=URL.createObjectURL(bl),a=document.createElement("a");a.href=u;a.download=(t||"result").replace(/[^a-z0-9]+/gi,"-").toLowerCase()+"-"+d+".png";document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(u);a.remove();},2000);},"image/png");});})();</script><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script><div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&","<":"<",">":">",'"':"""}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div>
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
<script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script>
|
| 127 |
+
|
| 128 |
+
<script data-yj="yj-use-beacon">(function(){try{var o=document.getElementById('out');if(!o)return;var p=location.pathname,k='yju:'+p,sent=false;function fire(){if(sent||sessionStorage.getItem(k))return;if(!(o.textContent||'').replace(/\s+/g,'').length)return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}var mo=new MutationObserver(function(){fire();if(sent)mo.disconnect();});mo.observe(o,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script>
|
| 129 |
+
</body>
|
| 130 |
</html>
|