diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts
new file mode 100644
index 0000000..6baa214
--- /dev/null
+++ b/androidApp/build.gradle.kts
@@ -0,0 +1,38 @@
+plugins {
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.compose.multiplatform)
+ alias(libs.plugins.compose.compiler)
+}
+
+android {
+ namespace = "com.avinal.memos"
+ compileSdk = 36
+
+ defaultConfig {
+ applicationId = "com.avinal.memos"
+ minSdk = 26
+ targetSdk = 36
+ versionCode = 1
+ versionName = "1.0.0"
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = true
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+ }
+}
+
+dependencies {
+ implementation(project(":composeApp"))
+ implementation(libs.androidx.activity.compose)
+}
diff --git a/androidApp/proguard-rules.pro b/androidApp/proguard-rules.pro
new file mode 100644
index 0000000..992e329
--- /dev/null
+++ b/androidApp/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Ktor
+-keep class io.ktor.** { *; }
+-dontwarn io.ktor.**
+
+# kotlinx.serialization
+-keepattributes *Annotation*, InnerClasses
+-dontnote kotlinx.serialization.AnnotationsKt
+-keepclassmembers class kotlinx.serialization.json.** { *** Companion; }
+-keepclasseswithmembers class kotlinx.serialization.json.** { kotlinx.serialization.KSerializer serializer(...); }
+-keep,includedescriptorclasses class com.avinal.memos.**$$serializer { *; }
+-keepclassmembers class com.avinal.memos.** { *** Companion; }
+-keepclasseswithmembers class com.avinal.memos.** { kotlinx.serialization.KSerializer serializer(...); }
+
+# Room
+-keep class * extends androidx.room.RoomDatabase
+-keep @androidx.room.Entity class *
+-dontwarn androidx.room.paging.**
diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..c5733aa
--- /dev/null
+++ b/androidApp/src/main/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/androidApp/src/main/res/drawable/ic_launcher_background.xml b/androidApp/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/androidApp/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/androidApp/src/main/res/drawable/ic_launcher_foreground.xml b/androidApp/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/androidApp/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/androidApp/src/main/res/mipmap-anydpi/ic_launcher.xml b/androidApp/src/main/res/mipmap-anydpi/ic_launcher.xml
new file mode 100644
index 0000000..6f3b755
--- /dev/null
+++ b/androidApp/src/main/res/mipmap-anydpi/ic_launcher.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/androidApp/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/androidApp/src/main/res/mipmap-anydpi/ic_launcher_round.xml
new file mode 100644
index 0000000..6f3b755
--- /dev/null
+++ b/androidApp/src/main/res/mipmap-anydpi/ic_launcher_round.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/androidApp/src/main/res/mipmap-hdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
Binary files /dev/null and b/androidApp/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
Binary files /dev/null and b/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/androidApp/src/main/res/mipmap-mdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
Binary files /dev/null and b/androidApp/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
Binary files /dev/null and b/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
Binary files /dev/null and b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
Binary files /dev/null and b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/androidApp/src/main/res/values-night/themes.xml b/androidApp/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..bcaec65
--- /dev/null
+++ b/androidApp/src/main/res/values-night/themes.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/androidApp/src/main/res/values/colors.xml b/androidApp/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/androidApp/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml
new file mode 100644
index 0000000..b7c68c5
--- /dev/null
+++ b/androidApp/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Memos App
+
\ No newline at end of file
diff --git a/androidApp/src/main/res/values/themes.xml b/androidApp/src/main/res/values/themes.xml
new file mode 100644
index 0000000..bcaec65
--- /dev/null
+++ b/androidApp/src/main/res/values/themes.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/androidApp/src/main/res/xml/backup_rules.xml b/androidApp/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000..4df9255
--- /dev/null
+++ b/androidApp/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/androidApp/src/main/res/xml/data_extraction_rules.xml b/androidApp/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000..9ee9997
--- /dev/null
+++ b/androidApp/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts
new file mode 100644
index 0000000..34f1343
--- /dev/null
+++ b/composeApp/build.gradle.kts
@@ -0,0 +1,82 @@
+import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+
+plugins {
+ alias(libs.plugins.kotlin.multiplatform)
+ alias(libs.plugins.android.kmp.library)
+ alias(libs.plugins.compose.multiplatform)
+ alias(libs.plugins.compose.compiler)
+ alias(libs.plugins.kotlin.serialization)
+ alias(libs.plugins.ksp)
+ alias(libs.plugins.room)
+}
+
+kotlin {
+ @Suppress("DEPRECATION")
+ androidLibrary {
+ namespace = "com.avinal.memos.shared"
+ compileSdk = 36
+ minSdk = 26
+
+ compilerOptions {
+ jvmTarget.set(JvmTarget.JVM_11)
+ }
+ }
+
+ listOf(
+ iosArm64(),
+ iosSimulatorArm64()
+ ).forEach { iosTarget ->
+ iosTarget.binaries.framework {
+ baseName = "ComposeApp"
+ isStatic = true
+ }
+ }
+
+ sourceSets {
+ commonMain.dependencies {
+ implementation(compose.runtime)
+ implementation(compose.foundation)
+ implementation(compose.material3)
+ implementation(compose.materialIconsExtended)
+ implementation(compose.ui)
+ implementation(compose.components.resources)
+
+ implementation(libs.androidx.lifecycle.viewmodel)
+ implementation(libs.androidx.navigation.compose)
+ implementation(libs.androidx.datastore.preferences)
+ implementation(libs.kotlinx.coroutines.core)
+ implementation(libs.kotlinx.serialization.json)
+ implementation(libs.kotlinx.datetime)
+
+ implementation(libs.ktor.client.core)
+ implementation(libs.ktor.client.content.negotiation)
+ implementation(libs.ktor.serialization.kotlinx.json)
+
+ implementation(libs.coil.compose)
+ implementation(libs.coil.network.ktor)
+
+ implementation(libs.room.runtime)
+ implementation(libs.sqlite.bundled)
+ }
+
+ androidMain.dependencies {
+ implementation(libs.kotlinx.coroutines.android)
+ implementation(libs.ktor.client.okhttp)
+ implementation(libs.androidx.work.runtime)
+ }
+
+ iosMain.dependencies {
+ implementation(libs.ktor.client.darwin)
+ }
+ }
+}
+
+room {
+ schemaDirectory("$projectDir/schemas")
+}
+
+dependencies {
+ add("kspAndroid", libs.room.compiler)
+ add("kspIosSimulatorArm64", libs.room.compiler)
+ add("kspIosArm64", libs.room.compiler)
+}
diff --git a/composeApp/src/androidMain/kotlin/com/avinal/memos/Platform.android.kt b/composeApp/src/androidMain/kotlin/com/avinal/memos/Platform.android.kt
new file mode 100644
index 0000000..bccb6c2
--- /dev/null
+++ b/composeApp/src/androidMain/kotlin/com/avinal/memos/Platform.android.kt
@@ -0,0 +1,3 @@
+package com.avinal.memos
+
+actual fun getPlatformName(): String = "Android"
diff --git a/composeApp/src/commonMain/kotlin/com/avinal/memos/Platform.kt b/composeApp/src/commonMain/kotlin/com/avinal/memos/Platform.kt
new file mode 100644
index 0000000..501a352
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/com/avinal/memos/Platform.kt
@@ -0,0 +1,3 @@
+package com.avinal.memos
+
+expect fun getPlatformName(): String
diff --git a/composeApp/src/iosMain/kotlin/com/avinal/memos/MainViewController.kt b/composeApp/src/iosMain/kotlin/com/avinal/memos/MainViewController.kt
new file mode 100644
index 0000000..5e3fec2
--- /dev/null
+++ b/composeApp/src/iosMain/kotlin/com/avinal/memos/MainViewController.kt
@@ -0,0 +1,5 @@
+package com.avinal.memos
+
+import androidx.compose.ui.window.ComposeUIViewController
+
+fun MainViewController() = ComposeUIViewController { App() }
diff --git a/composeApp/src/iosMain/kotlin/com/avinal/memos/Platform.ios.kt b/composeApp/src/iosMain/kotlin/com/avinal/memos/Platform.ios.kt
new file mode 100644
index 0000000..e248b52
--- /dev/null
+++ b/composeApp/src/iosMain/kotlin/com/avinal/memos/Platform.ios.kt
@@ -0,0 +1,6 @@
+package com.avinal.memos
+
+import platform.UIKit.UIDevice
+
+actual fun getPlatformName(): String =
+ UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion