Thanks for helping improve tickward.
Public issues and pull requests are welcome. The maintainer reviews accepted changes for inclusion in a future release.
Accepted pull requests are integrated by the maintainer rather than merged directly. When the shipped change materially includes your commits, your Git author metadata is preserved wherever practical, often together with follow-up fixes in separate maintainer commits. If an accepted change must be substantially rewritten, the maintainer credits the contribution explicitly and explains the authorship handling in the PR reply. The result ships with the next release, and your PR is then closed with a comment linking to the release that contains your change.
Translations live in lib/i18n/locales/. en.ts is the reference catalog.
- A locale catalog must cover the exact key set of
en.ts— no missing and no extra keys.scripts/i18n-catalog.test.tsenforces this, and theRecord<Locale, …>type inlib/i18n/messages.tsmakes an incomplete catalog a compile error. - Never translate
{placeholder}tokens ({project},{seconds}, …),%stemplates, or the product name. Mirror the English casing of the product name per key. - Keep placeholder domains and emails on the IANA-reserved
example.com(e.g.https://example.com,you@example.comand its localized mailbox name). Do not substitute a localized domain — those are real, registrable domains. - Plural families provide
.one,.few, and.manyvariants for every locale. At runtime the CLDR plural category is looked up and anything without a dedicated key falls back to.many, so put your language's general plural there and mirror it into variants your language does not distinguish. - To register a new locale, add it to
SUPPORTED_LOCALESandOG_LOCALESinlib/i18n/config.tsand toMESSAGESinlib/i18n/messages.ts, then fix everyRecord<Locale, …>map the compiler flags. - Run
npm run lint,npm run test, andnpm run buildbefore opening the PR. Partial translations are still welcome — mark the PR as a draft and the remaining keys can be completed during review.
- Keep changes focused and related to tickward.
- Do not include secrets, production infrastructure details, or account credentials.
- Run
npm run lint,npm run test, andnpm run buildwith Node 22. - For Docker changes, run
cp .env.example .envanddocker compose up --build.
By contributing, you agree that your contribution is licensed under AGPL-3.0-only.