feat(smart-app): implement complete mobile app MVP

- App.tsx: full navigation (Auth stack + Main tabs with 5 screens)
- Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen
- HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors
- MapScreen: interactive map with layer toggles (6 layers)
- MarketplaceScreen: categories (6), products (5), search
- ChatScreen: AI chat with quick prompts (4), bot responses
- ProfileScreen: user info, stats, menu (9 items), logout
- AlertsScreen: alert list with severity, acknowledge
- SensorsScreen: sensor list with type filters (6 types), search
- ZonesScreen: zone cards with stats
- SettingsScreen: language picker (FR/EN/ES/DE), privacy, about
- Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n
- Hooks: useSensors, useAlerts, useNotifications, useLocation
- Components: Card, Button, LoadingSpinner, ErrorBoundary, Header
- Services: iotService, notificationService (with axios API client)
- Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN)
- Theme: colors.ts with full design system (Blue Ocean palette)
- Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
This commit is contained in:
Eric FELIXINE
2026-06-01 18:00:35 -04:00
parent 08ca495bde
commit e30ae8ed09
35578 changed files with 3703534 additions and 43 deletions

View File

@@ -0,0 +1,99 @@
apply plugin: 'com.android.library'
// Import autolinking script
apply from: "../scripts/autolinking.gradle"
def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
apply from: expoModulesCorePlugin
applyKotlinExpoModulesCorePlugin()
useDefaultAndroidSdkVersions()
useExpoPublishing()
static def versionToNumber(major, minor, patch) {
return patch * 100 + minor * 10000 + major * 1000000
}
def getRNVersion() {
def nodeModulesVersion = providers.exec {
workingDir(projectDir)
commandLine("node", "-e", "console.log(require('react-native/package.json').version);")
}.standardOutput.asText.get().trim()
def version = safeExtGet("reactNativeVersion", nodeModulesVersion)
def coreVersion = version.split("-")[0]
def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }
return versionToNumber(
major,
minor,
patch
)
}
ensureDependeciesWereEvaluated(project)
group = 'host.exp.exponent'
version = '51.0.39'
buildscript {
// Simple helper that allows the root project to override versions declared by this library.
ext.safeExtGet = { prop, fallback ->
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}
}
android {
namespace "expo.core"
defaultConfig {
versionCode 1
versionName "51.0.39"
consumerProguardFiles("proguard-rules.pro")
}
testOptions {
unitTests.includeAndroidResources = true
}
sourceSets {
main {
java {
srcDirs += new File(project.buildDir, generatedFilesSrcDir)
def rnVersion = getRNVersion()
if (rnVersion >= versionToNumber(0, 74, 0)) {
srcDirs += "src/reactWrappers"
}
}
}
}
}
dependencies { dependencyHandler ->
implementation 'com.facebook.react:react-android'
testImplementation 'junit:junit:4.13.2'
testImplementation 'androidx.test:core:1.5.0'
testImplementation "com.google.truth:truth:1.1.2"
testImplementation 'io.mockk:mockk:1.13.5'
// Link expo modules as dependencies of the adapter. It uses `api` configuration so they all will be visible for the app as well.
// A collection of the dependencies depends on the options passed to `useExpoModules` in your project's `settings.gradle`.
addExpoModulesDependencies(dependencyHandler, project)
}
// A task generating a package list of expo modules.
task generateExpoModulesPackageListTask {
def modulesConfig = getModulesConfig()
def outputPath = getGenerateExpoModulesPackagesListPath()
if (modulesConfig) {
outputs.file(file(outputPath))
inputs.property("modulesConfig", modulesConfig)
}
// TOOD(@lukmccall): fix not working with configuration cache enabled
doLast {
generateExpoModulesPackageList()
}
}
// Run that task during prebuilding phase.
preBuild.dependsOn "generateExpoModulesPackageListTask"