Battle-tested guides on Python, DevOps, APIs, and system design. Built with Angular 21 + Tailwind CSS 4.
0
stars
239
commits
TypeScript
primary language
Sep 13, 2026
updated
CodersSecret is a free, ad-free engineering learning platform created by Vishal Anand. It combines practical guides, full courses, interactive labs, cheat sheets, glossary entries, architecture visuals, and narrated slides for engineers building secure production systems.
Live site: coderssecret.com
Blog | Courses | Interactive labs | Cheat sheets | Glossary | Discussions
Ctrl+K or Cmd+K.The live registries are the source of truth for catalog totals:
src/app/models/blog-post.model.tssrc/app/models/blog-content/src/app/models/course.model.ts and src/app/models/courses/src/app/models/glossary.model.tssrc/app/app.routes.tsCounts are intentionally not duplicated in this README because they change whenever content is added. The live blog, courses, and source registries above are canonical.
| Area | Technology |
|---|---|
| Application | Angular 21 standalone components, Signals, lazy routes, and view transitions |
| Language | TypeScript 5.9 in strict mode |
| Styling | Tailwind CSS 4, the Spartan Brain Tailwind preset, PostCSS, and custom Material Design 3 tokens/components |
| Testing | Angular unit-test builder, Vitest 4, and jsdom |
| Build | Angular application builder plus custom Node.js sitemap, banner, prerender, and SEO scripts |
| Static prerender | Headless Chrome, Chromium, or Edge rendering the built Angular UI |
| Analytics | Google Analytics 4 events and cumulative layout shift (CLS) monitoring |
| Discussions | Giscus backed by GitHub Discussions |
| Hosting | GitHub Pages deployed by GitHub Actions |
This repository is a static client application. It does not contain an application server, database, user-account system, payment flow, or npm package for publication. package.json marks the application as private.
packageManager fieldThe Angular dependencies may run on additional Node.js versions, but Node 22 is the repository and CI baseline.
No .env file is required for local development or production builds. The repository ignores .env and .env.*, and it does not load them at runtime.
git clone https://github.com/vishalanandl177/coderssecret.com.git
cd coderssecret.com
npm ci
npm start
Open http://localhost:4200.
Use npm ci for a clean, reproducible install from package-lock.json. Use npm install only when intentionally adding, removing, or updating dependencies, and commit the resulting lockfile change with package.json.
For exact npm-version parity without changing a global npm installation:
npx --yes npm@10.9.7 ci
If PowerShell blocks the npm.ps1 or npx.ps1 shim, use npm.cmd or npx.cmd:
npm.cmd ci
npm.cmd start
npx.cmd --yes npm@10.9.7 --version
The remaining examples use npm; the equivalent PowerShell form is npm.cmd.
| Command | Purpose |
|---|---|
npm start | Start the Angular development server at http://localhost:4200 |
npm run build | Build the Angular application using the default production configuration; does not generate the sitemap or static routes |
npm run watch | Rebuild the development configuration when source files change |
npm test | Run unit tests through Angular's Vitest-based test builder; may watch in an interactive terminal |
npm test -- --watch=false | Run the unit test suite once, which is the recommended validation form |
npm run check:build | Run only the Angular production compilation |
npm run build:prod | Build Angular, generate sitemap files, prerender routes, and validate generated SEO output |
npm run check:vulnerabilities | Fail on high or critical vulnerabilities in production dependencies; dev dependencies are omitted |
npm run check:seo | Validate source SEO, route, metadata, content, workflow, and available generated-output rules |
npm run check:generated-seo | Validate the existing generated site in dist; run build:prod first |
npm run check:ai-punctuation | Reject em-dash characters or entities in repository source and generated text |
npm run check:analytics-examples | Check unique lesson examples and execute the published SQL fixtures |
npm run generate:course-directory | Refresh the lightweight lesson directory after course titles or slugs change |
npm run precommit | Run the production dependency audit, asset and example checks, unit tests, production build, performance, SEO, internal-link, and punctuation checks |
npm run precommit is the authoritative local release gate and includes unit tests. Enable the versioned Git hook once per clone to run the same gate before every commit:
git config core.hooksPath .githooks
Before opening a pull request or pushing a public-site change, run:
npm test -- --watch=false
npm run precommit
git diff --check
git diff --cached --check
For changes to routes, articles, courses, metadata, structured data, internal links, sitemap behavior, or crawler-visible content, also inspect the relevant generated HTML under:
dist/coderssecret-app/browser/
At minimum, confirm:
https://coderssecret.com with no trailing slash.h1.noindex.noindex and are excluded from the sitemap.sitemap.xml when it should be indexed.Do not edit dist/, generated sitemap files, route aliases, or _redirects by hand. They are ignored build artifacts and are recreated by the production pipeline.
npm run build:prod performs these steps in order:
sitemap.xml and sitemap_index.xml from source registries and public route definitions._redirects artifact for compatible static hosts, and the final 404.html.The deployable output is:
dist/coderssecret-app/browser/
GitHub Pages does not apply _redirects; the Pages deployment relies on the generated route files, extensionless aliases, canonical metadata, and 404.html. The _redirects artifact is available only for static hosts that support that format.
A generated route normally has both forms:
dist/coderssecret-app/browser/blog/<slug>/index.html
dist/coderssecret-app/browser/blog/<slug>.html
The full build automatically looks for common Chrome, Chromium, and Edge locations. These optional shell environment variables are supported:
| Variable | Default | Purpose |
|---|---|---|
CHROME_BIN | Auto-detected | Explicit browser executable path or command |
PUPPETEER_EXECUTABLE_PATH | Auto-detected | Alternate explicit browser executable path |
CODERSSECRET_PRERENDER_SOURCE | Hydrated Angular UI | Set to manual only for an emergency non-UI fallback build; do not use it for a release |
CODERSSECRET_PRERENDER_PORT | 43000 + process ID modulo 1000 | Temporary local prerender server port |
CODERSSECRET_PRERENDER_BUDGET_MS | 1800 | First render's browser virtual-time budget |
CODERSSECRET_PRERENDER_RETRY_BUDGET_MS | 5000 | Retry render's virtual-time budget |
CODERSSECRET_PRERENDER_TIMEOUT_MS | 60000 | First render process timeout |
CODERSSECRET_PRERENDER_RETRY_TIMEOUT_MS | 120000 | Retry render process timeout |
CODERSSECRET_PRERENDER_WINDOW | 1365,900 | Headless browser window size |
CODERSSECRET_PRERENDER_ALLOW_NETWORK | External network blocked | Set to 1 only when external network access is intentionally required during prerender |
Bash example:
CHROME_BIN=/usr/bin/google-chrome npm run build:prod
PowerShell example:
$env:CHROME_BIN = 'C:\Program Files\Google\Chrome\Application\chrome.exe'
npm.cmd run build:prod
Add or update article metadata in src/app/models/blog-post.model.ts.
Add the article body at src/app/models/blog-content/<slug>.ts.
Export the body as CONTENT, and keep the filename exactly equal to the metadata slug:
export const CONTENT = `
<p>Article introduction.</p>
<h2>First section</h2>
<p>Section content.</p>
`;
Keep the metadata slug, content filename, canonical route, internal links, and banner filename aligned.
Do not add another article h1; the blog page template owns the single page heading.
Escape backticks and ${...} sequences that must appear literally inside the TypeScript template string.
Use real publication dates, authorship, claims, links, and structured data. Do not add invented FAQs, reviews, metrics, dates, or credentials.
Generate or refresh deterministic fallback banners when needed:
node scripts/generate-banners.js
This writes public/images/banners/<slug>.svg, regenerates script-owned banners, and preserves recognized custom banner files.
Run the complete validation gate and inspect:
dist/coderssecret-app/browser/blog/<slug>.html
The blog route dynamically imports the matching content module, so a normal article does not need a new route entry.
src/app/models/course.model.ts; runtime loading is mapped in src/app/models/course-loader.ts.COURSES registry live under src/app/models/courses/, with compact landing-page data under courses/outlines/.courses/:seoSlug route in src/app/app.routes.ts, and confirm module and slide routes for the course slug.COURSES registry, including local course-module imports.src/app/pages/home/home.ts whenever courses, modules, labs, or inline exercises change. Recalculate from the live course registry rather than copying an older total.Routes for games, cheat sheets, legal pages, slides, and other page types are not all registry-driven. When adding one:
src/app/app.routes.ts.src/app/services/seo.service.ts.scripts/generate-sitemap.js if the page should be indexed and is not data-driven.scripts/generate-routes.js so the route receives meaningful static HTML.| Script | Notes |
|---|---|
node scripts/generate-banners.js | Normal content utility; creates deterministic article SVG banners and preserves custom banners |
node scripts/generate-og-image.js | Overwrites public/og-image.svg; run only when intentionally replacing the site-wide fallback image and review the result |
node scripts/split-blog-posts.js | Legacy destructive migration utility; rewrites the blog metadata model and content modules, so do not run it during normal authoring |
powershell -File scripts/generate-podcast-art.ps1 | Optional Windows podcast-art generator; writes local files under out/podcasts/art, which must be kept out of commits unless they are intentionally requested |
.
|-- .github/workflows/
| `-- deploy.yml # GitHub Pages build and deployment
|-- branding/ # YouTube and other brand assets
|-- public/
| |-- CNAME # Production custom domain
| |-- images/ # Blog banners and supporting images
| |-- assets/ # Article diagrams and static resources
| |-- manifest.json # Web app metadata
| |-- robots.txt # Crawler rules and sitemap links
| `-- 404.html # Source fallback copied before final generation
|-- scripts/
| |-- generate-banners.js # Deterministic article banners
| |-- generate-sitemap.js # Sitemap and sitemap-index generation
| |-- generate-routes.js # Browser-backed static route generation
| |-- validate-generated-seo.js # Generated artifact validation
| |-- check-seo.js # Source and SEO quality checks
| `-- check-ai-punctuation.js # Repository punctuation guard
|-- src/
| |-- app/
| | |-- components/ # Header, footer, search, and slide player
| | |-- models/
| | | |-- blog-content/ # One TypeScript content module per article
| | | |-- courses/ # Separated course definitions
| | | |-- blog-post.model.ts # Article metadata registry
| | | |-- course.model.ts # Course interfaces
| | | |-- course-loader.ts # Route-level full course and outline loaders
| | | `-- glossary.model.ts # Glossary registry
| | |-- pages/
| | | |-- blog-list/ # Article catalog and filters
| | | |-- blog-post/ # Article renderer, TOC, sharing, and comments
| | | |-- courses/ # Course hub, landing, modules, and slides
| | | |-- games/ # Interactive engineering labs
| | | |-- cheatsheets/ # Reference sheets
| | | |-- glossary/ # Glossary hub and term pages
| | | `-- slides/ # Article slide routes
| | |-- services/ # SEO and analytics services
| | |-- shared/ # MD3 primitives, brand, links, and TOC logic
| | |-- app.routes.ts # Public Angular route map
| | `-- app.ts # Application shell and route behavior
| |-- index.html # Base metadata and root document
| `-- styles.css # Tailwind import, MD3 tokens, and global styles
|-- angular.json # Angular build, serve, test, assets, and budgets
|-- package.json # Scripts and dependency manifest
|-- package-lock.json # Reproducible npm dependency graph
`-- README.md
Generated output under dist/, Angular cache data, node_modules/, local .env* files, and files under out/ are not source files.
src/app/services/analytics.service.ts.src/app/pages/blog-post/blog-post.ts.src/app/shared/external-links.ts.theme, slides.voice, and slides.rate preferences.There is currently no environment-specific analytics or Giscus configuration. A local development session can attempt to load the production integrations when network access is available. Use browser blocking or an isolated network when local analytics traffic is not wanted.
See the public policies for the user-facing behavior:
deploy.yml runs on:
mainworkflow_dispatchThe workflow:
npm ci.dist/coderssecret-app/browser as the Pages artifact.The workflow has contents: read, pages: write, and id-token: write permissions. It runs the release checks as separate steps so failures are visible before deployment. Run the local validation sequence before merging or pushing to main as well.
The production custom domain is stored in public/CNAME. DNS records and GitHub Pages repository settings are external to this repository.
Before deploying a fork, review and replace every production-specific value:
public/CNAMEhttps://coderssecret.com canonical host in the SEO service, sitemap generator, route generator, generated-output validator, static files, and public contentUse a repository-wide search before release:
git grep -n -E "coderssecret[.]com|vishalanandl177|G-[A-Z0-9]+|giscus|github[.]com" -- src public scripts .github README.md
Removing or replacing only CNAME is not sufficient because canonical URLs and validators intentionally enforce the production host.
There is no separate CONTRIBUTING.md, contributor agreement, or open-source license. Outside code and content contributions are therefore not currently documented as accepted. Use an issue or discussion to propose substantial work without submitting implementation first. The repository owner must clarify contribution and licensing terms before accepting outside work.
For a maintainer change or another change explicitly authorized by the repository owner:
main.npm test -- --watch=false, npm run precommit, git diff --check, and git diff --cached --check.main with the user-visible impact and validation evidence.Merging or pushing to main deploys production, so treat content, metadata, routes, workflow files, and build scripts as production code.
Install Chrome, Chromium, or Edge, or point CHROME_BIN to the executable. Do not use CODERSSECRET_PRERENDER_SOURCE=manual for a release because it bypasses the exact UI-backed prerender source.
npm ci reports that the lockfile is out of syncIf dependency metadata was intentionally changed, regenerate the lockfile with the declared npm version:
npx --yes npm@10.9.7 install --package-lock-only
npx --yes npm@10.9.7 ci
Review both package.json and package-lock.json, then run the complete release gate. Do not regenerate the lockfile to hide an unrelated build failure.
check:generated-seo says build output is missingIt validates existing files under dist/coderssecret-app/browser; run:
npm run build:prod
Set a free local port with CODERSSECRET_PRERENDER_PORT and rerun the build.
npmUse the Windows executable shims:
npm.cmd run precommit
npx.cmd --yes npm@10.9.7 ci
Run npm run check:vulnerabilities for high and critical findings in production dependencies. This check omits development dependencies and is not a substitute for broader dependency, workflow, or application security review.
Non-sensitive bugs can be reported through GitHub Issues. This repository does not currently define a private vulnerability-reporting address or a SECURITY.md. Do not publish credentials, personal data, or exploitable vulnerability details in a public issue. A dedicated private reporting channel must be configured by the repository owner before it can be documented here.
This repository does not contain a LICENSE file and does not grant an open-source license for the repository code.
CodersSecret articles, diagrams, course material, page design, and original explanations remain owned by CodersSecret or their author unless a specific file says otherwise. Short excerpts with attribution and links are permitted, and small code snippets in articles may be reusable unless the page states otherwise. Full republication and other reuse are governed by the CodersSecret Terms of Service.
Third-party product names, logos, trademarks, examples, and linked code remain subject to their respective owners and licenses.
178 commits
61 commits
TypeScript
87.0%
JavaScript
6.6%
CSS
5.7%
Battle-tested guides on Python, DevOps, APIs, and system design. Built with Angular 21 + Tailwind CSS 4.
0
stars
239
commits
TypeScript
primary language
Sep 13, 2026
updated
CodersSecret is a free, ad-free engineering learning platform created by Vishal Anand. It combines practical guides, full courses, interactive labs, cheat sheets, glossary entries, architecture visuals, and narrated slides for engineers building secure production systems.
Live site: coderssecret.com
Blog | Courses | Interactive labs | Cheat sheets | Glossary | Discussions
Ctrl+K or Cmd+K.The live registries are the source of truth for catalog totals:
src/app/models/blog-post.model.tssrc/app/models/blog-content/src/app/models/course.model.ts and src/app/models/courses/src/app/models/glossary.model.tssrc/app/app.routes.tsCounts are intentionally not duplicated in this README because they change whenever content is added. The live blog, courses, and source registries above are canonical.
| Area | Technology |
|---|---|
| Application | Angular 21 standalone components, Signals, lazy routes, and view transitions |
| Language | TypeScript 5.9 in strict mode |
| Styling | Tailwind CSS 4, the Spartan Brain Tailwind preset, PostCSS, and custom Material Design 3 tokens/components |
| Testing | Angular unit-test builder, Vitest 4, and jsdom |
| Build | Angular application builder plus custom Node.js sitemap, banner, prerender, and SEO scripts |
| Static prerender | Headless Chrome, Chromium, or Edge rendering the built Angular UI |
| Analytics | Google Analytics 4 events and cumulative layout shift (CLS) monitoring |
| Discussions | Giscus backed by GitHub Discussions |
| Hosting | GitHub Pages deployed by GitHub Actions |
This repository is a static client application. It does not contain an application server, database, user-account system, payment flow, or npm package for publication. package.json marks the application as private.
packageManager fieldThe Angular dependencies may run on additional Node.js versions, but Node 22 is the repository and CI baseline.
No .env file is required for local development or production builds. The repository ignores .env and .env.*, and it does not load them at runtime.
git clone https://github.com/vishalanandl177/coderssecret.com.git
cd coderssecret.com
npm ci
npm start
Open http://localhost:4200.
Use npm ci for a clean, reproducible install from package-lock.json. Use npm install only when intentionally adding, removing, or updating dependencies, and commit the resulting lockfile change with package.json.
For exact npm-version parity without changing a global npm installation:
npx --yes npm@10.9.7 ci
If PowerShell blocks the npm.ps1 or npx.ps1 shim, use npm.cmd or npx.cmd:
npm.cmd ci
npm.cmd start
npx.cmd --yes npm@10.9.7 --version
The remaining examples use npm; the equivalent PowerShell form is npm.cmd.
| Command | Purpose |
|---|---|
npm start | Start the Angular development server at http://localhost:4200 |
npm run build | Build the Angular application using the default production configuration; does not generate the sitemap or static routes |
npm run watch | Rebuild the development configuration when source files change |
npm test | Run unit tests through Angular's Vitest-based test builder; may watch in an interactive terminal |
npm test -- --watch=false | Run the unit test suite once, which is the recommended validation form |
npm run check:build | Run only the Angular production compilation |
npm run build:prod | Build Angular, generate sitemap files, prerender routes, and validate generated SEO output |
npm run check:vulnerabilities | Fail on high or critical vulnerabilities in production dependencies; dev dependencies are omitted |
npm run check:seo | Validate source SEO, route, metadata, content, workflow, and available generated-output rules |
npm run check:generated-seo | Validate the existing generated site in dist; run build:prod first |
npm run check:ai-punctuation | Reject em-dash characters or entities in repository source and generated text |
npm run check:analytics-examples | Check unique lesson examples and execute the published SQL fixtures |
npm run generate:course-directory | Refresh the lightweight lesson directory after course titles or slugs change |
npm run precommit | Run the production dependency audit, asset and example checks, unit tests, production build, performance, SEO, internal-link, and punctuation checks |
npm run precommit is the authoritative local release gate and includes unit tests. Enable the versioned Git hook once per clone to run the same gate before every commit:
git config core.hooksPath .githooks
Before opening a pull request or pushing a public-site change, run:
npm test -- --watch=false
npm run precommit
git diff --check
git diff --cached --check
For changes to routes, articles, courses, metadata, structured data, internal links, sitemap behavior, or crawler-visible content, also inspect the relevant generated HTML under:
dist/coderssecret-app/browser/
At minimum, confirm:
https://coderssecret.com with no trailing slash.h1.noindex.noindex and are excluded from the sitemap.sitemap.xml when it should be indexed.Do not edit dist/, generated sitemap files, route aliases, or _redirects by hand. They are ignored build artifacts and are recreated by the production pipeline.
npm run build:prod performs these steps in order:
sitemap.xml and sitemap_index.xml from source registries and public route definitions._redirects artifact for compatible static hosts, and the final 404.html.The deployable output is:
dist/coderssecret-app/browser/
GitHub Pages does not apply _redirects; the Pages deployment relies on the generated route files, extensionless aliases, canonical metadata, and 404.html. The _redirects artifact is available only for static hosts that support that format.
A generated route normally has both forms:
dist/coderssecret-app/browser/blog/<slug>/index.html
dist/coderssecret-app/browser/blog/<slug>.html
The full build automatically looks for common Chrome, Chromium, and Edge locations. These optional shell environment variables are supported:
| Variable | Default | Purpose |
|---|---|---|
CHROME_BIN | Auto-detected | Explicit browser executable path or command |
PUPPETEER_EXECUTABLE_PATH | Auto-detected | Alternate explicit browser executable path |
CODERSSECRET_PRERENDER_SOURCE | Hydrated Angular UI | Set to manual only for an emergency non-UI fallback build; do not use it for a release |
CODERSSECRET_PRERENDER_PORT | 43000 + process ID modulo 1000 | Temporary local prerender server port |
CODERSSECRET_PRERENDER_BUDGET_MS | 1800 | First render's browser virtual-time budget |
CODERSSECRET_PRERENDER_RETRY_BUDGET_MS | 5000 | Retry render's virtual-time budget |
CODERSSECRET_PRERENDER_TIMEOUT_MS | 60000 | First render process timeout |
CODERSSECRET_PRERENDER_RETRY_TIMEOUT_MS | 120000 | Retry render process timeout |
CODERSSECRET_PRERENDER_WINDOW | 1365,900 | Headless browser window size |
CODERSSECRET_PRERENDER_ALLOW_NETWORK | External network blocked | Set to 1 only when external network access is intentionally required during prerender |
Bash example:
CHROME_BIN=/usr/bin/google-chrome npm run build:prod
PowerShell example:
$env:CHROME_BIN = 'C:\Program Files\Google\Chrome\Application\chrome.exe'
npm.cmd run build:prod
Add or update article metadata in src/app/models/blog-post.model.ts.
Add the article body at src/app/models/blog-content/<slug>.ts.
Export the body as CONTENT, and keep the filename exactly equal to the metadata slug:
export const CONTENT = `
<p>Article introduction.</p>
<h2>First section</h2>
<p>Section content.</p>
`;
Keep the metadata slug, content filename, canonical route, internal links, and banner filename aligned.
Do not add another article h1; the blog page template owns the single page heading.
Escape backticks and ${...} sequences that must appear literally inside the TypeScript template string.
Use real publication dates, authorship, claims, links, and structured data. Do not add invented FAQs, reviews, metrics, dates, or credentials.
Generate or refresh deterministic fallback banners when needed:
node scripts/generate-banners.js
This writes public/images/banners/<slug>.svg, regenerates script-owned banners, and preserves recognized custom banner files.
Run the complete validation gate and inspect:
dist/coderssecret-app/browser/blog/<slug>.html
The blog route dynamically imports the matching content module, so a normal article does not need a new route entry.
src/app/models/course.model.ts; runtime loading is mapped in src/app/models/course-loader.ts.COURSES registry live under src/app/models/courses/, with compact landing-page data under courses/outlines/.courses/:seoSlug route in src/app/app.routes.ts, and confirm module and slide routes for the course slug.COURSES registry, including local course-module imports.src/app/pages/home/home.ts whenever courses, modules, labs, or inline exercises change. Recalculate from the live course registry rather than copying an older total.Routes for games, cheat sheets, legal pages, slides, and other page types are not all registry-driven. When adding one:
src/app/app.routes.ts.src/app/services/seo.service.ts.scripts/generate-sitemap.js if the page should be indexed and is not data-driven.scripts/generate-routes.js so the route receives meaningful static HTML.| Script | Notes |
|---|---|
node scripts/generate-banners.js | Normal content utility; creates deterministic article SVG banners and preserves custom banners |
node scripts/generate-og-image.js | Overwrites public/og-image.svg; run only when intentionally replacing the site-wide fallback image and review the result |
node scripts/split-blog-posts.js | Legacy destructive migration utility; rewrites the blog metadata model and content modules, so do not run it during normal authoring |
powershell -File scripts/generate-podcast-art.ps1 | Optional Windows podcast-art generator; writes local files under out/podcasts/art, which must be kept out of commits unless they are intentionally requested |
.
|-- .github/workflows/
| `-- deploy.yml # GitHub Pages build and deployment
|-- branding/ # YouTube and other brand assets
|-- public/
| |-- CNAME # Production custom domain
| |-- images/ # Blog banners and supporting images
| |-- assets/ # Article diagrams and static resources
| |-- manifest.json # Web app metadata
| |-- robots.txt # Crawler rules and sitemap links
| `-- 404.html # Source fallback copied before final generation
|-- scripts/
| |-- generate-banners.js # Deterministic article banners
| |-- generate-sitemap.js # Sitemap and sitemap-index generation
| |-- generate-routes.js # Browser-backed static route generation
| |-- validate-generated-seo.js # Generated artifact validation
| |-- check-seo.js # Source and SEO quality checks
| `-- check-ai-punctuation.js # Repository punctuation guard
|-- src/
| |-- app/
| | |-- components/ # Header, footer, search, and slide player
| | |-- models/
| | | |-- blog-content/ # One TypeScript content module per article
| | | |-- courses/ # Separated course definitions
| | | |-- blog-post.model.ts # Article metadata registry
| | | |-- course.model.ts # Course interfaces
| | | |-- course-loader.ts # Route-level full course and outline loaders
| | | `-- glossary.model.ts # Glossary registry
| | |-- pages/
| | | |-- blog-list/ # Article catalog and filters
| | | |-- blog-post/ # Article renderer, TOC, sharing, and comments
| | | |-- courses/ # Course hub, landing, modules, and slides
| | | |-- games/ # Interactive engineering labs
| | | |-- cheatsheets/ # Reference sheets
| | | |-- glossary/ # Glossary hub and term pages
| | | `-- slides/ # Article slide routes
| | |-- services/ # SEO and analytics services
| | |-- shared/ # MD3 primitives, brand, links, and TOC logic
| | |-- app.routes.ts # Public Angular route map
| | `-- app.ts # Application shell and route behavior
| |-- index.html # Base metadata and root document
| `-- styles.css # Tailwind import, MD3 tokens, and global styles
|-- angular.json # Angular build, serve, test, assets, and budgets
|-- package.json # Scripts and dependency manifest
|-- package-lock.json # Reproducible npm dependency graph
`-- README.md
Generated output under dist/, Angular cache data, node_modules/, local .env* files, and files under out/ are not source files.
src/app/services/analytics.service.ts.src/app/pages/blog-post/blog-post.ts.src/app/shared/external-links.ts.theme, slides.voice, and slides.rate preferences.There is currently no environment-specific analytics or Giscus configuration. A local development session can attempt to load the production integrations when network access is available. Use browser blocking or an isolated network when local analytics traffic is not wanted.
See the public policies for the user-facing behavior:
deploy.yml runs on:
mainworkflow_dispatchThe workflow:
npm ci.dist/coderssecret-app/browser as the Pages artifact.The workflow has contents: read, pages: write, and id-token: write permissions. It runs the release checks as separate steps so failures are visible before deployment. Run the local validation sequence before merging or pushing to main as well.
The production custom domain is stored in public/CNAME. DNS records and GitHub Pages repository settings are external to this repository.
Before deploying a fork, review and replace every production-specific value:
public/CNAMEhttps://coderssecret.com canonical host in the SEO service, sitemap generator, route generator, generated-output validator, static files, and public contentUse a repository-wide search before release:
git grep -n -E "coderssecret[.]com|vishalanandl177|G-[A-Z0-9]+|giscus|github[.]com" -- src public scripts .github README.md
Removing or replacing only CNAME is not sufficient because canonical URLs and validators intentionally enforce the production host.
There is no separate CONTRIBUTING.md, contributor agreement, or open-source license. Outside code and content contributions are therefore not currently documented as accepted. Use an issue or discussion to propose substantial work without submitting implementation first. The repository owner must clarify contribution and licensing terms before accepting outside work.
For a maintainer change or another change explicitly authorized by the repository owner:
main.npm test -- --watch=false, npm run precommit, git diff --check, and git diff --cached --check.main with the user-visible impact and validation evidence.Merging or pushing to main deploys production, so treat content, metadata, routes, workflow files, and build scripts as production code.
Install Chrome, Chromium, or Edge, or point CHROME_BIN to the executable. Do not use CODERSSECRET_PRERENDER_SOURCE=manual for a release because it bypasses the exact UI-backed prerender source.
npm ci reports that the lockfile is out of syncIf dependency metadata was intentionally changed, regenerate the lockfile with the declared npm version:
npx --yes npm@10.9.7 install --package-lock-only
npx --yes npm@10.9.7 ci
Review both package.json and package-lock.json, then run the complete release gate. Do not regenerate the lockfile to hide an unrelated build failure.
check:generated-seo says build output is missingIt validates existing files under dist/coderssecret-app/browser; run:
npm run build:prod
Set a free local port with CODERSSECRET_PRERENDER_PORT and rerun the build.
npmUse the Windows executable shims:
npm.cmd run precommit
npx.cmd --yes npm@10.9.7 ci
Run npm run check:vulnerabilities for high and critical findings in production dependencies. This check omits development dependencies and is not a substitute for broader dependency, workflow, or application security review.
Non-sensitive bugs can be reported through GitHub Issues. This repository does not currently define a private vulnerability-reporting address or a SECURITY.md. Do not publish credentials, personal data, or exploitable vulnerability details in a public issue. A dedicated private reporting channel must be configured by the repository owner before it can be documented here.
This repository does not contain a LICENSE file and does not grant an open-source license for the repository code.
CodersSecret articles, diagrams, course material, page design, and original explanations remain owned by CodersSecret or their author unless a specific file says otherwise. Short excerpts with attribution and links are permitted, and small code snippets in articles may be reusable unless the page states otherwise. Full republication and other reuse are governed by the CodersSecret Terms of Service.
Third-party product names, logos, trademarks, examples, and linked code remain subject to their respective owners and licenses.
178 commits
61 commits
TypeScript
87.0%
JavaScript
6.6%
CSS
5.7%