# Project export: Chime App

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: TreeHacks 2024
- Tagline: Chime is an AI-powered language learning app designed to break down the barriers of language learning, making it accessible, anxiety-free, and personalized.
- Devpost: https://devpost.com/software/chime-app
- GitHub: https://github.com/kevintran-git/TreeHacks2024-Chime
- Team: 2 GitHub contributor(s) — Kevin Tran (1 commits), Cole Lee (1 commits)

## Devpost submission (written by the team)

### Overview

Problem Statement Spoken language barriers do more than obstruct communication; they hinder the deep, emotional connections that bind us and limit opportunities in our increasingly global society. We've heard countless stories of individuals struggling to communicate with loved ones or feeling isolated in new environments due to language barriers: many grapple with a fear of judgment, making language acquisition incredibly difficult. People should be able to learn languages in a way that feels supportive, engaging, and tailored to their unique needs. The power of speech in breaking down barriers and forging connections in everyday life cannot be overstated. Our solution? Chime. As a group of Stanford students who experienced the difficulties of language learning through our own or our loved one's experiences, we wanted to make language learning more accessible for those who need it the most. About Chime Chime is an AI-driven conversational engine capable of adapting to individual learning styles and progress. Supports 56 languages Web & mobile app, with watchOS companion app Apple Watch “Chime-in” notifications for habit formation Integrates voice recognition, TTS, and AI LLMs Learning and takeaways Embarking on this project, we delved into the complexities of language acquisition, cognitive psychology, and AI technology. Through a combination of voice recognition and multi-model machine learning systems, we've created personalized learning paths and subtle feedback mechanisms to encourage fun and explorative conversations. Informed by our personal experiences and user interviews, we also developed interactive real-world role-play situations where users can practice and broaden their vocabularies. The journey of creating Chime has been challenging, yet incredible, and we can't wait to share this product with the people we've made it for! As we continue to grow and evolve Chime, our mission remains the same: to empower individuals to connect, communicate, and thrive in a multilingual world.

## README (from the GitHub repository)

## About Chime
Chime is an AI-driven conversational engine capable of adapting to individual learning styles and progress.

- Supports 6 languages
- For web & mobile
Apple Watch “Chime-in” notifications for habit formation
Integrates voice recognition, TTS, and AI LLMs

See devpost submission: https://devpost.com/software/chime-app

## Demo Video
- Web/Mobile app: https://www.youtube.com/watch?v=d3ofPSFx7o4
- WatchOS app: https://www.youtube.com/watch?v=DSrn5Vp0aeI

## Build instructions
To run the WatchOS companion app in Simulator: cd into chimeWatch_app, then open ChimeWatch.xcodeproj in XCode. Build the project for Apple Watch Series 9.
To run the Web/iOS app in Simulator: cd into chime_app, run flutter get, then run build and debug from main.dart.


## Detected evidence (automated analysis)

Indexed codebase: 52 recognized source files, 106 KB.
- C (language) — detected in the code
- C++ (language) — detected in the code
- Dart (language) — detected in the code
- HTML (language) — detected in the code
- Kotlin (language) — detected in the code
- Swift (language) — detected in the code
- OpenAI (technology) — claimed on Devpost, not found in the code
- Python (language) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (111 of 111)

```
chime_app/.gitignore
chime_app/.metadata
chime_app/analysis_options.yaml
chime_app/android/.gitignore
chime_app/android/app/build.gradle
chime_app/android/app/src/debug/AndroidManifest.xml
chime_app/android/app/src/main/AndroidManifest.xml
chime_app/android/app/src/main/kotlin/com/example/chime_app/MainActivity.kt
chime_app/android/app/src/main/res/drawable-v21/launch_background.xml
chime_app/android/app/src/main/res/drawable/launch_background.xml
chime_app/android/app/src/main/res/values-night/styles.xml
chime_app/android/app/src/main/res/values/styles.xml
chime_app/android/app/src/profile/AndroidManifest.xml
chime_app/android/build.gradle
chime_app/android/gradle.properties
chime_app/android/gradle/wrapper/gradle-wrapper.properties
chime_app/android/settings.gradle
chime_app/ios/.gitignore
chime_app/ios/Flutter/AppFrameworkInfo.plist
chime_app/ios/Flutter/Debug.xcconfig
chime_app/ios/Flutter/Release.xcconfig
chime_app/ios/Podfile
chime_app/ios/Podfile.lock
chime_app/ios/Runner.xcodeproj/project.pbxproj
chime_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
chime_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
chime_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
chime_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
chime_app/ios/Runner.xcworkspace/contents.xcworkspacedata
chime_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
chime_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
chime_app/ios/Runner/AppDelegate.swift
chime_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
chime_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
chime_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
chime_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
chime_app/ios/Runner/Base.lproj/Main.storyboard
chime_app/ios/Runner/Info.plist
chime_app/ios/Runner/Runner-Bridging-Header.h
chime_app/ios/RunnerTests/RunnerTests.swift
chime_app/lib/api_service.dart
chime_app/lib/chat_screen.dart
chime_app/lib/chatcontents.dart
chime_app/lib/intro_screen.dart
chime_app/lib/language_level_model.dart
chime_app/lib/language_level_screen.dart
chime_app/lib/language_selection_model.dart
chime_app/lib/language_selection.dart
chime_app/lib/main.dart
chime_app/lib/prompt_selection_screen.dart
chime_app/lib/settings.dart
chime_app/lib/shared/widgets/buttons.dart
chime_app/lib/shared/widgets/dropdown.dart
chime_app/lib/shared/widgets/prompt_tile.dart
chime_app/lib/shared/widgets/selectable.dart
chime_app/linux/.gitignore
chime_app/linux/CMakeLists.txt
chime_app/linux/flutter/CMakeLists.txt
chime_app/linux/flutter/generated_plugin_registrant.cc
chime_app/linux/flutter/generated_plugin_registrant.h
chime_app/linux/flutter/generated_plugins.cmake
chime_app/linux/main.cc
chime_app/linux/my_application.cc
chime_app/linux/my_application.h
chime_app/macos/.gitignore
chime_app/macos/Flutter/Flutter-Debug.xcconfig
chime_app/macos/Flutter/Flutter-Release.xcconfig
chime_app/macos/Flutter/GeneratedPluginRegistrant.swift
chime_app/macos/Podfile
chime_app/macos/Podfile.lock
chime_app/macos/Runner.xcodeproj/project.pbxproj
chime_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
chime_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
chime_app/macos/Runner.xcworkspace/contents.xcworkspacedata
chime_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
chime_app/macos/Runner/AppDelegate.swift
chime_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
chime_app/macos/Runner/Base.lproj/MainMenu.xib
chime_app/macos/Runner/Configs/AppInfo.xcconfig
chime_app/macos/Runner/Configs/Debug.xcconfig
chime_app/macos/Runner/Configs/Release.xcconfig
chime_app/macos/Runner/Configs/Warnings.xcconfig
chime_app/macos/Runner/DebugProfile.entitlements
chime_app/macos/Runner/Info.plist
chime_app/macos/Runner/MainFlutterWindow.swift
chime_app/macos/Runner/Release.entitlements
chime_app/macos/RunnerTests/RunnerTests.swift
chime_app/pubspec.lock
chime_app/pubspec.yaml
chime_app/README.md
chime_app/test/widget_test.dart
chime_app/web/index.html
chime_app/web/manifest.json
chime_app/windows/.gitignore
chime_app/windows/CMakeLists.txt
chime_app/windows/flutter/CMakeLists.txt
chime_app/windows/flutter/generated_plugin_registrant.cc
chime_app/windows/flutter/generated_plugin_registrant.h
chime_app/windows/flutter/generated_plugins.cmake
chime_app/windows/runner/CMakeLists.txt
chime_app/windows/runner/flutter_window.cpp
chime_app/windows/runner/flutter_window.h
chime_app/windows/runner/main.cpp
chime_app/windows/runner/resource.h
chime_app/windows/runner/runner.exe.manifest
chime_app/windows/runner/Runner.rc
chime_app/windows/runner/utils.cpp
chime_app/windows/runner/utils.h
chime_app/windows/runner/win32_window.cpp
chime_app/windows/runner/win32_window.h
README.md
```

### Dependencies

No dependency index available.

### Recent commits (newest first)

- Add learning language locale to speech recognition
- Update README.md
- Update README.md
- Create README.md
- Commit for treehacks

## Key source files (fetched from GitHub, selected and truncated for size)

### chime_app/analysis_options.yaml

```yaml
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.

# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml

linter:
  # The lint rules applied to this project can be customized in the
  # section below to disable rules from the `package:flutter_lints/flutter.yaml`
  # included above or to enable additional rules. A list of all available lints
  # and their documentation is published at https://dart.dev/lints.
  #
  # Instead of disabling a lint rule for the entire project in the
  # section below, it can also be suppressed for a single line of code
  # or a specific dart file by using the `// ignore: name_of_lint` and
  # `// ignore_for_file: name_of_lint` syntax on the line or in the file
  # producing the lint.
  rules:
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule

# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

```

### chime_app/pubspec.yaml

```yaml
name: chime_app
description: "A new Flutter project."
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: "none" # Remove this line if you wish to publish to pub.dev

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
# Read more about iOS versioning at
# 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.0+1

environment:
  sdk: ">=3.2.5 <4.0.0"

# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
# consider running `flutter pub upgrade --major-versions`. Alternatively,
# dependencies can be manually updated by changing the version numbers below to
# the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`.
dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  google_translate: any
  flutter_tts: ^3.8.5
  google_fonts: ^6.1.0
  flutter_svg: ^2.0.9
  http: ^1.2.0
  path_provider: ^2.1.2
  just_audio: ^0.9.36
  record: ^5.0.4
  cross_file: ^0.3.3+8
  path: ^1.8.3
  provider: ^6.0.0

dev_dependencies:
  flutter_launcher_icons: "^0.13.1"
  flutter_test:
    sdk: flutter

  # The "flutter_lints" package below contains a set of recommended lints to
  # encourage good coding practices. The lint set provided by the package is
  # activated in the `analysis_options.yaml` file located at the root of your
  # package. See that file for information about deactivating specific lint
  # rules and activating additional ones.
  flutter_lints: ^2.0.0

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter packages.
flutter:
  assets:
    - assets/logo.jpeg
  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  # assets:
  #   - images/a_dot_burr.jpeg
  #   - images/a_dot_ham.jpeg

  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.dev/assets-and-images/#resolution-aware

  # For details regarding adding assets from package dependencies, see
  # https://flutter.dev/assets-and-images/#from-packages

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages

flutter_launcher_icons:
  android: true
  ios: true
  remove_alpha_ios: true
  image_path: "assets/icon/logo.png"
  web:
    generate: true
    image_path: "assets/icon/logo.png"
    background_color: "#FFFFFF"
    theme_color: "#4b18e1"

```

### chime_app/linux/main.cc

```c++
#include "my_application.h"

int main(int argc, char** argv) {
  g_autoptr(MyApplication) app = my_application_new();
  return g_application_run(G_APPLICATION(app), argc, argv);
}

```

### chime_app/linux/my_application.h

```c
#ifndef FLUTTER_MY_APPLICATION_H_
#define FLUTTER_MY_APPLICATION_H_

#include <gtk/gtk.h>

G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
                     GtkApplication)

/**
 * my_application_new:
 *
 * Creates a new Flutter-based application.
 *
 * Returns: a new #MyApplication.
 */
MyApplication* my_application_new();

#endif  // FLUTTER_MY_APPLICATION_H_

```

### chime_app/lib/language_level_model.dart

```dart
import 'package:chime_app/api_service.dart';
import 'package:flutter/foundation.dart';

class LanguageLevelModel with ChangeNotifier {
  String? _languageLevel;

  String? get languageLevel => _languageLevel;

  void setLanguageLevel(String? level) {
    _languageLevel = level;
    ApiService().languageLevel = _languageLevel ?? 'Beginner'; // [1]
    notifyListeners();
  }
}

/**
 * To access _languageLevel later, use Provider class
 * Provider.of<LanguageLevelModel>(context).languageLevel
 */

```

### chime_app/test/widget_test.dart

```dart
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility in the flutter_test package. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:chime_app/main.dart';

void main() {
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(const MyApp());

    // Verify that our counter starts at 0.
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsNothing);

    // Tap the '+' icon and trigger a frame.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    // Verify that our counter has incremented.
    expect(find.text('0'), findsNothing);
    expect(find.text('1'), findsOneWidget);
  });
}

```

### chime_app/lib/language_selection_model.dart

```dart
import 'package:flutter/foundation.dart';
import 'package:chime_app/api_service.dart';

Map<String, String> languageLocaleMap = {
  'Chinese': 'zh',
  'English': 'en',
  'French': 'fr',
  'German': 'de',
  'Hindi': 'hi',
  'Italian': 'it',
  'Norwegian': 'no',
  'Thai': 'th',
  'Spanish': 'es',
  'Vietnamese': 'vi',
};
// Example usage:

class LanguageSelectionModel with ChangeNotifier {
  String? _nativeLanguage;
  String? _learningLanguage;
  String? _learningLanguageLocale; // ie. English is en
  String? _firstPromptTitle;

  String? get nativeLanguage => _nativeLanguage;
  String? get learningLanguage => _learningLanguage;
  String? get learningLanguageLocale => _learningLanguageLocale;
  String? get firstPromptTitle => _firstPromptTitle;

  void setNativeLanguage(String? newLanguage) {
    _nativeLanguage = newLanguage;
    ApiService().nativeLanguage = _nativeLanguage ?? 'English';
    notifyListeners();
  }

  void setFirstPromptTitle(String? newTitle) {
    _firstPromptTitle = newTitle;
    notifyListeners();
  }

  void setLearningLanguage(String? newLanguage) {
    _learningLanguage = newLanguage;
    _learningLanguageLocale = languageLocaleMap[_learningLanguage]; // 'ja'
    final ApiService apiService = ApiService();
    apiService.initTTS(_learningLanguageLocale);
    apiService.learningLanguageLocale = _learningLanguageLocale;
    apiService.learningLanguage = _learningLanguage ?? 'None';
    notifyListeners();
  }
}

```

### chime_app/web/index.html

```html
<!DOCTYPE html>
<html>
<head>
  <!--
    If you are serving your web app in a path other than the root, change the
    href value below to reflect the base path you are serving from.

    The path provided below has to start and end with a slash "/" in order for
    it to work correctly.

    For more details:
    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base

    This is a placeholder for base href that will be replaced by the value of
    the `--base-href` argument provided to `flutter build`.
  -->
  <base href="$FLUTTER_BASE_HREF">

  <meta charset="UTF-8">
  <meta content="IE=Edge" http-equiv="X-UA-Compatible">
  <meta name="description" content="A new Flutter project.">

  <!-- iOS meta tags & icons -->
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="apple-mobile-web-app-title" content="chime_app">
  <link rel="apple-touch-icon" href="icons/Icon-192.png">

  <!-- Favicon -->
  <link rel="icon" type="image/png" href="favicon.png"/>

  <title>chime_app</title>
  <link rel="manifest" href="manifest.json">

  <script>
    // The value below is injected by flutter build, do not touch.
    const serviceWorkerVersion = null;
  </script>
  <!-- This script adds the flutter initialization JS code -->
  <script src="flutter.js" defer></script>
</head>
<body>
  <script>
    window.addEventListener('load', function(ev) {
      // Download main.dart.js
      _flutter.loader.loadEntrypoint({
        serviceWorker: {
          serviceWorkerVersion: serviceWorkerVersion,
        },
        onEntrypointLoaded: function(engineInitializer) {
          engineInitializer.initializeEngine().then(function(appRunner) {
            appRunner.runApp();
          });
        }
      });
    });
  </script>
</body>
</html>

```

### chime_app/lib/main.dart

```dart
import 'package:chime_app/intro_screen.dart';
import 'package:flutter/material.dart';
// import './shared/widgets/buttons.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
import 'package:chime_app/language_level_model.dart';
import 'package:chime_app/language_selection_model.dart';

void main() {
  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => LanguageLevelModel()),
        ChangeNotifierProvider(create: (context) => LanguageSelectionModel()),
      ],
      child: const MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Flutter Demo',
        debugShowCheckedModeBanner: false,
        theme: ThemeData(
          colorScheme: ColorScheme(
            primary: const Color(0xFF3A00E5),
            secondary: const Color(0xFFFAFAFA),
            onPrimary: Colors.white,
            onSecondary: Colors.black,
            onError: Colors.black,
            brightness: Brightness
                .light, // Add this line/ A darker version of the secondary color
            surface: Colors.grey[200]!, // Background color for widgets
            background: Colors.white, // Background color for the MaterialApp
            error: Colors.red, // Color to use for input validation errors
            onSurface: Colors
                .black, // A color that's clearly legible when drawn on 'surface'
            onBackground: Colors
                .black, // A color that's clearly legible when drawn on 'background'
          ), // A color that's clearly legible when drawn on 'error'
          useMaterial3: true,
          textTheme: TextTheme(
            titleLarge: GoogleFonts.workSans(
              fontSize: 30,
              fontStyle: FontStyle.normal,
              color: const Color.fromARGB(255, 255, 255, 255),
            ),
            bodyMedium: GoogleFonts.workSans(
              fontSize: 18,
              color: const Color.fromARGB(255, 255, 255, 255),
            ),
            bodySmall: GoogleFonts.workSans(
              fontSize: 16,
              color: const Color.fromARGB(255, 255, 255, 255),
            ),
            displaySmall: GoogleFonts.workSans(
              fontSize: 16,
            ),
            displayMedium: GoogleFonts.workSans(
              fontSize: 18,
              color: const Color(0xFF3A00E5),
            ),
            displayLarge: GoogleFonts.workSans(
              fontSize: 30,
              color: Colors.black,
            ),
          ),
        ),
        home: const IntroScreen()
        //const MyHomePage(title: 'Flutter Demo Home Page'),
        );
  }
}

```

### chime_app/lib/settings.dart

```dart
import 'package:flutter/material.dart';
import 'package:chime_app/shared/widgets/buttons.dart';

class SettingsPage extends StatelessWidget {
  const SettingsPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: null,
          leading: Container(), // Removed the leading back arrow button
          actions: [
            IconButton(
              icon: const Icon(Icons.close_outlined, size: 30),
              onPressed: () {
                Navigator.pop(context); // Updated to navigate back a page
              },
            ),
          ],
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            const Text(
              'Settings',
              style: TextStyle(fontSize: 32),
            ),
            const SizedBox(height: 25),
            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 50),
              child: Column(
                children: [
                  TextFormField(
                    initialValue: 'Jane Doe',
                    decoration: const InputDecoration(
                      labelText: 'Name',
                      border: OutlineInputBorder(),
                    ),
                  ),
                  const SizedBox(height: 16),
                  TextFormField(
                    initialValue: 'janedoe@stanford.edu',
                    decoration: const InputDecoration(
                      labelText: 'Email',
                      border: OutlineInputBorder(),
                    ),
                  ),
                  const SizedBox(height: 16),
                  DropdownButtonFormField(
                    value: 'Beginner',
                    decoration: const InputDecoration(
                      labelText: 'Language Level',
                      border: OutlineInputBorder(),
                    ),
                    items: ['Beginner', 'Intermediate', 'Advanced', 'Expert']
                        .map((String value) {
                      return DropdownMenuItem<String>(
                        value: value,
                        child: Text(value),
                      );
                    }).toList(),
                    onChanged: (_) {},
                  ),
                ],
              ),
            ),
            const SizedBox(height: 32),
            Padding(
              padding: const EdgeInsets.only(bottom: 50.0),
              child: Column(
                children: [
                  Button(
                    text: 'Save changes',
                    onPressed: () {},
                    backgroundColor: "#FFFFFF",
                    textColor: "#000000",
                  ),
                  const SizedBox(height: 10),
                  Button(
                    text: 'Log out',
                    onPressed: () {},
                    backgroundColor: "#000000",
                  ),
                ],
              ),
            )
          ],
        ));
  }
}

```

[39 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]