Skip to content

Commit 27966c1

Browse files
committed
initial commit
0 parents  commit 27966c1

30 files changed

+1196
-0
lines changed

.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
*.iml
2+
.gradle
3+
/local.properties
4+
/keystore.properties
5+
*.keystore
6+
/.idea
7+
.DS_Store
8+
/build
9+
/app/build

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Holger Nestmann
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Mini Notes
2+
3+
A minimal notes app optimized for e-ink displays (600×800), such as the Minimal Phone.
4+
5+
Mostly created by cursor composer model
6+
7+
## Features
8+
9+
- **E-ink optimized**: Monochrome UI, no animations, high contrast
10+
- **Simple**: Create, edit, and delete notes (no title—just type)
11+
- **Markdown files**: Notes saved as `.md` files in app storage
12+
- **WebDAV sync**: Optional cloud sync (Nextcloud, etc.) via Settings
13+
14+
## Build
15+
16+
```bash
17+
# Ensure ANDROID_HOME is set (or create local.properties with sdk.dir)
18+
./gradlew assembleDebug
19+
```
20+
21+
APK output: `app/build/outputs/apk/debug/app-debug.apk`
22+
23+
### Release build
24+
25+
1. Create a keystore (one-time):
26+
```bash
27+
keytool -genkey -v -keystore release.keystore -alias mininotes -keyalg RSA -keysize 2048 -validity 10000
28+
```
29+
30+
2. Copy `keystore.properties.example` to `keystore.properties` and fill in your keystore details.
31+
32+
3. Build the release APK:
33+
```bash
34+
./gradlew assembleRelease
35+
```
36+
37+
Output: `app/build/outputs/apk/release/app-release.apk`
38+
39+
## Install on device
40+
41+
```bash
42+
adb install app/build/outputs/apk/debug/app-debug.apk
43+
# or for release:
44+
adb install app/build/outputs/apk/release/app-release.apk
45+
```
46+
47+
## GitHub Release
48+
49+
1. Create a new repository on GitHub and push your code.
50+
51+
2. Create a release:
52+
- Go to **Releases****Create a new release**
53+
- Tag: `v1.0` (or your version)
54+
- Title: e.g. `v1.0`
55+
56+
3. Build the release APK locally, then upload `app-release.apk` as an asset.
57+
58+
4. For automated releases, add a GitHub Action (e.g. `.github/workflows/release.yml`) that builds on tag push. Note: signing in CI requires storing the keystore as a GitHub secret.
59+
60+
## WebDAV Sync
61+
62+
1. Open **Settings** (gear icon on the notes list)
63+
2. Enter your WebDAV folder URL (e.g. `https://cloud.example.com/remote.php/dav/files/user/Notes/`)
64+
3. Enter username and password (HTTP Basic auth)
65+
4. Tap **Save**, then **Sync Now**
66+
67+
Sync runs automatically on app start and when you tap Sync. Notes auto-upload 5 seconds after you stop typing.
68+
69+
## Design
70+
71+
- Black & white only
72+
- Monochrome vector icons
73+
- No animations or transitions
74+
- Layout tuned for 600×800 e-ink displays

app/build.gradle.kts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
plugins {
2+
id("com.android.application")
3+
id("org.jetbrains.kotlin.android")
4+
}
5+
6+
val keystorePropertiesFile = rootProject.file("keystore.properties")
7+
val hasReleaseSigning = keystorePropertiesFile.exists()
8+
9+
android {
10+
namespace = "com.mininotes.app"
11+
compileSdk = 34
12+
13+
defaultConfig {
14+
applicationId = "com.mininotes.app"
15+
minSdk = 26
16+
targetSdk = 34
17+
versionCode = 1
18+
versionName = "1.0"
19+
}
20+
21+
signingConfigs {
22+
if (hasReleaseSigning) {
23+
create("release") {
24+
val keystoreProperties = java.util.Properties()
25+
keystoreProperties.load(keystorePropertiesFile.inputStream())
26+
storeFile = rootProject.file(keystoreProperties["storeFile"] as String)
27+
storePassword = keystoreProperties["storePassword"] as String
28+
keyAlias = keystoreProperties["keyAlias"] as String
29+
keyPassword = keystoreProperties["keyPassword"] as String
30+
}
31+
}
32+
}
33+
34+
buildTypes {
35+
release {
36+
isMinifyEnabled = false
37+
if (hasReleaseSigning) {
38+
signingConfig = signingConfigs.getByName("release")
39+
}
40+
}
41+
}
42+
compileOptions {
43+
sourceCompatibility = JavaVersion.VERSION_17
44+
targetCompatibility = JavaVersion.VERSION_17
45+
}
46+
kotlinOptions {
47+
jvmTarget = "17"
48+
}
49+
buildFeatures {
50+
compose = true
51+
}
52+
composeOptions {
53+
kotlinCompilerExtensionVersion = "1.5.5"
54+
}
55+
}
56+
57+
dependencies {
58+
implementation("androidx.core:core-ktx:1.12.0")
59+
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
60+
implementation("androidx.activity:activity-compose:1.8.1")
61+
implementation(platform("androidx.compose:compose-bom:2023.10.01"))
62+
implementation("androidx.compose.ui:ui")
63+
implementation("androidx.compose.ui:ui-graphics")
64+
implementation("androidx.compose.ui:ui-tooling-preview")
65+
implementation("androidx.compose.material3:material3")
66+
implementation("com.github.thegrizzlylabs:sardine-android:v0.9")
67+
}

app/src/main/AndroidManifest.xml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
3+
<uses-permission android:name="android.permission.INTERNET" />
4+
<application
5+
android:allowBackup="true"
6+
android:icon="@mipmap/ic_launcher"
7+
android:label="@string/app_name"
8+
android:roundIcon="@mipmap/ic_launcher_round"
9+
android:supportsRtl="true"
10+
android:theme="@style/Theme.MiniNotes">
11+
<activity
12+
android:name=".MainActivity"
13+
android:exported="true"
14+
android:theme="@style/Theme.MiniNotes"
15+
android:windowSoftInputMode="adjustResize">
16+
<intent-filter>
17+
<action android:name="android.intent.action.MAIN" />
18+
<category android:name="android.intent.category.LAUNCHER" />
19+
</intent-filter>
20+
</activity>
21+
</application>
22+
</manifest>

0 commit comments

Comments
 (0)