Tým Movappu po dvou letech končí svou činnost a loučí se s vámi. Aplikace bude i nadále fungovat. Pokud byste chtěli projekt adoptovat a navázat na jeho vývoj, kontaktujte Česko.Digital na pryvit@movapp.cz
Cílem Movapp.cz je usnadnit dorozumění mezi Čechy a Ukrajinci. Mова [mova] znamená ukrajinsky jazyk. Movapp je aplikace pro trénink jazyků. Projekt vzniká v komunitě expertních dobrovolníků Česko.Digital. Kontakt: pryvit@movapp.cz.
Zdrojový kód je pod MIT licencí. Texty, obrázky a audiosoubory jsou pod licencí CC BY-NC 4.0.
Chcete-li nám pomáhat na dalším rozvoji projektu, vyplňte formulář na cesko.digital/join a přidejte se do Slacku. Najdete nás v kanálu ua-movapp (komunikujeme česky, slovensky, anglicky a trochu také ukrajinsky).
Після двох років команда Movapp припиняє діяльність і прощається з вами. Додаток продовжуватиме працювати. Якщо ви хочете перейняти проект і продовжити його розвиток, будь ласка, контактуйте Česko.Digital на pryvit@movapp.cz
Мета Movapp.cz – полегшити спілкування між чехами та українцями. Movapp — це програма для мовного навчання. Проект створений у спільноті експертів-волонтерів Česko.Digital. Контакти: pryvit@movapp.cz.
Вихідний код знаходиться під ліцензією MIT. Тексти, зображення та аудіофайли ліцензовані відповідно до CC BY-NC 4.0.
Якщо ви хочете стати членом команди волонтерів і допомогти нам розвивати проєкт, заповніть форму на cesko.digital/join та приєднайтеся до нашого Slack. Ви можете знайти нас на каналі ua-movapp (спілкуємося чеською, словацькою, англійською а також трохи українською).
After two years we are saying goodbye and ending all our activities. The application will however continue to function. If you would like to adopt the project and continue its development, please contact Česko.Digital at pryvit@movapp.cz.
The goal of Movapp.cz is to make communication between Czechs and Ukrainians easier. Mова [mohva] means language in Ukrainian. Movapp is an application for language training. The project is developed by Česko.Digital - the community of volunteering experts. Contact: pryvit@movapp.cz.
Source code is available under the MIT license. Text, pictures and audiofiles are available under the CC BY-NC 4.0 license.
If you want to help us, fill in the form at cesko.digital/join and join Slack. You can find us in the ua-movapp channel (we speak Czech, Slovak, English, and a little bit Ukrainian).
The web is written in Next.js and hosted on Vercel. To run it locally:
git clone https://github.com/cesko-digital/movapp.git
cd movapp
npm install
npm run dev
Run tests:
npm test
If you have questions, write to us on Slack or create an issue
- TypeScript everywhere (as much as posisble) Avoid the use of
any
,as
typecasting,ts-ignore
. - Tailwind everywhere (as much as possible). We are trying to keep the styling approach consistent so stick to Tailwind unless you have a specific reason to use something else.
- Use
eslint
andprettier
in your IDE. - Keep it simple. A lot of our contributors are junior/mid-level developers so we favor code-readability and easy onboarding to optimal performance and code cleverness. Dumb is readable, readable is smart.
- Don't reinvent the wheel. For more complex, standard components (modal, dropdown, etc) we use 3rd party headless libraries like HeadlessUI or RadixUI.
-
Localization: We use
next-i18next
to switch localization between the main site language (i.e., Czech) and Ukrainian.const { t } = useTranslation(); ... <p>{t('homepage.box_child_title')}</p>
-
Language variants: We use the
NEXT_PUBLIC_COUNTRY_VARIANT
environment variable to decide whether to build the Czech, Slovak or Polish variant of the site. Seelocales.ts
for more details. When making changes, check that your code works in all language variants. The merge request pipeline automatically deploys the preview of each language variant. -
Language variant singpost is deployed separately from the main app using GitHub pages. See docs/signpost-readme.md for more details.
-
Data management:
- We use Airtable for managing the site content (phrases, categories).
- The data is pulled into the movapp-data repository, enriched with sounds generated using Azure text-to-speech API and hosted on a CDN at data.movapp.eu
- This website, as well as mobile apps pull the data from the CDN.
-
Generating PDFs
- Pages donwloadable as PDFs have a
pdf.tsx
orpdf/[param].tsx
file next to theirindex.html
. This file contains the simplified print-friendly version of the page.- Tip: Flexbox or CSS grid styling can result in ugly page break inside rows/elements. Prefer using tables, divs, paragraphs in combination with break-inside CSS rule to produce clean page breaks.
- The page is generated during
npm run build
and then theexportPdfs.ts
post-build script usespupeeteer
to turn the html file into a PDF a saves it in thepublic/pdf
folder. See the script for implementation details.- Warning: Always run always run post-build scripts with
"NODE_OPTIONS='--unhandled-rejections=strict'
. Otherwise, they can fail on Vercel without killing the build, blocking the build slot for other deployments before the Vercel's 45 min timeout.
- Warning: Always run always run post-build scripts with
- The generated PDFs are not commited to git, but generated on Vercel with every deployment.
- The pdfs inside public folder are then accesible from regular Next pages:
<a href="/pdf/generatedFile".pdf>Download PDF</a>
- Pages donwloadable as PDFs have a
- Transliteration tables between Czech and Ukrainian were kindly provided by: vsistek/ua-translit-cz/ under an MIT license.