<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Serhii Boboshko</title>
    <description>The latest articles on Forem by Serhii Boboshko (@__a7876a767b).</description>
    <link>https://forem.com/__a7876a767b</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3443437%2F141da683-027d-4566-bd8e-29c2e53c78bd.png</url>
      <title>Forem: Serhii Boboshko</title>
      <link>https://forem.com/__a7876a767b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/__a7876a767b"/>
    <language>en</language>
    <item>
      <title>I built a Jetpack Compose framework that auto-generates SQLite database and UI for your entities (ERP-style apps in minutes)</title>
      <dc:creator>Serhii Boboshko</dc:creator>
      <pubDate>Wed, 08 Oct 2025 17:48:23 +0000</pubDate>
      <link>https://forem.com/__a7876a767b/i-built-a-jetpack-compose-framework-that-auto-generates-sqlite-database-and-ui-for-your-entities-2oam</link>
      <guid>https://forem.com/__a7876a767b/i-built-a-jetpack-compose-framework-that-auto-generates-sqlite-database-and-ui-for-your-entities-2oam</guid>
      <description>&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/KY_wtlVK8BE"&gt;
  &lt;/iframe&gt;


&lt;br&gt;
I’ve been building apps with Jetpack Compose for a while, and I was always frustrated by how much boilerplate I had to write — especially when dealing with entities, DAOs, ViewModels, and UI forms.&lt;/p&gt;

&lt;p&gt;So I decided to create my own framework — ComposeEntity. It automatically generates the SQLite database and the full UI for your entities (with CRUD operations, navigation, and even reports). You just describe your data model — the framework takes care of the rest.&lt;/p&gt;

&lt;p&gt;Think of it as a way to build ERP-like apps in minutes instead of days. No need for Room, no manual ViewModel wiring, no repetitive UI code — everything is generated automatically but still fully customizable.&lt;/p&gt;

&lt;p&gt;Here’s a short video showing how it works 👇&lt;br&gt;
(Video link)&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts, suggestions, or use cases you’d like to see supported next.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>jetpackcompose</category>
      <category>kotlin</category>
      <category>android</category>
    </item>
    <item>
      <title>How I tried to bring Oracle/SAP/1C-style auto-generated forms into Android with Jetpack Compose + SQLite</title>
      <dc:creator>Serhii Boboshko</dc:creator>
      <pubDate>Sun, 07 Sep 2025 11:12:56 +0000</pubDate>
      <link>https://forem.com/__a7876a767b/how-i-tried-to-bring-oraclesap1c-style-auto-generated-forms-into-android-with-jetpack-compose--464p</link>
      <guid>https://forem.com/__a7876a767b/how-i-tried-to-bring-oraclesap1c-style-auto-generated-forms-into-android-with-jetpack-compose--464p</guid>
      <description>&lt;p&gt;I’ve spent part of my career working with enterprise systems like Oracle, SAP, 1C.&lt;br&gt;
One thing they all have in common: you create a table, and if you don’t need heavy customization — you already get working forms for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;browsing lists&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;adding and editing records&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;marking for deletion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;deleting or copying items&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That always felt natural. You focus on your data and business logic, not on infrastructure.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Android pain
&lt;/h2&gt;

&lt;p&gt;When I switched to Android development, I ran into a wall.&lt;br&gt;
Every time I wanted to try out a simple idea, I first had to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;define entities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;write a DAO&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;add repositories&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;create a ViewModel&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;build forms in Compose&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;wire up navigation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It felt like I was writing scaffolding for days before I could even see my idea in action.&lt;/p&gt;
&lt;h2&gt;
  
  
  My attempt at solving this
&lt;/h2&gt;

&lt;p&gt;That’s why I started working on a framework I call Compose Entity.&lt;br&gt;
The concept is simple:&lt;/p&gt;

&lt;p&gt;you define an entity,&lt;/p&gt;

&lt;p&gt;and everything else — the SQLite table, DAO, repository, default form and navigation — is generated for you.&lt;/p&gt;

&lt;p&gt;You can still customize forms with your own Composables if you want, but you don’t have to.&lt;/p&gt;
&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@CeEntity(tableName = "person")
@CeGenerator(type = GeneratorType.Reference, generationLevel = GenerationLevel.UI,
    hasDetails = true, detailsEntityClass = DetailsPersonInfo::class)
@CeCreateTable(tableName = "person")
data class RefPersones(
    override var id: Long,
    override var date: Long,
    override var name: String,
    override var isMarkedForDeletion: Boolean,
    @CeField(type = FieldTypeHelper.NUMBER, label = "Age", placeHolder = "Select Age")
    var age:Int,
    @CeField(related = true, relatedEntityClass = RefGroupes::class, type = FieldTypeHelper.SELECT, extName = "groupe",
        label = "Groupe", placeHolder = "Select Groupe of the person")
    var groupeId: Long
): CommonReferenceEntity(id, date, name, isMarkedForDeletion){
    override fun toString(): String {
        return "$id: $name"
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;From just this definition, I immediately get a database table, DAO, repository, and a working UI form for add/edit/delete.&lt;/p&gt;
&lt;h2&gt;
  
  
  Migrations
&lt;/h2&gt;

&lt;p&gt;This part was important to me.&lt;br&gt;
In systems like Room, migrations can feel unpredictable.&lt;br&gt;
&lt;strong&gt;So Compose Entity works like this:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;new tables are created automatically,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;changes to existing tables (adding/removing fields) require you to write your own ALTER TABLE.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It may sound like less automation, but the benefit is:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;no surprises,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;full control over how data evolves,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;compile-time checks that entities always match the DB schema.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Why I’m sharing this
&lt;/h2&gt;

&lt;p&gt;For me, this cuts down boilerplate by ~90%.&lt;br&gt;
I can test an idea in minutes, not days.&lt;br&gt;
It feels much closer to the workflow I loved in Oracle, SAP, and 1C.&lt;/p&gt;

&lt;p&gt;I’m sharing it here because I want to hear feedback:&lt;/p&gt;

&lt;p&gt;Do you think this approach makes sense?&lt;/p&gt;

&lt;p&gt;Would you find it useful in your Android projects?&lt;/p&gt;

&lt;p&gt;Or do you prefer writing everything manually for maximum control?&lt;/p&gt;



&lt;p&gt;Create Android project with yours name and packaje: &lt;a href="https://cetempl.homeclub.top/" rel="noopener noreferrer"&gt;https://cetempl.homeclub.top/&lt;/a&gt;&lt;br&gt;
Full example of Compose Entity based app: &lt;a href="https://github.com/SergeyBoboshko/CePowerPaymentBook" rel="noopener noreferrer"&gt;https://github.com/SergeyBoboshko/CePowerPaymentBook&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Watch this short video about how it works
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/KY_wtlVK8BE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>programming</category>
      <category>kotlin</category>
      <category>jetpack</category>
      <category>compose</category>
    </item>
    <item>
      <title>Building SQLite Apps Faster with Jetpack Compose and Compose Entity</title>
      <dc:creator>Serhii Boboshko</dc:creator>
      <pubDate>Mon, 18 Aug 2025 19:58:50 +0000</pubDate>
      <link>https://forem.com/__a7876a767b/building-sqlite-apps-faster-with-jetpack-compose-and-compose-entity-53gk</link>
      <guid>https://forem.com/__a7876a767b/building-sqlite-apps-faster-with-jetpack-compose-and-compose-entity-53gk</guid>
      <description>&lt;h1&gt;
  
  
  Building SQLite Apps Faster with Jetpack Compose and Compose Entity
&lt;/h1&gt;

&lt;p&gt;Working with persistent storage in Android often follows the same routine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define SQLite tables.&lt;/li&gt;
&lt;li&gt;Add DAOs, repositories, and ViewModels.&lt;/li&gt;
&lt;li&gt;Build UI forms manually.&lt;/li&gt;
&lt;li&gt;Manage migrations over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach is repetitive and time-consuming.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Usual Workflow (Room + Compose)
&lt;/h2&gt;

&lt;p&gt;A standard setup usually requires:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Declaring an &lt;code&gt;Entity&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Writing a &lt;code&gt;Dao&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Creating a &lt;code&gt;Repository&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Implementing a &lt;code&gt;ViewModel&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Designing Composables for forms.&lt;/li&gt;
&lt;li&gt;Handling navigation and data persistence manually.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every project starts here, and the boilerplate adds up quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Compose Entity as an Alternative
&lt;/h2&gt;

&lt;p&gt;Compose Entity provides a higher-level abstraction over Jetpack Compose and SQLite. Its main features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic CRUD form generation.&lt;/li&gt;
&lt;li&gt;Predefined repositories and ViewModels.&lt;/li&gt;
&lt;li&gt;Automatic database migrations.&lt;/li&gt;
&lt;li&gt;Support for extending generated forms with custom composables.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is that a working database + UI setup can be achieved by simply defining the data model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example: Defining an Entity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nd"&gt;@CeEntity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tableName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"person"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@CeGenerator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GeneratorType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Reference&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;generationLevel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GenerationLevel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;hasDetails&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;detailsEntityClass&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DetailsPersonInfo&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@CeCreateTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tableName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"person"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;data class&lt;/span&gt; &lt;span class="nc"&gt;RefPersones&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;isMarkedForDeletion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nd"&gt;@CeField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FieldTypeHelper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Age"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;placeHolder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Select Age"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nd"&gt;@CeField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;related&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;relatedEntityClass&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RefGroupes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FieldTypeHelper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SELECT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;extName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"groupe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Groupe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;placeHolder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Select Groupe of the person"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;groupeId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;CommonReferenceEntity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;isMarkedForDeletion&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"$id: $name"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compose Entity will then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate the underlying SQLite table.&lt;/li&gt;
&lt;li&gt;Create a DAO and repository.&lt;/li&gt;
&lt;li&gt;Provide a default form for adding, editing, and deleting records.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Database Migrations
&lt;/h2&gt;

&lt;p&gt;Schema evolution is one of the most error-prone parts of working with Room. Compose Entity handles this automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding fields → generates &lt;code&gt;ALTER TABLE&lt;/code&gt; statements.&lt;/li&gt;
&lt;li&gt;Removing fields → creates a safe copy, transfers the data, and rebuilds the table.&lt;/li&gt;
&lt;li&gt;Strict version checks prevent silent data corruption.&lt;/li&gt;
&lt;li&gt;All migrations are tracked in structured history for reliability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This removes much of the manual work in keeping a schema aligned with your entities.&lt;/p&gt;




&lt;h2&gt;
  
  
  UI Extensibility
&lt;/h2&gt;

&lt;p&gt;Auto-generated forms provide a functional default, but they are not restrictive. Developers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inject custom composables into generated screens.&lt;/li&gt;
&lt;li&gt;Combine automatic layouts with custom UI when more control is needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it possible to balance rapid development with project-specific design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Benefits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Boilerplate reduction of up to 90 percent.&lt;/li&gt;
&lt;li&gt;Projects can be prototyped in minutes.&lt;/li&gt;
&lt;li&gt;Suitable for quick experiments, internal tools, and production use.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;To generate a project with Compose Entity, visit:&lt;br&gt;
&lt;a href="https://cetempl.homeclub.top/" rel="noopener noreferrer"&gt;https://cetempl.homeclub.top/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can download a ready-made Android Studio project with your chosen package name and application name. It is fully configured and ready to run.&lt;/p&gt;

&lt;p&gt;The main page also includes a manual and several examples to explore.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/KY_wtlVK8BE" rel="noopener noreferrer"&gt;https://youtu.be/KY_wtlVK8BE&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>jetpackcompose</category>
      <category>composeentity</category>
    </item>
  </channel>
</rss>
