# Changelog
## 2026-06-01
### Docker And Local Build
- [x] Added `Dockerfile` with a multi-stage production build for generator, frontend, homepage assets, and Nginx runtime.
- [x] Added `.dockerignore` to keep the Docker build context smaller and cleaner.
- [x] Added `compose.yaml` with the `futurecoder` service exposed on host port `14621`.
- [x] Added `docker/nginx.conf` for localized static routing and React course fallback routing.
- [x] Configured `/course/` and `/course` redirects to `/ru/course/` by default.
- [x] Configured localized course routes for `/en/course/`, `/es/course/`, `/fr/course/`, `/pl/course/`, `/ta/course/`, `/zh/course/`, and `/ru/course/`.
- [x] Added Nginx COOP/COEP/CORP headers for course routes so local Pyodide can run correctly.
- [x] Added Docker healthcheck against `/ru/course/`.
- [x] Added `scripts/build_localized_courses.sh` to build all localized React course bundles for the Docker image.
- [x] Added fallback behavior in the Docker build for legacy locales that cannot be generated by the current course generator.
- [x] Verified the running container reports `healthy`.
- [x] Verified the built site is available at `http://localhost:14621/`.
### Russian Localization
- [x] Added Russian as a first-class visible language in `frontend/src/languages.js`.
- [x] Added `/ru/` homepage and `/ru/course/` course routing.
- [x] Added `translations/locales/ru/` with Russian locale files.
- [x] Added `translations/bootstrap_russian.py` to bootstrap and repair Russian translation data.
- [x] Added `scripts/improve_russian_locale.py` for reviewed Russian wording fixes.
- [x] Added `scripts/ensure_complete_locales.py` to fill missing locale entries with English fallbacks.
- [x] Added Russian navigation labels for homepage, current lesson, and free coding links.
- [x] Localized key course UI labels such as run, previous/back, skip step, requirements, checking, help, hints, and solution wording.
- [x] Added Russian homepage copy for the hero section, feature bullets, testimonials, demo section, contribution text, and footer areas.
- [x] Added Russian `README.ru.md`.
- [x] Added Russian `BUILD.ru.md`.
- [x] Added Russian `how_to_contribute.ru.md`.
- [x] Added Russian `frontend/README.ru.md`.
- [x] Added Russian `scripts/README.ru.md`.
- [x] Added EN/RU language switchers at the top of paired Markdown documentation files.
### Language Switching
- [x] Replaced the crowded language link row on the homepage with a compact combobox-style language selector.
- [x] Added browser-language detection for first visit.
- [x] Added saved language preference support through `homepage/static/js/language-preferences.js`.
- [x] Set Russian as the default language when no saved or browser-supported language is available.
- [x] Updated localized homepage language links so local Docker routes are used instead of external translation domains.
- [x] Updated React course language URLs to use local localized routes during localized builds.
- [x] Added `rememberLanguage` helper for persisted language selection.
- [x] Added current language highlighting in the homepage language selector.
### Homepage UI And Design
- [x] Reworked the homepage header layout for the language selector, GitHub button, and product placement card.
- [x] Updated the GitHub button to point to `https://github.com/Dvurechensky-Tools/futurecoder`.
- [x] Added `Dvurechensky Pro` product placement card to the homepage header.
- [x] Added `homepage/static/img/dvurechensky-pro-logo.gif` as the product placement asset.
- [x] Styled the product placement card to match the dark futuristic homepage design.
- [x] Added responsive behavior for the product placement card on smaller screens.
- [x] Reworked homepage buttons with a GitHub-inspired visual language.
- [x] Removed the `or` / `или` separator between the main CTA buttons.
- [x] Replaced the two standalone CTA buttons with a premium translucent CTA panel.
- [x] Added subtle glassmorphism, border glow, button shine animation, and a blurred code-preview decoration to the CTA panel.
- [x] Made the CTA panel full-width within the hero content area.
- [x] Made the CTA panel more transparent so the animated white background lines remain visible through it.
- [x] Tuned CTA button sizes, font weight, gradients, shadows, and spacing to look less oversized and more professional.
- [x] Kept CTA buttons responsive and stacked them cleanly on mobile.
- [x] Improved homepage feature cards, form controls, footer styling, and dark theme details.
- [x] Updated homepage footer copyright to include both original and added attribution: `2025 Alex Hall & 2026 Dvurechensky`.
### Mobile And Responsive UI
- [x] Improved mobile layout for the homepage header.
- [x] Improved mobile behavior for the language selector.
- [x] Improved mobile behavior for the GitHub button.
- [x] Improved mobile behavior for the `Dvurechensky Pro` card.
- [x] Improved mobile behavior for the homepage hero title, subtitle, bullets, and CTA block.
- [x] Hid decorative CTA code preview on mobile to avoid layout overflow.
- [x] Improved responsive course layout and dark styling.
- [x] Improved table of contents layout and visual styling for mobile and desktop.
### Course Runtime And UI
- [x] Updated `frontend/src/Worker.js` to load Pyodide from the local built course path instead of relying on an external CDN.
- [x] Fixed the runtime failure caused by external `importScripts` loading from CDN.
- [x] Added `scripts/browser_smoke_test.mjs` to verify that the local Docker-served course can load and execute with local Pyodide.
- [x] Updated `frontend/src/serviceWorkerRegistration.js` behavior for the localized/static build.
- [x] Updated `frontend/src/shell/defs/styles/Terminal.js` for the refreshed dark terminal styling.
- [x] Updated course UI components including `App.js`, `Feedback.js`, `RunCode.js`, `TaskClient.js`, and related styles.
- [x] Updated `frontend/src/css/main.scss` with a stronger GitHub-inspired dark UI.
- [x] Updated `frontend/src/css/toc.scss` with a redesigned table of contents view.
- [x] Added navigation buttons to the table of contents header: homepage, current lesson, and free coding.
- [x] Added `Dvurechensky Pro` placement to the bottom of the table of contents.
- [x] Preserved user progress and current lesson routing behavior while adding the new navigation affordances.
### Table Of Contents
- [x] Added a homepage return action.
- [x] Added a current lesson action.
- [x] Added a free coding action.
- [x] Styled the table of contents with a darker professional GitHub-like look.
- [x] Improved current lesson highlighting.
- [x] Added product placement card in the table of contents.
- [x] Improved table of contents mobile spacing and readability.
### SEO And Discovery
- [x] Added SEO generation to `scripts/prepare_localized_homepages.py`.
- [x] Added localized page titles for all homepage languages.
- [x] Added localized meta descriptions and keywords.
- [x] Added canonical URLs.
- [x] Added localized `hreflang` tags.
- [x] Added `x-default` route pointing to Russian by default.
- [x] Added OpenGraph metadata.
- [x] Added Twitter card metadata.
- [x] Added JSON-LD structured data for organization, website, and course.
- [x] Added SEO author metadata for Alex Hall and Dvurechensky.
- [x] Added generated `robots.txt`.
- [x] Added generated `sitemap.xml`.
- [x] Added generated `manifest.webmanifest`.
- [x] Added generated `llms.txt`.
- [x] Added course SPA SEO metadata in `frontend/public/index.html`.
- [x] Updated `frontend/public/manifest.json`.
- [x] Set the project site URL used by generated metadata.
### Documentation
- [x] Added `BUILD.md` with English Docker build and verification instructions.
- [x] Added `BUILD.ru.md` with Russian Docker build and verification instructions.
- [x] Updated `README.md` with project/fork-specific information and documentation links.
- [x] Added `README.ru.md` with Russian project documentation.
- [x] Updated `how_to_contribute.md` with the EN/RU language switcher.
- [x] Added `how_to_contribute.ru.md`.
- [x] Updated `frontend/README.md` with the EN/RU language switcher.
- [x] Added `frontend/README.ru.md`.
- [x] Rewrote `scripts/README.md` to document the current script set.
- [x] Added and expanded `scripts/README.ru.md`.
- [x] Added language switchers to all paired Markdown files.
- [x] Documented Docker usage, health checks, smoke tests, rebuild flow, and known build warnings.
- [x] Documented the new scripts used for localization, homepage preparation, localized course builds, and browser smoke testing.
### Homepage Localization Source Updates
- [x] Updated `homepage/index.html` CTA structure to use the new `hero-cta` wrapper.
- [x] Updated translated homepage sources in `translations/locales/es/index.html`.
- [x] Updated translated homepage sources in `translations/locales/fr/index.html`.
- [x] Updated translated homepage sources in `translations/locales/pl/index.html`.
- [x] Updated translated homepage sources in `translations/locales/ta/index.html`.
- [x] Updated translated homepage sources in `translations/locales/zh/index.html`.
- [x] Removed old CTA separators from translated homepage source files.
- [x] Normalized old GitHub links in generated pages to the new repository URL.
- [x] Added local route preparation for translated homepage assets.
### Branding And Attribution
- [x] Added `Dvurechensky Pro` card to homepage.
- [x] Added `Dvurechensky Pro` card to table of contents.
- [x] Added `https://dvurechensky.pro` as product placement target.
- [x] Added `https://github.com/Dvurechensky-Tools/futurecoder` as the GitHub target.
- [x] Preserved original `2025 Alex Hall` attribution.
- [x] Added `2026 Dvurechensky` attribution alongside the original footer attribution.
### Verification
- [x] Built the Docker image with `docker compose up --build -d`.
- [x] Verified the Docker container health status is `healthy`.
- [x] Verified local homepage/course routes work on port `14621`.
- [x] Ran `node scripts/browser_smoke_test.mjs`.
- [x] Confirmed smoke test result: `Browser smoke test passed: LOCAL_PYODIDE_OK`.
- [x] Ran `git diff --check`.
- [x] Confirmed `git diff --check` has no formatting errors, aside from standard Windows LF/CRLF warnings.
### Known Notes
- [x] Docker build can print expected React source-map warnings from dependencies.
- [x] Docker build can print expected existing ESLint warnings.
- [x] Some legacy localized course builds can fall back to English course data when their old translation data is incompatible with current generator behavior.
- [x] Windows Git can print LF/CRLF warnings for edited files.