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:
parent
c7b22a6f86
commit
a5b79193dd
17 changed files with 35 additions and 35 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.planty.planty
|
||||
package dev.leafittome.app
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "de",
|
||||
"appTitle": "Planty",
|
||||
"appTitle": "LeafItToMe",
|
||||
"menuToday": "Heute",
|
||||
"menuPlants": "Meine Pflanzen",
|
||||
"menuLocations": "Stellplätze",
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Future<void> main() async {
|
|||
runApp(
|
||||
ProviderScope(
|
||||
overrides: [sharedPreferencesProvider.overrideWithValue(prefs)],
|
||||
child: const PlantyApp(),
|
||||
child: const LeafItToMeApp(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue