diff --git a/PRD.md b/PRD.md
index 887cbdb..42c9483 100644
--- a/PRD.md
+++ b/PRD.md
@@ -1,5 +1,5 @@
# Product Requirements Document
-## Jamshalat Diary — Islamic Worship Companion App
+## JamShalat — Islamic Worship Companion App
**Version:** 1.0
**Date:** March 2026
@@ -35,7 +35,7 @@
## 1. Overview
-**Jamshalat Diary** is an offline-first Muslim daily worship companion app built in Flutter. It helps Muslim users track their daily prayers, worship habits, and spiritual growth with a clean, modern UI that supports both light and dark themes.
+**JamShalat** is an offline-first Muslim daily worship companion app built in Flutter. It helps Muslim users track their daily prayers, worship habits, and spiritual growth with a clean, modern UI that supports both light and dark themes.
**Core value proposition:**
- Never miss a prayer — real-time prayer time countdowns with Adhan/Iqamah notifications
@@ -683,7 +683,7 @@ Rows:
Label: "ABOUT"
Rows:
-- App Version: "Jamshalat Diary v1.0.0"
+- App Version: "JamShalat v1.0.0"
- Privacy Policy (launches in-app browser)
- Rate the App (links to store)
- Contact / Feedback
@@ -881,4 +881,4 @@ The following features are **explicitly excluded** from v1.0 to keep scope focus
---
-*PRD v1.0 — Jamshalat Diary — March 2026*
+*PRD v1.0 — JamShalat — March 2026*
diff --git a/README.md b/README.md
index e9585b6..b3c268f 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# jamshalat_diary
+# JamShalat
A new Flutter project.
diff --git a/TASKLIST.md b/TASKLIST.md
index e9b3e5c..01be7c2 100644
--- a/TASKLIST.md
+++ b/TASKLIST.md
@@ -1,6 +1,6 @@
-# Jamshalat Diary — Phase-Based Implementation Tasklist
+# JamShalat — Phase-Based Implementation Tasklist
-**Project:** Jamshalat Diary Flutter App
+**Project:** JamShalat Flutter App
**PRD Reference:** `PRD.md`
**Design Reference:** `stitch/` folder (18 screens)
**Last Updated:** March 2026
@@ -302,8 +302,8 @@
- [ ] **7.3.1** Create app icon (1024×1024px): mosque/compass motif with `#70df20` primary color
- [ ] **7.3.2** Apply app icon via `flutter_launcher_icons` package (all densities, adaptive icon for Android)
- [ ] **7.3.3** Create splash screen via `flutter_native_splash` package (white/dark bg, centered logo)
-- [ ] **7.3.4** Set app name: "Jamshalat Diary" in `AndroidManifest.xml` and `Info.plist`
-- [ ] **7.3.5** Set bundle ID: `com.jamshalat.diary` on both platforms
+- [ ] **7.3.4** Set app name: "JamShalat" in `AndroidManifest.xml` and `Info.plist`
+- [ ] **7.3.5** Set bundle ID: `com.jamshalat.app` on both platforms
- [ ] **7.3.6** Configure release signing (Android keystore, iOS certificates) — document in private README
- [ ] **7.3.7** Build release APK: `flutter build apk --release` — verify no build errors
- [ ] **7.3.8** Build iOS release: `flutter build ipa --release` — verify no build errors
@@ -338,4 +338,4 @@
---
-*TASKLIST v1.0 — Jamshalat Diary — March 2026*
+*TASKLIST v1.0 — JamShalat — March 2026*
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index ba53981..3bc4cea 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -24,7 +24,7 @@ val hasReleaseKeystore = listOf(
}
android {
- namespace = "com.jamshalat.diary"
+ namespace = "com.jamshalat.app"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
@@ -52,7 +52,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId = "com.jamshalat.diary"
+ applicationId = "com.jamshalat.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
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 9430424..d7a3169 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -8,7 +8,7 @@
Last updated: 2026-03-15
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 6d7d93b..7799e74 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -372,7 +372,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -388,7 +388,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -405,7 +405,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -420,7 +420,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -551,7 +551,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -573,7 +573,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
index dc9ada4..00ec13b 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
index 7353c41..a902ec1 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
index 797d452..ce94d4e 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
index 6ed2d93..8581be1 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
index 4cd7b00..8126853 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
index fe73094..1c75223 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
index 321773c..d7080fb 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
index 797d452..ce94d4e 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
index 502f463..337050b 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
index 0ec3034..629d820 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
index 0ec3034..629d820 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
index e9f5fea..376c104 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
index 84ac32a..dfba69a 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
index 8953cba..943f635 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
index 0467bf1..e17c126 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 76c425b..a32760e 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -7,7 +7,7 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
- Jamshalat Diary
+ JamShalat
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -15,7 +15,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- jamshalat_diary
+ JamShalat
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/lib/app/app.dart b/lib/app/app.dart
index 47e94bd..e1eba96 100644
--- a/lib/app/app.dart
+++ b/lib/app/app.dart
@@ -78,7 +78,7 @@ class _AppState extends ConsumerState with WidgetsBindingObserver {
final themeMode = ref.watch(themeProvider);
return MaterialApp.router(
- title: 'Jamshalat Diary',
+ title: 'JamShalat',
debugShowCheckedModeBanner: false,
theme: AppTheme.light,
darkTheme: AppTheme.dark,
diff --git a/lib/core/widgets/ayat_share_sheet.dart b/lib/core/widgets/ayat_share_sheet.dart
index 7449637..d20d8ea 100644
--- a/lib/core/widgets/ayat_share_sheet.dart
+++ b/lib/core/widgets/ayat_share_sheet.dart
@@ -24,7 +24,7 @@ String buildAyatShareText(Map ayat) {
if (arabic.isNotEmpty) arabic,
if (translation.isNotEmpty) '"$translation"',
reference,
- 'Dibagikan dari Jam Shalat Diary',
+ 'Dibagikan dari JamShalat',
];
return parts.join('\n\n');
@@ -447,7 +447,7 @@ class _AyatShareCard extends StatelessWidget {
borderRadius: BorderRadius.circular(999),
),
child: const Text(
- 'Jam Shalat Diary',
+ 'JamShalat',
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w700,
diff --git a/lib/features/qibla/presentation/qibla_screen.dart b/lib/features/qibla/presentation/qibla_screen.dart
index 0533fed..cf1786a 100644
--- a/lib/features/qibla/presentation/qibla_screen.dart
+++ b/lib/features/qibla/presentation/qibla_screen.dart
@@ -20,7 +20,7 @@ class QiblaScreen extends ConsumerStatefulWidget {
class _QiblaScreenState extends ConsumerState {
static const _geomagneticChannel =
- MethodChannel('com.jamshalat.diary/geomagnetic');
+ MethodChannel('com.jamshalat.app/geomagnetic');
static const double _alignmentThreshold = 3.0;
// Fallback simulated data for environments without compass hardware (like macOS emulator)
diff --git a/lib/features/quran/presentation/quran_murattal_screen.dart b/lib/features/quran/presentation/quran_murattal_screen.dart
index 55385ec..d6c55fb 100644
--- a/lib/features/quran/presentation/quran_murattal_screen.dart
+++ b/lib/features/quran/presentation/quran_murattal_screen.dart
@@ -919,7 +919,7 @@ class _QuranMurattalScreenState extends ConsumerState
final url = _unsplashPhoto!['photographerUrl'];
if (url != null && url.isNotEmpty) {
launchUrl(Uri.parse(
- '$url?utm_source=jamshalat_diary&utm_medium=referral'));
+ '$url?utm_source=jamshalat&utm_medium=referral'));
}
},
child: Text(
diff --git a/lib/main.dart b/lib/main.dart
index e2237a0..79cdf10 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -47,7 +47,7 @@ void main() async {
));
await JustAudioBackground.init(
- androidNotificationChannelId: 'com.jamshalat.diary.audio',
+ androidNotificationChannelId: 'com.jamshalat.app.audio',
androidNotificationChannelName: 'Murattal Playback',
androidNotificationOngoing: true,
);
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index d41ee1a..6a95966 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -479,7 +479,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/jamshalat_diary.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/jamshalat_diary";
@@ -494,7 +494,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/jamshalat_diary.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/jamshalat_diary";
@@ -509,7 +509,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/jamshalat_diary.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/jamshalat_diary";
diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig
index 0ca264f..813cf3f 100644
--- a/macos/Runner/Configs/AppInfo.xcconfig
+++ b/macos/Runner/Configs/AppInfo.xcconfig
@@ -8,7 +8,7 @@
PRODUCT_NAME = jamshalat_diary
// The application's bundle identifier
-PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary
+PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app
// The copyright displayed in application information
PRODUCT_COPYRIGHT = Copyright © 2026 com.jamshalat. All rights reserved.
diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist
index 4789daa..f540fd8 100644
--- a/macos/Runner/Info.plist
+++ b/macos/Runner/Info.plist
@@ -6,6 +6,8 @@
$(DEVELOPMENT_LANGUAGE)
CFBundleExecutable
$(EXECUTABLE_NAME)
+ CFBundleDisplayName
+ JamShalat
CFBundleIconFile
CFBundleIdentifier
@@ -13,7 +15,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- $(PRODUCT_NAME)
+ JamShalat
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/web/index.html b/web/index.html
index 441b864..5a18c05 100644
--- a/web/index.html
+++ b/web/index.html
@@ -18,18 +18,18 @@
-
+
-
+
- jamshalat_diary
+ JamShalat
diff --git a/web/manifest.json b/web/manifest.json
index e34c780..bf6a194 100644
--- a/web/manifest.json
+++ b/web/manifest.json
@@ -1,11 +1,11 @@
{
- "name": "jamshalat_diary",
- "short_name": "jamshalat_diary",
+ "name": "JamShalat",
+ "short_name": "JamShalat",
"start_url": ".",
"display": "standalone",
"background_color": "#0175C2",
"theme_color": "#0175C2",
- "description": "A new Flutter project.",
+ "description": "JamShalat Muslim daily worship companion.",
"orientation": "portrait-primary",
"prefer_related_applications": false,
"icons": [