Skip to content

Bootstrap modular MarkDroid architecture with markdown domain core and Compose feature scaffolding#1

Merged
JavCaRR merged 2 commits into
mainfrom
copilot/markdown-editor-app
Jul 7, 2026
Merged

Bootstrap modular MarkDroid architecture with markdown domain core and Compose feature scaffolding#1
JavCaRR merged 2 commits into
mainfrom
copilot/markdown-editor-app

Conversation

Copilot AI commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Se propone una base extensible para un editor Markdown Android tipo Obsidian: Material 3 + Compose, edición WYSIWYG/fuente, [[links]], YAML frontmatter, exploración por vistas múltiples y operaciones Git simples sobre carpeta local. El enfoque prioriza modularidad para incorporar funcionalidades futuras sin acoplamiento fuerte.

  • Arquitectura modular (extensible por diseño)

    • Se inicializa un build multi-módulo con :core:domain como núcleo reutilizable.
    • Se documenta la separación de responsabilidades para escalar UI, sync, índice y features futuras sin reescrituras.
  • Núcleo markdown/git en core:domain

    • MarkdownParser: parseo de frontmatter YAML + body.
    • WikiLinkParser: extracción de [[...]].
    • DocumentGraphBuilder: nodos/aristas a partir de wiki links.
    • FolderViews.groupAsKanban(...): agrupación por propiedad YAML seleccionable.
    • GitCommandFactory: acciones simples (status, pull, commit, push) mapeadas a comandos.
  • Scaffold de producto en Compose (app)

    • Pantallas base para Editor / Archivos / Grafo / Git.
    • Editor con toggle WYSIWYG vs Fuente (monoespaciado) y barra cápsula de formato (H1, bold, italic, lista, wiki link).
    • Exploración de archivos con modos: lista, tabla, kanban, galería.
    • Vista de grafo estilo Obsidian como base visual inicial.
  • Cobertura inicial de comportamiento crítico

    • Tests unitarios en dominio para YAML, wiki links, kanban por propiedad y construcción de grafo.
val doc = MarkdownParser.parse(
    "Notas/Bienvenida.md",
    """
    ---
    estado: Todo
    owner: JavCaRR
    ---
    Conecta con [[Ideas]] y [[Tareas]]
    """.trimIndent()
)

val links = WikiLinkParser.extractLinks(doc.body) // ["Ideas", "Tareas"]
val board = FolderViews.groupAsKanban(listOf(doc), "estado") // "Todo" -> [doc]
Original prompt

Quiero crear una app para android con material design 3 y jetpack compose que sea un editor de markdown tipo WYSIWYG que tenga sincronizacion con git y permita el manejo de git por medio de botones sencillos, ademas debe permitir una vista de las carpetas y archivos de forma jerarquica y también el uso de [[links]] asi como un graph tipo obsidian para poder ver de forma facil todos los documentos, todas las funcionalidades deben ser modulares para que si en un futuro se desean añadir mas funciones sea algo muy sencillo de añadir

la aplicación sincroniza todo a una carpeta local tal como lo hace obsidian hay que evitar al maximo posible crear archivos adicionales dentro de esa carpeta

el editor de texto debe ser tipo WYSIWYG, pero tambien debe haber una opción para pasar a un modo de "fuente" donde con texto monoespaciado muestre todo el marcado de markdown

asimismo el editor debe contar con una barra tipo capsula con diferentes opciones como Titulos, negritas, cursiva, etc justo encima del teclado del telefono.

las notas en su encabezado deben admitir estructura de YAML para poder añadir propiedades a cada archivo.

el usuario podra dar click sobre una carpeta para ver su contenido en vistas de:

  • LISTA SIMPLE
  • TABLA
  • KANBAN (PERMITIENDOLE SELECCIONAR LA PROPIEDAD DEL ARCHIVO PARA LAS COLUMNAS)
  • GALERIA (CUADRITOS)

quiza sea necesario hacer un indice por carpeta en un archivo secundario a modo de cache para cada carpeta pero si ves una forma de hacerlo mas eficiente sin necesidad de bases de datos complejas hazmelo saber

RECUERDA DEBE SER CODIGO LIMPIO MANTENIBLE MODULAR Y SOBRETODO EXTENSIBLE EN UN FUTURO

MUCHAS GRACIAS!!!!

Copilot AI changed the title [WIP] Add WYSIWYG markdown editor with Git integration Bootstrap modular MarkDroid architecture with markdown domain core and Compose feature scaffolding Jul 7, 2026
Copilot AI requested a review from JavCaRR July 7, 2026 15:31
@JavCaRR JavCaRR marked this pull request as ready for review July 7, 2026 15:32
Copilot AI review requested due to automatic review settings July 7, 2026 15:32
@JavCaRR JavCaRR merged commit 338af32 into main Jul 7, 2026
1 check passed
@JavCaRR JavCaRR deleted the copilot/markdown-editor-app branch July 7, 2026 15:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Bootstraps a modular multi-module Gradle project for MarkDroid, introducing a reusable :core:domain markdown/git domain layer and an initial Jetpack Compose :app scaffold (Editor/Files/Graph/Git) to serve as an extensible Obsidian-like foundation.

Changes:

  • Added multi-module Gradle scaffolding, wrapper scripts, and baseline project documentation.
  • Implemented core domain utilities (YAML-ish frontmatter parsing, [[wikilinks]] extraction, kanban grouping, and document graph building) plus unit tests.
  • Added a Compose-based MVP UI scaffold demonstrating editor modes, folder views, graph canvas, and git action buttons.

Reviewed changes

Copilot reviewed 24 out of 27 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
settings.gradle.kts Defines plugin/dependency repositories and includes modules for the multi-module build.
README.md Documents MVP scope, module separation, and basic build/test commands.
gradlew.bat Adds Gradle wrapper script for Windows.
gradlew Adds Gradle wrapper script for POSIX shells.
gradle/wrapper/gradle-wrapper.properties Pins Gradle wrapper distribution (Gradle 8.7).
gradle/libs.versions.toml Introduces a version catalog file (currently placeholder).
gradle.properties Sets Gradle/AndroidX/Kotlin and configuration cache properties.
core/domain/build.gradle.kts Configures Kotlin/JVM domain module and test setup.
build.gradle.kts Root build plugins declaration for the multi-module build.
core/domain/src/main/kotlin/com/javcarr/markdroid/domain/WikiLinkParser.kt Implements wiki link extraction.
core/domain/src/main/kotlin/com/javcarr/markdroid/domain/MarkdownParser.kt Implements frontmatter/body parsing.
core/domain/src/main/kotlin/com/javcarr/markdroid/domain/MarkdownModels.kt Adds shared domain models (docs, view modes, graph models).
core/domain/src/main/kotlin/com/javcarr/markdroid/domain/GitSync.kt Adds git action → command mapping (domain abstraction).
core/domain/src/main/kotlin/com/javcarr/markdroid/domain/FolderViews.kt Implements kanban grouping by YAML property.
core/domain/src/main/kotlin/com/javcarr/markdroid/domain/DocumentGraphBuilder.kt Builds a document graph from wiki links.
core/domain/src/test/kotlin/com/javcarr/markdroid/domain/WikiLinkParserTest.kt Unit tests for wiki link extraction.
core/domain/src/test/kotlin/com/javcarr/markdroid/domain/MarkdownParserTest.kt Unit tests for frontmatter/body parsing.
core/domain/src/test/kotlin/com/javcarr/markdroid/domain/FolderViewsTest.kt Unit tests for kanban grouping behavior.
core/domain/src/test/kotlin/com/javcarr/markdroid/domain/DocumentGraphBuilderTest.kt Unit tests for graph build behavior.
app/build.gradle.kts Configures Android/Compose app module and depends on :core:domain.
app/src/main/AndroidManifest.xml Declares the application and launcher activity.
app/src/main/java/com/javcarr/markdroid/MainActivity.kt Compose MVP screens for Editor/Files/Graph/Git and demo wiring to domain.
app/src/main/res/values/themes.xml Defines a Material 3 theme.
app/proguard-rules.pro Adds initial ProGuard rules placeholder.
.gitignore Adds initial ignore rules for Gradle/Kotlin artifacts.
.gitattributes Normalizes line endings for wrapper scripts and .bat files.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread settings.gradle.kts
Comment on lines +1 to +13
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
}
}

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
}
}
Comment thread settings.gradle.kts
Comment on lines +15 to +16
rootProject.name = "MarkDroid"
include(":core:domain")
Comment on lines +13 to +15
tasks.test {
useJUnitPlatform()
}
Comment on lines +23 to +27
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.verticalScroll
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.javcarr.markdroid" xmlns:android="http://schemas.android.com/apk/res/android">
Comment on lines +16 to +22
fun from(action: GitAction, commitMessage: String = "Update notes"): GitCommand {
val command = when (action) {
GitAction.STATUS -> "git status --short"
GitAction.PULL -> "git pull --rebase"
GitAction.COMMIT -> "git add -A && git commit -m \"$commitMessage\""
GitAction.PUSH -> "git push"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants