diff --git a/.firebaserc b/.firebaserc index 6bfc98a..820cd26 100644 --- a/.firebaserc +++ b/.firebaserc @@ -1,5 +1,12 @@ { "projects": { "default": "financial-planner-72109" + }, + "targets": { + "financial-planner-72109": { + "hosting": { + "website": ["financial-planner-72109"] + } + } } } diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml new file mode 100644 index 0000000..9747f27 --- /dev/null +++ b/.github/workflows/firebase-hosting-merge.yml @@ -0,0 +1,22 @@ +# This file was auto-generated by the Firebase CLI +# https://github.com/firebase/firebase-tools + +name: Deploy to Firebase Hosting on merge +on: + push: + branches: + - release + paths: + - "website/**" + - ".github/workflows/firebase-hosting-merge.yml" +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: FirebaseExtended/action-hosting-deploy@v0 + with: + repoToken: ${{ secrets.GITHUB_TOKEN }} + firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_FINANCIAL_PLANNER_72109 }} + channelId: live + projectId: financial-planner-72109 diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml new file mode 100644 index 0000000..97ed931 --- /dev/null +++ b/.github/workflows/firebase-hosting-pull-request.yml @@ -0,0 +1,21 @@ +name: Deploy to Firebase Hosting on PR +on: + pull_request: + paths: + - "website/**" + - ".github/workflows/firebase-hosting-pull-request.yml" +permissions: + checks: write + contents: read + pull-requests: write +jobs: + build_and_preview: + if: ${{ github.event.pull_request.head.repo.full_name == github.repository }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: FirebaseExtended/action-hosting-deploy@v0 + with: + repoToken: ${{ secrets.GITHUB_TOKEN }} + firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_FINANCIAL_PLANNER_72109 }} + projectId: financial-planner-72109 diff --git a/.github/workflows/flutter.yaml b/.github/workflows/flutter.yaml index 1c6eb46..2c02564 100644 --- a/.github/workflows/flutter.yaml +++ b/.github/workflows/flutter.yaml @@ -1,12 +1,6 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - name: Flutter -on: - ["pull_request"] +on: ["pull_request"] jobs: analyze: @@ -25,9 +19,11 @@ jobs: - name: Install Dependencies run: flutter pub get + working-directory: mobile - name: Analyze Code run: flutter analyze + working-directory: mobile build-apk: name: Build APK @@ -45,21 +41,22 @@ jobs: - name: Install Dependencies run: flutter pub get + working-directory: mobile - name: Decode Keystore run: | - echo "${{ secrets.KEYSTORE }}" | base64 --decode > android/app/keystore.jks + echo "${{ secrets.KEYSTORE }}" | base64 --decode > mobile/android/app/keystore.jks - name: Create key.properties run: | - echo "storeFile=keystore.jks" > android/key.properties - echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> android/key.properties - echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties - echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties - + echo "storeFile=keystore.jks" > mobile/android/key.properties + echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> mobile/android/key.properties + echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> mobile/android/key.properties + echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> mobile/android/key.properties - name: Build APK run: flutter build apk --release + working-directory: mobile build-aab: name: Build App Bundle @@ -77,17 +74,19 @@ jobs: - name: Install Dependencies run: flutter pub get + working-directory: mobile - name: Decode Keystore run: | - echo "${{ secrets.KEYSTORE }}" | base64 --decode > android/app/keystore.jks + echo "${{ secrets.KEYSTORE }}" | base64 --decode > mobile/android/app/keystore.jks - name: Create key.properties run: | - echo "storeFile=keystore.jks" > android/key.properties - echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> android/key.properties - echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties - echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties + echo "storeFile=keystore.jks" > mobile/android/key.properties + echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> mobile/android/key.properties + echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> mobile/android/key.properties + echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> mobile/android/key.properties - name: Build App Bundle run: flutter build appbundle + working-directory: mobile diff --git a/.gitignore b/.gitignore index 2374eeb..d54f5fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,46 +1,4 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release - -# Key -android/key.properties \ No newline at end of file +.vscode/ +.vs/ +.idea/ +.DS_STORE diff --git a/.metadata b/.metadata deleted file mode 100644 index 047fd39..0000000 --- a/.metadata +++ /dev/null @@ -1,36 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "2663184aa79047d0a33a14a3b607954f8fdd8730" - channel: "stable" - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - - platform: android - create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - - platform: linux - create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - - platform: windows - create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/android/app/google-services.json b/android/app/google-services.json deleted file mode 100644 index 750ff98..0000000 --- a/android/app/google-services.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "project_info": { - "project_number": "859455980881", - "project_id": "financial-planner-72109", - "storage_bucket": "financial-planner-72109.firebasestorage.app" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:859455980881:android:8f21d0626a1810ac903f70", - "android_client_info": { - "package_name": "org.twoaxis.finance" - } - }, - "oauth_client": [ - { - "client_id": "859455980881-dl15pgkmtqfkk8i86g5trvqiseaig7oo.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyCxA9Louij8gPQFHF4IzFXbzQr3i0NeSLA" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "859455980881-dl15pgkmtqfkk8i86g5trvqiseaig7oo.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/assets/images/onboarding.png b/assets/images/onboarding.png deleted file mode 100644 index 243ac47..0000000 Binary files a/assets/images/onboarding.png and /dev/null differ diff --git a/firebase.json b/firebase.json index 4040785..ae5c869 100644 --- a/firebase.json +++ b/firebase.json @@ -1,37 +1,48 @@ { - "flutter": { - "platforms": { - "android": { - "default": { - "projectId": "financial-planner-72109", - "appId": "1:859455980881:android:8f21d0626a1810ac903f70", - "fileOutput": "android/app/google-services.json" - } - }, - "dart": { - "lib/firebase_options.dart": { - "projectId": "financial-planner-72109", - "configurations": { - "android": "1:859455980881:android:8f21d0626a1810ac903f70" - } - } - } - } - }, - "firestore": { - "rules": "firestore.rules", - "indexes": "firestore.indexes.json" - }, - "emulators": { - "auth": { - "port": 9099 - }, - "firestore": { - "port": 8080 - }, - "ui": { - "enabled": true - }, - "singleProjectMode": true - } + "flutter": { + "platforms": { + "android": { + "default": { + "projectId": "financial-planner-72109", + "appId": "1:859455980881:android:8f21d0626a1810ac903f70", + "fileOutput": "android/app/google-services.json" + } + }, + "dart": { + "lib/firebase_options.dart": { + "projectId": "financial-planner-72109", + "configurations": { + "android": "1:859455980881:android:8f21d0626a1810ac903f70" + } + } + } + } + }, + "firestore": { + "rules": "firestore.rules", + "indexes": "firestore.indexes.json" + }, + "emulators": { + "auth": { + "port": 9099 + }, + "firestore": { + "port": 8080 + }, + "ui": { + "enabled": true + }, + "singleProjectMode": true + }, + "hosting": [ + { + "target": "website", + "public": "website", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ] + } + ] } diff --git a/lib/ui/onboarding/onboarding.dart b/lib/ui/onboarding/onboarding.dart deleted file mode 100644 index a6f6b50..0000000 --- a/lib/ui/onboarding/onboarding.dart +++ /dev/null @@ -1,115 +0,0 @@ -import 'package:financial_planner_mobile/ui/common/primary_button.dart'; -import 'package:financial_planner_mobile/ui/onboarding/screens/login.dart'; -import 'package:financial_planner_mobile/ui/onboarding/screens/signup.dart'; -import 'package:financial_planner_mobile/util/theme.dart'; -import 'package:flutter/material.dart'; -import 'package:url_launcher/url_launcher.dart'; - -class Onboarding extends StatefulWidget { - const Onboarding({super.key}); - - @override - State createState() => _OnboardingState(); -} - -class _OnboardingState extends State { - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - width: double.infinity, - height: double.infinity, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/images/onboarding.png"), - fit: BoxFit.cover, - alignment: Alignment.center)), - child: Container( - padding: EdgeInsets.all(24), - width: double.infinity, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [Colors.transparent, Color(0xFF000000)], - begin: Alignment.topCenter, - end: Alignment.bottomCenter)), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text( - "TwoAxis Finance", - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 35), - ), - Text( - "Manage your income, expense_sheets and assets with ease!", - style: TextStyle(fontSize: 20), - ), - SizedBox(height: 20), - PrimaryButton(text: "Login to your account", onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => LoginPage())); - }), - SizedBox( - height: 10, - ), - SizedBox( - width: double.infinity, - height: 50, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: darkTheme.surfaceContainer, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10)), - shadowColor: Colors.black, - elevation: 3), - onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => SignupPage())); - }, - child: Text( - "Create an account", - style: TextStyle(color: darkTheme.onPrimary), - ), - ), - ), - SizedBox( - height: 20, - ), - GestureDetector( - onTap: () async { - final Uri uri = - Uri.parse("https://finance.twoaxis.org/privacy.html"); - - await launchUrl(uri, mode: LaunchMode.externalApplication); - }, - child: Text.rich( - TextSpan( - text: "By using our app, you're subject to our ", - // Normal text - children: [ - TextSpan( - text: "Privacy Policy", // Underlined part - style: TextStyle( - decoration: TextDecoration.underline, - decorationColor: Color(0x66FFFFFF), - decorationThickness: 2, - ), - ), - TextSpan(text: ".") - ], - ), - style: TextStyle(color: Color(0x66FFFFFF)), - textAlign: TextAlign.center, - ), - ), - SizedBox( - height: 10, - ), - ], - ), - ), - ), - ); - } -} diff --git a/mobile/.gitignore b/mobile/.gitignore new file mode 100644 index 0000000..2374eeb --- /dev/null +++ b/mobile/.gitignore @@ -0,0 +1,46 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# Key +android/key.properties \ No newline at end of file diff --git a/analysis_options.yaml b/mobile/analysis_options.yaml similarity index 100% rename from analysis_options.yaml rename to mobile/analysis_options.yaml diff --git a/android/.gitignore b/mobile/android/.gitignore similarity index 100% rename from android/.gitignore rename to mobile/android/.gitignore diff --git a/android/app/build.gradle.kts b/mobile/android/app/build.gradle.kts similarity index 100% rename from android/app/build.gradle.kts rename to mobile/android/app/build.gradle.kts diff --git a/mobile/android/app/google-services.json b/mobile/android/app/google-services.json new file mode 100644 index 0000000..2c63ad5 --- /dev/null +++ b/mobile/android/app/google-services.json @@ -0,0 +1,55 @@ +{ + "project_info": { + "project_number": "859455980881", + "project_id": "financial-planner-72109", + "storage_bucket": "financial-planner-72109.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:859455980881:android:8f21d0626a1810ac903f70", + "android_client_info": { + "package_name": "org.twoaxis.finance" + } + }, + "oauth_client": [ + { + "client_id": "859455980881-ovufbhgt45afq5csmpr1bkckmu4hg7p1.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "org.twoaxis.finance", + "certificate_hash": "917d011be11846e992990fc706d3cdc2706a6f12" + } + }, + { + "client_id": "859455980881-vnvqidd0cfpnh10oomkh4otiuba5pc1u.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "org.twoaxis.finance", + "certificate_hash": "5bfd547679e16529f4b9243bd258a3ad0aa18c12" + } + }, + { + "client_id": "859455980881-6kk0ocpjdq3ufe2ih1c7bh39kmht2m31.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCxA9Louij8gPQFHF4IzFXbzQr3i0NeSLA" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "859455980881-6kk0ocpjdq3ufe2ih1c7bh39kmht2m31.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/mobile/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from android/app/src/debug/AndroidManifest.xml rename to mobile/android/app/src/debug/AndroidManifest.xml diff --git a/android/app/src/main/AndroidManifest.xml b/mobile/android/app/src/main/AndroidManifest.xml similarity index 100% rename from android/app/src/main/AndroidManifest.xml rename to mobile/android/app/src/main/AndroidManifest.xml diff --git a/android/app/src/main/ic_launcher-playstore.png b/mobile/android/app/src/main/ic_launcher-playstore.png similarity index 100% rename from android/app/src/main/ic_launcher-playstore.png rename to mobile/android/app/src/main/ic_launcher-playstore.png diff --git a/android/app/src/main/kotlin/xyz/twoaxis/finance/MainActivity.kt b/mobile/android/app/src/main/kotlin/xyz/twoaxis/finance/MainActivity.kt similarity index 100% rename from android/app/src/main/kotlin/xyz/twoaxis/finance/MainActivity.kt rename to mobile/android/app/src/main/kotlin/xyz/twoaxis/finance/MainActivity.kt diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/mobile/android/app/src/main/res/drawable-v21/launch_background.xml similarity index 100% rename from android/app/src/main/res/drawable-v21/launch_background.xml rename to mobile/android/app/src/main/res/drawable-v21/launch_background.xml diff --git a/android/app/src/main/res/drawable/ic_launcher_foreground.xml b/mobile/android/app/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from android/app/src/main/res/drawable/ic_launcher_foreground.xml rename to mobile/android/app/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/android/app/src/main/res/drawable/launch_background.xml b/mobile/android/app/src/main/res/drawable/launch_background.xml similarity index 100% rename from android/app/src/main/res/drawable/launch_background.xml rename to mobile/android/app/src/main/res/drawable/launch_background.xml diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from android/app/src/main/res/mipmap-hdpi/ic_launcher.webp rename to mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp similarity index 100% rename from android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp rename to mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from android/app/src/main/res/mipmap-mdpi/ic_launcher.webp rename to mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp similarity index 100% rename from android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp rename to mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp similarity index 100% rename from android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp rename to mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp similarity index 100% rename from android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp rename to mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp similarity index 100% rename from android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp rename to mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/android/app/src/main/res/values-night/styles.xml b/mobile/android/app/src/main/res/values-night/styles.xml similarity index 100% rename from android/app/src/main/res/values-night/styles.xml rename to mobile/android/app/src/main/res/values-night/styles.xml diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/mobile/android/app/src/main/res/values/ic_launcher_background.xml similarity index 100% rename from android/app/src/main/res/values/ic_launcher_background.xml rename to mobile/android/app/src/main/res/values/ic_launcher_background.xml diff --git a/android/app/src/main/res/values/styles.xml b/mobile/android/app/src/main/res/values/styles.xml similarity index 100% rename from android/app/src/main/res/values/styles.xml rename to mobile/android/app/src/main/res/values/styles.xml diff --git a/android/app/src/profile/AndroidManifest.xml b/mobile/android/app/src/profile/AndroidManifest.xml similarity index 100% rename from android/app/src/profile/AndroidManifest.xml rename to mobile/android/app/src/profile/AndroidManifest.xml diff --git a/android/build.gradle.kts b/mobile/android/build.gradle.kts similarity index 100% rename from android/build.gradle.kts rename to mobile/android/build.gradle.kts diff --git a/android/gradle.properties b/mobile/android/gradle.properties similarity index 100% rename from android/gradle.properties rename to mobile/android/gradle.properties diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/mobile/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from android/gradle/wrapper/gradle-wrapper.properties rename to mobile/android/gradle/wrapper/gradle-wrapper.properties diff --git a/android/settings.gradle.kts b/mobile/android/settings.gradle.kts similarity index 100% rename from android/settings.gradle.kts rename to mobile/android/settings.gradle.kts diff --git a/assets/animations/email_sent.json b/mobile/assets/animations/email_sent.json similarity index 100% rename from assets/animations/email_sent.json rename to mobile/assets/animations/email_sent.json diff --git a/assets/animations/forgot_password.json b/mobile/assets/animations/forgot_password.json similarity index 100% rename from assets/animations/forgot_password.json rename to mobile/assets/animations/forgot_password.json diff --git a/assets/images/assets.png b/mobile/assets/images/assets.png similarity index 100% rename from assets/images/assets.png rename to mobile/assets/images/assets.png diff --git a/assets/images/balances.png b/mobile/assets/images/balances.png similarity index 100% rename from assets/images/balances.png rename to mobile/assets/images/balances.png diff --git a/assets/images/budget.png b/mobile/assets/images/budget.png similarity index 100% rename from assets/images/budget.png rename to mobile/assets/images/budget.png diff --git a/assets/images/empty_data.png b/mobile/assets/images/empty_data.png similarity index 100% rename from assets/images/empty_data.png rename to mobile/assets/images/empty_data.png diff --git a/assets/images/expenses.png b/mobile/assets/images/expenses.png similarity index 100% rename from assets/images/expenses.png rename to mobile/assets/images/expenses.png diff --git a/mobile/assets/images/google.png b/mobile/assets/images/google.png new file mode 100644 index 0000000..7dc504e Binary files /dev/null and b/mobile/assets/images/google.png differ diff --git a/assets/images/income.png b/mobile/assets/images/income.png similarity index 100% rename from assets/images/income.png rename to mobile/assets/images/income.png diff --git a/assets/images/liabilities.png b/mobile/assets/images/liabilities.png similarity index 100% rename from assets/images/liabilities.png rename to mobile/assets/images/liabilities.png diff --git a/assets/images/logo.png b/mobile/assets/images/logo.png similarity index 100% rename from assets/images/logo.png rename to mobile/assets/images/logo.png diff --git a/assets/images/receivables.png b/mobile/assets/images/receivables.png similarity index 100% rename from assets/images/receivables.png rename to mobile/assets/images/receivables.png diff --git a/lib/cubit/assets_cubit.dart b/mobile/lib/cubit/assets_cubit.dart similarity index 100% rename from lib/cubit/assets_cubit.dart rename to mobile/lib/cubit/assets_cubit.dart diff --git a/lib/cubit/balances_cubit.dart b/mobile/lib/cubit/balances_cubit.dart similarity index 100% rename from lib/cubit/balances_cubit.dart rename to mobile/lib/cubit/balances_cubit.dart diff --git a/lib/cubit/bills_cubit.dart b/mobile/lib/cubit/bills_cubit.dart similarity index 100% rename from lib/cubit/bills_cubit.dart rename to mobile/lib/cubit/bills_cubit.dart diff --git a/lib/cubit/budget_cubit.dart b/mobile/lib/cubit/budget_cubit.dart similarity index 100% rename from lib/cubit/budget_cubit.dart rename to mobile/lib/cubit/budget_cubit.dart diff --git a/lib/cubit/currency_cubit.dart b/mobile/lib/cubit/currency_cubit.dart similarity index 100% rename from lib/cubit/currency_cubit.dart rename to mobile/lib/cubit/currency_cubit.dart diff --git a/lib/cubit/expenses_cubit.dart b/mobile/lib/cubit/expenses_cubit.dart similarity index 100% rename from lib/cubit/expenses_cubit.dart rename to mobile/lib/cubit/expenses_cubit.dart diff --git a/lib/cubit/income_cubit.dart b/mobile/lib/cubit/income_cubit.dart similarity index 100% rename from lib/cubit/income_cubit.dart rename to mobile/lib/cubit/income_cubit.dart diff --git a/lib/cubit/liabilities_cubit.dart b/mobile/lib/cubit/liabilities_cubit.dart similarity index 100% rename from lib/cubit/liabilities_cubit.dart rename to mobile/lib/cubit/liabilities_cubit.dart diff --git a/lib/cubit/name_cubit.dart b/mobile/lib/cubit/name_cubit.dart similarity index 100% rename from lib/cubit/name_cubit.dart rename to mobile/lib/cubit/name_cubit.dart diff --git a/lib/cubit/receivables_cubit.dart b/mobile/lib/cubit/receivables_cubit.dart similarity index 100% rename from lib/cubit/receivables_cubit.dart rename to mobile/lib/cubit/receivables_cubit.dart diff --git a/lib/cubit/transactions_cubit.dart b/mobile/lib/cubit/transactions_cubit.dart similarity index 100% rename from lib/cubit/transactions_cubit.dart rename to mobile/lib/cubit/transactions_cubit.dart diff --git a/lib/firebase_options.dart b/mobile/lib/firebase_options.dart similarity index 100% rename from lib/firebase_options.dart rename to mobile/lib/firebase_options.dart diff --git a/lib/main.dart b/mobile/lib/main.dart similarity index 100% rename from lib/main.dart rename to mobile/lib/main.dart diff --git a/lib/ui/app/account/account.dart b/mobile/lib/ui/app/account/account.dart similarity index 100% rename from lib/ui/app/account/account.dart rename to mobile/lib/ui/app/account/account.dart diff --git a/lib/ui/app/account/account_currency.dart b/mobile/lib/ui/app/account/account_currency.dart similarity index 100% rename from lib/ui/app/account/account_currency.dart rename to mobile/lib/ui/app/account/account_currency.dart diff --git a/lib/ui/app/account/account_settings.dart b/mobile/lib/ui/app/account/account_settings.dart similarity index 100% rename from lib/ui/app/account/account_settings.dart rename to mobile/lib/ui/app/account/account_settings.dart diff --git a/lib/ui/app/analytics/analytics.dart b/mobile/lib/ui/app/analytics/analytics.dart similarity index 100% rename from lib/ui/app/analytics/analytics.dart rename to mobile/lib/ui/app/analytics/analytics.dart diff --git a/lib/ui/app/app.dart b/mobile/lib/ui/app/app.dart similarity index 100% rename from lib/ui/app/app.dart rename to mobile/lib/ui/app/app.dart diff --git a/lib/ui/app/assets/asset_action_button.dart b/mobile/lib/ui/app/assets/asset_action_button.dart similarity index 100% rename from lib/ui/app/assets/asset_action_button.dart rename to mobile/lib/ui/app/assets/asset_action_button.dart diff --git a/lib/ui/app/assets/assets.dart b/mobile/lib/ui/app/assets/assets.dart similarity index 100% rename from lib/ui/app/assets/assets.dart rename to mobile/lib/ui/app/assets/assets.dart diff --git a/lib/ui/app/assets/assets_add.dart b/mobile/lib/ui/app/assets/assets_add.dart similarity index 100% rename from lib/ui/app/assets/assets_add.dart rename to mobile/lib/ui/app/assets/assets_add.dart diff --git a/lib/ui/app/balances/balances.dart b/mobile/lib/ui/app/balances/balances.dart similarity index 100% rename from lib/ui/app/balances/balances.dart rename to mobile/lib/ui/app/balances/balances.dart diff --git a/lib/ui/app/balances/balances_action_button.dart b/mobile/lib/ui/app/balances/balances_action_button.dart similarity index 100% rename from lib/ui/app/balances/balances_action_button.dart rename to mobile/lib/ui/app/balances/balances_action_button.dart diff --git a/lib/ui/app/balances/balances_add.dart b/mobile/lib/ui/app/balances/balances_add.dart similarity index 100% rename from lib/ui/app/balances/balances_add.dart rename to mobile/lib/ui/app/balances/balances_add.dart diff --git a/lib/ui/app/bills/bill_details.dart b/mobile/lib/ui/app/bills/bill_details.dart similarity index 100% rename from lib/ui/app/bills/bill_details.dart rename to mobile/lib/ui/app/bills/bill_details.dart diff --git a/lib/ui/app/bills/bill_payment.dart b/mobile/lib/ui/app/bills/bill_payment.dart similarity index 100% rename from lib/ui/app/bills/bill_payment.dart rename to mobile/lib/ui/app/bills/bill_payment.dart diff --git a/lib/ui/app/bills/bills.dart b/mobile/lib/ui/app/bills/bills.dart similarity index 100% rename from lib/ui/app/bills/bills.dart rename to mobile/lib/ui/app/bills/bills.dart diff --git a/lib/ui/app/bills/bills_action_button.dart b/mobile/lib/ui/app/bills/bills_action_button.dart similarity index 100% rename from lib/ui/app/bills/bills_action_button.dart rename to mobile/lib/ui/app/bills/bills_action_button.dart diff --git a/lib/ui/app/bills/bills_add.dart b/mobile/lib/ui/app/bills/bills_add.dart similarity index 100% rename from lib/ui/app/bills/bills_add.dart rename to mobile/lib/ui/app/bills/bills_add.dart diff --git a/lib/ui/app/budget/budget.dart b/mobile/lib/ui/app/budget/budget.dart similarity index 100% rename from lib/ui/app/budget/budget.dart rename to mobile/lib/ui/app/budget/budget.dart diff --git a/lib/ui/app/budget/budget_info.dart b/mobile/lib/ui/app/budget/budget_info.dart similarity index 100% rename from lib/ui/app/budget/budget_info.dart rename to mobile/lib/ui/app/budget/budget_info.dart diff --git a/lib/ui/app/budget/budget_setup.dart b/mobile/lib/ui/app/budget/budget_setup.dart similarity index 100% rename from lib/ui/app/budget/budget_setup.dart rename to mobile/lib/ui/app/budget/budget_setup.dart diff --git a/lib/ui/app/dashboard/dashboard.dart b/mobile/lib/ui/app/dashboard/dashboard.dart similarity index 100% rename from lib/ui/app/dashboard/dashboard.dart rename to mobile/lib/ui/app/dashboard/dashboard.dart diff --git a/lib/ui/app/dashboard/dashboard_button.dart b/mobile/lib/ui/app/dashboard/dashboard_button.dart similarity index 100% rename from lib/ui/app/dashboard/dashboard_button.dart rename to mobile/lib/ui/app/dashboard/dashboard_button.dart diff --git a/lib/ui/app/income/income.dart b/mobile/lib/ui/app/income/income.dart similarity index 100% rename from lib/ui/app/income/income.dart rename to mobile/lib/ui/app/income/income.dart diff --git a/lib/ui/app/income/income_action_button.dart b/mobile/lib/ui/app/income/income_action_button.dart similarity index 100% rename from lib/ui/app/income/income_action_button.dart rename to mobile/lib/ui/app/income/income_action_button.dart diff --git a/lib/ui/app/income/income_add.dart b/mobile/lib/ui/app/income/income_add.dart similarity index 100% rename from lib/ui/app/income/income_add.dart rename to mobile/lib/ui/app/income/income_add.dart diff --git a/lib/ui/app/income/income_details.dart b/mobile/lib/ui/app/income/income_details.dart similarity index 100% rename from lib/ui/app/income/income_details.dart rename to mobile/lib/ui/app/income/income_details.dart diff --git a/lib/ui/app/income/income_edit.dart b/mobile/lib/ui/app/income/income_edit.dart similarity index 100% rename from lib/ui/app/income/income_edit.dart rename to mobile/lib/ui/app/income/income_edit.dart diff --git a/lib/ui/app/income/income_payout.dart b/mobile/lib/ui/app/income/income_payout.dart similarity index 100% rename from lib/ui/app/income/income_payout.dart rename to mobile/lib/ui/app/income/income_payout.dart diff --git a/lib/ui/app/info/info.dart b/mobile/lib/ui/app/info/info.dart similarity index 95% rename from lib/ui/app/info/info.dart rename to mobile/lib/ui/app/info/info.dart index 52148cd..6da3da6 100644 --- a/lib/ui/app/info/info.dart +++ b/mobile/lib/ui/app/info/info.dart @@ -18,7 +18,7 @@ class InfoPage extends StatelessWidget { ListTile( title: Text("Version", style: TextStyle(color: darkTheme.onSurfaceVariant)), - subtitle: Text("1.0.1", + subtitle: Text("1.1.0", style: TextStyle(color: darkTheme.onSurfaceVariant)), leading: Icon(Icons.build, color: darkTheme.onSurfaceVariant), onTap: () {}, @@ -27,7 +27,7 @@ class InfoPage extends StatelessWidget { ListTile( title: Text("Build Number", style: TextStyle(color: darkTheme.onSurfaceVariant)), - subtitle: Text("12", + subtitle: Text("13", style: TextStyle(color: darkTheme.onSurfaceVariant)), leading: Icon(Icons.build, color: darkTheme.onSurfaceVariant), onTap: () {}, diff --git a/lib/ui/app/liabilities/liabilities.dart b/mobile/lib/ui/app/liabilities/liabilities.dart similarity index 100% rename from lib/ui/app/liabilities/liabilities.dart rename to mobile/lib/ui/app/liabilities/liabilities.dart diff --git a/lib/ui/app/liabilities/liabilities_action_button.dart b/mobile/lib/ui/app/liabilities/liabilities_action_button.dart similarity index 100% rename from lib/ui/app/liabilities/liabilities_action_button.dart rename to mobile/lib/ui/app/liabilities/liabilities_action_button.dart diff --git a/lib/ui/app/liabilities/liabilities_add.dart b/mobile/lib/ui/app/liabilities/liabilities_add.dart similarity index 100% rename from lib/ui/app/liabilities/liabilities_add.dart rename to mobile/lib/ui/app/liabilities/liabilities_add.dart diff --git a/lib/ui/app/liabilities/liability_details.dart b/mobile/lib/ui/app/liabilities/liability_details.dart similarity index 100% rename from lib/ui/app/liabilities/liability_details.dart rename to mobile/lib/ui/app/liabilities/liability_details.dart diff --git a/lib/ui/app/liabilities/liability_payment.dart b/mobile/lib/ui/app/liabilities/liability_payment.dart similarity index 100% rename from lib/ui/app/liabilities/liability_payment.dart rename to mobile/lib/ui/app/liabilities/liability_payment.dart diff --git a/lib/ui/app/money_flow/money_flow.dart b/mobile/lib/ui/app/money_flow/money_flow.dart similarity index 100% rename from lib/ui/app/money_flow/money_flow.dart rename to mobile/lib/ui/app/money_flow/money_flow.dart diff --git a/lib/ui/app/quick_add/quick_add_expense.dart b/mobile/lib/ui/app/quick_add/quick_add_expense.dart similarity index 100% rename from lib/ui/app/quick_add/quick_add_expense.dart rename to mobile/lib/ui/app/quick_add/quick_add_expense.dart diff --git a/lib/ui/app/quick_add/quick_add_income.dart b/mobile/lib/ui/app/quick_add/quick_add_income.dart similarity index 100% rename from lib/ui/app/quick_add/quick_add_income.dart rename to mobile/lib/ui/app/quick_add/quick_add_income.dart diff --git a/lib/ui/app/receivables/receivable_details.dart b/mobile/lib/ui/app/receivables/receivable_details.dart similarity index 100% rename from lib/ui/app/receivables/receivable_details.dart rename to mobile/lib/ui/app/receivables/receivable_details.dart diff --git a/lib/ui/app/receivables/receivable_payout.dart b/mobile/lib/ui/app/receivables/receivable_payout.dart similarity index 100% rename from lib/ui/app/receivables/receivable_payout.dart rename to mobile/lib/ui/app/receivables/receivable_payout.dart diff --git a/lib/ui/app/receivables/receivables.dart b/mobile/lib/ui/app/receivables/receivables.dart similarity index 100% rename from lib/ui/app/receivables/receivables.dart rename to mobile/lib/ui/app/receivables/receivables.dart diff --git a/lib/ui/app/receivables/receivables_action_button.dart b/mobile/lib/ui/app/receivables/receivables_action_button.dart similarity index 100% rename from lib/ui/app/receivables/receivables_action_button.dart rename to mobile/lib/ui/app/receivables/receivables_action_button.dart diff --git a/lib/ui/app/receivables/receivables_add.dart b/mobile/lib/ui/app/receivables/receivables_add.dart similarity index 100% rename from lib/ui/app/receivables/receivables_add.dart rename to mobile/lib/ui/app/receivables/receivables_add.dart diff --git a/lib/ui/app/transactions/transactions.dart b/mobile/lib/ui/app/transactions/transactions.dart similarity index 100% rename from lib/ui/app/transactions/transactions.dart rename to mobile/lib/ui/app/transactions/transactions.dart diff --git a/lib/ui/app/wallet/wallet.dart b/mobile/lib/ui/app/wallet/wallet.dart similarity index 100% rename from lib/ui/app/wallet/wallet.dart rename to mobile/lib/ui/app/wallet/wallet.dart diff --git a/lib/ui/common/primary_button.dart b/mobile/lib/ui/common/primary_button.dart similarity index 100% rename from lib/ui/common/primary_button.dart rename to mobile/lib/ui/common/primary_button.dart diff --git a/lib/ui/common/themed_input_field.dart b/mobile/lib/ui/common/themed_input_field.dart similarity index 100% rename from lib/ui/common/themed_input_field.dart rename to mobile/lib/ui/common/themed_input_field.dart diff --git a/mobile/lib/ui/onboarding/onboarding.dart b/mobile/lib/ui/onboarding/onboarding.dart new file mode 100644 index 0000000..887aa17 --- /dev/null +++ b/mobile/lib/ui/onboarding/onboarding.dart @@ -0,0 +1,184 @@ +import 'package:financial_planner_mobile/ui/common/primary_button.dart'; +import 'package:financial_planner_mobile/ui/onboarding/screens/login.dart'; +import 'package:financial_planner_mobile/ui/onboarding/screens/signup.dart'; +import 'package:financial_planner_mobile/util/theme.dart'; +import 'package:financial_planner_mobile/values/spaces.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class Onboarding extends StatefulWidget { + const Onboarding({super.key}); + + @override + State createState() => _OnboardingState(); +} + +class _OnboardingState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Stack( + children: [ + Container( + height: MediaQuery.of(context) + .size + .height, // Extends beyond the App Bar + decoration: BoxDecoration( + gradient: RadialGradient( + colors: [darkTheme.secondary, Colors.transparent], + radius: 1, + center: Alignment.topCenter, + ), + ), + ), + SafeArea( + child: Padding( + padding: const EdgeInsets.all(fullscreenSpacing), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: Column( + children: [ + Image.asset("assets/images/logo.png"), + Text( + "TwoAxis Finance", + style: TextStyle( + fontSize: 30, fontWeight: FontWeight.bold), + ), + Text( + "Your key to riches.", + style: TextStyle( + fontSize: 20, fontWeight: FontWeight.normal), + ), + ], + )), + SizedBox( + height: 100, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + spacing: 10, + children: [ + GestureDetector( + onTap: () async { + final GoogleSignInAccount? googleUser = + await GoogleSignIn().signIn(); + + final GoogleSignInAuthentication? googleAuth = + await googleUser?.authentication; + + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth?.accessToken, + idToken: googleAuth?.idToken, + ); + + await FirebaseAuth.instance + .signInWithCredential(credential); + }, + child: Image.asset( + "assets/images/google.png", + width: 70, + ), + ), + ], + ), + SizedBox( + height: 20, + ), + Row( + spacing: 10, + children: [ + Expanded( + child: Divider( + color: Colors.grey, + )), + Text( + "Or", + style: TextStyle(color: Colors.grey), + ), + Expanded( + child: Divider( + color: Colors.grey, + )), + ], + ), + SizedBox( + height: 20, + ), + PrimaryButton( + text: "Login to your account", + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => LoginPage())); + }), + SizedBox( + height: 10, + ), + SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: darkTheme.surfaceContainer, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + shadowColor: Colors.black, + elevation: 3), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SignupPage())); + }, + child: Text( + "Create an account", + style: TextStyle(color: darkTheme.onPrimary), + ), + ), + ), + SizedBox( + height: 20, + ), + GestureDetector( + onTap: () async { + final Uri uri = + Uri.parse("https://finance.twoaxis.org/privacy.html"); + + await launchUrl(uri, + mode: LaunchMode.externalApplication); + }, + child: Text.rich( + TextSpan( + text: "By using our app, you're subject to our ", + // Normal text + children: [ + TextSpan( + text: "Privacy Policy", // Underlined part + style: TextStyle( + decoration: TextDecoration.underline, + decorationColor: Color(0x66FFFFFF), + decorationThickness: 2, + ), + ), + TextSpan(text: ".") + ], + ), + style: TextStyle(color: Color(0x66FFFFFF)), + textAlign: TextAlign.center, + ), + ), + ], + ), + ), + ) + ], + ), + ); + } +} diff --git a/lib/ui/onboarding/screens/email_sent.dart b/mobile/lib/ui/onboarding/screens/email_sent.dart similarity index 100% rename from lib/ui/onboarding/screens/email_sent.dart rename to mobile/lib/ui/onboarding/screens/email_sent.dart diff --git a/lib/ui/onboarding/screens/forget_password.dart b/mobile/lib/ui/onboarding/screens/forget_password.dart similarity index 100% rename from lib/ui/onboarding/screens/forget_password.dart rename to mobile/lib/ui/onboarding/screens/forget_password.dart diff --git a/lib/ui/onboarding/screens/login.dart b/mobile/lib/ui/onboarding/screens/login.dart similarity index 100% rename from lib/ui/onboarding/screens/login.dart rename to mobile/lib/ui/onboarding/screens/login.dart diff --git a/lib/ui/onboarding/screens/signup.dart b/mobile/lib/ui/onboarding/screens/signup.dart similarity index 100% rename from lib/ui/onboarding/screens/signup.dart rename to mobile/lib/ui/onboarding/screens/signup.dart diff --git a/lib/util/money_format.dart b/mobile/lib/util/money_format.dart similarity index 100% rename from lib/util/money_format.dart rename to mobile/lib/util/money_format.dart diff --git a/lib/util/theme.dart b/mobile/lib/util/theme.dart similarity index 100% rename from lib/util/theme.dart rename to mobile/lib/util/theme.dart diff --git a/lib/values/spaces.dart b/mobile/lib/values/spaces.dart similarity index 100% rename from lib/values/spaces.dart rename to mobile/lib/values/spaces.dart diff --git a/pubspec.lock b/mobile/pubspec.lock similarity index 90% rename from pubspec.lock rename to mobile/pubspec.lock index 0afd051..02b9e5f 100644 --- a/pubspec.lock +++ b/mobile/pubspec.lock @@ -240,6 +240,54 @@ packages: description: flutter source: sdk version: "0.0.0" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "55580f436822d64c8ff9a77e37d61f5fb1e6c7ec9d632a43ee324e2a05c3c6c9" + url: "https://pub.dev" + source: hosted + version: "0.3.3" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + sha256: d0a2c3bcb06e607bb11e4daca48bd4b6120f0bbc4015ccebbe757d24ea60ed2a + url: "https://pub.dev" + source: hosted + version: "6.3.0" + google_sign_in_android: + dependency: transitive + description: + name: google_sign_in_android + sha256: "4e52c64366bdb3fe758f683b088ee514cc7a95e69c52b5ee9fc5919e1683d21b" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: "29cd125f58f50ceb40e8253d3c0209e321eee3e5df16cd6d262495f7cad6a2bd" + url: "https://pub.dev" + source: hosted + version: "5.8.1" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: "5f6f79cf139c197261adb6ac024577518ae48fdff8e53205c5373b5f6430a8aa" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: "460547beb4962b7623ac0fb8122d6b8268c951cf0b646dd150d60498430e4ded" + url: "https://pub.dev" + source: hosted + version: "0.12.4+4" http: dependency: transitive description: diff --git a/pubspec.yaml b/mobile/pubspec.yaml similarity index 98% rename from pubspec.yaml rename to mobile/pubspec.yaml index 6472f43..9bc79f4 100644 --- a/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.1+12 +version: 1.1.0+13 environment: sdk: ^3.5.3 @@ -44,6 +44,7 @@ dependencies: flutter_bloc: ^9.0.0 fl_chart: ^0.70.2 lottie: ^3.3.1 + google_sign_in: ^6.3.0 dev_dependencies: flutter_test: diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 0000000..485dee6 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/website/404.html b/website/404.html new file mode 100644 index 0000000..1e480b7 --- /dev/null +++ b/website/404.html @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + TwoAxis Finance - Not found + + + + +
+

404

+

The page you're trying to access is not found.

+ Home Page +
+ + \ No newline at end of file diff --git a/website/delete.html b/website/delete.html new file mode 100644 index 0000000..9c8edd3 --- /dev/null +++ b/website/delete.html @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + TwoAxis Finance - Delete + + + + + + +
+

Delete your account

+

You can easily delete your account and all of its data in TwoAxis Finance by following these steps:

+
    +
  1. Login to your account if you haven't already.
  2. +
  3. In the top left corner, press on the three dots.
  4. +
  5. Choose Settings from the drop-down menu.
  6. +
  7. Press on Delete your account.
  8. +
  9. Enter your password.
  10. +
  11. Click Delete.
  12. +
+
+

Contact Us

+

If you have questions or concerns, please contact us at:

+
    +
  • Email: contact@twoaxis.org
  • +
+

Thank you for using TwoAxis Finance.

+
+ + + + \ No newline at end of file diff --git a/website/img/GetItOnGooglePlay_Badge_Web_color_English.png b/website/img/GetItOnGooglePlay_Badge_Web_color_English.png new file mode 100644 index 0000000..7a06997 Binary files /dev/null and b/website/img/GetItOnGooglePlay_Badge_Web_color_English.png differ diff --git a/website/img/finance-logo.png b/website/img/finance-logo.png new file mode 100644 index 0000000..dcce857 Binary files /dev/null and b/website/img/finance-logo.png differ diff --git a/website/img/in.svg b/website/img/in.svg new file mode 100644 index 0000000..9da2445 --- /dev/null +++ b/website/img/in.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + diff --git a/website/img/logo.png b/website/img/logo.png new file mode 100644 index 0000000..69dd783 Binary files /dev/null and b/website/img/logo.png differ diff --git a/website/img/out.svg b/website/img/out.svg new file mode 100644 index 0000000..5ae77af --- /dev/null +++ b/website/img/out.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + diff --git a/website/img/phone-1.png b/website/img/phone-1.png new file mode 100644 index 0000000..9313e63 Binary files /dev/null and b/website/img/phone-1.png differ diff --git a/website/img/phone-2.png b/website/img/phone-2.png new file mode 100644 index 0000000..9c6cb34 Binary files /dev/null and b/website/img/phone-2.png differ diff --git a/website/img/phone-3.png b/website/img/phone-3.png new file mode 100644 index 0000000..7cbb322 Binary files /dev/null and b/website/img/phone-3.png differ diff --git a/website/img/phone.png b/website/img/phone.png new file mode 100644 index 0000000..9732ae2 Binary files /dev/null and b/website/img/phone.png differ diff --git a/website/index.html b/website/index.html new file mode 100644 index 0000000..48b8c7a --- /dev/null +++ b/website/index.html @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + TwoAxis Finance + + + +
+

Manage your finances like
a rich dad.

+

TwoAxis Finance is your go-to personal finance
management app.

+ + Get it on Google Play + + TwoAxis Finance Expenses +
+
+ +
+
+

Document your expenses.

+

Whether it’s a one-time occasion or a recurring payment.

+
+
+ +
+
+ +
+
+
+ +

Simple interface.

+

Even a child could use it!

+
+
+ TwoAxis Finance Features +
+
+
+

Easy & Secure

+

We don't ask for more than what we need.

+ Privacy Policy +
+ + + \ No newline at end of file diff --git a/website/privacy.html b/website/privacy.html new file mode 100644 index 0000000..959c501 --- /dev/null +++ b/website/privacy.html @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + TwoAxis Finance - Privacy Policy + + + + + +
+

Privacy Policy

+

Welcome to TwoAxis Finance, a mobile application developed by TwoAxis. Your privacy is important to us, and we are committed to protecting the personal information you share with us. This Privacy Policy outlines how we collect, use, and safeguard your data in compliance with applicable privacy laws, including the General Data Protection Regulation (GDPR).

+
+
+

1. Information We Collect

+

We collect some of your data to ensure you good experience in our app, such as:

+
    +
  • Your E-mail & Password
  • +
  • Data you input in our app, such as income, expenses, liabilities, & assets.
  • +
  • Device information, such as type, model, & operating system.
  • +
+
+
+

2. How We Use Your Information

+

We use the information collected for the following purposes:

+
    +
  • Account Management: To create and authenticate user accounts via Firebase Authentication.
  • +
  • Service Delivery: To enable and manage CRUD (Create, Read, Update, Delete) operations in Firebase Firestore for your financial records.
  • +
  • App Improvement: To analyze app usage data and enhance user experience.
  • +
  • Security: To prevent unauthorized access, fraud, or misuse of our services.
  • +
+
+

3. Data Sharing and Disclosure

+

We do not sell or rent your personal information to third parties. However, we may share your information:

+
    +
  • With Service Providers: For infrastructure and analytics purposes.
  • +
  • For Legal Compliance: If required by law or to protect our legal rights.
  • +
+
+

4. Data Retention

+

We retain your personal data only as long as necessary to fulfill the purposes outlined in this policy or as required by law. You may request deletion of your account and associated data by contacting us at contact@twoaxis.org

+
+

5. Your Rights

+

Under applicable laws, including GDPR, you have the following rights regarding your personal data:

+
    +
  • Access: Request access to the data we hold about you.
  • +
  • Correction: Request correction of inaccurate or incomplete data.
  • +
  • Deletion: Request deletion of your personal data.
  • +
  • Data Portability: Receive your data in a structured, machine-readable format.
  • +
  • Objection: Object to the processing of your data for certain purposes.
  • +
+

To exercise these rights, contact us at contact@twoaxis.org. We will respond within the timeframe required by law.

+
+

6. Data Security

+

We implement appropriate technical and organizational measures to protect your personal data from unauthorized access, alteration, disclosure, or destruction. However, no method of electronic storage is completely secure, and we cannot guarantee absolute security.

+
+

7. GDPR Compliance

+

If you are a resident of the European Economic Area (EEA), we process your data in accordance with GDPR. Our legal basis for processing your personal information includes:

+
    +
  • Consent: For activities where you provide explicit consent.
  • +
  • Contractual Necessity: To fulfill our obligations to you as a user of TwoAxis Finance.
  • +
  • Legitimate Interests: For purposes such as app improvement and security, provided these interests are not overridden by your rights.
  • +
+

If you have concerns about our compliance with GDPR, you have the right to lodge a complaint with your local data protection authority.

+
+

8. Children's Privacy

+

TwoAxis Finance is not intended for individuals under the age of 13, and we do not knowingly collect data from children. If we become aware that we have collected personal data from a child, we will delete it promptly.

+
+

9. Changes to This Privacy Policy

+

We may update this Privacy Policy from time to time to reflect changes in our practices or applicable laws. We encourage you to review this policy periodically. Your continued use of the app after any updates constitutes acceptance of the revised policy.

+
+

10. Contact Us

+

If you have questions or concerns about this Privacy Policy or our data practices, please contact us at:

+
    +
  • Email: contact@twoaxis.org
  • +
+

Thank you for using TwoAxis Finance.

+
+ + + \ No newline at end of file diff --git a/website/sitemap.txt b/website/sitemap.txt new file mode 100644 index 0000000..fe632ca --- /dev/null +++ b/website/sitemap.txt @@ -0,0 +1,4 @@ +https://finance.twoaxis.org/ +https://finance.twoaxis.org/index.html +https://finance.twoaxis.org/privacy.html +https://finance.twoaxis.org/delete.html diff --git a/website/style.css b/website/style.css new file mode 100644 index 0000000..974a4fe --- /dev/null +++ b/website/style.css @@ -0,0 +1,316 @@ +@import url('https://fonts.googleapis.com/css2?family=Sen:wght@400..800&display=swap'); +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Sen", sans-serif; +} +nav { + display: flex; + align-content: center; + width: 1200px; + margin: 0 auto; +} +nav div { + flex: 1; +} +nav div:nth-of-type(1) img { + width: 100px; +} +nav div:nth-of-type(2) { + display: flex; + align-items: center; + justify-content: end; +} + +nav div:nth-of-type(2) a { + color: black; + font-size: 16px; + text-decoration: none; +} +nav div:nth-of-type(2) a + a { + margin-left: 45px; +} +header { + text-align: center; + padding: 0 20px; +} +header h1 { + font-size: 40px; +} +header p { + font-size: 20px; +} +header a { + display: block; + margin: 20px auto; + cursor: pointer; + width: fit-content; + +} +header a img { + width: 225px; + cursor: pointer; +} +header img { + z-index: -100; + width: 400px; +} +header img#phone-1{ + position: relative; + animation: fade-in 2s; +} +@keyframes fade-in { + from { + top: 600px; + } + to { + top: 0; + } +} +section#document { + margin-top: -70px; +} +.transition { + width: 100%; + margin: -5px 0; +} +.content { + background: linear-gradient(to bottom, #a72222, rgb(94, 25, 25)); + padding: 100px 0; + z-index: 100; + display: flex; + align-items: center; +} +.content div { + flex: 1; +} +.content div:nth-of-type(1) { + color: white; + padding: 0 130px; +} + +.content div:nth-of-type(1) h1 { + font-size: 64px; +} +.content div:nth-of-type(1) p { + font-size: 24px; +} + +.content div:nth-of-type(2) { + text-align: right; +} + +.content div:nth-of-type(2) img { + height: 500px; +} +section#interface { + display: flex; + width: 100%; + overflow: hidden; +} +section#interface div { + flex: 1; +} +section#interface div:nth-of-type(1) { + display: flex; + justify-content: center; + flex-direction: column; + padding: 0 80px; +} +section#interface div:nth-of-type(1) h1 { + font-size: 64px; +} +section#interface div:nth-of-type(1) p { + font-size: 24px; +} + +section#interface div:nth-of-type(2) { + text-align: right; +} +section#interface div:nth-of-type(2) img { + height: 656px; +} +section#ease-secure { + text-align: center; + background: #F5F5F5; + padding: 80px 20px +} +section#ease-secure h1 { + font-size: 48px; +} +section#ease-secure p { + font-size: 32px; +} +section#ease-secure a { + color: white; + background: #a72222; + text-decoration: none; + font-size: 16px; + padding: 20px 28px; + border-radius: 8px; + display: block; + width: fit-content; + margin: 30px auto 0; +} +footer { + color: white; + background: #181818; + padding: 60px 40px; +} +footer div#info { + display: flex; + align-items: center; +} +footer div#info div.flex { + flex: 1; +} + +footer div#info div.flex:nth-of-type(2) { + display: flex; + flex: 2; +} +footer div#info div.flex:nth-of-type(2) div { + flex: 1; +} +footer div#info div.flex:nth-of-type(2) div + div { + margin-left: 10px; +} +footer div#info div.flex:nth-of-type(2) div a { + font-size: 13px; + color: white; + text-decoration: none; + display: block; +} +footer div#info div.flex:nth-of-type(2) div a:hover { + text-decoration: underline; +} +footer div#info div.flex:nth-of-type(2) div h1, footer div#info div.flex:nth-of-type(2) div a.h { + color: white; + text-decoration: none; + font-weight: bold; + font-size: 20px; +} +footer div#info div.flex:nth-of-type(2) div h1 { + margin-bottom: 5px; +} +footer div#info div.flex:nth-of-type(3) { + display: flex; + justify-content: right; +} +footer div#info div.flex:nth-of-type(3) img { + width: 145px; +} +footer div#copyright { + text-align: center; + margin-top: 60px; +} +footer div#copyright p { + color: #676767; + font-size: 16px; +} +main { + width: 900px; + margin: 50px auto; +} +main hr { + margin: 20px 0; +} +main ul, main ol { + margin: 20px 60px; +} +@media(max-width: 1300px) { + nav { + width: 90%; + } + +} +@media(max-width: 1200px) { + + .content div:nth-of-type(1) { + padding: 30px; + } + + header h1 { + font-size: 30px; + } + header p { + font-size: 15px; + } + header a img { + width: 180px; + } +} +@media(max-width: 1100px) { + .content { + flex-direction: column; + } + .content div:nth-of-type(1) { + padding: 50px; + } + .content div:nth-of-type(2) { + width: 100%; + } + .content div:nth-of-type(2) img { + height: auto; + width: 90%; + } + + footer div#info div.flex:nth-of-type(2) { + flex: 3; + } +} +@media(max-width: 1000px) { + main { + width: 90%; + } + + .content div:nth-of-type(1) h1 { + font-size: 50px; + } + .content div:nth-of-type(1) p { + font-size: 24px; + } + section#ease-secure h1 { + font-size: 30px; + } + section#ease-secure p { + font-size: 20px; + } +} +@media (max-width: 800px) { + + header img#phone-1 { + width: 90%; + } + + section#interface { + flex-direction: column; + } + section#interface div:nth-of-type(1) { + padding: 80px; + } + section#interface div:nth-of-type(2) img { + height: auto; + width: 90%; + } + footer div#info { + flex-direction: column; + } + footer div#info div.flex:nth-of-type(2) { + width: 100%; + flex-wrap: wrap; + gap: 20px; + } + + footer div#info div.flex:nth-of-type(2) div { + flex: 1 0 150px; + } + + footer div#info div.flex:nth-of-type(2) div + div { + margin: 0; + } + footer div#info div.flex:nth-of-type(3) { + margin-top: 50px; + } +} \ No newline at end of file