Initial commit: Simple Notes Sync project setup
Features: - Docker WebDAV server with docker-compose - Server configuration with .env - Project structure for Android app - Complete documentation references - MIT License Server: - bytemark/webdav Docker image - Basic authentication - Port 8080 exposed - Volume mounts for data and logs - Quick start README Android: - Project structure defined - README with setup instructions - Links to complete implementation guide Status: Server running and tested ✓ Next: Android app implementation in Android Studio
This commit is contained in:
39
.gitignore
vendored
Normal file
39
.gitignore
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Server
|
||||||
|
server/.env
|
||||||
|
server/notes-data/
|
||||||
|
server/logs/
|
||||||
|
|
||||||
|
# Android
|
||||||
|
android/.gradle/
|
||||||
|
android/.idea/
|
||||||
|
android/local.properties
|
||||||
|
android/build/
|
||||||
|
android/*/build/
|
||||||
|
android/.DS_Store
|
||||||
|
android/captures/
|
||||||
|
android/*.apk
|
||||||
|
android/*.ap_
|
||||||
|
android/*.aab
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.gradle
|
||||||
|
build/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Temp
|
||||||
|
*.tmp
|
||||||
|
*.swp
|
||||||
|
*~
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2025 Simple Notes Sync
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
246
README.md
Normal file
246
README.md
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
# Simple Notes Sync
|
||||||
|
|
||||||
|
Minimalistische Offline-Notiz-App mit automatischer WLAN-Synchronisierung.
|
||||||
|
|
||||||
|
## 📱 Features
|
||||||
|
|
||||||
|
- ✅ Offline-first: Notizen lokal erstellen und bearbeiten
|
||||||
|
- ✅ Auto-Sync: Automatische Synchronisierung im Heim-WLAN
|
||||||
|
- ✅ WebDAV: Docker-basierter Server
|
||||||
|
- ✅ Simpel: Fokus auf Funktionalität
|
||||||
|
- ✅ Robust: Fehlerbehandlung und Konfliktauflösung
|
||||||
|
|
||||||
|
## 🏗️ Projekt-Struktur
|
||||||
|
|
||||||
|
```
|
||||||
|
simple-notes-sync/
|
||||||
|
├── server/ # Docker WebDAV Server
|
||||||
|
│ ├── docker-compose.yml
|
||||||
|
│ ├── .env.example
|
||||||
|
│ └── README.md
|
||||||
|
│
|
||||||
|
└── android/ # Android App (Kotlin)
|
||||||
|
└── (Android Studio Projekt)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
### 1. Server starten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd server
|
||||||
|
cp .env.example .env
|
||||||
|
nano .env # Passwort anpassen
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Server testen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -u noteuser:your_password http://localhost:8080/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Android App entwickeln
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd android
|
||||||
|
# In Android Studio öffnen
|
||||||
|
# Build & Run
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📖 Dokumentation
|
||||||
|
|
||||||
|
Vollständige Dokumentation: [project-docs/simple-notes-sync](https://github.com/inventory69/project-docs/tree/main/simple-notes-sync)
|
||||||
|
|
||||||
|
- [README.md](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/README.md) - Projekt-Übersicht
|
||||||
|
- [IMPLEMENTATION_PLAN.md](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/IMPLEMENTATION_PLAN.md) - Sprint-Plan
|
||||||
|
- [SERVER_SETUP.md](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/SERVER_SETUP.md) - Server-Setup
|
||||||
|
- [ANDROID_GUIDE.md](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/ANDROID_GUIDE.md) - Android-Entwicklung
|
||||||
|
- [NOTIFICATIONS.md](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/NOTIFICATIONS.md) - Notification-System
|
||||||
|
|
||||||
|
## ⚙️ Server Konfiguration
|
||||||
|
|
||||||
|
**Standard-Credentials:**
|
||||||
|
- Username: `noteuser`
|
||||||
|
- Password: Siehe `.env` im `server/` Verzeichnis
|
||||||
|
|
||||||
|
**Server-URL:**
|
||||||
|
- Lokal: `http://localhost:8080/`
|
||||||
|
- Im Netzwerk: `http://YOUR_IP:8080/`
|
||||||
|
|
||||||
|
IP-Adresse finden:
|
||||||
|
```bash
|
||||||
|
ip addr show | grep "inet " | grep -v 127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📱 Android App Setup
|
||||||
|
|
||||||
|
### Vorraussetzungen
|
||||||
|
|
||||||
|
- Android Studio Hedgehog (2023.1.1) oder neuer
|
||||||
|
- JDK 17
|
||||||
|
- Min SDK 24 (Android 7.0)
|
||||||
|
- Target SDK 34 (Android 14)
|
||||||
|
|
||||||
|
### In App konfigurieren
|
||||||
|
|
||||||
|
1. App starten
|
||||||
|
2. Einstellungen öffnen
|
||||||
|
3. Server-URL eintragen (z.B. `http://192.168.1.100:8080/`)
|
||||||
|
4. Username & Passwort eingeben
|
||||||
|
5. Heim-WLAN SSID eingeben
|
||||||
|
6. "Verbindung testen"
|
||||||
|
|
||||||
|
## 🔧 Entwicklung
|
||||||
|
|
||||||
|
### Server-Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Status prüfen
|
||||||
|
docker-compose ps
|
||||||
|
|
||||||
|
# Logs anschauen
|
||||||
|
docker-compose logs -f
|
||||||
|
|
||||||
|
# Neustarten
|
||||||
|
docker-compose restart
|
||||||
|
|
||||||
|
# Stoppen
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
### Android-Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd android
|
||||||
|
./gradlew assembleDebug
|
||||||
|
|
||||||
|
# APK Location:
|
||||||
|
# app/build/outputs/apk/debug/app-debug.apk
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🧪 Testing
|
||||||
|
|
||||||
|
### Server-Test
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Testdatei hochladen
|
||||||
|
echo '{"id":"test","title":"Test","content":"Hello"}' > test.json
|
||||||
|
curl -u noteuser:password -T test.json http://localhost:8080/test.json
|
||||||
|
|
||||||
|
# Datei abrufen
|
||||||
|
curl -u noteuser:password http://localhost:8080/test.json
|
||||||
|
|
||||||
|
# Datei löschen
|
||||||
|
curl -u noteuser:password -X DELETE http://localhost:8080/test.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### Android-App
|
||||||
|
|
||||||
|
1. Notiz erstellen → speichern → in Liste sichtbar ✓
|
||||||
|
2. WLAN verbinden → Auto-Sync ✓
|
||||||
|
3. Server offline → Fehlermeldung ✓
|
||||||
|
4. Konflikt-Szenario → Auflösung ✓
|
||||||
|
|
||||||
|
## 📦 Deployment
|
||||||
|
|
||||||
|
### Server (Production)
|
||||||
|
|
||||||
|
**Option 1: Lokaler Server (Raspberry Pi, etc.)**
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option 2: VPS (DigitalOcean, Hetzner, etc.)**
|
||||||
|
```bash
|
||||||
|
# Mit HTTPS (empfohlen)
|
||||||
|
# Zusätzlich: Reverse Proxy (nginx/Caddy) + Let's Encrypt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Android App
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Release Build
|
||||||
|
./gradlew assembleRelease
|
||||||
|
|
||||||
|
# APK signieren
|
||||||
|
# Play Store Upload oder Direct Install
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔐 Security
|
||||||
|
|
||||||
|
**Entwicklung:**
|
||||||
|
- ✅ HTTP Basic Auth
|
||||||
|
- ✅ Nur im lokalen Netzwerk
|
||||||
|
|
||||||
|
**Produktion:**
|
||||||
|
- ⚠️ HTTPS mit SSL/TLS (empfohlen)
|
||||||
|
- ⚠️ Starkes Passwort
|
||||||
|
- ⚠️ Firewall-Regeln
|
||||||
|
- ⚠️ VPN für externen Zugriff
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
### Server startet nicht
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Port bereits belegt?
|
||||||
|
sudo netstat -tlnp | grep 8080
|
||||||
|
|
||||||
|
# Logs checken
|
||||||
|
docker-compose logs webdav
|
||||||
|
```
|
||||||
|
|
||||||
|
### Android kann nicht verbinden
|
||||||
|
|
||||||
|
- Ist Android im gleichen WLAN?
|
||||||
|
- Ist die Server-IP korrekt?
|
||||||
|
- Firewall blockiert Port 8080?
|
||||||
|
- Credentials korrekt?
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ping zum Server
|
||||||
|
ping YOUR_SERVER_IP
|
||||||
|
|
||||||
|
# Port erreichbar?
|
||||||
|
telnet YOUR_SERVER_IP 8080
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 TODO / Roadmap
|
||||||
|
|
||||||
|
### Version 1.0 (MVP)
|
||||||
|
- [x] Docker WebDAV Server
|
||||||
|
- [ ] Android Basic CRUD
|
||||||
|
- [ ] Auto-Sync bei WLAN
|
||||||
|
- [ ] Error Handling
|
||||||
|
- [ ] Notifications
|
||||||
|
|
||||||
|
### Version 1.1
|
||||||
|
- [ ] Suche
|
||||||
|
- [ ] Dark Mode
|
||||||
|
- [ ] Markdown-Support
|
||||||
|
|
||||||
|
### Version 2.0
|
||||||
|
- [ ] Desktop-Client (Flutter Desktop)
|
||||||
|
- [ ] Tags/Kategorien
|
||||||
|
- [ ] Verschlüsselung
|
||||||
|
- [ ] Shared Notes
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
MIT License - siehe [LICENSE](LICENSE)
|
||||||
|
|
||||||
|
## 👤 Author
|
||||||
|
|
||||||
|
Created for personal use - 2025
|
||||||
|
|
||||||
|
## 🙏 Acknowledgments
|
||||||
|
|
||||||
|
- [bytemark/webdav](https://hub.docker.com/r/bytemark/webdav) - Docker WebDAV Server
|
||||||
|
- [Sardine Android](https://github.com/thegrizzlylabs/sardine-android) - WebDAV Client
|
||||||
|
- [Android WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager) - Background Tasks
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Project Start:** 19. Dezember 2025
|
||||||
|
**Status:** 🚧 In Development
|
||||||
120
android/README.md
Normal file
120
android/README.md
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
# Simple Notes - Android App
|
||||||
|
|
||||||
|
## 🚧 Development Setup
|
||||||
|
|
||||||
|
### Voraussetzungen
|
||||||
|
|
||||||
|
- Android Studio Hedgehog (2023.1.1) oder neuer
|
||||||
|
- JDK 17
|
||||||
|
- Android SDK 34
|
||||||
|
- Min SDK 24
|
||||||
|
|
||||||
|
### Projekt in Android Studio öffnen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# In Android Studio:
|
||||||
|
# File → New → New Project
|
||||||
|
# Template: Empty Views Activity
|
||||||
|
#
|
||||||
|
# Settings:
|
||||||
|
# Name: Simple Notes
|
||||||
|
# Package: com.example.simplenotes
|
||||||
|
# Save location: /home/liq/gitProjects/simple-notes-sync/android/
|
||||||
|
# Language: Kotlin
|
||||||
|
# Minimum SDK: API 24
|
||||||
|
# Build configuration: Kotlin DSL
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
Siehe `ANDROID_GUIDE.md` in project-docs für vollständige `build.gradle.kts`:
|
||||||
|
|
||||||
|
**Hauptabhängigkeiten:**
|
||||||
|
- Sardine Android (WebDAV Client)
|
||||||
|
- Kotlin Coroutines
|
||||||
|
- Gson (JSON)
|
||||||
|
- WorkManager (Background Sync)
|
||||||
|
- Material Design Components
|
||||||
|
|
||||||
|
### Projektstruktur
|
||||||
|
|
||||||
|
```
|
||||||
|
android/
|
||||||
|
└── app/
|
||||||
|
└── src/
|
||||||
|
└── main/
|
||||||
|
├── AndroidManifest.xml
|
||||||
|
├── java/com/example/simplenotes/
|
||||||
|
│ ├── MainActivity.kt
|
||||||
|
│ ├── NoteEditorActivity.kt
|
||||||
|
│ ├── SettingsActivity.kt
|
||||||
|
│ ├── models/
|
||||||
|
│ │ ├── Note.kt
|
||||||
|
│ │ └── SyncStatus.kt
|
||||||
|
│ ├── storage/
|
||||||
|
│ │ └── NotesStorage.kt
|
||||||
|
│ ├── sync/
|
||||||
|
│ │ ├── WebDavSyncService.kt
|
||||||
|
│ │ ├── WifiSyncReceiver.kt
|
||||||
|
│ │ ├── SyncWorker.kt
|
||||||
|
│ │ └── ConflictResolver.kt
|
||||||
|
│ ├── adapters/
|
||||||
|
│ │ └── NotesAdapter.kt
|
||||||
|
│ └── utils/
|
||||||
|
│ ├── DeviceIdGenerator.kt
|
||||||
|
│ ├── NotificationHelper.kt
|
||||||
|
│ ├── Extensions.kt
|
||||||
|
│ └── Constants.kt
|
||||||
|
└── res/
|
||||||
|
├── layout/
|
||||||
|
├── values/
|
||||||
|
└── drawable/
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📖 Development Guide
|
||||||
|
|
||||||
|
Vollständige Code-Beispiele und Implementation:
|
||||||
|
- [ANDROID_GUIDE.md](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/ANDROID_GUIDE.md)
|
||||||
|
- [IMPLEMENTATION_PLAN.md](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/IMPLEMENTATION_PLAN.md)
|
||||||
|
|
||||||
|
## 🏗️ Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Debug Build
|
||||||
|
./gradlew assembleDebug
|
||||||
|
|
||||||
|
# Release Build
|
||||||
|
./gradlew assembleRelease
|
||||||
|
|
||||||
|
# Install on connected device
|
||||||
|
./gradlew installDebug
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🧪 Testing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run unit tests
|
||||||
|
./gradlew test
|
||||||
|
|
||||||
|
# Run instrumented tests
|
||||||
|
./gradlew connectedAndroidTest
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 TODO
|
||||||
|
|
||||||
|
- [ ] Projekt in Android Studio erstellen
|
||||||
|
- [ ] Dependencies einrichten
|
||||||
|
- [ ] Models implementieren (Note.kt, SyncStatus.kt)
|
||||||
|
- [ ] Storage Layer (NotesStorage.kt)
|
||||||
|
- [ ] UI Layouts erstellen
|
||||||
|
- [ ] Activities implementieren
|
||||||
|
- [ ] Sync Service (WebDavSyncService.kt)
|
||||||
|
- [ ] WLAN Detection (WifiSyncReceiver.kt)
|
||||||
|
- [ ] WorkManager Setup (SyncWorker.kt)
|
||||||
|
- [ ] Notifications (NotificationHelper.kt)
|
||||||
|
- [ ] Error Handling
|
||||||
|
- [ ] Testing
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Next Step:** Projekt in Android Studio erstellen und Code aus ANDROID_GUIDE.md übernehmen.
|
||||||
6
server/.env.example
Normal file
6
server/.env.example
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# WebDAV Credentials
|
||||||
|
WEBDAV_USERNAME=noteuser
|
||||||
|
WEBDAV_PASSWORD=your_secure_password_here
|
||||||
|
|
||||||
|
# Optional: Custom port
|
||||||
|
# WEBDAV_PORT=8080
|
||||||
9
server/.gitignore
vendored
Normal file
9
server/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Environment
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Data
|
||||||
|
notes-data/
|
||||||
|
logs/
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
docker-compose.override.yml
|
||||||
63
server/README.md
Normal file
63
server/README.md
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# WebDAV Server - Simple Notes Sync
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Umgebungsvariablen anpassen
|
||||||
|
cp .env.example .env
|
||||||
|
nano .env
|
||||||
|
|
||||||
|
# 2. Server starten
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# 3. Logs prüfen
|
||||||
|
docker-compose logs -f
|
||||||
|
|
||||||
|
# 4. Testen
|
||||||
|
curl -u noteuser:your_password http://localhost:8080/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Server URL
|
||||||
|
|
||||||
|
**Lokal:** `http://localhost:8080/`
|
||||||
|
|
||||||
|
**Im Netzwerk:** `http://YOUR_IP:8080/` (z.B. `http://192.168.1.100:8080/`)
|
||||||
|
|
||||||
|
IP-Adresse herausfinden:
|
||||||
|
```bash
|
||||||
|
ip addr show | grep "inet " | grep -v 127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Credentials
|
||||||
|
|
||||||
|
Standard (siehe `.env`):
|
||||||
|
- Username: `noteuser`
|
||||||
|
- Password: Siehe `.env` Datei
|
||||||
|
|
||||||
|
## Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Status prüfen
|
||||||
|
docker-compose ps
|
||||||
|
|
||||||
|
# Logs anschauen
|
||||||
|
docker-compose logs -f
|
||||||
|
|
||||||
|
# Neustarten
|
||||||
|
docker-compose restart
|
||||||
|
|
||||||
|
# Stoppen
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
# Komplett löschen (inkl. Daten)
|
||||||
|
docker-compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## Daten
|
||||||
|
|
||||||
|
Notizen werden gespeichert in: `./notes-data/`
|
||||||
|
|
||||||
|
Backup erstellen:
|
||||||
|
```bash
|
||||||
|
tar -czf backup-$(date +%Y%m%d).tar.gz notes-data/
|
||||||
|
```
|
||||||
22
server/docker-compose.yml
Normal file
22
server/docker-compose.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
webdav:
|
||||||
|
image: bytemark/webdav
|
||||||
|
container_name: simple-notes-webdav
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
|
environment:
|
||||||
|
AUTH_TYPE: Basic
|
||||||
|
USERNAME: ${WEBDAV_USERNAME}
|
||||||
|
PASSWORD: ${WEBDAV_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- ./notes-data:/var/lib/dav/data
|
||||||
|
- ./logs:/var/log/apache2
|
||||||
|
networks:
|
||||||
|
- notes-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
notes-network:
|
||||||
|
driver: bridge
|
||||||
Reference in New Issue
Block a user