Cubiq
engineering.mdРеализация

Реализация

Cubiq изнутри

Native Android: Kotlin / Jetpack Compose, собственный OpenGL ES 3.0 renderer и lesson-constrained solver. Modular architecture: feature → domain ← data.

Срез проекта

строк исходников и текстовых ресурсов
740 244
модулей приложения
39
физических строк Kotlin вне тестов
136 019
языковых варианта
42
объявлений тестовtest* / androidTest* · @Test
1 624

stack.kt

Android-стек

Срез проекта
Kotlin2.4.21
Compose BOM2026.09.00
Material 31.5.0-beta01
Adaptive1.3.0
Navigation 31.2.0
AGP9.4.1
KSP2.3.12
Gradle9.7.0
  • Kotlin
  • Jetpack Compose
  • Material 3
  • Adaptive
  • Navigation 3

Compose UI / Material 3; Adaptive / WindowSizeClass; Navigation 3 / saved back stacks. Coroutines / Flow для UDF-state, Hilt для DI. Версии зафиксированы в Gradle version catalog.

architecture.kt

Архитектура модулей

app01Hilt / DI
feature07Compose / ViewModel
  • onboarding
  • learning
  • lesson
  • practice
  • progress
  • settings
  • events
domain07contracts / use cases
  • learning
  • lesson
  • practice
  • portability
  • progress
  • settings
  • events
data09repositories / storage
  • content
  • storage
  • learning
  • lesson
  • practice
  • portability
  • progress
  • settings
  • events
core14UI kit / cube / solver
  • common
  • model
  • designsystem
  • uikit
  • navigation
  • analytics
  • crashlytics
  • ads
  • billing
  • push
  • hardware
  • cube
  • scrambleimage
  • solver
baselineprofile01startup / frame timing

feature → domain ← data

modulesΣ 39
  • app1
  • baselineprofile1
  • core14
  • data9
  • domain7
  • feature7
Kotlin · physical LOCΣ 136 019
feature
82 86360.9%
core
21 16715.6%
data
14 34110.5%
app
9 5147.0%
domain
6 7595.0%
buildSrc
9610.7%
baselineprofile
4140.3%

Основное направление dependencies: feature → domain ← data. app — composition root / Hilt; core — shared UI, cube, solver, provider facades. Lesson runtime использует process-local cache; Room хранит history / progress, DataStore — settings.

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

Android UX: реализация

Compose, adaptive layouts, edge-to-edge и Predictive Back. Реализованные подходы из рекомендаций Google Apps Experience Program.

Adaptive layout
WindowSizeClass: нижняя навигация на compact width, side rail на широких окнах. Lesson screen: theory / practice panes.
Navigation / insets
Navigation 3: saved back stacks, predictive-pop transitions. Edge-to-edge: SystemBarStyle и потребление WindowInsets для системных панелей и IME.
Accessibility
Selectable semantics, TalkBack labels и keyboard focus в навигации. При крупном fontScale названия разделов остаются в accessibility semantics.
Рекомендации Google · Apps Experience Program
OpenGL ES 3.0

engine.glsl

Procedural 3D renderer

moving cubies
26
facelets
54
meshes
8
triangles
2 964

GLSL / PBR: normal mapping, roughness, clear coat, environment lighting. Animation state согласован с cube state; обратный шаг применяет inverse move. Camera framing учитывает UI-панели.

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

Cube state / formula playback

Typed notation преобразуется в ходы и согласованные состояния куба. Очередь renderer анимирует повороты слоёв, сохраняя piece / facelet identities. Формула проигрывается как последовательность реальных ходов, с play / pause и настройкой темпа.

  1. Notation
  2. Cube state
  3. Move queue
  4. OpenGL ES 3.0

Step forward анимирует новый ход; step back — inverse move. Seek восстанавливает базовую сцену и целевую последовательность. Cancellation останавливает выдачу следующих ходов, уже начатый поворот завершается. EGL lifecycle обрабатывает pause / release; при недоступном GL остаётся путь обучения без 3D.

solver.kt

Lesson-constrained solver

  • BFS
  • Beam search
  • F2L

Собственный решатель строит решение из формул и вспомогательных ходов текущего урока. SolverRequest: cube state, target pieces, locked targets, allowed formulas, cases и orientation. Планировщик соблюдает порядок учебных целей и защищает уже собранные детали.

Phase-specific planning: bounded BFS, beam search и F2L case recognition. Validation проверяет состав деталей, flips / twists и permutation parity. Search policy ограничивает depth / beam width. Смена урока отменяет поиск и не допускает устаревший результат.

Результат — PracticePlan: шаги, formula references, display timeline и execution timeline. Пояснение сохраняет учебную ориентацию; engine получает полную последовательность исполнения. Outcomes: plan / solved / invalid input / no constrained path.

  1. Состояние куба
  2. Проверка модели
  3. Учебный план
  4. 3D-практика

content.md

Content / build pipeline

756 Markdown-документов, 336 локализованных practice-сценариев, 316 WebP-иллюстраций. Gradle валидирует локали и asset references. Authoring: Blender / Cycles; runtime geometry генерируется отдельно.

workflow.md

Docs as code / agent workflow

AGENTS.md
48
README.md
16

Репозиторий организован для агентской разработки: иерархия AGENTS.md задаёт ownership, архитектурные ограничения и validation gates; README.md описывают контракты модулей, KDoc — API и инварианты.

Architecture / design / localization contracts версионируются рядом с кодом. PLAN.md фиксирует scope и handoff; изменения контрактов обновляют owner docs. Проверки и generation выполняются через Gradle; CI собирает обе store-версии.

physical text linesΣ 740 244
Resources / localization
399 56854.0%
Kotlin · non-test
136 01918.4%
Lesson Markdown
132 64217.9%
Kotlin · JVM tests
46 6456.3%
Kotlin · Android tests
13 6361.8%
Build tooling / web
8 9851.2%
Documentation
2 7490.4%
Tests / release gates

JVM: cube invariants, constrained solver, persistence, import и cancellation. Android: UI semantics. Release gates: две store-версии, R8, APK/AAB, checksums, native library alignment для 16 KB pages.

Kotlin: physical LOC, включая comments / blank lines, buildSrc и benchmarks; test source sets исключены. Tests: 1 343 JVM + 281 Android declarations, не executions. Документы включают fallback; наличие scenario не означает практику в каждом уроке.

baselineprofile · @Test
3

Total text: physical lines в tracked UTF-8 исходниках, тестах, XML/JSON-ресурсах, Markdown-контенте, локализации, документации, build tooling и web source. Включены comments / blank lines и копии локалей. Исключены media, generated/build output, vendor code, service config и временный PLAN.md. Это объём текстовых входов проекта, а не executable LOC.

Знакомство с Cubiq