Ohno is an Angular playground for learning algorithms and data structures through interactive, animated visualizations.
The project focuses on:
- algorithm walkthroughs with step-by-step state
- rich visual scenes for sorting, graph, DP, string, grid, geometry, and network problems
- multilingual UI with Polish and English translations
- a growing unit-test suite around the algorithm layer
- Angular 21
- TypeScript
- Vitest
- D3, Anime.js, Three.js
- Transloco
- Font Awesome
- Node.js
22.xor another Angular 21 compatible runtime such as20.19+ - npm
10.9.2or newer npm 10 release - a valid Font Awesome Pro npm token
This repository currently depends on Font Awesome Pro packages. A fresh npm install will fail until you provide your own token.
- Export
FONTAWESOME_PACKAGE_TOKENin your shell with your Font Awesome Package Manager token. - Install dependencies:
npm ci- Start the app:
npm startThe dev server runs on http://localhost:4200/.
npm startruns the Angular dev servernpm run devis an alias for the Angular dev servernpm run buildcreates a production buildnpm run build:devcreates a development buildnpm run test:algorithmsruns the Vitest suite for the algorithms featurenpm run test:algorithms:coverageruns the same suite with coverage outputnpm run verifyruns the algorithm tests and the production buildnpm run verify:quickruns only the production buildnpm run deploy:productionpromotesmainto theproductionbranchnpm run release:productionverifies the app and then promotesmaintoproductionnpm run i18n:extractextracts translation keysnpm run i18n:findfinds translation key usage
GitHub Actions expects a repository secret named FONTAWESOME_PACKAGE_TOKEN.
Without that secret, dependency installation for the workflow will fail because the project imports private Font Awesome packages.
The repository also includes:
- a CI workflow for pushes and pull requests
- a manual
Release Productionworkflow for promoting a chosen ref toproduction - weekly Dependabot updates for npm packages and GitHub Actions
- a CodeQL workflow for JavaScript and TypeScript security scanning
The repository includes netlify.toml with:
npm run buildas the build commanddist/ohno/browseras the publish directory- an SPA fallback redirect for Angular routes
- a small set of CDN response headers
Before the first Netlify deploy, add a site environment variable named FONTAWESOME_PACKAGE_TOKEN.
The repository now includes a checked-in .npmrc that safely references ${FONTAWESOME_PACKAGE_TOKEN}. npm replaces that placeholder at install time, so you do not need a separate NPM_RC variable on Netlify.
Recommended branch model:
feature/*for in-progress workmainas the integration branchproductionas the Netlify production branch
With Netlify configured to deploy from production:
- pushes to
maindo not update the live site - production deploys happen only when
productionis updated - pull requests targeting
mainorproductionrun CI in GitHub Actions
To promote the current main state to production:
npm run deploy:productionTo verify before promoting:
npm run release:productionYou can also trigger the Release Production workflow in GitHub Actions and choose which ref should be promoted to the production branch. If you later add a GitHub Environment named production with required reviewers, this workflow will wait for approval before promoting the release.
SECURITY.mddocuments the reporting policy for vulnerabilities.- Dependabot and CodeQL are configured in
.github/so the repository can surface basic dependency and code scanning issues automatically.
- The old tracked
.npmrcwith a live token has been removed from the repository. - If that token was ever pushed to any remote, rotate or revoke it in Font Awesome immediately.
- The app currently builds with a few Angular budget warnings. They do not block the build, but they are known technical debt.
This project is available under the MIT License. See LICENSE.