cfsa-antigravity 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/bin/cli.mjs +324 -0
  2. package/package.json +34 -0
  3. package/template/.agent/instructions/commands.md +48 -0
  4. package/template/.agent/instructions/patterns.md +61 -0
  5. package/template/.agent/instructions/structure.md +29 -0
  6. package/template/.agent/instructions/tech-stack.md +43 -0
  7. package/template/.agent/instructions/workflow.md +41 -0
  8. package/template/.agent/kit-sync.md +15 -0
  9. package/template/.agent/rules/boundary-not-placeholder.md +146 -0
  10. package/template/.agent/rules/completion-checklist.md +48 -0
  11. package/template/.agent/rules/decision-classification.md +103 -0
  12. package/template/.agent/rules/extensibility.md +47 -0
  13. package/template/.agent/rules/question-vs-command.md +81 -0
  14. package/template/.agent/rules/security-first.md +43 -0
  15. package/template/.agent/rules/specificity-standards.md +54 -0
  16. package/template/.agent/rules/tdd-contract-first.md +57 -0
  17. package/template/.agent/rules/vertical-slices.md +42 -0
  18. package/template/.agent/skill-library/MANIFEST.md +480 -0
  19. package/template/.agent/skill-library/README.md +38 -0
  20. package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
  21. package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
  22. package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
  23. package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
  24. package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
  25. package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
  26. package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
  27. package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
  28. package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
  29. package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
  30. package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
  31. package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
  32. package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
  33. package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
  34. package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
  35. package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
  36. package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
  37. package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
  38. package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
  39. package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
  40. package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
  41. package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
  42. package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
  43. package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
  44. package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
  45. package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
  46. package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
  47. package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
  48. package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
  49. package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
  50. package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
  51. package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
  52. package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
  53. package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
  54. package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
  55. package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
  56. package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
  57. package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
  58. package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
  59. package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
  60. package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
  61. package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
  62. package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
  63. package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
  64. package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
  65. package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
  66. package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
  67. package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
  68. package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
  69. package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
  70. package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
  71. package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
  72. package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
  73. package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
  74. package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
  75. package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
  76. package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
  77. package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
  78. package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
  79. package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
  80. package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
  81. package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
  82. package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
  83. package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
  84. package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
  85. package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
  86. package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
  87. package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
  88. package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
  89. package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
  90. package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
  91. package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
  92. package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
  93. package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
  94. package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
  95. package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
  96. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
  97. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
  98. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
  99. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
  100. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
  101. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
  102. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
  103. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
  104. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
  105. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
  106. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
  107. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
  108. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
  109. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
  110. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
  111. package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
  112. package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
  113. package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
  114. package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
  115. package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
  116. package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
  117. package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
  118. package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
  119. package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
  120. package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
  121. package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
  122. package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
  123. package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
  124. package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
  125. package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
  126. package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
  127. package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
  128. package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
  129. package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
  130. package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
  131. package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
  132. package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
  133. package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
  134. package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
  135. package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
  136. package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
  137. package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
  138. package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
  139. package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
  140. package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
  141. package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
  142. package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
  143. package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
  144. package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
  145. package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
  146. package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
  147. package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
  148. package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
  149. package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
  150. package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
  151. package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
  152. package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
  153. package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
  154. package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
  155. package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
  156. package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
  157. package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
  158. package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
  159. package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
  160. package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
  161. package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
  162. package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
  163. package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
  164. package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
  165. package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
  166. package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
  167. package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
  168. package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
  169. package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
  170. package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
  171. package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
  172. package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
  173. package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
  174. package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
  175. package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
  176. package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
  177. package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
  178. package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
  179. package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
  180. package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
  181. package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
  182. package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
  183. package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
  184. package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
  185. package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
  186. package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
  187. package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
  188. package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
  189. package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
  190. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
  191. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
  192. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
  193. package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
  194. package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
  195. package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
  196. package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
  197. package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
  198. package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
  199. package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
  200. package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
  201. package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
  202. package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
  203. package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
  204. package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
  205. package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
  206. package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
  207. package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
  208. package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
  209. package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
  210. package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
  211. package/template/.agent/skills/accessibility/SKILL.md +522 -0
  212. package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
  213. package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
  214. package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
  215. package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
  216. package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
  217. package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  218. package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
  219. package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  220. package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
  221. package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  222. package/template/.agent/skills/api-versioning/SKILL.md +420 -0
  223. package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
  224. package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
  225. package/template/.agent/skills/brainstorming/SKILL.md +236 -0
  226. package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
  227. package/template/.agent/skills/clean-code/SKILL.md +94 -0
  228. package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
  229. package/template/.agent/skills/concise-planning/SKILL.md +68 -0
  230. package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
  231. package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
  232. package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
  233. package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
  234. package/template/.agent/skills/design-direction/SKILL.md +45 -0
  235. package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
  236. package/template/.agent/skills/find-skills/SKILL.md +145 -0
  237. package/template/.agent/skills/git-advanced/SKILL.md +972 -0
  238. package/template/.agent/skills/git-workflow/SKILL.md +420 -0
  239. package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
  240. package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
  241. package/template/.agent/skills/migration-management/SKILL.md +384 -0
  242. package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
  243. package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
  244. package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
  245. package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
  246. package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
  247. package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
  248. package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
  249. package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
  250. package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
  251. package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
  252. package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
  253. package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
  254. package/template/.agent/skills/prd-templates/SKILL.md +88 -0
  255. package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
  256. package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
  257. package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
  258. package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
  259. package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
  260. package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
  261. package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
  262. package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
  263. package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
  264. package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
  265. package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
  266. package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
  267. package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
  268. package/template/.agent/skills/prompt-engineer/README.md +659 -0
  269. package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
  270. package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
  271. package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
  272. package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
  273. package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
  274. package/template/.agent/skills/session-continuity/SKILL.md +730 -0
  275. package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
  276. package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
  277. package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
  278. package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
  279. package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
  280. package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
  281. package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
  282. package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
  283. package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
  284. package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
  285. package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
  286. package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
  287. package/template/.agent/skills/skill-creator/README.md +270 -0
  288. package/template/.agent/skills/skill-creator/SKILL.md +590 -0
  289. package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
  290. package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
  291. package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
  292. package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
  293. package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
  294. package/template/.agent/skills/spec-writing/SKILL.md +110 -0
  295. package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
  296. package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
  297. package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  298. package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
  299. package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
  300. package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
  301. package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
  302. package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
  303. package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
  304. package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
  305. package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
  306. package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
  307. package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
  308. package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
  309. package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
  310. package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
  311. package/template/.agent/skills/technical-writer/SKILL.md +242 -0
  312. package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
  313. package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
  314. package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
  315. package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
  316. package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
  317. package/template/.agent/workflows/audit-ambiguity.md +64 -0
  318. package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
  319. package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
  320. package/template/.agent/workflows/bootstrap-agents.md +66 -0
  321. package/template/.agent/workflows/create-prd-architecture.md +119 -0
  322. package/template/.agent/workflows/create-prd-compile.md +138 -0
  323. package/template/.agent/workflows/create-prd-design-system.md +135 -0
  324. package/template/.agent/workflows/create-prd-security.md +113 -0
  325. package/template/.agent/workflows/create-prd-stack.md +91 -0
  326. package/template/.agent/workflows/create-prd.md +168 -0
  327. package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
  328. package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
  329. package/template/.agent/workflows/decompose-architecture.md +111 -0
  330. package/template/.agent/workflows/evolve-contract.md +98 -0
  331. package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
  332. package/template/.agent/workflows/evolve-feature-classify.md +116 -0
  333. package/template/.agent/workflows/evolve-feature.md +56 -0
  334. package/template/.agent/workflows/ideate-discover.md +144 -0
  335. package/template/.agent/workflows/ideate-extract.md +129 -0
  336. package/template/.agent/workflows/ideate-validate.md +117 -0
  337. package/template/.agent/workflows/ideate.md +113 -0
  338. package/template/.agent/workflows/implement-slice-setup.md +113 -0
  339. package/template/.agent/workflows/implement-slice-tdd.md +198 -0
  340. package/template/.agent/workflows/implement-slice.md +50 -0
  341. package/template/.agent/workflows/plan-phase.md +202 -0
  342. package/template/.agent/workflows/propagate-decision-apply.md +135 -0
  343. package/template/.agent/workflows/propagate-decision-scan.md +147 -0
  344. package/template/.agent/workflows/propagate-decision.md +56 -0
  345. package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
  346. package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
  347. package/template/.agent/workflows/remediate-pipeline.md +55 -0
  348. package/template/.agent/workflows/resolve-ambiguity.md +82 -0
  349. package/template/.agent/workflows/sync-kit.md +209 -0
  350. package/template/.agent/workflows/update-architecture-map.md +74 -0
  351. package/template/.agent/workflows/validate-phase.md +219 -0
  352. package/template/.agent/workflows/verify-infrastructure.md +207 -0
  353. package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
  354. package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
  355. package/template/.agent/workflows/write-architecture-spec.md +63 -0
  356. package/template/.agent/workflows/write-be-spec-classify.md +165 -0
  357. package/template/.agent/workflows/write-be-spec-write.md +98 -0
  358. package/template/.agent/workflows/write-be-spec.md +76 -0
  359. package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
  360. package/template/.agent/workflows/write-fe-spec-write.md +94 -0
  361. package/template/.agent/workflows/write-fe-spec.md +71 -0
  362. package/template/AGENTS.md +176 -0
  363. package/template/GEMINI.md +177 -0
  364. package/template/docs/README.md +187 -0
  365. package/template/docs/audits/.gitkeep +0 -0
  366. package/template/docs/audits/README.md +10 -0
  367. package/template/docs/plans/.gitkeep +0 -0
  368. package/template/docs/plans/README.md +21 -0
  369. package/template/docs/plans/be/.gitkeep +0 -0
  370. package/template/docs/plans/be/README.md +11 -0
  371. package/template/docs/plans/fe/.gitkeep +0 -0
  372. package/template/docs/plans/fe/README.md +11 -0
  373. package/template/docs/plans/ia/.gitkeep +0 -0
  374. package/template/docs/plans/ia/README.md +17 -0
  375. package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
  376. package/template/docs/plans/ia/deep-dives/README.md +5 -0
  377. package/template/docs/plans/phases/.gitkeep +0 -0
  378. package/template/docs/plans/phases/README.md +11 -0
@@ -0,0 +1,841 @@
1
+ ---
2
+ name: nginx
3
+ description: "Comprehensive Nginx configuration guide covering server blocks, location matching, reverse proxy, SSL/TLS, load balancing, caching, compression, rate limiting, security headers, access control, logging, HTTP/2 and HTTP/3, rewrites, try_files, API gateway patterns, and performance tuning. Use when configuring Nginx as a web server, reverse proxy, load balancer, or API gateway."
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Nginx
8
+
9
+ ## 1. Philosophy
10
+
11
+ Nginx is an **event-driven, non-blocking web server** that excels at serving static content, reverse proxying, load balancing, and acting as an API gateway. Its configuration is declarative -- you describe the desired behavior, and Nginx handles the event loop.
12
+
13
+ **Key principles**:
14
+ - Configuration is hierarchical. Directives inherit from outer blocks to inner blocks.
15
+ - Location matching has specific precedence rules. Know them or debug endlessly.
16
+ - Upstream blocks handle backend pools. Never hardcode backend addresses in location blocks.
17
+ - Security headers are not optional. Every response must include them.
18
+ - Test before reload. Always run `nginx -t` before applying configuration changes.
19
+
20
+ ---
21
+
22
+ ## 2. Server Blocks (Virtual Hosts)
23
+
24
+ ### Basic Server Block
25
+
26
+ ```nginx
27
+ server {
28
+ listen 80;
29
+ listen [::]:80;
30
+ server_name example.com www.example.com;
31
+
32
+ # Redirect HTTP to HTTPS
33
+ return 301 https://$host$request_uri;
34
+ }
35
+
36
+ server {
37
+ listen 443 ssl http2;
38
+ listen [::]:443 ssl http2;
39
+ server_name example.com www.example.com;
40
+
41
+ ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
42
+ ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
43
+
44
+ root /var/www/example.com/public;
45
+ index index.html;
46
+
47
+ location / {
48
+ try_files $uri $uri/ =404;
49
+ }
50
+ }
51
+ ```
52
+
53
+ ### Multiple Domains
54
+
55
+ ```nginx
56
+ # Catch-all for undefined domains
57
+ server {
58
+ listen 80 default_server;
59
+ server_name _;
60
+ return 444; # Close connection without response
61
+ }
62
+
63
+ # Application domain
64
+ server {
65
+ listen 80;
66
+ server_name app.example.com;
67
+ # ...
68
+ }
69
+
70
+ # API domain
71
+ server {
72
+ listen 80;
73
+ server_name api.example.com;
74
+ # ...
75
+ }
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 3. Location Matching
81
+
82
+ Nginx processes location blocks in a specific precedence order. Understanding this order prevents subtle routing bugs.
83
+
84
+ ### Matching Precedence (Highest to Lowest)
85
+
86
+ ```nginx
87
+ # 1. Exact match (highest priority)
88
+ location = /health {
89
+ return 200 "OK";
90
+ add_header Content-Type text/plain;
91
+ }
92
+
93
+ # 2. Preferential prefix match (stops searching)
94
+ location ^~ /static/ {
95
+ root /var/www;
96
+ expires 30d;
97
+ }
98
+
99
+ # 3. Regular expression match (first match wins, case-sensitive)
100
+ location ~ \.php$ {
101
+ fastcgi_pass unix:/run/php/php-fpm.sock;
102
+ }
103
+
104
+ # 4. Regular expression match (case-insensitive)
105
+ location ~* \.(jpg|jpeg|png|gif|ico|svg|webp)$ {
106
+ expires 365d;
107
+ add_header Cache-Control "public, immutable";
108
+ }
109
+
110
+ # 5. Prefix match (longest match wins)
111
+ location /api/ {
112
+ proxy_pass http://backend;
113
+ }
114
+
115
+ # 6. Default prefix match
116
+ location / {
117
+ try_files $uri $uri/ /index.html;
118
+ }
119
+ ```
120
+
121
+ ### Common Mistake
122
+
123
+ ```nginx
124
+ # BAD: regex location takes precedence over prefix
125
+ location /api/ {
126
+ proxy_pass http://backend;
127
+ }
128
+
129
+ location ~ ^/api/internal {
130
+ return 403; # This OVERRIDES the /api/ prefix above
131
+ }
132
+
133
+ # GOOD: Use ^~ to prevent regex override
134
+ location ^~ /api/internal {
135
+ return 403;
136
+ }
137
+
138
+ location /api/ {
139
+ proxy_pass http://backend;
140
+ }
141
+ ```
142
+
143
+ ---
144
+
145
+ ## 4. Reverse Proxy
146
+
147
+ ### Basic Proxy
148
+
149
+ ```nginx
150
+ upstream backend {
151
+ server 127.0.0.1:3000;
152
+ }
153
+
154
+ server {
155
+ listen 80;
156
+ server_name app.example.com;
157
+
158
+ location / {
159
+ proxy_pass http://backend;
160
+
161
+ # Pass original client information
162
+ proxy_set_header Host $host;
163
+ proxy_set_header X-Real-IP $remote_addr;
164
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
165
+ proxy_set_header X-Forwarded-Proto $scheme;
166
+
167
+ # Timeouts
168
+ proxy_connect_timeout 5s;
169
+ proxy_send_timeout 30s;
170
+ proxy_read_timeout 30s;
171
+
172
+ # Buffering
173
+ proxy_buffering on;
174
+ proxy_buffer_size 4k;
175
+ proxy_buffers 8 4k;
176
+ }
177
+ }
178
+ ```
179
+
180
+ ### WebSocket Proxy
181
+
182
+ ```nginx
183
+ location /ws {
184
+ proxy_pass http://backend;
185
+ proxy_http_version 1.1;
186
+ proxy_set_header Upgrade $http_upgrade;
187
+ proxy_set_header Connection "upgrade";
188
+ proxy_set_header Host $host;
189
+ proxy_set_header X-Real-IP $remote_addr;
190
+
191
+ # Prevent WebSocket timeout
192
+ proxy_read_timeout 86400s;
193
+ proxy_send_timeout 86400s;
194
+ }
195
+ ```
196
+
197
+ ### Trailing Slash Behavior
198
+
199
+ ```nginx
200
+ # With trailing slash: /api/ -> http://backend/
201
+ # Strips the matched prefix
202
+ location /api/ {
203
+ proxy_pass http://backend/;
204
+ }
205
+ # Request: /api/users -> proxied as /users
206
+
207
+ # Without trailing slash: /api/ -> http://backend/api/
208
+ # Preserves the full URI
209
+ location /api/ {
210
+ proxy_pass http://backend;
211
+ }
212
+ # Request: /api/users -> proxied as /api/users
213
+ ```
214
+
215
+ ---
216
+
217
+ ## 5. SSL/TLS
218
+
219
+ ### Modern TLS Configuration
220
+
221
+ ```nginx
222
+ server {
223
+ listen 443 ssl http2;
224
+ server_name example.com;
225
+
226
+ # Certificates
227
+ ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
228
+ ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
229
+
230
+ # Protocol versions -- TLS 1.2 and 1.3 only
231
+ ssl_protocols TLSv1.2 TLSv1.3;
232
+
233
+ # Cipher suites
234
+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
235
+ ssl_prefer_server_ciphers off;
236
+
237
+ # OCSP Stapling -- faster TLS handshake
238
+ ssl_stapling on;
239
+ ssl_stapling_verify on;
240
+ ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
241
+ resolver 1.1.1.1 8.8.8.8 valid=300s;
242
+ resolver_timeout 5s;
243
+
244
+ # Session caching
245
+ ssl_session_cache shared:SSL:10m;
246
+ ssl_session_timeout 1d;
247
+ ssl_session_tickets off;
248
+
249
+ # HSTS -- force HTTPS for 2 years
250
+ add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
251
+ }
252
+ ```
253
+
254
+ ### Let's Encrypt with Certbot
255
+
256
+ ```nginx
257
+ # HTTP challenge location
258
+ server {
259
+ listen 80;
260
+ server_name example.com;
261
+
262
+ location /.well-known/acme-challenge/ {
263
+ root /var/www/certbot;
264
+ }
265
+
266
+ location / {
267
+ return 301 https://$host$request_uri;
268
+ }
269
+ }
270
+ ```
271
+
272
+ ```bash
273
+ # Obtain certificate
274
+ certbot certonly --webroot -w /var/www/certbot -d example.com -d www.example.com
275
+
276
+ # Auto-renewal (certbot installs a timer/cron by default)
277
+ certbot renew --dry-run
278
+
279
+ # Reload nginx after renewal
280
+ certbot renew --deploy-hook "systemctl reload nginx"
281
+ ```
282
+
283
+ ---
284
+
285
+ ## 6. Load Balancing
286
+
287
+ ### Upstream Configuration
288
+
289
+ ```nginx
290
+ upstream api_servers {
291
+ # Round-robin (default)
292
+ server 10.0.0.1:3000;
293
+ server 10.0.0.2:3000;
294
+ server 10.0.0.3:3000;
295
+
296
+ # Backup server -- only used when all others are down
297
+ server 10.0.0.4:3000 backup;
298
+
299
+ # Mark a server as permanently down
300
+ server 10.0.0.5:3000 down;
301
+
302
+ # Keepalive connections to backends
303
+ keepalive 32;
304
+ }
305
+ ```
306
+
307
+ ### Load Balancing Algorithms
308
+
309
+ ```nginx
310
+ # Least connections -- send to the server with fewest active connections
311
+ upstream api_servers {
312
+ least_conn;
313
+ server 10.0.0.1:3000;
314
+ server 10.0.0.2:3000;
315
+ }
316
+
317
+ # IP hash -- same client always goes to the same server (sticky sessions)
318
+ upstream api_servers {
319
+ ip_hash;
320
+ server 10.0.0.1:3000;
321
+ server 10.0.0.2:3000;
322
+ }
323
+
324
+ # Weighted -- distribute based on server capacity
325
+ upstream api_servers {
326
+ server 10.0.0.1:3000 weight=3; # Gets 3x the traffic
327
+ server 10.0.0.2:3000 weight=1;
328
+ }
329
+ ```
330
+
331
+ ### Health Checks (Nginx Plus or OpenResty)
332
+
333
+ ```nginx
334
+ # Passive health checks (open-source Nginx)
335
+ upstream api_servers {
336
+ server 10.0.0.1:3000 max_fails=3 fail_timeout=30s;
337
+ server 10.0.0.2:3000 max_fails=3 fail_timeout=30s;
338
+ }
339
+ ```
340
+
341
+ ---
342
+
343
+ ## 7. Caching
344
+
345
+ ### Proxy Cache
346
+
347
+ ```nginx
348
+ # Define cache zone in http block
349
+ proxy_cache_path /var/cache/nginx/api
350
+ levels=1:2
351
+ keys_zone=api_cache:10m # 10MB for keys (approx 80,000 keys)
352
+ max_size=1g # 1GB on disk
353
+ inactive=60m # Remove items unused for 60 minutes
354
+ use_temp_path=off;
355
+
356
+ server {
357
+ location /api/ {
358
+ proxy_pass http://backend;
359
+ proxy_cache api_cache;
360
+ proxy_cache_valid 200 10m; # Cache 200 responses for 10 minutes
361
+ proxy_cache_valid 404 1m; # Cache 404 responses for 1 minute
362
+ proxy_cache_use_stale error timeout updating http_500 http_502 http_503;
363
+ proxy_cache_lock on; # Only one request populates the cache
364
+ proxy_cache_key "$scheme$request_method$host$request_uri";
365
+
366
+ add_header X-Cache-Status $upstream_cache_status;
367
+ }
368
+ }
369
+ ```
370
+
371
+ ### Static File Caching
372
+
373
+ ```nginx
374
+ location /static/ {
375
+ root /var/www;
376
+ expires 365d;
377
+ add_header Cache-Control "public, immutable";
378
+ access_log off;
379
+ }
380
+
381
+ # Hashed filenames (e.g., app.abc123.js) -- cache forever
382
+ location ~* \.[a-f0-9]{8,}\.(js|css|png|jpg|svg|woff2)$ {
383
+ root /var/www;
384
+ expires max;
385
+ add_header Cache-Control "public, immutable";
386
+ access_log off;
387
+ }
388
+ ```
389
+
390
+ ---
391
+
392
+ ## 8. Compression
393
+
394
+ ```nginx
395
+ # Enable gzip in http block
396
+ gzip on;
397
+ gzip_vary on;
398
+ gzip_proxied any;
399
+ gzip_comp_level 5; # 1-9, balance between CPU and compression ratio
400
+ gzip_min_length 256; # Do not compress tiny responses
401
+ gzip_types
402
+ text/plain
403
+ text/css
404
+ text/xml
405
+ text/javascript
406
+ application/javascript
407
+ application/json
408
+ application/xml
409
+ application/rss+xml
410
+ image/svg+xml;
411
+
412
+ # Brotli (requires ngx_brotli module)
413
+ brotli on;
414
+ brotli_comp_level 6;
415
+ brotli_types
416
+ text/plain
417
+ text/css
418
+ text/xml
419
+ text/javascript
420
+ application/javascript
421
+ application/json
422
+ application/xml
423
+ image/svg+xml;
424
+ ```
425
+
426
+ ---
427
+
428
+ ## 9. Rate Limiting
429
+
430
+ ```nginx
431
+ # Define rate limit zones in http block
432
+ limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
433
+ limit_req_zone $binary_remote_addr zone=login_limit:10m rate=1r/s;
434
+
435
+ server {
436
+ # API rate limiting -- allow burst of 20 with no delay for first 10
437
+ location /api/ {
438
+ limit_req zone=api_limit burst=20 nodelay;
439
+ limit_req_status 429;
440
+ proxy_pass http://backend;
441
+ }
442
+
443
+ # Strict rate limiting on login endpoint
444
+ location /api/auth/login {
445
+ limit_req zone=login_limit burst=5;
446
+ limit_req_status 429;
447
+ proxy_pass http://backend;
448
+ }
449
+ }
450
+ ```
451
+
452
+ ### Connection Limiting
453
+
454
+ ```nginx
455
+ limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
456
+
457
+ server {
458
+ location /downloads/ {
459
+ limit_conn conn_limit 5; # Max 5 concurrent connections per IP
460
+ limit_rate 500k; # Limit bandwidth to 500KB/s per connection
461
+ }
462
+ }
463
+ ```
464
+
465
+ ---
466
+
467
+ ## 10. Security Headers
468
+
469
+ ```nginx
470
+ # Add to every server block (or http block for global)
471
+ add_header X-Content-Type-Options "nosniff" always;
472
+ add_header X-Frame-Options "DENY" always;
473
+ add_header X-XSS-Protection "0" always;
474
+ add_header Referrer-Policy "strict-origin-when-cross-origin" always;
475
+ add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
476
+ add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self' https://api.example.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self';" always;
477
+
478
+ # HSTS (only on HTTPS server blocks)
479
+ add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
480
+ ```
481
+
482
+ ---
483
+
484
+ ## 11. Access Control
485
+
486
+ ```nginx
487
+ # IP-based access control
488
+ location /admin/ {
489
+ allow 10.0.0.0/8;
490
+ allow 192.168.1.0/24;
491
+ deny all;
492
+ proxy_pass http://admin_backend;
493
+ }
494
+
495
+ # Basic authentication
496
+ location /staging/ {
497
+ auth_basic "Staging Environment";
498
+ auth_basic_user_file /etc/nginx/.htpasswd;
499
+ proxy_pass http://staging_backend;
500
+ }
501
+
502
+ # Block specific user agents
503
+ if ($http_user_agent ~* (bot|crawler|spider)) {
504
+ return 403;
505
+ }
506
+
507
+ # Block access to hidden files
508
+ location ~ /\. {
509
+ deny all;
510
+ access_log off;
511
+ log_not_found off;
512
+ }
513
+ ```
514
+
515
+ ```bash
516
+ # Create htpasswd file
517
+ # Install: apt install apache2-utils
518
+ htpasswd -c /etc/nginx/.htpasswd admin
519
+ ```
520
+
521
+ ---
522
+
523
+ ## 12. Logging
524
+
525
+ ### Custom Log Formats
526
+
527
+ ```nginx
528
+ # Define in http block
529
+ log_format main '$remote_addr - $remote_user [$time_local] '
530
+ '"$request" $status $body_bytes_sent '
531
+ '"$http_referer" "$http_user_agent"';
532
+
533
+ log_format json escape=json '{'
534
+ '"time": "$time_iso8601",'
535
+ '"remote_addr": "$remote_addr",'
536
+ '"request_method": "$request_method",'
537
+ '"request_uri": "$request_uri",'
538
+ '"status": $status,'
539
+ '"body_bytes_sent": $body_bytes_sent,'
540
+ '"request_time": $request_time,'
541
+ '"upstream_response_time": "$upstream_response_time",'
542
+ '"http_user_agent": "$http_user_agent",'
543
+ '"http_referer": "$http_referer"'
544
+ '}';
545
+
546
+ access_log /var/log/nginx/access.log json;
547
+ error_log /var/log/nginx/error.log warn;
548
+ ```
549
+
550
+ ### Conditional Logging
551
+
552
+ ```nginx
553
+ # Do not log health checks
554
+ map $request_uri $loggable {
555
+ ~*^/health 0;
556
+ ~*^/ready 0;
557
+ default 1;
558
+ }
559
+
560
+ access_log /var/log/nginx/access.log main if=$loggable;
561
+
562
+ # Do not log static file access
563
+ location /static/ {
564
+ access_log off;
565
+ }
566
+ ```
567
+
568
+ ---
569
+
570
+ ## 13. HTTP/2 and HTTP/3
571
+
572
+ ```nginx
573
+ # HTTP/2 (widely supported)
574
+ server {
575
+ listen 443 ssl http2;
576
+ listen [::]:443 ssl http2;
577
+ # ...
578
+
579
+ # HTTP/2 push (deprecated in most browsers, avoid)
580
+ # Use 103 Early Hints instead
581
+ location / {
582
+ add_header Link "</style.css>; rel=preload; as=style";
583
+ proxy_pass http://backend;
584
+ }
585
+ }
586
+
587
+ # HTTP/3 (QUIC -- requires Nginx 1.25+ with quic module)
588
+ server {
589
+ listen 443 ssl;
590
+ listen 443 quic reuseport;
591
+
592
+ http2 on;
593
+ http3 on;
594
+
595
+ # Advertise HTTP/3 support
596
+ add_header Alt-Svc 'h3=":443"; ma=86400' always;
597
+
598
+ ssl_certificate /etc/ssl/certs/example.com.crt;
599
+ ssl_certificate_key /etc/ssl/private/example.com.key;
600
+
601
+ # Required for QUIC
602
+ ssl_early_data on;
603
+ }
604
+ ```
605
+
606
+ ---
607
+
608
+ ## 14. Rewrites and Redirects
609
+
610
+ ```nginx
611
+ # Permanent redirect (301)
612
+ location /old-page {
613
+ return 301 /new-page;
614
+ }
615
+
616
+ # Redirect with query string preservation
617
+ location /search {
618
+ return 301 /find$is_args$args;
619
+ }
620
+
621
+ # Rewrite (internal -- URL changes but client does not see it)
622
+ rewrite ^/blog/(\d{4})/(\d{2})/(.+)$ /posts?year=$1&month=$2&slug=$3 last;
623
+
624
+ # Rewrite with redirect
625
+ rewrite ^/legacy/(.*)$ /modern/$1 permanent; # 301
626
+ rewrite ^/temp/(.*)$ /current/$1 redirect; # 302
627
+
628
+ # Canonical domain redirect
629
+ server {
630
+ listen 80;
631
+ server_name www.example.com;
632
+ return 301 https://example.com$request_uri;
633
+ }
634
+ ```
635
+
636
+ ---
637
+
638
+ ## 15. try_files
639
+
640
+ ```nginx
641
+ # Single Page Application (SPA) -- serve index.html for all routes
642
+ location / {
643
+ root /var/www/app;
644
+ try_files $uri $uri/ /index.html;
645
+ }
646
+
647
+ # Static files first, then proxy to backend
648
+ location / {
649
+ root /var/www/public;
650
+ try_files $uri @backend;
651
+ }
652
+
653
+ location @backend {
654
+ proxy_pass http://app_server;
655
+ proxy_set_header Host $host;
656
+ proxy_set_header X-Real-IP $remote_addr;
657
+ }
658
+
659
+ # Custom 404 page
660
+ location / {
661
+ root /var/www;
662
+ try_files $uri $uri/ =404;
663
+ error_page 404 /404.html;
664
+ }
665
+ ```
666
+
667
+ ---
668
+
669
+ ## 16. Nginx as API Gateway
670
+
671
+ ```nginx
672
+ # Rate limiting, authentication, and routing in one place
673
+ upstream auth_service {
674
+ server 127.0.0.1:4000;
675
+ keepalive 16;
676
+ }
677
+
678
+ upstream user_service {
679
+ server 127.0.0.1:4001;
680
+ keepalive 16;
681
+ }
682
+
683
+ upstream order_service {
684
+ server 127.0.0.1:4002;
685
+ keepalive 16;
686
+ }
687
+
688
+ server {
689
+ listen 443 ssl http2;
690
+ server_name api.example.com;
691
+
692
+ # Global rate limit
693
+ limit_req zone=api_limit burst=50 nodelay;
694
+
695
+ # CORS headers
696
+ add_header Access-Control-Allow-Origin "https://app.example.com" always;
697
+ add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
698
+ add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
699
+
700
+ # Preflight requests
701
+ if ($request_method = OPTIONS) {
702
+ add_header Access-Control-Allow-Origin "https://app.example.com";
703
+ add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
704
+ add_header Access-Control-Allow-Headers "Authorization, Content-Type";
705
+ add_header Access-Control-Max-Age 86400;
706
+ return 204;
707
+ }
708
+
709
+ # Route to microservices
710
+ location /api/v1/auth/ {
711
+ proxy_pass http://auth_service/;
712
+ proxy_set_header Host $host;
713
+ proxy_set_header X-Real-IP $remote_addr;
714
+ }
715
+
716
+ location /api/v1/users/ {
717
+ proxy_pass http://user_service/;
718
+ proxy_set_header Host $host;
719
+ proxy_set_header X-Real-IP $remote_addr;
720
+ }
721
+
722
+ location /api/v1/orders/ {
723
+ proxy_pass http://order_service/;
724
+ proxy_set_header Host $host;
725
+ proxy_set_header X-Real-IP $remote_addr;
726
+ }
727
+
728
+ # Request size limit for file uploads
729
+ location /api/v1/uploads/ {
730
+ client_max_body_size 50m;
731
+ proxy_pass http://user_service/uploads/;
732
+ }
733
+ }
734
+ ```
735
+
736
+ ---
737
+
738
+ ## 17. Performance Tuning
739
+
740
+ ```nginx
741
+ # nginx.conf -- main context
742
+ worker_processes auto; # One worker per CPU core
743
+ worker_rlimit_nofile 65535; # Max open files per worker
744
+
745
+ events {
746
+ worker_connections 4096; # Max connections per worker
747
+ multi_accept on; # Accept multiple connections at once
748
+ use epoll; # Linux optimal event method
749
+ }
750
+
751
+ http {
752
+ # Sendfile -- bypass user space for static files
753
+ sendfile on;
754
+ tcp_nopush on; # Send headers and file in one packet
755
+ tcp_nodelay on; # Disable Nagle's algorithm for small packets
756
+
757
+ # Timeouts
758
+ keepalive_timeout 65;
759
+ keepalive_requests 1000;
760
+ client_body_timeout 12;
761
+ client_header_timeout 12;
762
+ send_timeout 10;
763
+
764
+ # Buffers
765
+ client_body_buffer_size 16k;
766
+ client_header_buffer_size 1k;
767
+ client_max_body_size 8m;
768
+ large_client_header_buffers 4 8k;
769
+
770
+ # File descriptor cache
771
+ open_file_cache max=1000 inactive=20s;
772
+ open_file_cache_valid 30s;
773
+ open_file_cache_min_uses 2;
774
+ open_file_cache_errors on;
775
+
776
+ # MIME types
777
+ include /etc/nginx/mime.types;
778
+ default_type application/octet-stream;
779
+
780
+ # Logging
781
+ access_log /var/log/nginx/access.log main buffer=16k flush=5s;
782
+ error_log /var/log/nginx/error.log warn;
783
+ }
784
+ ```
785
+
786
+ ---
787
+
788
+ ## 18. Anti-Patterns
789
+
790
+ ### NEVER
791
+
792
+ - Edit configuration without running `nginx -t` before reloading
793
+ - Use `if` blocks in location context for anything other than `return` or `rewrite` -- it causes subtle bugs
794
+ - Hardcode backend addresses in location blocks -- use upstream blocks
795
+ - Serve static files through a proxy when Nginx can serve them directly
796
+ - Disable access logging in production -- you need it for debugging
797
+ - Use `ssl on` (deprecated) -- use `listen 443 ssl` instead
798
+ - Run Nginx as root for worker processes -- only the master process needs root
799
+ - Skip security headers -- add them in every server block
800
+ - Use self-signed certificates in production -- use Let's Encrypt
801
+ - Ignore the `always` parameter on `add_header` -- without it, headers are not added to error responses
802
+
803
+ ### ALWAYS
804
+
805
+ - Run `nginx -t` before `nginx -s reload`
806
+ - Use `upstream` blocks for backend servers
807
+ - Enable gzip/brotli compression for text-based content
808
+ - Set appropriate `client_max_body_size` for each endpoint
809
+ - Use `try_files` for SPA routing instead of nested if/rewrite blocks
810
+ - Set `keepalive` connections to upstream backends
811
+ - Include security headers on every response
812
+ - Log in structured JSON format for production
813
+ - Configure SSL with modern cipher suites and TLS 1.2+
814
+ - Monitor error logs and upstream response times
815
+
816
+ ---
817
+
818
+ ## 19. Quick Reference
819
+
820
+ ```bash
821
+ # Test configuration
822
+ nginx -t
823
+
824
+ # Reload configuration (graceful -- no downtime)
825
+ nginx -s reload
826
+
827
+ # Stop (graceful)
828
+ nginx -s quit
829
+
830
+ # Stop (immediate)
831
+ nginx -s stop
832
+
833
+ # Show compiled modules
834
+ nginx -V
835
+
836
+ # Show active configuration
837
+ nginx -T
838
+
839
+ # Check which process is listening
840
+ ss -tlnp | grep :80
841
+ ```