Projekt in leafittome umbenannt (App-Name LeafItToMe, Bundle-ID dev.leafittome.app)

- pubspec, Paket-Imports, App-Klasse, ARB-Titel, iOS/Android-Konfiguration
- README und Doku auf neuen Namen und Repo leafittome umgestellt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
cschlaefke 2026-07-18 22:25:41 +02:00
parent c7b22a6f86
commit a5b79193dd
17 changed files with 35 additions and 35 deletions

View file

@ -1,4 +1,4 @@
# Planty 🌱
# LeafItToMe 🌱
App zur Verwaltung und Pflege von Pflanzen — für den eigenen Haushalt und Pflanzen-Sitter.
@ -36,4 +36,4 @@ flutter analyze # Statische Analyse
- **Firebase** (Auth, Firestore, Storage, Cloud Functions, FCM) — Anbindung folgt im nächsten Block
- **KI hybrid:** PlantNet (kostenlose Arterkennung) + Claude (Pflegetexte, Diagnose) über Cloud Functions
- **i18n:** Alle Texte liegen in `lib/l10n/app_de.arb`; Englisch ist später nur eine zweite ARB-Datei
- Bundle-ID: vorläufig `dev.planty.app` — wird vor dem ersten TestFlight-Upload final gesetzt
- Bundle-ID: vorläufig `dev.leafittome.app` — wird vor dem ersten TestFlight-Upload final gesetzt

View file

@ -6,7 +6,7 @@ plugins {
}
android {
namespace = "dev.planty.planty"
namespace = "dev.leafittome.app"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
@ -21,7 +21,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "dev.planty.planty"
applicationId = "dev.leafittome.app"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion

View file

@ -1,6 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="planty"
android:label="LeafItToMe"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity

View file

@ -1,4 +1,4 @@
package dev.planty.planty
package dev.leafittome.app
import io.flutter.embedding.android.FlutterActivity

View file

@ -1,6 +1,6 @@
# Architektur & Projektstruktur
Dieses Dokument erklärt den Aufbau des Planty-Codes — auch als Blaupause für weitere Flutter-Apps.
Dieses Dokument erklärt den Aufbau des LeafItToMe-Codes — auch als Blaupause für weitere Flutter-Apps.
## Ordnerstruktur

View file

@ -6,7 +6,7 @@ Firebase ist Googles „Backend als Dienst": Es liefert uns Login (**Auth**), Da
## Was wofür? (Überblick)
| Baustein | Aufgabe in Planty |
| Baustein | Aufgabe in LeafItToMe |
| --- | --- |
| **Authentication** | Login mit E-Mail+Passwort, Google und Apple |
| **Cloud Firestore** | Datenbank: Haushalte, Pflanzen, Stellplätze, Bestätigungen — synchronisiert in Echtzeit auf alle Geräte des Haushalts |
@ -17,7 +17,7 @@ Firebase ist Googles „Backend als Dienst": Es liefert uns Login (**Auth**), Da
## Schritt 1: Firebase-Projekt anlegen (machst du, ~10 Minuten)
1. Öffne <https://console.firebase.google.com> und melde dich mit deinem Google-Konto an.
2. **„Projekt hinzufügen"** → Name: `planty` → Google Analytics kannst du **deaktivieren** (brauchen wir nicht).
2. **„Projekt hinzufügen"** → Name: `leafittome` → Google Analytics kannst du **deaktivieren** (brauchen wir nicht).
3. Nach dem Anlegen bist du in der Projekt-Übersicht. Fertig für heute — Apps registrieren wir gemeinsam per CLI (Schritt 3).
## Schritt 2: Auf den Blaze-Tarif umstellen (machst du, ~5 Minuten)

View file

@ -90,11 +90,11 @@ FORGEJO__server__ROOT_URL=https://git.deine-domain.de/
- **2FA aktivieren:** Einstellungen → Sicherheit → Zwei-Faktor-Authentifizierung (z. B. mit derselben Authenticator-App wie für Coolify).
- **Kontrolle Registrierung:** Site Administration → Configuration — „Registrierung deaktiviert" muss aktiv sein (kommt aus der Umgebungsvariable).
- Da Forgejo nur über den Coolify-Proxy (HTTPS) und Port 2222 (Git-SSH mit Schlüssel) erreichbar ist, ist die Angriffsfläche damit klein: kein offenes Web-Registrierungsformular, keine Passwort-Logins über SSH.
- Da Forgejo nur über den Coolify-Proxy (HTTPS) erreichbar ist (Git-SSH auf Port 2222 nur, falls du Variante B nutzt), ist die Angriffsfläche klein: kein offenes Web-Registrierungsformular, keine Passwort-Logins über SSH.
## 5. Repository anlegen und Planty pushen
## 5. Repository anlegen und LeafItToMe pushen
In der Web-UI **Neues Repository** → Name `planty` → **ohne** README/Lizenz initialisieren (das Repo existiert lokal schon).
In der Web-UI **Neues Repository** → Name `leafittome` → **ohne** README/Lizenz initialisieren (das Repo existiert lokal schon).
### Variante A: HTTPS mit Zugriffs-Token (empfohlen — kein extra Port nötig)
@ -103,7 +103,7 @@ In der Web-UI **Neues Repository** → Name `planty` → **ohne** README/Lizenz
```bash
cd ~/Documents/Projekte/Planty
git remote add origin https://git.deine-domain.de/<dein-nutzer>/planty.git
git remote add origin https://git.deine-domain.de/<dein-nutzer>/leafittome.git
git push -u origin main
```
@ -121,10 +121,10 @@ Die Forgejo-Vorlage hat kein Port-Mapping in der Coolify-UI, aber jede Service-V
Zusätzlich als Umgebungsvariablen `FORGEJO__server__SSH_DOMAIN=git.deine-domain.de` und `FORGEJO__server__SSH_PORT=2222` setzen (für korrekte Clone-URLs), Port 2222 in der Hetzner-Firewall öffnen, Service neu deployen. Dann in Forgejo unter **Einstellungen → SSH/GPG-Schlüssel** den Inhalt von `~/.ssh/id_ed25519.pub` hinterlegen und als Remote nutzen:
```bash
git remote add origin ssh://git@git.deine-domain.de:2222/<dein-nutzer>/planty.git
git remote add origin ssh://git@git.deine-domain.de:2222/<dein-nutzer>/leafittome.git
```
Ab dann genügt nach jedem Arbeitsstand ein `git push`. Test: Die Dateien erscheinen unter `https://git.deine-domain.de/<dein-nutzer>/planty`.
Ab dann genügt nach jedem Arbeitsstand ein `git push`. Test: Die Dateien erscheinen unter `https://git.deine-domain.de/<dein-nutzer>/leafittome`.
## 6. Backups

View file

@ -369,7 +369,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = dev.planty.planty;
PRODUCT_BUNDLE_IDENTIFIER = dev.leafittome.app;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@ -385,7 +385,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = dev.planty.planty.RunnerTests;
PRODUCT_BUNDLE_IDENTIFIER = dev.leafittome.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@ -402,7 +402,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = dev.planty.planty.RunnerTests;
PRODUCT_BUNDLE_IDENTIFIER = dev.leafittome.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@ -417,7 +417,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = dev.planty.planty.RunnerTests;
PRODUCT_BUNDLE_IDENTIFIER = dev.leafittome.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@ -549,7 +549,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = dev.planty.planty;
PRODUCT_BUNDLE_IDENTIFIER = dev.leafittome.app;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@ -572,7 +572,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = dev.planty.planty;
PRODUCT_BUNDLE_IDENTIFIER = dev.leafittome.app;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;

View file

@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Planty</string>
<string>LeafItToMe</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@ -13,7 +13,7 @@
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>planty</string>
<string>leafittome</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>

View file

@ -6,8 +6,8 @@ import 'core/settings/settings_provider.dart';
import 'core/theme/app_theme.dart';
import 'l10n/generated/app_localizations.dart';
class PlantyApp extends ConsumerWidget {
const PlantyApp({super.key});
class LeafItToMeApp extends ConsumerWidget {
const LeafItToMeApp({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
/// Planty-Grün als Ausgangsfarbe für das gesamte Farbschema.
/// LeafItToMe-Grün als Ausgangsfarbe für das gesamte Farbschema.
const _seedColor = Color(0xFF2E7D32);
ThemeData buildAppTheme({

View file

@ -1,6 +1,6 @@
{
"@@locale": "de",
"appTitle": "Planty",
"appTitle": "LeafItToMe",
"menuToday": "Heute",
"menuPlants": "Meine Pflanzen",
"menuLocations": "Stellplätze",

View file

@ -97,7 +97,7 @@ abstract class AppLocalizations {
/// No description provided for @appTitle.
///
/// In de, this message translates to:
/// **'Planty'**
/// **'LeafItToMe'**
String get appTitle;
/// No description provided for @menuToday.

View file

@ -9,7 +9,7 @@ class AppLocalizationsDe extends AppLocalizations {
AppLocalizationsDe([String locale = 'de']) : super(locale);
@override
String get appTitle => 'Planty';
String get appTitle => 'LeafItToMe';
@override
String get menuToday => 'Heute';

View file

@ -11,7 +11,7 @@ Future<void> main() async {
runApp(
ProviderScope(
overrides: [sharedPreferencesProvider.overrideWithValue(prefs)],
child: const PlantyApp(),
child: const LeafItToMeApp(),
),
);
}

View file

@ -1,5 +1,5 @@
name: planty
description: "Planty App zur Verwaltung und Pflege von Pflanzen."
name: leafittome
description: "LeafItToMe App zur Verwaltung und Pflege von Pflanzen."
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

View file

@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:planty/app.dart';
import 'package:planty/core/settings/settings_provider.dart';
import 'package:leafittome/app.dart';
import 'package:leafittome/core/settings/settings_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
Future<Widget> buildTestApp() async {
@ -10,7 +10,7 @@ Future<Widget> buildTestApp() async {
final prefs = await SharedPreferences.getInstance();
return ProviderScope(
overrides: [sharedPreferencesProvider.overrideWithValue(prefs)],
child: const PlantyApp(),
child: const LeafItToMeApp(),
);
}