You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Engineering documentation portal and browser-based utilities for mechanical design, fabrication, QA workflows, and CAD automation. All tools run client-side in Chromium with WebGL 2 and WebAssembly.
# Install dependencies
npm install
# Start development server
npm start
# Build for production
npm run build
# Serve production build locally
npm run serve
UI strings live in src/i18n/locales/*.ts (6 locales: en, ru, ua, de,
es, et). Rule: never hardcode user-facing strings in components — add a
key to all six dictionaries and render it with t('section.key') from
useI18n().
How completeness is enforced
en.ts exports the TranslationDict type, and every other locale is declared
against it (export const de: TranslationDict = {...}). A key missing from any
locale is therefore a type error: npm run typecheck fails locally, and CI
(.github/workflows/ci.yml) runs the same check on every PR and push to
main, so an incomplete translation cannot be merged.
Adding or changing a string
Add the key and English text to src/i18n/locales/en.ts — this updates
TranslationDict, and typecheck now lists every locale still missing it.
Add the translated value to the same path in ru.ts, ua.ts, de.ts,
es.ts, and et.ts.
Render it with t('section.key'); placeholders use {name} syntax and are
passed as the second argument: t('utility.unlockCopy', {name: title}).
Run npm run typecheck before pushing.
Docusaurus-native surfaces
The navbar, footer, docs sidebar, and other theme-owned UI are translated via
JSON in i18n/<locale>/**.json instead (regenerate stubs with
npm run write-translations). Markdown/MDX content (docs, blog) is localized
by mirroring files under i18n/<locale>/docusaurus-plugin-content-*/.
Build and republish the Whisper Transcriber artifact
Deployment
The site is deployed on Vercel: every push to main triggers a production deployment, and pull requests get preview deployments. CI (.github/workflows/ci.yml) runs typecheck, lint and a full build on every PR.
Manual Deployment
# Build production bundle
npm run build
# Deploy build/ directory to your hosting platform
Create a feature branch: git checkout -b feature/my-feature
Commit changes: git commit -m 'Add my feature'
Push to branch: git push origin feature/my-feature
Open a Pull Request
Adding a New Utility
Add utility metadata to src/data/utilities.ts
Add the slug and shell config to src/data/utilityShellPages.tsx
Create page route in src/pages/utilities/
Add documentation in docs/utilities/ plus the five i18n/<locale>/…/utilities/ mirrors, and list it in sidebars.ts and utilities/overview.mdx
Add the catalog name/description to all six src/i18n/locales/*.ts dictionaries
Place standalone build assets in static/utility-apps/<slug>/ if needed
Embedded apps built in their own repository
Utilities too heavy to live in the Docusaurus bundle are built elsewhere and
published here as static artifacts. The Whisper Transcriber is the reference
implementation of that pipeline:
Tagging a release in YurMil/ws-speech-text
builds the bundle, audits it, and attaches a checksummed archive to a GitHub
release.
That workflow sends a whisper-transcriber-releaserepository_dispatch here
(secret SITE_DISPATCH_TOKEN, set in the source repository).
.github/workflows/sync-whisper-transcriber.yml downloads the archive,
refuses it unless the SHA-256 matches, republishes
static/utility-apps/whisper-transcriber/ via
scripts/sync-whisper-transcriber.mjs, runs typecheck/lint/build, and opens
a pull request.
Nothing is deployed without review, and this repository never builds the app or
downloads model weights. The same script publishes from a local checkout during
development (npm run sync:whisper-transcriber).
Device capabilities
Device capabilities (camera, microphone) are delegated per utility through the
iframeAllow field of UtilityPageConfig, paired with a path-scoped
Permissions-Policy rule in vercel.json. Never widen the global policy: the
site default stays microphone=(), and only the routes of the utility that
needs a device relax it. See whisper-transcriber for the reference wiring.
License
This project is licensed under the MIT License - see LICENSE for details.
About
The idea is to create a knowledge base covering automation methods for mechanical engineers, electrical engineers, technologists, and others who work with various CAD systems or simply face routine engineering tasks.