First off, thanks for taking the time to contribute! CodePet is a gamified coding-learning app, and the best way to grow it is with the community.
The app ships with 90 challenges (+6 special) in Kotlin, JavaScript, PHP and Python. We'd love to grow to Ruby, Go, Rust, Swift, SQL and C.
- Open
app/src/main/java/com/tamagotchi/code/data/ChallengesData.kt - Study the format of existing challenges (trivia, debugging, code output)
- Add 5–10 well-explained challenges in a new language
- Add the English translation for each one in
ChallengesDataEn.kt(same id, same option ORDER —LocalizedContentTestfails if they drift apart) - Submit a PR — one language per PR keeps reviews fast
Rules for good challenges:
- The explanation teaches a concept, it doesn't just say "right/wrong"
- No trick questions; ambiguity is a bug
- Code snippets must actually compile/run in their language
- New visual themes: implement an
AppThemeinui/theme/ThemeConfig.ktand its animated background inui/components/AnimatedThemeBackground.kt - Codey is drawn 100% procedurally in
ui/components/CodeySprite.kt(Compose Canvas); the launcher widget reuses the same renderer viaui/components/CodeyBitmap.kt. Do not add pet PNGs toapp/src/main/assets/pet/.
Search issues first. good first issue labels are beginner-friendly.
The UI strings live in app/src/main/res/values/. A new language = one values-<lang>/strings.xml.
git clone https://github.com/fguzman-stack/CodePet.git
cd CodePet
./gradlew assembleDebug # build the APK
./gradlew testDebugUnitTest # run testsRequirements: JDK 17+, Android SDK (API 36), Android Studio Hedgehog+.
The app is 100% offline — no API keys, accounts or secrets needed. All game data lives in local Room/DataStore.
- Fork → branch from
master(git checkout -b feat/rust-challenges) - Keep diffs focused: one feature or fix per PR
- Run
./gradlew assembleDebug testDebugUnitTestlocally — CI must be green - For UI changes, attach a screenshot or short GIF to the PR
- Conventional commits:
feat:,fix:,docs:,refactor:,chore:
- Kotlin official style, 2-space indent (match surrounding code)
- Compose: stateless composables + hoisted state where practical
- Room schema changes require a migration in
AppDatabase.kt(check currentversion) - Never commit
local.properties, keystores, or API keys
Be kind. We follow the Code of Conduct (Contributor Covenant). Questions? Open an issue or start a discussion.
La forma más fácil de contribuir es agregar retos de programación en lenguajes que aún no tenemos: Ruby, Go, Rust, Swift, SQL o C. Todo está en app/src/main/java/com/tamagotchi/code/data/ChallengesData.kt. Copia el formato de los retos existentes y envía un PR por lenguaje. Cada reto nuevo necesita su traducción al inglés en ChallengesDataEn.kt (mismo id y mismo orden de opciones; LocalizedContentTest lo verifica).
- Cada explicación debe enseñar un concepto, no solo decir "correcto/incorrecto"
- Nada de preguntas trampa; la ambigüedad es un bug
- Los fragmentos de código deben compilar/ejecutarse de verdad
JDK 17+, Android SDK (API 36) y Android Studio Hedgehog+. Compila con ./gradlew assembleDebug y prueba con ./gradlew testDebugUnitTest.
- Fork y rama desde
master - Un PR = una funcionalidad o fix
- Capturas o GIF si tocaste UI
- Commits convencionales (
feat:,fix:,docs:...)