13 Commits
29 changed files with 80 additions and 58 deletions
+22 -2
View File
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
### Changed
### Fixed
## [1.0.0-beta03] - 2026-09-30
### Fixed
- correct transcriptions and translations for all records
## [1.0.0-beta02] - 2026-09-17
### Changed
- rename app to "Donemat - Breton d'Auray"
## [1.0.0-beta01] - 2026-09-07
### Changed
- show on boarding as a modal on large screens
@@ -45,13 +65,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [1.0.0-alpha01] - 2026-07-08
First public release of **Chom Bev e Brezhoneg**.
First public release of **Donemat - Breton d'Auray**.
### Added
#### Listening
- Record list of the *Chom Bev* audio course, with an emoji, the Breton title and
- Record list of the *Donemat - Breton d'Auray* audio course, with an emoji, the Breton title and
its French translation for each record.
- Audio player with play/pause/replay, a seekable progress bar, and
previous/next-sentence navigation.
+1 -1
View File
@@ -1,4 +1,4 @@
# Chom Bev e Brezhoneg - Survive in Breton - Survive en Breton
# "Donemat - Breton d'Auray" - Survive in Breton
This is a Compose Multiplatform project to listen to Breton from Vannes country. It uses an audio
player adapted for each platform and synchronised subtitles.
+3 -3
View File
@@ -41,7 +41,7 @@ android {
.toInt()
defaultConfig {
applicationId = "bzh.ajaury.chombev"
applicationId = "bzh.ksk.donemat"
minSdk =
libs.versions.androidMinSdk
.get()
@@ -50,8 +50,8 @@ android {
libs.versions.androidTargetSdk
.get()
.toInt()
versionCode = 2
versionName = "1.0.0-beta01"
versionCode = 4
versionName = "1.0.0-beta03"
}
packaging {
resources {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

+1 -1
View File
@@ -1,3 +1,3 @@
<resources>
<string name="app_name">Chom Bev</string>
<string name="app_name">Donemat - Breton d\'Auray</string>
</resources>
@@ -3,7 +3,7 @@ package bzh.ajaury.chombev.core.logging.data
import bzh.ajaury.chombev.core.logging.domain.Logger
internal class KermitLogger : Logger {
private val tag: String = "Chom Bev"
private val tag: String = "Donemat"
override fun debug(
message: String,
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, viewport-fit=cover">
<link rel="profile" href="https://gmpg.org/xfn/11">
<title>App Chom Bev &#8211; À propos &#8211; Kerlenn Sten Kidna</title>
<title>App Donemat - Breton d'Auray &#8211; À propos &#8211; Kerlenn Sten Kidna</title>
<meta name='robots' content='max-image-preview:large' />
<link rel="alternate" type="application/rss+xml" title="Kerlenn Sten Kidna &raquo; Flux" href="https://ksk.bzh/fr/feed/" />
<link rel="alternate" type="application/rss+xml" title="Kerlenn Sten Kidna &raquo; Flux des commentaires" href="https://ksk.bzh/fr/comments/feed/" />
@@ -164,7 +164,7 @@
<pre class="wp-block-preformatted">"<strong>Chom Bev e Brezhoneg</strong>" est une application qui vous est proposée gratuitement par l'association <strong>Kerlenn Sten Kidna</strong> dans le but de vous aider à vous initier au Breton, et particulièrement aux sonorités et tournures typiques du <strong>Breton Vannetais</strong>.</pre>
<pre class="wp-block-preformatted">"<strong>Donemat - Breton d'Auray</strong>" est une application qui vous est proposée gratuitement par l'association <strong>Kerlenn Sten Kidna</strong> dans le but de vous aider à vous initier au Breton, et particulièrement aux sonorités et tournures typiques du <strong>Breton Vannetais</strong>.</pre>
@@ -176,7 +176,7 @@
<p class="wp-block-paragraph">Cette application vous est proposée par l&rsquo;association <a href="https://ksk.bzh" target="_blank" rel="noreferrer noopener">Kerlenn Sten Kidna (KSK)</a>. « Chom Bev e Brezhoneg » est une oeuvre créée par KSK, initialement sous la forme d&rsquo;un livret imprimé et accompagné d&rsquo;un CD audio. Il est adapté ici au format numérique. L&rsquo;association KSK a notamment pour mission de faire vivre le patrimoine culturel breton en pays d&rsquo;Auray. Elle propose un ensemble de ressources (collectages audio, vidéo, écrits, &#8230;) mais aussi des rencontres (stages, soirées jeux, cafés pain-beurre, club lecteur &#8230;) et des cours hebdomadaires de breton (en journée &amp; en soirée, en présentiel &amp; à distance). </p>
<p class="wp-block-paragraph">Cette application vous est proposée par l&rsquo;association <a href="https://ksk.bzh" target="_blank" rel="noreferrer noopener">Kerlenn Sten Kidna (KSK)</a>. «Donemat - Breton d'Auray» est une oeuvre créée par KSK, initialement sous la forme d&rsquo;un livret imprimé et accompagné d&rsquo;un CD audio ("Chom Bev e Brezhoneg"). Il est adapté ici au format numérique. L&rsquo;association KSK a notamment pour mission de faire vivre le patrimoine culturel breton en pays d&rsquo;Auray. Elle propose un ensemble de ressources (collectages audio, vidéo, écrits, &#8230;) mais aussi des rencontres (stages, soirées jeux, cafés pain-beurre, club lecteur &#8230;) et des cours hebdomadaires de breton (en journée &amp; en soirée, en présentiel &amp; à distance). </p>
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, viewport-fit=cover">
<link rel="profile" href="https://gmpg.org/xfn/11">
<title>App Chom Bev -​ Approfondir &#8211; Kerlenn Sten Kidna</title>
<title>App Donemat - Breton d'Auray -​ Approfondir &#8211; Kerlenn Sten Kidna</title>
<meta name='robots' content='max-image-preview:large' />
<link rel="alternate" type="application/rss+xml" title="Kerlenn Sten Kidna &raquo; Flux" href="https://ksk.bzh/fr/feed/" />
<link rel="alternate" type="application/rss+xml" title="Kerlenn Sten Kidna &raquo; Flux des commentaires" href="https://ksk.bzh/fr/comments/feed/" />
@@ -1,6 +1,6 @@
<resources>
<!-- Breton (br) -->
<string name="app_name">Chom bev</string>
<string name="app_name">Donemat - Breton d'Auray</string>
<string name="nav_records">Dastumoù</string>
<string name="nav_deepen">Donaat</string>
@@ -28,7 +28,7 @@
<string name="auto_pause_title">Ehan emgefreek</string>
<string name="auto_pause_description">Ehanañ goude pep frazenn</string>
<string name="onboarding_goal_title">Degemer mat e Chom bev</string>
<string name="onboarding_goal_title">Degemer mat e "Donemat - Breton d'Auray"</string>
<string name="onboarding_goal_description">Deskit brezhoneg en ur selaou enrolladennoù, frazenn ha frazenn, evit gwellaat ho komprenidigezh hag ho tistagadur.</string>
<string name="onboarding_subtitles_title">Istitloù diouzh ho tro</string>
<string name="onboarding_subtitles_description">Adalek al lenner, diskouezit pe kuzhit an treuzskrivadur brezhonek hag an droidigezh c\'hallek, cheñchit ment an destenn hag ar merkoù distagañ.</string>
@@ -1,6 +1,6 @@
<resources>
<!-- Default locale: French -->
<string name="app_name">Chom bev</string>
<string name="app_name">Donemat - Breton d'Auray</string>
<string name="nav_records">Enregistrements</string>
<string name="nav_deepen">Approfondir</string>
@@ -28,7 +28,7 @@
<string name="auto_pause_title">Pause automatique</string>
<string name="auto_pause_description">Mettre en pause après chaque phrase</string>
<string name="onboarding_goal_title">Bienvenue dans\n Chom bev e Brezhoneg</string>
<string name="onboarding_goal_title">Bienvenue dans\n Donemat - Breton d'Auray</string>
<string name="onboarding_goal_description">Apprenez le breton en écoutant des enregistrements, phrase par phrase, pour améliorer votre compréhension et votre prononciation du Breton Vannetais.</string>
<string name="onboarding_subtitles_title">Des sous-titres à votre rythme</string>
<string name="onboarding_subtitles_description">Depuis le lecteur, affichez ou masquez la transcription bretonne et la traduction française, ajustez la taille du texte et les marques de prononciation.</string>
@@ -7,7 +7,7 @@ fun main() {
application {
Window(
onCloseRequest = ::exitApplication,
title = "Chom Bev",
title = "Donemat - Breton d'Auray",
) {
App()
}
+2 -2
View File
@@ -1,6 +1,6 @@
# Crash reporting — Sentry SDK on GlitchTip
Chom Bev reports crashes and handled errors with the
"Donemat - Breton d'Auray" reports crashes and handled errors with the
[Sentry Kotlin Multiplatform SDK](https://docs.sentry.io/platforms/kotlin/guides/kotlin-multiplatform/),
but sends them to [GlitchTip](https://glitchtip.com) instead of Sentry. GlitchTip is an
open-source, Sentry-API-compatible backend, so the Sentry SDKs and `glitchtip-cli` work against
@@ -42,7 +42,7 @@ Add the DSN to `local.properties` at the repository root (this file is git-ignor
glitchtip.dsn=https://<key>@eu.glitchtip.com/<project-id>
```
Find the value in GlitchTip under **Settings → Projects → _Chom Bev e Brezhoneg_ → Client Keys (DSN)**.
Find the value in GlitchTip under **Settings → Projects → _Donemat_ → Client Keys (DSN)**.
On CI, set the `GLITCHTIP_DSN` environment variable instead — it takes precedence over
`local.properties`.
@@ -58,7 +58,7 @@ private fun OnboardingInfoPagePreview() {
MaterialTheme {
OnboardingInfoPage(
icon = Icons.Filled.Hearing,
title = "Bienvenue dans Chom bev",
title = "Bienvenue dans Donemat - Breton d'Auray",
description = "Apprenez le breton en écoutant des enregistrements, phrase par phrase.",
)
}
@@ -8,7 +8,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.SheetState
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.material3.SheetValue
import androidx.compose.material3.rememberBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
@@ -40,7 +41,7 @@ fun PlaybackSpeedBottomSheet(
onBreakChange: (Float) -> Unit = {},
onAutoPauseChange: (Boolean) -> Unit = {},
onDismiss: () -> Unit = {},
sheetState: SheetState = rememberModalBottomSheetState(),
sheetState: SheetState = rememberBottomSheetState(initialValue = SheetValue.Expanded),
) {
ModalBottomSheet(
onDismissRequest = onDismiss,
@@ -14,8 +14,9 @@ import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.SheetState
import androidx.compose.material3.SheetValue
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.material3.rememberBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -50,7 +51,7 @@ fun SubtitlePreferencesBottomSheet(
onTextSizeDecrease: () -> Unit = {},
onTextSizeIncrease: () -> Unit = {},
onDismiss: () -> Unit = {},
sheetState: SheetState = rememberModalBottomSheetState(),
sheetState: SheetState = rememberBottomSheetState(initialValue = SheetValue.Expanded),
) {
ModalBottomSheet(
onDismissRequest = onDismiss,
+25 -25
View File
@@ -1,29 +1,29 @@
[versions]
agp = "9.3.1"
androidCompileSdk = "37"
androidMinSdk = "24"
androidTargetSdk = "37"
androidxActivity = "1.13.0"
androidxLifecycle = "2.11.0"
androidxWebkit = "1.16.0"
composeIconsExtended = "1.7.3"
composeMultiplatform = "1.11.1"
datastore = "1.2.1" # https://developer.android.com/jetpack/androidx/releases/datastore
googleServices = "4.5.0"
jaad = "0.9.4"
kermit = "2.1.0"
koin = "4.2.2"
kotlin = "2.4.10"
kotlinSerialization = "2.4.10"
kotlinWrappers = "2026.8.0"
kotlinxBrowser = "0.5.0"
kotlinxCoroutines = "1.11.0"
kotlinxSerializationJson = "1.11.0"
material3 = "1.11.0-alpha07"
media3 = "1.11.0"
navigation3 = "1.1.1"
okio = "3.18.1"
sentry = "0.27.0"
agp = "9.4.1" # https://developer.android.com/build/releases/gradle-plugin
androidCompileSdk = "37" # https://developer.android.com/tools/releases/platforms
androidMinSdk = "24" # https://developer.android.com/tools/releases/platforms
androidTargetSdk = "37" # https://developer.android.com/tools/releases/platforms
androidxActivity = "1.13.0" # https://developer.android.com/jetpack/androidx/releases/activity
androidxLifecycle = "2.11.0" # https://developer.android.com/jetpack/androidx/releases/lifecycle
androidxWebkit = "1.17.1" # https://developer.android.com/jetpack/androidx/releases/webkit
composeIconsExtended = "1.7.3" # https://github.com/JetBrains/compose-multiplatform/releases
composeMultiplatform = "1.12.1" # https://github.com/JetBrains/compose-multiplatform/releases
datastore = "1.2.1" # https://developer.android.com/jetpack/androidx/releases/datastore
googleServices = "4.5.0" # https://developers.google.com/android/guides/releases
jaad = "0.9.4" # https://github.com/Tianscar/jaad/releases
kermit = "2.1.0" # https://github.com/touchlab/Kermit/releases
koin = "4.2.2" # https://github.com/InsertKoinIO/koin/releases
kotlin = "2.4.20" # https://github.com/JetBrains/kotlin/releases
kotlinSerialization = "2.4.20" # https://github.com/JetBrains/kotlin/releases
kotlinWrappers = "2026.9.2" # https://github.com/JetBrains/kotlin-wrappers/releases
kotlinxBrowser = "0.5.0" # https://github.com/Kotlin/kotlinx-browser/releases
kotlinxCoroutines = "1.11.0" # https://github.com/Kotlin/kotlinx.coroutines/releases
kotlinxSerializationJson = "1.11.0" # https://github.com/Kotlin/kotlinx.serialization/releases
material3 = "1.12.0-alpha03" # https://developer.android.com/jetpack/androidx/releases/compose-material3
media3 = "1.11.0" # https://developer.android.com/jetpack/androidx/releases/media3
navigation3 = "1.1.2" # https://developer.android.com/jetpack/androidx/releases/navigation3
okio = "3.18.1" # https://square.github.io/okio/changelog/
sentry = "0.27.0" # https://github.com/getsentry/sentry-kotlin-multiplatform/releases
[libraries]
# Gradle plugin artifacts, used by build-logic convention plugins only
+1 -1
View File
@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=9c0f7faeeb306cb14e4279a3e084ca6b596894089a0638e68a07c945a32c9e14
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
+4 -4
View File
@@ -1,9 +1,9 @@
TEAM_ID=
PRODUCT_NAME=Chom Bev
PRODUCT_BUNDLE_IDENTIFIER=bzh.ajaury.chombev.Gwenedeg$(TEAM_ID)
PRODUCT_NAME=Donemat - Breton d'Auray
PRODUCT_BUNDLE_IDENTIFIER=bzh.ksk.donemat$(TEAM_ID)
// Keep in sync with androidApp versionName/versionCode and CHANGELOG.md.
// Apple only accepts numeric versions, so pre-release suffixes (e.g. -alpha01) are dropped here.
CURRENT_PROJECT_VERSION=1
MARKETING_VERSION=1.0.0
CURRENT_PROJECT_VERSION=4
MARKETING_VERSION=1.0.0.3
+3 -3
View File
@@ -11,7 +11,7 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
9DA43AABF87DF46F5E794E72 /* Chom Bev.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Chom Bev.app"; sourceTree = BUILT_PRODUCTS_DIR; };
9DA43AABF87DF46F5E794E72 /* Donemat.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Chom Bev.app"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
@@ -55,7 +55,7 @@
47B0C8770C82BEADFE13EF77 /* Products */ = {
isa = PBXGroup;
children = (
9DA43AABF87DF46F5E794E72 /* Chom Bev.app */,
9DA43AABF87DF46F5E794E72 /* Donemat.app */,
);
name = Products;
sourceTree = "<group>";
@@ -93,7 +93,7 @@
F36B7318302CAEC900B3E490 /* Sentry */,
);
productName = iosApp;
productReference = 9DA43AABF87DF46F5E794E72 /* Chom Bev.app */;
productReference = 9DA43AABF87DF46F5E794E72 /* Donemat.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
+1 -1
View File
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chom Bev</title>
<title>Donemat - Breton d'Auray</title>
<link type="text/css" rel="stylesheet" href="styles.css">
</head>
<body style="text-align: center; align-content: center">