constella 0.1.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.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +53 -0
- package/.next/build-manifest.json +20 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/export-marker.json +6 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +36 -0
- package/.next/react-loadable-manifest.json +14 -0
- package/.next/required-server-files.js +343 -0
- package/.next/required-server-files.json +343 -0
- package/.next/routes-manifest.json +362 -0
- package/.next/server/app/(app)/activity/page.js +2 -0
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -0
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/agents/[handle]/page.js +18 -0
- package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/code/page.js +2 -0
- package/.next/server/app/(app)/code/page.js.nft.json +1 -0
- package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/config/page.js +2 -0
- package/.next/server/app/(app)/config/page.js.nft.json +1 -0
- package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/costs/page.js +2 -0
- package/.next/server/app/(app)/costs/page.js.nft.json +1 -0
- package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/cron/page.js +2 -0
- package/.next/server/app/(app)/cron/page.js.nft.json +1 -0
- package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/dashboard/page.js +2 -0
- package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -0
- package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/docs/[id]/page.js +2 -0
- package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/docs/page.js +2 -0
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -0
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/github/page.js +2 -0
- package/.next/server/app/(app)/github/page.js.nft.json +1 -0
- package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/goals/page.js +2 -0
- package/.next/server/app/(app)/goals/page.js.nft.json +1 -0
- package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/inbox/page.js +2 -0
- package/.next/server/app/(app)/inbox/page.js.nft.json +1 -0
- package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/knowledge/page.js +3 -0
- package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -0
- package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/models/page.js +2 -0
- package/.next/server/app/(app)/models/page.js.nft.json +1 -0
- package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/notifications/page.js +2 -0
- package/.next/server/app/(app)/notifications/page.js.nft.json +1 -0
- package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/org/page.js +2 -0
- package/.next/server/app/(app)/org/page.js.nft.json +1 -0
- package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/organizations/page.js +2 -0
- package/.next/server/app/(app)/organizations/page.js.nft.json +1 -0
- package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/page.js +3 -0
- package/.next/server/app/(app)/page.js.nft.json +1 -0
- package/.next/server/app/(app)/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/planner/page.js +2 -0
- package/.next/server/app/(app)/planner/page.js.nft.json +1 -0
- package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/plugins/page.js +2 -0
- package/.next/server/app/(app)/plugins/page.js.nft.json +1 -0
- package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/pm/page.js +2 -0
- package/.next/server/app/(app)/pm/page.js.nft.json +1 -0
- package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/prepare-deploy/page.js +19 -0
- package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -0
- package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/profile/page.js +2 -0
- package/.next/server/app/(app)/profile/page.js.nft.json +1 -0
- package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/pulse/page.js +2 -0
- package/.next/server/app/(app)/pulse/page.js.nft.json +1 -0
- package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/reports/[id]/page.js +3 -0
- package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/reports/page.js +5 -0
- package/.next/server/app/(app)/reports/page.js.nft.json +1 -0
- package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/routines/page.js +2 -0
- package/.next/server/app/(app)/routines/page.js.nft.json +1 -0
- package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/search/page.js +2 -0
- package/.next/server/app/(app)/search/page.js.nft.json +1 -0
- package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/security/page.js +2 -0
- package/.next/server/app/(app)/security/page.js.nft.json +1 -0
- package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/skills/page.js +18 -0
- package/.next/server/app/(app)/skills/page.js.nft.json +1 -0
- package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/tasks/page.js +2 -0
- package/.next/server/app/(app)/tasks/page.js.nft.json +1 -0
- package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/test-dev/page.js +2 -0
- package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -0
- package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/update/page.js +2 -0
- package/.next/server/app/(app)/update/page.js.nft.json +1 -0
- package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(auth)/login/page.js +2 -0
- package/.next/server/app/(auth)/login/page.js.nft.json +1 -0
- package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(auth)/onboarding/page.js +18 -0
- package/.next/server/app/(auth)/onboarding/page.js.nft.json +1 -0
- package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error/page.js +32 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +16 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +6 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page.js +2 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/[...all]/route.js +1 -0
- package/.next/server/app/api/auth/[...all]/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/[...all]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cron/tick/route.js +52 -0
- package/.next/server/app/api/cron/tick/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/dev-login/route.js +1 -0
- package/.next/server/app/api/dev-login/route.js.nft.json +1 -0
- package/.next/server/app/api/dev-login/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/locks/acquire/route.js +1 -0
- package/.next/server/app/api/locks/acquire/route.js.nft.json +1 -0
- package/.next/server/app/api/locks/acquire/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/progress/route.js +1 -0
- package/.next/server/app/api/models/progress/route.js.nft.json +1 -0
- package/.next/server/app/api/models/progress/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route.js +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route.js +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/register/options/route.js +1 -0
- package/.next/server/app/api/passkey/register/options/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/register/options/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/register/verify/route.js +1 -0
- package/.next/server/app/api/passkey/register/verify/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/register/verify/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/stream/route.js +4 -0
- package/.next/server/app/api/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/stream/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sync/file/route.js +2 -0
- package/.next/server/app/api/sync/file/route.js.nft.json +1 -0
- package/.next/server/app/api/sync/file/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/telegram/poll/route.js +15 -0
- package/.next/server/app/api/telegram/poll/route.js.nft.json +1 -0
- package/.next/server/app/api/telegram/poll/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/upload/route.js +1 -0
- package/.next/server/app/api/upload/route.js.nft.json +1 -0
- package/.next/server/app/api/upload/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/[[...path]]/route.js +1 -0
- package/.next/server/app/api/v1/[[...path]]/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/[[...path]]/route_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +53 -0
- package/.next/server/chunks/1003.js +1 -0
- package/.next/server/chunks/127.js +26 -0
- package/.next/server/chunks/1388.js +1 -0
- package/.next/server/chunks/1408.js +21 -0
- package/.next/server/chunks/1572.js +1 -0
- package/.next/server/chunks/1591.js +24 -0
- package/.next/server/chunks/1619.js +188 -0
- package/.next/server/chunks/162.js +1 -0
- package/.next/server/chunks/1881.js +1 -0
- package/.next/server/chunks/1968.js +1 -0
- package/.next/server/chunks/2297.js +348 -0
- package/.next/server/chunks/2341.js +1 -0
- package/.next/server/chunks/2517.js +1 -0
- package/.next/server/chunks/2549.js +1 -0
- package/.next/server/chunks/259.js +14 -0
- package/.next/server/chunks/2599.js +1 -0
- package/.next/server/chunks/260.js +1 -0
- package/.next/server/chunks/2867.js +147 -0
- package/.next/server/chunks/3018.js +1 -0
- package/.next/server/chunks/3050.js +18 -0
- package/.next/server/chunks/3085.js +12 -0
- package/.next/server/chunks/3131.js +1 -0
- package/.next/server/chunks/3242.js +1 -0
- package/.next/server/chunks/3266.js +15 -0
- package/.next/server/chunks/3524.js +1 -0
- package/.next/server/chunks/3527.js +479 -0
- package/.next/server/chunks/3533.js +869 -0
- package/.next/server/chunks/3550.js +1 -0
- package/.next/server/chunks/3609.js +2 -0
- package/.next/server/chunks/3667.js +462 -0
- package/.next/server/chunks/3760.js +4 -0
- package/.next/server/chunks/4679.js +1 -0
- package/.next/server/chunks/4804.js +1 -0
- package/.next/server/chunks/4832.js +2 -0
- package/.next/server/chunks/4853.js +1 -0
- package/.next/server/chunks/4979.js +67 -0
- package/.next/server/chunks/5060.js +1 -0
- package/.next/server/chunks/5278.js +1 -0
- package/.next/server/chunks/5614.js +1 -0
- package/.next/server/chunks/5818.js +1 -0
- package/.next/server/chunks/6479.js +1 -0
- package/.next/server/chunks/6658.js +1 -0
- package/.next/server/chunks/6706.js +1 -0
- package/.next/server/chunks/6719.js +1 -0
- package/.next/server/chunks/678.js +1 -0
- package/.next/server/chunks/683.js +1 -0
- package/.next/server/chunks/6862.js +1 -0
- package/.next/server/chunks/6882.js +1 -0
- package/.next/server/chunks/7037.js +1 -0
- package/.next/server/chunks/7107.js +741 -0
- package/.next/server/chunks/73.js +17 -0
- package/.next/server/chunks/7327.js +1 -0
- package/.next/server/chunks/7514.js +1 -0
- package/.next/server/chunks/7622.js +1 -0
- package/.next/server/chunks/7778.js +1 -0
- package/.next/server/chunks/7912.js +1 -0
- package/.next/server/chunks/7949.js +1 -0
- package/.next/server/chunks/7971.js +1 -0
- package/.next/server/chunks/7989.js +1 -0
- package/.next/server/chunks/842.js +22 -0
- package/.next/server/chunks/8762.js +15 -0
- package/.next/server/chunks/8823.js +77 -0
- package/.next/server/chunks/9146.js +4 -0
- package/.next/server/chunks/9676.js +1 -0
- package/.next/server/chunks/9783.js +22 -0
- package/.next/server/chunks/9969.js +3 -0
- package/.next/server/functions-config-manifest.json +18 -0
- package/.next/server/instrumentation.js +1 -0
- package/.next/server/instrumentation.js.nft.json +1 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/middleware.js +18 -0
- package/.next/server/middleware.js.nft.json +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +3 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +1 -0
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/chunks/1858-339516f78a4b00da.js +1 -0
- package/.next/static/chunks/2320-fc8b39380e69d465.js +2 -0
- package/.next/static/chunks/23550918-ff694f70f4b0648c.js +1 -0
- package/.next/static/chunks/3219-ebb3c23be38c838d.js +1 -0
- package/.next/static/chunks/4263-adecb5b466380b6e.js +1 -0
- package/.next/static/chunks/5479-0cceab68cd0ca9c7.js +1 -0
- package/.next/static/chunks/5701-665b927b06158b76.js +1 -0
- package/.next/static/chunks/5920.6451a68b63918988.js +1 -0
- package/.next/static/chunks/6575-5c9139720bb0f5bf.js +4 -0
- package/.next/static/chunks/6834-4759af1ce7d95fb6.js +32 -0
- package/.next/static/chunks/7509.721cd47a931c5518.js +1 -0
- package/.next/static/chunks/8264-1ca011989ee2b231.js +1 -0
- package/.next/static/chunks/9219-4a39a98b5502d9d1.js +1 -0
- package/.next/static/chunks/9690-53d5222618cbeddb.js +1 -0
- package/.next/static/chunks/app/(app)/activity/page-3973534281ecea81.js +1 -0
- package/.next/static/chunks/app/(app)/agents/[handle]/page-83662a175c098282.js +1 -0
- package/.next/static/chunks/app/(app)/code/page-33979545192cd137.js +1 -0
- package/.next/static/chunks/app/(app)/config/page-9933aed1ca8a85c1.js +1 -0
- package/.next/static/chunks/app/(app)/costs/page-131c4dc580efcc19.js +1 -0
- package/.next/static/chunks/app/(app)/cron/page-53ea1aff998a87ca.js +1 -0
- package/.next/static/chunks/app/(app)/dashboard/page-deed83aaa9d0d447.js +1 -0
- package/.next/static/chunks/app/(app)/docs/[id]/page-38c993d73c0eab4f.js +1 -0
- package/.next/static/chunks/app/(app)/docs/page-bf463b55d0554e86.js +1 -0
- package/.next/static/chunks/app/(app)/error-988cd28480809861.js +1 -0
- package/.next/static/chunks/app/(app)/github/page-62678b4e82dfecb6.js +1 -0
- package/.next/static/chunks/app/(app)/goals/page-4adb426fe1c96106.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-e347dc55ab467310.js +1 -0
- package/.next/static/chunks/app/(app)/knowledge/page-65393a045b4349be.js +1 -0
- package/.next/static/chunks/app/(app)/layout-7f65675705b011d8.js +1 -0
- package/.next/static/chunks/app/(app)/models/page-e01f1dd7e49a2951.js +1 -0
- package/.next/static/chunks/app/(app)/notifications/page-56548ac87aef00da.js +1 -0
- package/.next/static/chunks/app/(app)/org/page-699e6a6dc0db7d81.js +1 -0
- package/.next/static/chunks/app/(app)/organizations/page-36051a380a7e8eb7.js +1 -0
- package/.next/static/chunks/app/(app)/page-7d1011a566f81520.js +1 -0
- package/.next/static/chunks/app/(app)/planner/page-dab7ced94083373a.js +1 -0
- package/.next/static/chunks/app/(app)/plugins/page-5b5a1f53389be42e.js +1 -0
- package/.next/static/chunks/app/(app)/pm/page-0de5c08c0b227bb0.js +1 -0
- package/.next/static/chunks/app/(app)/prepare-deploy/page-e426038552df8d41.js +1 -0
- package/.next/static/chunks/app/(app)/profile/page-608dfcaf8aae0a69.js +1 -0
- package/.next/static/chunks/app/(app)/pulse/page-309ccaca91de1faa.js +1 -0
- package/.next/static/chunks/app/(app)/reports/[id]/page-53ea1aff998a87ca.js +1 -0
- package/.next/static/chunks/app/(app)/reports/page-68cdc6dcfa472d86.js +1 -0
- package/.next/static/chunks/app/(app)/routines/page-bcc55550b197a9fa.js +1 -0
- package/.next/static/chunks/app/(app)/search/page-5c5f67558d0dbf0d.js +1 -0
- package/.next/static/chunks/app/(app)/security/page-a7d41e36aa366b45.js +1 -0
- package/.next/static/chunks/app/(app)/skills/page-c5b21e89593b8336.js +1 -0
- package/.next/static/chunks/app/(app)/tasks/page-08ae079e3e54d2ce.js +1 -0
- package/.next/static/chunks/app/(app)/test-dev/page-633f82dfd9c3ce23.js +1 -0
- package/.next/static/chunks/app/(app)/update/page-4be019054351bfac.js +1 -0
- package/.next/static/chunks/app/(auth)/login/page-6e85d3377062acae.js +1 -0
- package/.next/static/chunks/app/(auth)/onboarding/page-ebb10c175abf3b85.js +1 -0
- package/.next/static/chunks/app/_global-error/page-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +1 -0
- package/.next/static/chunks/app/api/auth/[...all]/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/cron/tick/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/dev-login/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/locks/acquire/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/models/progress/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/options/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/verify/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/options/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/verify/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/stream/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/sync/file/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/telegram/poll/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/upload/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/v1/[[...path]]/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/error-09899a13c38b6e89.js +1 -0
- package/.next/static/chunks/app/global-error-b8050d4d886f448c.js +1 -0
- package/.next/static/chunks/app/layout-ab9deed1e7e2e9df.js +1 -0
- package/.next/static/chunks/framework-4b2c6b6043dd203f.js +1 -0
- package/.next/static/chunks/main-722e16032e7764d1.js +5 -0
- package/.next/static/chunks/main-app-761880af2b6f1962.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/static/chunks/webpack-222e3894b78c67db.js +1 -0
- package/.next/static/css/0a9b5805594444e3.css +1 -0
- package/.next/static/yztMvBwyrWWkSqP6jfXoa/_buildManifest.js +1 -0
- package/.next/static/yztMvBwyrWWkSqP6jfXoa/_ssgManifest.js +1 -0
- package/.next/trace-build +1 -0
- package/.next/types/app/(app)/activity/page.ts +87 -0
- package/.next/types/app/(app)/agents/[handle]/page.ts +87 -0
- package/.next/types/app/(app)/code/page.ts +87 -0
- package/.next/types/app/(app)/config/page.ts +87 -0
- package/.next/types/app/(app)/costs/page.ts +87 -0
- package/.next/types/app/(app)/cron/page.ts +87 -0
- package/.next/types/app/(app)/dashboard/page.ts +87 -0
- package/.next/types/app/(app)/docs/[id]/page.ts +87 -0
- package/.next/types/app/(app)/docs/page.ts +87 -0
- package/.next/types/app/(app)/github/page.ts +87 -0
- package/.next/types/app/(app)/goals/page.ts +87 -0
- package/.next/types/app/(app)/inbox/page.ts +87 -0
- package/.next/types/app/(app)/knowledge/page.ts +87 -0
- package/.next/types/app/(app)/models/page.ts +87 -0
- package/.next/types/app/(app)/notifications/page.ts +87 -0
- package/.next/types/app/(app)/org/page.ts +87 -0
- package/.next/types/app/(app)/organizations/page.ts +87 -0
- package/.next/types/app/(app)/page.ts +87 -0
- package/.next/types/app/(app)/planner/page.ts +87 -0
- package/.next/types/app/(app)/plugins/page.ts +87 -0
- package/.next/types/app/(app)/pm/page.ts +87 -0
- package/.next/types/app/(app)/prepare-deploy/page.ts +87 -0
- package/.next/types/app/(app)/profile/page.ts +87 -0
- package/.next/types/app/(app)/pulse/page.ts +87 -0
- package/.next/types/app/(app)/reports/[id]/page.ts +87 -0
- package/.next/types/app/(app)/reports/page.ts +87 -0
- package/.next/types/app/(app)/routines/page.ts +87 -0
- package/.next/types/app/(app)/search/page.ts +87 -0
- package/.next/types/app/(app)/security/page.ts +87 -0
- package/.next/types/app/(app)/skills/page.ts +87 -0
- package/.next/types/app/(app)/tasks/page.ts +87 -0
- package/.next/types/app/(app)/test-dev/page.ts +87 -0
- package/.next/types/app/(app)/update/page.ts +87 -0
- package/.next/types/app/(auth)/login/page.ts +87 -0
- package/.next/types/app/(auth)/onboarding/page.ts +87 -0
- package/.next/types/app/api/auth/[...all]/route.ts +351 -0
- package/.next/types/app/api/cron/tick/route.ts +351 -0
- package/.next/types/app/api/dev-login/route.ts +351 -0
- package/.next/types/app/api/locks/acquire/route.ts +351 -0
- package/.next/types/app/api/models/progress/route.ts +351 -0
- package/.next/types/app/api/passkey/authenticate/options/route.ts +351 -0
- package/.next/types/app/api/passkey/authenticate/verify/route.ts +351 -0
- package/.next/types/app/api/passkey/register/options/route.ts +351 -0
- package/.next/types/app/api/passkey/register/verify/route.ts +351 -0
- package/.next/types/app/api/stream/route.ts +351 -0
- package/.next/types/app/api/sync/file/route.ts +351 -0
- package/.next/types/app/api/telegram/poll/route.ts +351 -0
- package/.next/types/app/api/upload/route.ts +351 -0
- package/.next/types/app/api/v1/[[...path]]/route.ts +351 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/link.d.ts +210 -0
- package/.next/types/package.json +1 -0
- package/.next/types/routes.d.ts +120 -0
- package/.next/types/validator.ts +511 -0
- package/CHANGELOG.md +312 -0
- package/LICENSE +21 -0
- package/README.md +382 -0
- package/README.pt-BR.md +391 -0
- package/bin/constella.mjs +329 -0
- package/bin/guard-hook.mjs +44 -0
- package/bin/lock-hook.mjs +49 -0
- package/bin/worker.mjs +142 -0
- package/docs/assets/arch-orbit.svg +56 -0
- package/docs/assets/blackhole.svg +37 -0
- package/docs/assets/divider-orbit.svg +23 -0
- package/docs/assets/hero-constella.svg +72 -0
- package/docs/en/AGENTS.md +279 -0
- package/docs/en/AI_ARCHITECTURE.md +373 -0
- package/docs/en/ARCHITECTURE.md +334 -0
- package/docs/en/AUTH_MODE.md +247 -0
- package/docs/en/CHAT_COMMANDS.md +305 -0
- package/docs/en/CONFIGURATION.md +340 -0
- package/docs/en/DEPLOY.md +331 -0
- package/docs/en/DM.md +297 -0
- package/docs/en/FAQ.md +258 -0
- package/docs/en/GITHUB.md +341 -0
- package/docs/en/GOALS_SPECS_ISSUES.md +303 -0
- package/docs/en/INBOX.md +340 -0
- package/docs/en/INSTALLATION.md +329 -0
- package/docs/en/KB_AGENT.md +305 -0
- package/docs/en/KB_RAG.md +356 -0
- package/docs/en/MCP.md +313 -0
- package/docs/en/MEMORY_RAG.md +289 -0
- package/docs/en/MODELS.md +341 -0
- package/docs/en/ONBOARDING.md +327 -0
- package/docs/en/PLUGINS.md +290 -0
- package/docs/en/PORTABLE_MODE.md +387 -0
- package/docs/en/PO_AGENT.md +379 -0
- package/docs/en/PREPARE_DEPLOY.md +308 -0
- package/docs/en/PROJECT_STACKS.md +258 -0
- package/docs/en/PUBLIC_API.md +315 -0
- package/docs/en/PUBLISHING.md +343 -0
- package/docs/en/README.md +95 -0
- package/docs/en/SECURITY.md +280 -0
- package/docs/en/SKILLS.md +349 -0
- package/docs/en/START_MODE.md +340 -0
- package/docs/en/SYNCED_BLOCKS.md +320 -0
- package/docs/en/TEAM_ROOM.md +285 -0
- package/docs/en/TELEGRAM.md +294 -0
- package/docs/en/TEST_DEV.md +321 -0
- package/docs/en/TROUBLESHOOTING.md +294 -0
- package/docs/en/UPDATE.md +301 -0
- package/docs/en/VPS_MODE.md +334 -0
- package/docs/en/WORKFLOW.md +321 -0
- package/docs/pt/AGENTS.md +279 -0
- package/docs/pt/AI_ARCHITECTURE.md +373 -0
- package/docs/pt/ARCHITECTURE.md +334 -0
- package/docs/pt/AUTH_MODE.md +247 -0
- package/docs/pt/CHAT_COMMANDS.md +307 -0
- package/docs/pt/CONFIGURATION.md +340 -0
- package/docs/pt/DEPLOY.md +331 -0
- package/docs/pt/DM.md +297 -0
- package/docs/pt/FAQ.md +258 -0
- package/docs/pt/GITHUB.md +341 -0
- package/docs/pt/GOALS_SPECS_ISSUES.md +303 -0
- package/docs/pt/INBOX.md +340 -0
- package/docs/pt/INSTALLATION.md +329 -0
- package/docs/pt/KB_AGENT.md +305 -0
- package/docs/pt/KB_RAG.md +356 -0
- package/docs/pt/MCP.md +313 -0
- package/docs/pt/MEMORY_RAG.md +289 -0
- package/docs/pt/MODELS.md +341 -0
- package/docs/pt/ONBOARDING.md +327 -0
- package/docs/pt/PLUGINS.md +290 -0
- package/docs/pt/PORTABLE_MODE.md +387 -0
- package/docs/pt/PO_AGENT.md +379 -0
- package/docs/pt/PREPARE_DEPLOY.md +308 -0
- package/docs/pt/PROJECT_STACKS.md +258 -0
- package/docs/pt/PUBLIC_API.md +315 -0
- package/docs/pt/PUBLISHING.md +343 -0
- package/docs/pt/README.md +95 -0
- package/docs/pt/SECURITY.md +280 -0
- package/docs/pt/SKILLS.md +349 -0
- package/docs/pt/START_MODE.md +340 -0
- package/docs/pt/SYNCED_BLOCKS.md +320 -0
- package/docs/pt/TEAM_ROOM.md +285 -0
- package/docs/pt/TELEGRAM.md +294 -0
- package/docs/pt/TEST_DEV.md +321 -0
- package/docs/pt/TROUBLESHOOTING.md +294 -0
- package/docs/pt/UPDATE.md +301 -0
- package/docs/pt/VPS_MODE.md +334 -0
- package/docs/pt/WORKFLOW.md +321 -0
- package/drizzle/0000_regular_nightshade.sql +644 -0
- package/drizzle/0001_mixed_zombie.sql +106 -0
- package/drizzle/meta/0000_snapshot.json +4650 -0
- package/drizzle/meta/0001_snapshot.json +5418 -0
- package/drizzle/meta/_journal.json +20 -0
- package/drizzle.config.mjs +16 -0
- package/next.config.mjs +18 -0
- package/package.json +130 -0
- package/scripts/clean-repo.mjs +20 -0
- package/scripts/dev-all.mjs +46 -0
- package/scripts/i18n-parity.mjs +57 -0
- package/scripts/mcp-server.mjs +100 -0
- package/scripts/postbuild.mjs +11 -0
- package/scripts/publish-public.mjs +116 -0
- package/scripts/start-all.mjs +45 -0
- package/scripts/trim-next.mjs +23 -0
- package/scripts/vps-install.sh +39 -0
- package/skills/CONTRIBUTING.md +122 -0
- package/skills/COVERAGE.md +129 -0
- package/skills/INDEX.json +3443 -0
- package/skills/README.md +57 -0
- package/skills/design/animation-motion/SKILL.md +60 -0
- package/skills/design/color-and-typography/SKILL.md +60 -0
- package/skills/design/css-techniques/SKILL.md +58 -0
- package/skills/design/design-systems/SKILL.md +60 -0
- package/skills/design/gradients/SKILL.md +59 -0
- package/skills/design/graphic-design-basics/SKILL.md +55 -0
- package/skills/design/microinteractions/SKILL.md +58 -0
- package/skills/design/responsive-layout/SKILL.md +59 -0
- package/skills/design/ui-ux-principles/SKILL.md +58 -0
- package/skills/engineering/architecture/api-design-rest-graphql/SKILL.md +67 -0
- package/skills/engineering/architecture/caching-strategies/SKILL.md +59 -0
- package/skills/engineering/architecture/data-modeling/SKILL.md +64 -0
- package/skills/engineering/architecture/message-queues-async/SKILL.md +58 -0
- package/skills/engineering/architecture/scalability-reliability/SKILL.md +62 -0
- package/skills/engineering/architecture/software-architecture-patterns/SKILL.md +56 -0
- package/skills/engineering/architecture/system-design-fundamentals/SKILL.md +56 -0
- package/skills/engineering/backend/auth-and-authorization/SKILL.md +62 -0
- package/skills/engineering/backend/backend-fundamentals/SKILL.md +65 -0
- package/skills/engineering/backend/observability-logging/SKILL.md +60 -0
- package/skills/engineering/frontend/accessibility-wcag/SKILL.md +57 -0
- package/skills/engineering/frontend/frontend-architecture/SKILL.md +65 -0
- package/skills/engineering/frontend/rendering-strategies-ssr-csr/SKILL.md +60 -0
- package/skills/engineering/frontend/state-management/SKILL.md +69 -0
- package/skills/engineering/performance/backend-performance/SKILL.md +69 -0
- package/skills/engineering/performance/database-query-optimization/SKILL.md +64 -0
- package/skills/engineering/performance/profiling-and-benchmarking/SKILL.md +60 -0
- package/skills/engineering/performance/web-performance-core-vitals/SKILL.md +72 -0
- package/skills/engineering/practices/clean-code/SKILL.md +61 -0
- package/skills/engineering/practices/code-optimization/SKILL.md +60 -0
- package/skills/engineering/practices/code-review-practices/SKILL.md +58 -0
- package/skills/engineering/practices/git-workflow/SKILL.md +62 -0
- package/skills/engineering/practices/refactoring/SKILL.md +58 -0
- package/skills/engineering/security/appsec-fundamentals/SKILL.md +70 -0
- package/skills/engineering/security/dependency-supply-chain/SKILL.md +77 -0
- package/skills/engineering/security/owasp-asvs/SKILL.md +54 -0
- package/skills/engineering/security/owasp-top-10/SKILL.md +63 -0
- package/skills/engineering/security/secrets-management/SKILL.md +58 -0
- package/skills/engineering/security/secure-auth-sessions/SKILL.md +56 -0
- package/skills/engineering/testing/tdd-and-coverage/SKILL.md +62 -0
- package/skills/engineering/testing/testing-strategy-pyramid/SKILL.md +56 -0
- package/skills/engineering/testing/unit-integration-e2e/SKILL.md +75 -0
- package/skills/languages/c/SKILL.md +74 -0
- package/skills/languages/clojure/SKILL.md +73 -0
- package/skills/languages/cpp/SKILL.md +75 -0
- package/skills/languages/csharp/SKILL.md +75 -0
- package/skills/languages/dart/SKILL.md +82 -0
- package/skills/languages/elixir/SKILL.md +74 -0
- package/skills/languages/erlang/SKILL.md +76 -0
- package/skills/languages/go/SKILL.md +83 -0
- package/skills/languages/haskell/SKILL.md +70 -0
- package/skills/languages/java/SKILL.md +71 -0
- package/skills/languages/javascript/SKILL.md +62 -0
- package/skills/languages/kotlin/SKILL.md +68 -0
- package/skills/languages/lua/SKILL.md +79 -0
- package/skills/languages/objectivec/SKILL.md +83 -0
- package/skills/languages/php/SKILL.md +74 -0
- package/skills/languages/python/SKILL.md +68 -0
- package/skills/languages/r/SKILL.md +70 -0
- package/skills/languages/ruby/SKILL.md +67 -0
- package/skills/languages/rust/SKILL.md +72 -0
- package/skills/languages/scala/SKILL.md +73 -0
- package/skills/languages/swift/SKILL.md +73 -0
- package/skills/languages/typescript/SKILL.md +69 -0
- package/skills/meta/authoring-agent-skills/SKILL.md +73 -0
- package/skills/meta/progressive-disclosure/SKILL.md +65 -0
- package/skills/meta/skill-frontmatter-spec/SKILL.md +65 -0
- package/skills/process/adr-technical-decisions/SKILL.md +59 -0
- package/skills/process/app-planning/SKILL.md +63 -0
- package/skills/process/architecture-before-code/SKILL.md +52 -0
- package/skills/process/breaking-work-into-sprints/SKILL.md +53 -0
- package/skills/process/idea-to-product/SKILL.md +50 -0
- package/skills/process/mocks-and-screen-flows/SKILL.md +52 -0
- package/skills/process/prioritization-moscow-rice/SKILL.md +64 -0
- package/skills/process/problem-framing/SKILL.md +51 -0
- package/skills/process/product-discovery/SKILL.md +53 -0
- package/skills/process/readme-generation/SKILL.md +90 -0
- package/skills/process/requirements-to-specs/SKILL.md +53 -0
- package/skills/process/research-official-docs/SKILL.md +58 -0
- package/skills/process/review-code-perf-security/SKILL.md +65 -0
- package/skills/process/security-by-design/SKILL.md +68 -0
- package/skills/process/specs-to-issues/SKILL.md +53 -0
- package/skills/process/testing-before-done/SKILL.md +61 -0
- package/skills/process/validating-ux-navigation/SKILL.md +63 -0
- package/skills/references/ai-attachments-ui/SKILL.md +66 -0
- package/skills/references/ai-in-browser-webllm/SKILL.md +74 -0
- package/skills/references/ai-tool-ui-patterns/SKILL.md +63 -0
- package/skills/references/component-patterns-gallery/SKILL.md +62 -0
- package/skills/references/gradient-resources/SKILL.md +66 -0
- package/skills/references/react-component-libraries/SKILL.md +61 -0
- package/skills/references/saas-landing-patterns/SKILL.md +67 -0
- package/skills/references/shadcn-tailwind-theming/SKILL.md +74 -0
- package/skills/references/vercel-ai-sdk-elements/SKILL.md +66 -0
- package/skills/references/web-animation-codrops/SKILL.md +68 -0
- package/skills/stacks/aiml/jupyter/SKILL.md +68 -0
- package/skills/stacks/aiml/keras/SKILL.md +77 -0
- package/skills/stacks/aiml/numpy/SKILL.md +69 -0
- package/skills/stacks/aiml/pandas/SKILL.md +72 -0
- package/skills/stacks/aiml/pytorch/SKILL.md +77 -0
- package/skills/stacks/aiml/scikit-learn/SKILL.md +74 -0
- package/skills/stacks/aiml/tensorflow/SKILL.md +79 -0
- package/skills/stacks/auth/auth0/SKILL.md +63 -0
- package/skills/stacks/auth/authjs/SKILL.md +69 -0
- package/skills/stacks/auth/clerk/SKILL.md +72 -0
- package/skills/stacks/auth/keycloak/SKILL.md +63 -0
- package/skills/stacks/auth/lucia/SKILL.md +56 -0
- package/skills/stacks/auth/passport/SKILL.md +70 -0
- package/skills/stacks/auth/supabase-auth/SKILL.md +66 -0
- package/skills/stacks/baas/amplify/SKILL.md +71 -0
- package/skills/stacks/baas/appwrite/SKILL.md +79 -0
- package/skills/stacks/baas/firebase/SKILL.md +73 -0
- package/skills/stacks/baas/heroku/SKILL.md +71 -0
- package/skills/stacks/backend/actix/SKILL.md +77 -0
- package/skills/stacks/backend/adonisjs/SKILL.md +65 -0
- package/skills/stacks/backend/aspnet-core/SKILL.md +75 -0
- package/skills/stacks/backend/codeigniter/SKILL.md +76 -0
- package/skills/stacks/backend/django/SKILL.md +62 -0
- package/skills/stacks/backend/express/SKILL.md +65 -0
- package/skills/stacks/backend/fastapi/SKILL.md +64 -0
- package/skills/stacks/backend/fastify/SKILL.md +64 -0
- package/skills/stacks/backend/fiber/SKILL.md +68 -0
- package/skills/stacks/backend/flask/SKILL.md +71 -0
- package/skills/stacks/backend/gin/SKILL.md +68 -0
- package/skills/stacks/backend/graphql/SKILL.md +70 -0
- package/skills/stacks/backend/hono/SKILL.md +64 -0
- package/skills/stacks/backend/koa/SKILL.md +63 -0
- package/skills/stacks/backend/laravel/SKILL.md +73 -0
- package/skills/stacks/backend/nestjs/SKILL.md +70 -0
- package/skills/stacks/backend/nginx/SKILL.md +77 -0
- package/skills/stacks/backend/phoenix/SKILL.md +68 -0
- package/skills/stacks/backend/rails/SKILL.md +67 -0
- package/skills/stacks/backend/spring/SKILL.md +70 -0
- package/skills/stacks/backend/spring-boot/SKILL.md +70 -0
- package/skills/stacks/backend/symfony/SKILL.md +77 -0
- package/skills/stacks/container/containerd/SKILL.md +75 -0
- package/skills/stacks/container/docker/SKILL.md +90 -0
- package/skills/stacks/container/podman/SKILL.md +93 -0
- package/skills/stacks/database/cassandra/SKILL.md +74 -0
- package/skills/stacks/database/cockroachdb/SKILL.md +69 -0
- package/skills/stacks/database/dynamodb/SKILL.md +62 -0
- package/skills/stacks/database/mariadb/SKILL.md +71 -0
- package/skills/stacks/database/mongodb/SKILL.md +71 -0
- package/skills/stacks/database/mysql/SKILL.md +72 -0
- package/skills/stacks/database/neon/SKILL.md +68 -0
- package/skills/stacks/database/planetscale/SKILL.md +70 -0
- package/skills/stacks/database/postgresql/SKILL.md +81 -0
- package/skills/stacks/database/redis/SKILL.md +78 -0
- package/skills/stacks/database/sqlite/SKILL.md +70 -0
- package/skills/stacks/database/supabase/SKILL.md +79 -0
- package/skills/stacks/dataviz/chart-js/SKILL.md +72 -0
- package/skills/stacks/dataviz/d3/SKILL.md +77 -0
- package/skills/stacks/dataviz/grafana/SKILL.md +69 -0
- package/skills/stacks/dataviz/plotly/SKILL.md +71 -0
- package/skills/stacks/frontend/alpine/SKILL.md +75 -0
- package/skills/stacks/frontend/angular/SKILL.md +75 -0
- package/skills/stacks/frontend/backbone/SKILL.md +82 -0
- package/skills/stacks/frontend/ember/SKILL.md +85 -0
- package/skills/stacks/frontend/htmx/SKILL.md +73 -0
- package/skills/stacks/frontend/lit/SKILL.md +76 -0
- package/skills/stacks/frontend/preact/SKILL.md +74 -0
- package/skills/stacks/frontend/qwik/SKILL.md +65 -0
- package/skills/stacks/frontend/react/SKILL.md +77 -0
- package/skills/stacks/frontend/solidjs/SKILL.md +75 -0
- package/skills/stacks/frontend/svelte/SKILL.md +70 -0
- package/skills/stacks/frontend/vue/SKILL.md +69 -0
- package/skills/stacks/infra/ansible/SKILL.md +76 -0
- package/skills/stacks/infra/aws/SKILL.md +66 -0
- package/skills/stacks/infra/azure/SKILL.md +72 -0
- package/skills/stacks/infra/circleci/SKILL.md +78 -0
- package/skills/stacks/infra/cloudflare/SKILL.md +65 -0
- package/skills/stacks/infra/fly-io/SKILL.md +63 -0
- package/skills/stacks/infra/gcp/SKILL.md +66 -0
- package/skills/stacks/infra/jenkins/SKILL.md +73 -0
- package/skills/stacks/infra/kubernetes/SKILL.md +64 -0
- package/skills/stacks/infra/netlify/SKILL.md +60 -0
- package/skills/stacks/infra/railway/SKILL.md +63 -0
- package/skills/stacks/infra/tailscale/SKILL.md +65 -0
- package/skills/stacks/infra/terraform/SKILL.md +75 -0
- package/skills/stacks/infra/vagrant/SKILL.md +70 -0
- package/skills/stacks/infra/vercel/SKILL.md +60 -0
- package/skills/stacks/meta/astro/SKILL.md +64 -0
- package/skills/stacks/meta/docusaurus/SKILL.md +71 -0
- package/skills/stacks/meta/eleventy/SKILL.md +69 -0
- package/skills/stacks/meta/gatsby/SKILL.md +63 -0
- package/skills/stacks/meta/hugo/SKILL.md +73 -0
- package/skills/stacks/meta/jekyll/SKILL.md +70 -0
- package/skills/stacks/meta/nextjs/SKILL.md +62 -0
- package/skills/stacks/meta/nuxt/SKILL.md +66 -0
- package/skills/stacks/meta/remix/SKILL.md +67 -0
- package/skills/stacks/meta/sveltekit/SKILL.md +70 -0
- package/skills/stacks/meta/vite/SKILL.md +63 -0
- package/skills/stacks/mobile/android/SKILL.md +77 -0
- package/skills/stacks/mobile/flutter/SKILL.md +77 -0
- package/skills/stacks/mobile/ionic/SKILL.md +72 -0
- package/skills/stacks/mobile/nativescript/SKILL.md +71 -0
- package/skills/stacks/mobile/react-native/SKILL.md +75 -0
- package/skills/stacks/mobile/xamarin/SKILL.md +73 -0
- package/skills/stacks/orm/diesel/SKILL.md +72 -0
- package/skills/stacks/orm/django-orm/SKILL.md +58 -0
- package/skills/stacks/orm/drizzle/SKILL.md +67 -0
- package/skills/stacks/orm/gorm/SKILL.md +73 -0
- package/skills/stacks/orm/knex/SKILL.md +64 -0
- package/skills/stacks/orm/mongoose/SKILL.md +64 -0
- package/skills/stacks/orm/prisma/SKILL.md +64 -0
- package/skills/stacks/orm/sequelize/SKILL.md +65 -0
- package/skills/stacks/orm/sqlalchemy/SKILL.md +71 -0
- package/skills/stacks/orm/typeorm/SKILL.md +70 -0
- package/skills/stacks/queue/bullmq/SKILL.md +69 -0
- package/skills/stacks/queue/celery/SKILL.md +68 -0
- package/skills/stacks/queue/kafka/SKILL.md +66 -0
- package/skills/stacks/queue/nats/SKILL.md +66 -0
- package/skills/stacks/queue/rabbitmq/SKILL.md +64 -0
- package/skills/stacks/queue/redis/SKILL.md +66 -0
- package/skills/stacks/runtime/beam/SKILL.md +72 -0
- package/skills/stacks/runtime/bun/SKILL.md +80 -0
- package/skills/stacks/runtime/deno/SKILL.md +74 -0
- package/skills/stacks/runtime/dotnet/SKILL.md +64 -0
- package/skills/stacks/runtime/jvm/SKILL.md +66 -0
- package/skills/stacks/runtime/node/SKILL.md +70 -0
- package/skills/stacks/runtime/pypy/SKILL.md +69 -0
- package/skills/stacks/runtime/python3/SKILL.md +70 -0
- package/skills/stacks/styling/bootstrap/SKILL.md +74 -0
- package/skills/stacks/styling/bulma/SKILL.md +80 -0
- package/skills/stacks/styling/chakra-ui/SKILL.md +61 -0
- package/skills/stacks/styling/css-modules/SKILL.md +54 -0
- package/skills/stacks/styling/mui/SKILL.md +60 -0
- package/skills/stacks/styling/sass/SKILL.md +63 -0
- package/skills/stacks/styling/shadcn-ui/SKILL.md +58 -0
- package/skills/stacks/styling/styled-components/SKILL.md +62 -0
- package/skills/stacks/styling/tailwind/SKILL.md +59 -0
- package/skills/stacks/styling/unocss/SKILL.md +64 -0
- package/skills/stacks/styling/vanilla-extract/SKILL.md +64 -0
- package/skills/stacks/styling/vuetify/SKILL.md +89 -0
- package/skills/stacks/testing/cypress/SKILL.md +68 -0
- package/skills/stacks/testing/jasmine/SKILL.md +67 -0
- package/skills/stacks/testing/jest/SKILL.md +67 -0
- package/skills/stacks/testing/mocha/SKILL.md +71 -0
- package/skills/stacks/testing/playwright/SKILL.md +68 -0
- package/skills/stacks/testing/puppeteer/SKILL.md +70 -0
- package/skills/stacks/testing/selenium/SKILL.md +70 -0
- package/skills/stacks/testing/vitest/SKILL.md +68 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-design-rest-graphql
|
|
3
|
+
description: REST design grounded in HTTP semantics (methods, status, idempotency) and GraphQL schema/query design; read when designing or reviewing an API.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [api-design, rest, graphql, http, schema]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://www.rfc-editor.org/rfc/rfc9110.html
|
|
9
|
+
- https://graphql.org/learn/
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# API Design: REST & GraphQL
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
This skill covers two dominant API styles: REST, which builds on the standardized semantics of HTTP (methods, status codes, idempotency), and GraphQL, where clients request exactly the data they need against a typed schema. Read it when designing endpoints, choosing between the styles, or reviewing API contracts for correctness and consistency.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- RFC 9110 — HTTP Semantics (methods, status codes, safe/idempotent): https://www.rfc-editor.org/rfc/rfc9110.html
|
|
20
|
+
- GraphQL — official Learn guide: https://graphql.org/learn/
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **HTTP methods (RFC 9110 §9)**: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE — each with defined semantics; map resource operations onto them rather than inventing verbs.
|
|
24
|
+
- **Safe and idempotent methods**: safe methods (e.g. GET, HEAD) are not expected to change server state; idempotent methods (GET, HEAD, PUT, DELETE, etc.) produce the same effect whether sent once or many times — essential for safe retries.
|
|
25
|
+
- **Status codes (RFC 9110 §15)**: five classes — 1xx informational, 2xx success, 3xx redirection, 4xx client error, 5xx server error — communicate outcome semantically.
|
|
26
|
+
- **GraphQL schema and types**: the schema's type system describes exactly what data can be queried; the schema is the contract between client and server.
|
|
27
|
+
- **GraphQL operations**: queries read data, mutations modify data, and subscriptions stream updates; clients select precisely the fields they need.
|
|
28
|
+
- **GraphQL resolvers**: each field is backed by a resolver function that produces its value during execution.
|
|
29
|
+
|
|
30
|
+
## Best practices
|
|
31
|
+
- Honor HTTP semantics: use idempotent methods (PUT/DELETE) where clients may retry, and return status codes that match the actual outcome (per RFC 9110).
|
|
32
|
+
- Use GET only for safe, side-effect-free reads so caches and crawlers can call it without changing state.
|
|
33
|
+
- In GraphQL, design the schema around domain types and let clients select fields; avoid one-off endpoints — the schema is the single contract.
|
|
34
|
+
- Version and evolve deliberately: REST via URL/media-type versioning; GraphQL by adding fields and deprecating rather than breaking existing ones.
|
|
35
|
+
|
|
36
|
+
## Common pitfalls
|
|
37
|
+
- Using POST (or GET) for everything in REST → breaks idempotency and caching; pick the method that matches the operation's semantics.
|
|
38
|
+
- Returning 200 OK with an error body → clients and proxies cannot react correctly; use the appropriate 4xx/5xx status.
|
|
39
|
+
- Exposing unbounded GraphQL queries → deep/nested queries can overload the server; add depth/complexity limits and pagination.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
```http
|
|
43
|
+
# REST — idempotent update via PUT
|
|
44
|
+
PUT /users/42 HTTP/1.1
|
|
45
|
+
Content-Type: application/json
|
|
46
|
+
|
|
47
|
+
{ "name": "Ada", "email": "ada@example.com" }
|
|
48
|
+
# -> 200 OK (updated) or 201 Created; repeating yields the same result
|
|
49
|
+
```
|
|
50
|
+
```graphql
|
|
51
|
+
# GraphQL — client selects exactly the fields it needs
|
|
52
|
+
query {
|
|
53
|
+
user(id: "42") {
|
|
54
|
+
name
|
|
55
|
+
email
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Further reading
|
|
61
|
+
- GraphQL best practices (pagination, versioning, nullability): https://graphql.org/learn/best-practices/
|
|
62
|
+
- RFC 9110 method definitions (Section 9): https://www.rfc-editor.org/rfc/rfc9110.html#name-methods
|
|
63
|
+
|
|
64
|
+
## Related skills
|
|
65
|
+
- ../software-architecture-patterns — where APIs sit in service boundaries
|
|
66
|
+
- ../caching-strategies — HTTP caching and cache-aside for API responses
|
|
67
|
+
- ../data-modeling — shaping resources and types behind the API
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caching-strategies
|
|
3
|
+
description: Cache layers, cache-aside, TTLs, and invalidation to cut latency and load; read before adding a cache or debugging stale data.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [caching, cache-aside, ttl, invalidation, redis]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://aws.amazon.com/caching/
|
|
9
|
+
- https://redis.io/docs/latest/develop/
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Caching Strategies
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
A cache is a high-speed storage layer that holds a subset of data so future reads are served from fast memory (often sub-millisecond) instead of a slower origin. Caching reduces latency and offloads databases and services, but introduces the hard problems of staleness and invalidation. Read this before adding a cache layer or diagnosing stale/inconsistent reads.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- AWS — Caching Overview (layers, TTLs, CDN, in-memory): https://aws.amazon.com/caching/
|
|
20
|
+
- Redis — Develop documentation (data types, clients, pub/sub): https://redis.io/docs/latest/develop/
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **What a cache is**: a high-speed layer storing a subset of data; reading from an in-memory cache is extremely fast (sub-millisecond) compared with the origin store.
|
|
24
|
+
- **Cache layers**: caching happens at multiple tiers — CDN/edge for static content, application/in-memory caches (e.g. Redis) for data and sessions, and database/query caches.
|
|
25
|
+
- **Cache-aside (lazy loading)**: the application checks the cache first; on a miss it loads from the origin, populates the cache, and returns — only requested data is ever cached.
|
|
26
|
+
- **TTL (time to live)**: an expiry applied to cached entries so stale data is automatically evicted after a bounded window.
|
|
27
|
+
- **CDN / edge caching**: a CDN serves cached copies of content (pages, images, video) from a global network of edge locations near users.
|
|
28
|
+
- **Eviction**: when memory is full, caches evict entries by policy (e.g. LRU) to make room for new data.
|
|
29
|
+
|
|
30
|
+
## Best practices
|
|
31
|
+
- Set a TTL on cached entries so staleness is bounded even when explicit invalidation is missed (AWS recommends TTLs to expire data appropriately).
|
|
32
|
+
- Use cache-aside as the default for read-heavy data: load on demand and cache only what is actually requested.
|
|
33
|
+
- Cache at the right layer: CDN for static assets, in-memory (Redis) for hot data and sessions, closest to where the read happens.
|
|
34
|
+
- Invalidate or update the cache on writes (write-through or explicit delete) to limit how long stale data can be served.
|
|
35
|
+
|
|
36
|
+
## Common pitfalls
|
|
37
|
+
- Caching with no TTL and no invalidation → data silently goes stale forever; always bound freshness.
|
|
38
|
+
- Cache stampede: many concurrent misses hit the origin at once when a hot key expires → use locking/single-flight or staggered/jittered TTLs.
|
|
39
|
+
- Caching user-specific or sensitive data in a shared/edge cache → leaks across users; scope cache keys and mark private responses appropriately.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
```text
|
|
43
|
+
Cache-aside read path:
|
|
44
|
+
1. value = cache.get(key)
|
|
45
|
+
2. if hit: return value
|
|
46
|
+
3. value = db.query(...) # miss
|
|
47
|
+
4. cache.set(key, value, TTL) # populate with expiry
|
|
48
|
+
5. return value
|
|
49
|
+
# On write: db.update(...); cache.del(key) (or update in place)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Further reading
|
|
53
|
+
- Redis develop docs (clients, data types, pub/sub): https://redis.io/docs/latest/develop/
|
|
54
|
+
- AWS caching overview (database, session, API caching): https://aws.amazon.com/caching/
|
|
55
|
+
|
|
56
|
+
## Related skills
|
|
57
|
+
- ../system-design-fundamentals — latency/throughput trade-offs caching addresses
|
|
58
|
+
- ../api-design-rest-graphql — HTTP caching of API responses
|
|
59
|
+
- ../scalability-reliability — caching to offload origins under load
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-modeling
|
|
3
|
+
description: Relational and document data modeling — tables, keys, constraints, normalization, and when to denormalize; read before designing a schema.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [data-modeling, relational, normalization, constraints, schema-design]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://www.postgresql.org/docs/current/ddl.html
|
|
9
|
+
verified: 2026-06-16
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Data Modeling
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
Data modeling is the design of how data is structured, related, and constrained so it stays correct and queryable as the system grows. Relational modeling emphasizes normalization and referential integrity enforced by the database; document modeling embeds related data for read locality. Read this before creating a schema, adding a table, or choosing between relational and document storage.
|
|
16
|
+
|
|
17
|
+
## Official sources
|
|
18
|
+
- PostgreSQL — Data Definition (tables, constraints, keys, schemas, partitioning): https://www.postgresql.org/docs/current/ddl.html
|
|
19
|
+
|
|
20
|
+
## Core concepts
|
|
21
|
+
- **Tables, columns, and types**: a relational model defines entities as tables with typed columns; choosing correct types and defaults is the first integrity control.
|
|
22
|
+
- **Constraints**: PostgreSQL supports NOT NULL, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY, and EXCLUSION constraints — push invariants into the database so invalid data cannot be stored.
|
|
23
|
+
- **Primary and foreign keys**: primary keys uniquely identify rows; foreign keys enforce referential integrity between related tables.
|
|
24
|
+
- **Normalization**: organize data to eliminate redundancy and update anomalies (1NF/2NF/3NF) so each fact lives in exactly one place.
|
|
25
|
+
- **Schemas and namespacing**: schemas group related objects and provide logical organization and access boundaries within a database.
|
|
26
|
+
- **Document vs relational**: document models embed/denormalize related data for single-read access and flexible shape, trading integrity guarantees and join flexibility for read performance.
|
|
27
|
+
|
|
28
|
+
## Best practices
|
|
29
|
+
- Enforce invariants with database constraints (NOT NULL, UNIQUE, FOREIGN KEY, CHECK) rather than relying only on application code — the DB is the last line of defense.
|
|
30
|
+
- Normalize to remove redundancy first; denormalize deliberately and only when measured read patterns justify it.
|
|
31
|
+
- Always define primary keys and back foreign-key columns with indexes to keep referential checks and joins fast.
|
|
32
|
+
- Choose data types tightly (e.g. proper numeric/timestamp types, generated/identity columns where appropriate) so the database validates and stores values efficiently.
|
|
33
|
+
|
|
34
|
+
## Common pitfalls
|
|
35
|
+
- Modeling everything as nullable text → loses validation and indexing benefits; use precise types and NOT NULL where the value is required.
|
|
36
|
+
- Skipping foreign keys "for speed" → orphaned and inconsistent rows accumulate; let referential integrity be enforced by the engine.
|
|
37
|
+
- Premature denormalization → duplicated facts drift out of sync; normalize first, denormalize only with evidence.
|
|
38
|
+
|
|
39
|
+
## Examples
|
|
40
|
+
```sql
|
|
41
|
+
-- Relational schema with keys and constraints (PostgreSQL DDL)
|
|
42
|
+
CREATE TABLE author (
|
|
43
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
44
|
+
email text NOT NULL UNIQUE
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
CREATE TABLE post (
|
|
48
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
49
|
+
author_id bigint NOT NULL REFERENCES author(id),
|
|
50
|
+
title text NOT NULL CHECK (length(title) > 0),
|
|
51
|
+
published boolean NOT NULL DEFAULT false
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
CREATE INDEX ON post (author_id);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Further reading
|
|
58
|
+
- PostgreSQL constraints reference: https://www.postgresql.org/docs/current/ddl-constraints.html
|
|
59
|
+
- PostgreSQL table partitioning: https://www.postgresql.org/docs/current/ddl-partitioning.html
|
|
60
|
+
|
|
61
|
+
## Related skills
|
|
62
|
+
- ../system-design-fundamentals — partitioning and sharding at scale
|
|
63
|
+
- ../caching-strategies — caching query results
|
|
64
|
+
- ../api-design-rest-graphql — mapping the model to resources/types
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: message-queues-async
|
|
3
|
+
description: Async messaging with queues and logs — delivery guarantees, ordering, and idempotency (Kafka, RabbitMQ); read before decoupling services.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [messaging, queues, kafka, rabbitmq, idempotency]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://kafka.apache.org/documentation/
|
|
9
|
+
- https://www.rabbitmq.com/tutorials
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Message Queues & Async Messaging
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Asynchronous messaging decouples producers from consumers in time and identity, smoothing load spikes and improving resilience. Apache Kafka is a partitioned, replayable log; RabbitMQ is a broker built around queues and exchanges. Both force you to reason about delivery guarantees, ordering, and idempotency. Read this before introducing a queue or event bus between services.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Apache Kafka — Documentation (concepts, design, delivery semantics): https://kafka.apache.org/documentation/
|
|
20
|
+
- RabbitMQ — Tutorials (queues, exchanges, work queues, pub/sub): https://www.rabbitmq.com/tutorials
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **Kafka topics and partitions**: messages are published to topics split into partitions; ordering is guaranteed only within a single partition, and consumers track position via offsets.
|
|
24
|
+
- **Kafka consumer groups**: a consumer group acts as one logical subscriber across multiple processes; any number of groups can consume the same topic without duplicating data.
|
|
25
|
+
- **Delivery semantics**: systems offer at-most-once (may lose, never redelivers), at-least-once (never loses, may redeliver), or exactly-once. Kafka guarantees at-least-once by default.
|
|
26
|
+
- **Kafka exactly-once**: from Kafka 0.11 the idempotent producer prevents retry-induced duplicates, and transactions with read-committed consumers enable exactly-once across read-process-write.
|
|
27
|
+
- **RabbitMQ exchanges and routing**: producers publish to exchanges that route to queues by binding/routing keys, enabling work queues, publish/subscribe, routing, and topic patterns.
|
|
28
|
+
- **Acknowledgements and confirms**: consumer acks and publisher confirms underpin reliable delivery — a message is only considered handled once acknowledged.
|
|
29
|
+
|
|
30
|
+
## Best practices
|
|
31
|
+
- Make consumers idempotent: because at-least-once delivery can redeliver messages, design handlers so processing the same message twice has no extra effect.
|
|
32
|
+
- Use Kafka partition keys deliberately when you need per-key ordering, since ordering holds only within a partition.
|
|
33
|
+
- Acknowledge after successful processing (manual acks / publisher confirms), not on receipt, so failures lead to redelivery rather than loss.
|
|
34
|
+
- Reserve exactly-once for when you truly need it (Kafka transactions/idempotent producer); it adds overhead and is not always necessary if consumers are idempotent.
|
|
35
|
+
|
|
36
|
+
## Common pitfalls
|
|
37
|
+
- Assuming global ordering across a Kafka topic → ordering is per-partition only; key related messages to the same partition if order matters.
|
|
38
|
+
- Acking a message before the work succeeds → message is lost on crash; ack only after the side effects are durable.
|
|
39
|
+
- Ignoring duplicate delivery under at-least-once → double charges/sends; dedupe with idempotency keys or upserts.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
```text
|
|
43
|
+
Idempotent consumer under at-least-once delivery:
|
|
44
|
+
on message m with key m.id:
|
|
45
|
+
if processed_ids.contains(m.id): ack(m); return # dedupe
|
|
46
|
+
do_work(m)
|
|
47
|
+
processed_ids.add(m.id)
|
|
48
|
+
ack(m) # ack after success
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Further reading
|
|
52
|
+
- Kafka design — message delivery semantics: https://kafka.apache.org/documentation/#semantics
|
|
53
|
+
- RabbitMQ publisher confirms tutorial: https://www.rabbitmq.com/tutorials/tutorial-seven-java
|
|
54
|
+
|
|
55
|
+
## Related skills
|
|
56
|
+
- ../software-architecture-patterns — event-driven architecture and queue patterns
|
|
57
|
+
- ../scalability-reliability — queues for load leveling and resilience
|
|
58
|
+
- ../system-design-fundamentals — throughput and partitioning trade-offs
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scalability-reliability
|
|
3
|
+
description: Scaling, SLIs/SLOs, error budgets, and resilience tactics (timeouts, retries with backoff/jitter, load shedding); read before hardening a service.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [scalability, reliability, slo, resilience, retries]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://sre.google/books/
|
|
9
|
+
- https://aws.amazon.com/builders-library/
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Scalability & Reliability
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Scalability is the ability to handle growing load without proportional cost or latency blowups; reliability is delivering the intended function and recovering quickly from failure. Google's SRE practice frames reliability with SLIs, SLOs, and error budgets; the Amazon Builders' Library documents the concrete tactics — timeouts, retries with backoff and jitter, and load shedding. Read this before hardening a service or setting reliability targets.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Google SRE books (SRE, the Workbook, Building Secure & Reliable Systems): https://sre.google/books/
|
|
20
|
+
- Amazon Builders' Library (resilience and operations practices): https://aws.amazon.com/builders-library/
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **SLI**: a Service Level Indicator is a quantitative measure of a service quality aspect — common examples are request latency, error rate, and availability.
|
|
24
|
+
- **SLO**: a Service Level Objective is a target value or range for an SLI; it is the goal you operate against.
|
|
25
|
+
- **SLA vs SLO**: an SLA adds explicit consequences (e.g. penalties) for missing targets; without consequences you are looking at an SLO, not an SLA.
|
|
26
|
+
- **Error budget**: rather than demanding perfection, allow a rate at which the SLO may be missed and track it over time to inform release decisions.
|
|
27
|
+
- **Timeouts, retries, backoff, jitter**: timeouts bound how long calls hang; retries mask transient faults; exponential backoff with jitter spreads retries to avoid synchronized spikes and congestion.
|
|
28
|
+
- **Load shedding**: as a server approaches overload it should reject excess requests so it can keep latency low for the requests it does accept.
|
|
29
|
+
|
|
30
|
+
## Best practices
|
|
31
|
+
- Define a few meaningful SLOs from user-centric SLIs and manage to an error budget; keep aggregations simple and avoid unrealistic absolutes (per the SRE book).
|
|
32
|
+
- Always set timeouts on remote calls so a slow dependency cannot tie up resources indefinitely.
|
|
33
|
+
- Use exponential backoff with jitter for retries to avoid retry storms; consider adaptive retries with a token-bucket retry quota to cap amplification.
|
|
34
|
+
- Be cautious with retries against an overloaded dependency — retrying a struggling system amplifies load; retry only when the dependency appears healthy, and shed load when overloaded.
|
|
35
|
+
|
|
36
|
+
## Common pitfalls
|
|
37
|
+
- Retrying without backoff/jitter → synchronized retry storms amplify an outage; add exponential backoff plus jitter.
|
|
38
|
+
- Targeting 100% reliability → unsustainable and pointless past user perception; set an SLO with an error budget instead.
|
|
39
|
+
- No timeouts on dependency calls → one slow dependency exhausts threads/connections and cascades the failure.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
```text
|
|
43
|
+
Resilient remote call:
|
|
44
|
+
deadline = now + timeout
|
|
45
|
+
for attempt in 0..maxRetries:
|
|
46
|
+
try: return call(deadline)
|
|
47
|
+
except transient:
|
|
48
|
+
if dependencyUnhealthy(): break # don't amplify overload
|
|
49
|
+
sleep( random(0, base * 2**attempt) ) # exponential backoff + jitter
|
|
50
|
+
raise Unavailable
|
|
51
|
+
# Server side: if nearOverload(): reject(503) # load shedding
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Further reading
|
|
55
|
+
- SRE book — Service Level Objectives chapter: https://sre.google/sre-book/service-level-objectives/
|
|
56
|
+
- Amazon Builders' Library — Timeouts, retries, and backoff with jitter: https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/
|
|
57
|
+
- Amazon Builders' Library — Using load shedding to avoid overload: https://aws.amazon.com/builders-library/using-load-shedding-to-avoid-overload/
|
|
58
|
+
|
|
59
|
+
## Related skills
|
|
60
|
+
- ../system-design-fundamentals — latency, throughput, and scaling trade-offs
|
|
61
|
+
- ../message-queues-async — queues for load leveling and decoupling
|
|
62
|
+
- ../caching-strategies — offloading origins to absorb load
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: software-architecture-patterns
|
|
3
|
+
description: Layered, hexagonal, event-driven, and microservices patterns plus cloud design patterns; read when choosing or structuring application architecture.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [architecture-patterns, microservices, event-driven, layered, cloud-patterns]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://martinfowler.com/architecture/
|
|
9
|
+
- https://learn.microsoft.com/azure/architecture/patterns/
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Software Architecture Patterns
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Architecture patterns are reusable, named solutions to recurring structural problems — how to separate concerns, communicate between components, and contain failure. Each pattern solves one problem and introduces trade-offs, so choose by the problem you face, not the technology you want. Read this when structuring a new service or evaluating a refactor.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Martin Fowler's Software Architecture Guide: https://martinfowler.com/architecture/
|
|
20
|
+
- Azure Architecture Center — Cloud Design Patterns catalog: https://learn.microsoft.com/azure/architecture/patterns/
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **Layered (Presentation–Domain–Data)**: separate the UI, business logic, and data-access concerns so each can change independently; the dominant default for most applications.
|
|
24
|
+
- **Hexagonal / Ports & Adapters**: isolate the domain core behind explicit ports, with adapters for UI, persistence, and external systems, so infrastructure is swappable and the core is testable.
|
|
25
|
+
- **Event-driven architecture**: components communicate by emitting and reacting to events (often via Publisher-Subscriber), decoupling producers from consumers in time and identity.
|
|
26
|
+
- **Microservices**: develop a single application as a suite of small services, each in its own process, communicating over lightweight mechanisms — independently deployable but distributed.
|
|
27
|
+
- **Cloud design patterns**: technology-agnostic solutions (Circuit Breaker, Retry, Cache-Aside, CQRS, Saga, Bulkhead, Strangler Fig) that address reliability, scale, and integration in distributed systems.
|
|
28
|
+
- **Patterns are composable**: real workloads apply several together (e.g. Retry + Circuit Breaker; Queue-Based Load Leveling + Competing Consumers).
|
|
29
|
+
|
|
30
|
+
## Best practices
|
|
31
|
+
- Choose a pattern from the problem and acceptable trade-offs, not from the technology — the Azure catalog explicitly advises starting from a constraint or risk in the workload.
|
|
32
|
+
- Default to a well-structured monolith with clear layering; adopt microservices only when team/scale boundaries justify the distributed-systems cost.
|
|
33
|
+
- Pair resilience patterns: combine Retry with Circuit Breaker so transient faults are retried but persistent faults stop hammering a failing dependency.
|
|
34
|
+
- Use the Strangler Fig pattern to migrate legacy systems incrementally instead of a risky big-bang rewrite.
|
|
35
|
+
|
|
36
|
+
## Common pitfalls
|
|
37
|
+
- Adopting microservices for a small team or early product → you inherit network, consistency, and ops overhead without the scale benefit; keep a modular monolith until boundaries are clear.
|
|
38
|
+
- Believing distributed systems are reliable, low-latency, and infinitely scalable (the fallacies of distributed computing) → design compensations (timeouts, retries, idempotency) for each fallacy.
|
|
39
|
+
- Treating an antipattern as a pattern because it works at low load → re-evaluate designs that degrade as traffic grows.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
```text
|
|
43
|
+
Resilient remote call (Azure pattern combo):
|
|
44
|
+
client -> [Retry with backoff] -> [Circuit Breaker] -> remote service
|
|
45
|
+
- Retry handles transient faults.
|
|
46
|
+
- Circuit Breaker opens after repeated failures, failing fast and shedding load.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Further reading
|
|
50
|
+
- Azure pattern catalog with per-pattern problem/trade-off pages: https://learn.microsoft.com/azure/architecture/patterns/
|
|
51
|
+
- Fowler on microservices: https://martinfowler.com/articles/microservices.html
|
|
52
|
+
|
|
53
|
+
## Related skills
|
|
54
|
+
- ../message-queues-async — event-driven and async messaging foundations
|
|
55
|
+
- ../scalability-reliability — resilience patterns under load
|
|
56
|
+
- ../api-design-rest-graphql — designing the interfaces between services
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: system-design-fundamentals
|
|
3
|
+
description: Latency, throughput, partitioning, replication, CAP and consistency trade-offs for designing large-scale systems; read before sizing or scaling.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [system-design, scalability, cap-theorem, distributed-systems, trade-offs]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://github.com/donnemartin/system-design-primer
|
|
9
|
+
- https://aws.amazon.com/architecture/well-architected/
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# System Design Fundamentals
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
System design is the practice of reasoning about how a large-scale system meets functional and non-functional requirements (latency, throughput, availability, cost) under failure. Every choice is a trade-off: there is no single "correct" design, only one that is appropriate for the constraints. Read this before sizing a component, choosing a datastore, or proposing a scaling strategy.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- The System Design Primer (concepts, trade-offs, interview material): https://github.com/donnemartin/system-design-primer
|
|
20
|
+
- AWS Well-Architected Framework (pillars and review methodology): https://aws.amazon.com/architecture/well-architected/
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **Latency vs throughput**: latency is the time to perform one action; throughput is the number of actions per unit of time. Aim for maximal throughput within an acceptable latency budget — they are not the same dial.
|
|
24
|
+
- **CAP theorem**: in a distributed system that may experience network partitions you must trade off between consistency and availability; you cannot fully guarantee all three of consistency, availability, and partition tolerance at once.
|
|
25
|
+
- **Partitioning / sharding**: split data across nodes so each holds only a subset, improving capacity and performance, at the cost of cross-shard queries, rebalancing, and possible hotspots/skew.
|
|
26
|
+
- **Replication and availability patterns**: copy data across nodes for read scaling and fault tolerance; fail-over comes in active-passive and active-active flavors, each trading complexity for recovery speed.
|
|
27
|
+
- **Consistency models**: strong, eventual, and causal consistency offer different guarantees; eventual consistency buys availability and scale but requires the application to tolerate stale reads.
|
|
28
|
+
- **Well-Architected pillars**: AWS frames sound design around Operational Excellence, Security, Reliability, Performance Efficiency, Cost Optimization, and Sustainability — use them as a review checklist.
|
|
29
|
+
|
|
30
|
+
## Best practices
|
|
31
|
+
- Quantify requirements first (expected QPS, data size, read/write ratio, latency SLO) before choosing technology — the numbers drive the design, per the System Design Primer's estimation approach.
|
|
32
|
+
- Make trade-offs explicit and document them; the Well-Architected method is a structured review against the six pillars, not a single answer.
|
|
33
|
+
- Design for failure: assume nodes, networks, and dependencies will fail and add replication, retries, and graceful degradation accordingly.
|
|
34
|
+
- Prefer horizontal scaling and statelessness for the request path so you can add commodity capacity rather than relying on a single large machine.
|
|
35
|
+
|
|
36
|
+
## Common pitfalls
|
|
37
|
+
- Treating CAP as "pick any two freely" → during a partition you are really choosing between consistency and availability; partition tolerance is mandatory in real distributed systems.
|
|
38
|
+
- Sharding on a key with skewed access → creates hotspots; choose a partition key with even distribution and plan for resharding.
|
|
39
|
+
- Optimizing latency while ignoring throughput (or vice versa) → measure both and set explicit targets.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
```text
|
|
43
|
+
Back-of-envelope sizing (per System Design Primer estimation):
|
|
44
|
+
10M daily active users x 10 requests/day = 100M req/day
|
|
45
|
+
100M / 86,400 s ≈ 1,160 req/s average, ~3-5x peak ≈ ~5,000 req/s
|
|
46
|
+
Plan capacity, caching, and partitions against peak, not average.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Further reading
|
|
50
|
+
- AWS Well-Architected pillars overview: https://aws.amazon.com/architecture/well-architected/
|
|
51
|
+
- System Design Primer index of topics: https://github.com/donnemartin/system-design-primer#index-of-system-design-topics
|
|
52
|
+
|
|
53
|
+
## Related skills
|
|
54
|
+
- ../scalability-reliability — SLOs, resilience, and failure handling at scale
|
|
55
|
+
- ../caching-strategies — reduce latency and load with cache layers
|
|
56
|
+
- ../data-modeling — how data shape interacts with partitioning
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend/auth-and-authorization
|
|
3
|
+
description: Authentication vs authorization, OAuth 2.0 roles and tokens, and access-control models (RBAC/ABAC) with OWASP enforcement guidance.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: engineering
|
|
6
|
+
tags: [auth, authentication, authorization, oauth2, rbac, abac, security]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://oauth.net/2/
|
|
9
|
+
- https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Authentication and Authorization
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Authentication (AuthN) verifies *who* a caller is; authorization (AuthZ) decides *what* they are allowed to do. This skill covers that distinction, the OAuth 2.0 authorization framework and its tokens, the RBAC/ABAC access-control models, and OWASP's rules for enforcing authorization safely. Read it when designing login, API access control, or permission checks.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- OAuth 2.0: https://oauth.net/2/
|
|
20
|
+
- OWASP Authorization Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html
|
|
21
|
+
- OAuth 2.0 spec (RFC 6749): https://www.rfc-editor.org/rfc/rfc6749
|
|
22
|
+
|
|
23
|
+
## Core concepts
|
|
24
|
+
- **AuthN vs AuthZ.** Authentication confirms identity; authorization, per OWASP, "verif[ies] that a requested action or service is approved for a specific entity." An authenticated user may still lack authorization for a given resource.
|
|
25
|
+
- **OAuth 2.0 is an authorization framework, not authentication.** It is "the industry-standard protocol for authorization," defining flows for web, mobile, desktop, and device clients (RFC 6749).
|
|
26
|
+
- **OAuth roles.** Resource owner, client, authorization server, and resource server cooperate; the client obtains an **access token** to call the resource server on the owner's behalf.
|
|
27
|
+
- **Tokens.** Access tokens (often Bearer tokens, RFC 6750) authorize API calls; refresh tokens obtain new access tokens. PKCE protects public clients, and OAuth 2.1 is an in-progress consolidation of OAuth 2.0 plus common extensions.
|
|
28
|
+
- **RBAC.** Role-based access control ties permissions to roles assigned to users — simple to start, but can grow unwieldy as roles multiply.
|
|
29
|
+
- **ABAC / ReBAC.** Attribute-based (subject/object/environment attributes + policies) and relationship-based access control support fine-grained, multi-tenant logic that RBAC handles poorly.
|
|
30
|
+
|
|
31
|
+
## Best practices
|
|
32
|
+
- Enforce authorization **server-side** on every request — never trust client-side checks alone (OWASP).
|
|
33
|
+
- **Deny by default:** grant access only when a rule explicitly permits it, so logic gaps fail closed (OWASP).
|
|
34
|
+
- Apply **least privilege:** give each entity the minimum permissions for its role, and audit periodically to prevent privilege creep (OWASP).
|
|
35
|
+
- Check authorization on the **specific resource**, not just the route, and avoid exposing predictable object identifiers to prevent IDOR-style access (OWASP).
|
|
36
|
+
|
|
37
|
+
## Common pitfalls
|
|
38
|
+
- Treating authentication as if it grants authorization → always run a separate AuthZ check after identifying the user.
|
|
39
|
+
- Relying on hidden fields or client-side role checks → enforce every decision on the server (OWASP).
|
|
40
|
+
- Using OAuth 2.0 access tokens as proof of identity → use OpenID Connect for authentication; OAuth alone is for authorization.
|
|
41
|
+
- Direct object references without a per-resource access check → verify the caller may act on *that* object (OWASP, IDOR).
|
|
42
|
+
|
|
43
|
+
## Examples
|
|
44
|
+
```http
|
|
45
|
+
# Calling a protected API with an OAuth 2.0 Bearer access token (RFC 6750)
|
|
46
|
+
GET /api/orders/1001 HTTP/1.1
|
|
47
|
+
Host: api.example.com
|
|
48
|
+
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
49
|
+
```
|
|
50
|
+
```text
|
|
51
|
+
Deny-by-default authorization check (pseudocode):
|
|
52
|
+
if not policy.permits(subject, action, resource): return 403
|
|
53
|
+
proceed
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Further reading
|
|
57
|
+
- OAuth 2.0 Bearer Token Usage (RFC 6750): https://www.rfc-editor.org/rfc/rfc6750
|
|
58
|
+
- OWASP Authentication Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html
|
|
59
|
+
|
|
60
|
+
## Related skills
|
|
61
|
+
- ./backend-fundamentals — the HTTP layer these checks protect
|
|
62
|
+
- ./observability-logging — logging authorization failures for audit
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend/backend-fundamentals
|
|
3
|
+
description: Core backend ideas — HTTP request/response, statelessness, layered architecture, and the twelve-factor app methodology for cloud services.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: engineering
|
|
6
|
+
tags: [backend, http, stateless, twelve-factor, architecture, web]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://developer.mozilla.org/en-US/docs/Web/HTTP
|
|
9
|
+
- https://12factor.net/
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Backend Fundamentals
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
This skill covers the foundations every backend service rests on: how HTTP works as a stateless request/response protocol, why statelessness matters for scaling, how to layer an application, and the twelve-factor methodology for building portable cloud services. Read it before designing an API or deployment, and as a checklist when a service is hard to scale or configure across environments.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- HTTP (MDN): https://developer.mozilla.org/en-US/docs/Web/HTTP
|
|
20
|
+
- The Twelve-Factor App: https://12factor.net/
|
|
21
|
+
- Repo (twelve-factor): https://github.com/heroku/12factor
|
|
22
|
+
|
|
23
|
+
## Core concepts
|
|
24
|
+
- **HTTP is a stateless, application-layer protocol.** Per MDN, the server "does not keep any session data between two requests"; state is layered on top via cookies, tokens, or external stores.
|
|
25
|
+
- **Request/response, client-server model.** A client opens a connection, sends a request (method + path + headers + optional body), and waits for a single response.
|
|
26
|
+
- **Methods and status codes carry semantics.** Methods (GET, POST, PUT, PATCH, DELETE, …) express intent; status codes group as 1xx informational, 2xx success, 3xx redirect, 4xx client error, 5xx server error.
|
|
27
|
+
- **Statelessness enables horizontal scale.** Twelve-factor says to "execute the app as one or more stateless processes" so any instance can serve any request and you scale by adding processes.
|
|
28
|
+
- **Config lives in the environment.** Store deploy-specific config (URLs, credentials, flags) in environment variables, not in code, keeping the codebase portable and secrets out of version control.
|
|
29
|
+
- **Layering.** Separate concerns into transport/routing, application/service logic, and data-access layers so each can change and be tested independently.
|
|
30
|
+
- **Twelve factors at a glance.** Codebase, dependencies, config, backing services, build/release/run, processes, port binding, concurrency, disposability, dev/prod parity, logs, admin processes.
|
|
31
|
+
|
|
32
|
+
## Best practices
|
|
33
|
+
- Keep request handling stateless; persist session/state in a backing service (DB, cache) rather than in process memory (twelve-factor: processes, backing services).
|
|
34
|
+
- Treat backing services (databases, queues, caches) as attached resources swappable via config, with no code change.
|
|
35
|
+
- Build, release, and run as distinct stages so a release is an immutable artifact + config you can roll back.
|
|
36
|
+
- Use the correct HTTP method and status code for each operation so caches, clients, and proxies behave correctly (MDN).
|
|
37
|
+
|
|
38
|
+
## Common pitfalls
|
|
39
|
+
- Storing session state in process memory → breaks under multiple instances; move it to a shared backing service.
|
|
40
|
+
- Hardcoding environment-specific config or secrets in code → read them from the environment (twelve-factor: config).
|
|
41
|
+
- Returning 200 for errors or overloading GET to mutate data → honor HTTP method and status-code semantics (MDN).
|
|
42
|
+
|
|
43
|
+
## Examples
|
|
44
|
+
```http
|
|
45
|
+
GET /api/users/42 HTTP/1.1
|
|
46
|
+
Host: api.example.com
|
|
47
|
+
Accept: application/json
|
|
48
|
+
|
|
49
|
+
HTTP/1.1 200 OK
|
|
50
|
+
Content-Type: application/json
|
|
51
|
+
|
|
52
|
+
{ "id": 42, "name": "Ada" }
|
|
53
|
+
```
|
|
54
|
+
```bash
|
|
55
|
+
# Twelve-factor: config from the environment, not the code
|
|
56
|
+
export DATABASE_URL="postgres://user:pass@host:5432/app"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Further reading
|
|
60
|
+
- MDN HTTP overview: https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview
|
|
61
|
+
- Twelve-factor — full factor list: https://12factor.net/
|
|
62
|
+
|
|
63
|
+
## Related skills
|
|
64
|
+
- ./auth-and-authorization — securing the requests these services receive
|
|
65
|
+
- ./observability-logging — the "logs" factor and operating the service in production
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend/observability-logging
|
|
3
|
+
description: Observability via the three signals (logs, metrics, traces) with OpenTelemetry, plus SRE practices like SLOs and the four golden signals.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: engineering
|
|
6
|
+
tags: [observability, logging, metrics, tracing, opentelemetry, sre, slo]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://opentelemetry.io/docs/
|
|
9
|
+
- https://sre.google/books/
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Observability and Logging
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Observability is the ability to understand a system's internal state from its outputs. This skill covers the three telemetry signals — logs, metrics, and traces — instrumented in a vendor-neutral way with OpenTelemetry, and the operational practices Google SRE uses to act on that data (SLIs/SLOs, error budgets, the four golden signals). Read it when adding instrumentation, choosing what to log, or defining what "healthy" means for a service.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- OpenTelemetry docs: https://opentelemetry.io/docs/
|
|
20
|
+
- Repo (OpenTelemetry org): https://github.com/open-telemetry
|
|
21
|
+
- Google SRE books (free online): https://sre.google/books/
|
|
22
|
+
|
|
23
|
+
## Core concepts
|
|
24
|
+
- **Three signals.** OpenTelemetry standardizes **traces** (the path of a request across services), **metrics** (numeric measurements over time), and **logs** (timestamped records of discrete events).
|
|
25
|
+
- **OpenTelemetry is instrumentation, not a backend.** It is "a vendor-neutral open source Observability framework for instrumenting, generating, collecting, and exporting telemetry data" — it does not store or visualize data; you send it to a backend.
|
|
26
|
+
- **The Collector.** A vendor-agnostic process to receive, process, and export telemetry, decoupling your app from any specific backend.
|
|
27
|
+
- **OTLP and vendor neutrality.** A common wire protocol and broad vendor support (90+ observability vendors) let you switch tools without re-instrumenting, avoiding lock-in.
|
|
28
|
+
- **SLIs and SLOs.** A Service Level Indicator is a measured quality (e.g. request latency); a Service Level Objective is a target for it. Error budgets quantify allowable unreliability against the SLO (Google SRE).
|
|
29
|
+
- **The four golden signals.** Google SRE recommends monitoring **latency, traffic, errors, and saturation** as the primary health signals of a user-facing system.
|
|
30
|
+
|
|
31
|
+
## Best practices
|
|
32
|
+
- Emit structured logs (e.g. JSON with consistent fields) and correlate them with traces via trace/span IDs so you can pivot between signals.
|
|
33
|
+
- Instrument with OpenTelemetry rather than vendor-specific SDKs so the backend stays swappable.
|
|
34
|
+
- Define SLOs for the user-facing behaviors that matter and alert on SLO burn / the four golden signals, not on every raw metric (Google SRE).
|
|
35
|
+
- Run the OpenTelemetry Collector to centralize processing (batching, attribute scrubbing, routing) instead of exporting directly from every service.
|
|
36
|
+
|
|
37
|
+
## Common pitfalls
|
|
38
|
+
- Treating OpenTelemetry as a storage/visualization product → it only generates and ships telemetry; pair it with a backend.
|
|
39
|
+
- Logging unstructured free text → emit structured, queryable fields and avoid logging secrets/PII.
|
|
40
|
+
- Alerting on raw resource metrics with no SLO → alert on user-impacting symptoms (golden signals / SLO burn) to cut noise (Google SRE).
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
```text
|
|
44
|
+
A single user request, observed across the three signals:
|
|
45
|
+
trace : frontend → orders-api → payments-api (spans with timing)
|
|
46
|
+
metric: http.server.duration, error.rate, queue.saturation
|
|
47
|
+
log : {"level":"error","trace_id":"abc123","msg":"payment declined"}
|
|
48
|
+
```
|
|
49
|
+
```text
|
|
50
|
+
Four golden signals to dashboard/alert on:
|
|
51
|
+
latency · traffic · errors · saturation
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Further reading
|
|
55
|
+
- OpenTelemetry — what is observability: https://opentelemetry.io/docs/concepts/observability-primer/
|
|
56
|
+
- SRE Book, Monitoring Distributed Systems (golden signals): https://sre.google/sre-book/monitoring-distributed-systems/
|
|
57
|
+
|
|
58
|
+
## Related skills
|
|
59
|
+
- ./backend-fundamentals — the "logs" twelve-factor concern and service operation
|
|
60
|
+
- ./auth-and-authorization — logging authorization failures for audit
|