Prepare for Google Play Store and F-Droid release

📦 Release Preparation:
- Created comprehensive RELEASE_GUIDE.md
- Added signing key instructions
- Store listing content ready
- Screenshots checklist
- F-Droid preparation guide

🔐 Security:
- Updated .gitignore to exclude signing keys
- Protected key.properties from git
- Added *.jks and *.keystore exclusions

📝 Documentation Includes:
- Step-by-step signing key generation
- Google Play Store submission checklist
- F-Droid requirements and options
- Store assets specifications
- Privacy policy hosting options
- Version management guide

🏪 Store Listing Content:
- App title: "Sage - Kitchen Inventory Manager"
- Full description with features
- Category: Food & Drink
- Screenshots requirements (2-8 images)
- Feature graphic specs (1024x500)

⚠️ F-Droid Considerations:
- Firebase is proprietary (not FOSS)
- Options: Remove Firebase for F-Droid build
- Or: Provide APK downloads from GitHub
- Or: Self-host F-Droid repo

📱 Next Steps for Developer:
1. Generate signing key with keytool
2. Create key.properties file
3. Take screenshots (6 recommended)
4. Create feature graphic
5. Host privacy policy
6. Create Google Play Developer account ($25)
7. Build signed AAB: flutter build appbundle --release
8. Upload to Play Store

Version: 1.1.0+2
Package: com.github.mystiatech.sage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-04 16:46:23 -04:00
parent 31c4ba4cba
commit af63e11abd
2 changed files with 359 additions and 0 deletions

351
RELEASE_GUIDE.md Normal file
View File

@@ -0,0 +1,351 @@
# Release Guide for Sage - Google Play & F-Droid
## 🔐 Step 1: Create Signing Key (Required for Google Play)
### Generate Keystore:
```bash
# Run this in your terminal (uses Java keytool)
cd android/app
keytool -genkey -v -keystore sage-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sage-key
```
**When prompted, enter:**
- Password: (choose a strong password - SAVE THIS!)
- First and last name: Danielle Sapelli
- Organizational unit: (press Enter to skip)
- Organization: (press Enter to skip)
- City: (your city)
- State: (your state)
- Country code: US (or your country)
**⚠️ CRITICAL:** Save these securely:
- Keystore password
- Key alias: `sage-key`
- Keystore file: `sage-release-key.jks`
### Configure Signing:
Create `android/key.properties`:
```properties
storePassword=YOUR_KEYSTORE_PASSWORD
keyPassword=YOUR_KEY_PASSWORD
keyAlias=sage-key
storeFile=sage-release-key.jks
```
**⚠️ Add to .gitignore:**
```
android/key.properties
android/app/sage-release-key.jks
```
### Update build.gradle.kts:
Add this to `android/app/build.gradle.kts` before `android {`:
```kotlin
// Load keystore properties
val keystorePropertiesFile = rootProject.file("key.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
```
Then update `signingConfigs` inside `android {`:
```kotlin
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["storePassword"] as String
}
}
```
And update `buildTypes`:
```kotlin
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
}
}
```
## 📦 Step 2: Build Signed Release APK
```bash
flutter build apk --release
# or for app bundle (preferred for Play Store)
flutter build appbundle --release
```
Output:
- APK: `build/app/outputs/flutter-apk/app-release.apk`
- AAB: `build/app/outputs/bundle/release/app-release.aab`
## 🎨 Step 3: Create Store Assets
### App Icon (Already Done!)
✅ Custom sage leaf icon in place
### Screenshots Needed:
- **Phone:** 2-8 screenshots (1080x1920 or higher)
- **7-inch tablet:** 1-8 screenshots (1200x1920)
- **10-inch tablet:** 1-8 screenshots (1920x1200)
**Recommended screenshots:**
1. Home screen with inventory stats
2. Add item screen with barcode scanner
3. Inventory list view
4. Item expiration warnings
5. Settings with household sharing
6. Household screen showing code
### Feature Graphic (Required):
- Size: 1024w x 500h pixels
- Format: PNG or JPG
- Content: Sage logo + app name + tagline
### App Icon (512x512):
- Already have sage leaf icon
- Export at 512x512 for store listing
## 📝 Step 4: Store Listing Content
### App Title:
```
Sage - Kitchen Inventory Manager
```
### Short Description (80 chars max):
```
Smart kitchen inventory tracking. Reduce food waste, share with household.
```
### Full Description:
```
🌿 Sage - Your Smart Kitchen Management System
Sage helps you track your kitchen inventory, reduce food waste, and save money by keeping tabs on what you have and when it expires.
✨ KEY FEATURES:
📦 Smart Inventory Tracking
• Scan barcodes to add items instantly
• Automatic product information lookup
• Track expiration dates and quantities
• Organize by location (fridge, freezer, pantry)
⏰ Expiration Alerts
• See items expiring soon at a glance
• Get notifications before food goes bad
• Smart expiration date predictions by category
👨‍👩‍👧‍👦 Household Sharing
• Share inventory with family or roommates
• Real-time sync across all devices
• Everyone stays updated on what's in stock
🔍 Barcode Scanner
• Instant product lookup from multiple databases
• Auto-populate item details
• Quick and easy item entry
📊 Visual Organization
• Color-coded expiration status
• Sage leaf custom icon
• Clean Material Design 3 interface
🔒 Privacy Focused
• Local-first storage with Hive
• Optional cloud sync for households
• Your data stays on your device
💰 Completely Free
• No ads
• No subscriptions
• Open source
• No account required
🌱 Why Sage?
Named after the wise herb, Sage brings wisdom to your kitchen. Stop guessing what you have, stop throwing away expired food, and start making the most of your groceries.
Perfect for:
• Families managing shared kitchens
• Roommates coordinating grocery shopping
• Anyone wanting to reduce food waste
• People with multiple fridges/freezers
• Busy households needing organization
Made with ❤️ by Danielle Sapelli
```
### Category:
```
Food & Drink
```
### Content Rating:
```
Everyone
```
### Privacy Policy URL:
We need to host the privacy policy. Options:
1. Create a GitHub Pages site
2. Use your own website
3. Use free hosting (Netlify, Vercel)
### Contact Email:
```
(your email address)
```
## 🔧 Step 5: Google Play Console Setup
1. Go to [Google Play Console](https://play.google.com/console)
2. Create Developer Account ($25 one-time fee)
3. Create new app
4. Fill in store listing details
5. Upload screenshots
6. Upload AAB file
7. Complete content rating questionnaire
8. Submit for review
**First release timeline:** Usually 1-3 days for review
## 🤖 Step 6: F-Droid Release
F-Droid has stricter requirements:
### Requirements Checklist:
**Open Source:**
- Code is open source ✓
- Need to publish to GitHub public repo
**No Proprietary Dependencies:**
-**ISSUE:** Firebase is proprietary
- ❌ Google Services (google-services.json)
### F-Droid Options:
**Option 1: Remove Firebase for F-Droid build** (Recommended)
- Create build flavor without Firebase
- F-Droid users get local-only mode
- No household cloud sync, but everything else works
**Option 2: Fork for F-Droid**
- Maintain separate F-Droid version
- Strip out Firebase completely
- Local-only storage
**Option 3: Skip F-Droid**
- Focus on Google Play Store only
- Provide APK downloads from GitHub releases
### To Prepare for F-Droid:
1. **Publish code to GitHub:**
```bash
# Create repo at github.com/mystiatech/sage
git remote add origin git@github.com:mystiatech/sage.git
git push -u origin master
```
2. **Add LICENSE file:**
- Choose license (MIT, GPL-3.0, Apache-2.0)
- Add LICENSE file to root
3. **Submit to F-Droid:**
- Open issue at [fdroiddata](https://gitlab.com/fdroid/fdroiddata/-/issues)
- Provide GitHub repo URL
- They'll review and add to F-Droid
4. **Or:** Self-host F-Droid repo
- Simpler than official F-Droid
- Users add your repo to F-Droid app
## 📋 Final Checklist
### Google Play Store:
- [ ] Create signing key
- [ ] Configure signing in build.gradle.kts
- [ ] Build signed AAB
- [ ] Create screenshots (2-8 images)
- [ ] Create feature graphic (1024x500)
- [ ] Write store description
- [ ] Set up privacy policy hosting
- [ ] Create developer account ($25)
- [ ] Upload and submit for review
### F-Droid:
- [ ] Remove Firebase or create separate build flavor
- [ ] Publish code to GitHub
- [ ] Add LICENSE file
- [ ] Submit to F-Droid (or self-host repo)
- [ ] Wait for F-Droid review (can take weeks)
### Both:
- [ ] Test signed release build thoroughly
- [ ] Verify Firebase works with signed build
- [ ] Test on multiple devices
- [ ] Update version number for each release
## 🚀 Quick Start Commands
```bash
# Build for Google Play (signed AAB)
flutter build appbundle --release
# Build for testing (signed APK)
flutter build apk --release
# Check what's in the AAB
cd build/app/outputs/bundle/release
unzip -l app-release.aab
```
## 📱 Version Management
Current version: `1.1.0+2`
For each release:
1. Update version in `pubspec.yaml`
2. Format: `MAJOR.MINOR.PATCH+BUILD_NUMBER`
3. Example: `1.2.0+3` (version 1.2.0, build 3)
## ⚠️ Important Notes
1. **Never lose your signing key!** You can't update the app without it.
2. **Keep key.properties secure** - don't commit to git
3. **Test signed builds** before uploading to store
4. **Firebase requires google-services.json** - make sure it's the real one
5. **First release takes longer** - usually 1-3 days review
6. **Updates are faster** - usually hours after first approval
## 🆘 Common Issues
**Build fails with signing error:**
- Check key.properties exists
- Verify passwords are correct
- Make sure storeFile path is relative to android/app/
**Firebase doesn't work in release:**
- Verify google-services.json is the real one (not placeholder)
- Check package name matches exactly
- Enable Firestore in Firebase Console
**Play Store rejects:**
- Update target SDK to latest (currently 34)
- Add privacy policy URL
- Complete content rating
**F-Droid rejects:**
- Remove all proprietary dependencies
- Use only FOSS libraries
- Provide full source code