# Project export: Lemon

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 2025
- Tagline: A simple, transparent ecommerce platform for bargain produce that connects consumers and businesses with local farmers to reduce food waste and fight climate change
- Devpost: https://devpost.com/software/lemon-7gn5hq
- GitHub: https://github.com/twosodium/lemon
- Demo: https://lemon.flutterflow.app/
- Video: https://www.youtube.com/embed/1pXlAKx7Xzo?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Result: winner (Sustainability Prize: Best incorporation of broader context to enhance venture viability ($800 Cash))
- Team: 3 GitHub contributor(s) — FlutterFlow (3 commits), twosodium (2 commits), elanuk (1 commits)

## Devpost submission (written by the team)

### Inspiration

Reducing food waste is one of the most effective ways to combat climate change. In fact, food waste has an environmental footprint 248x bigger than plastic! 🌍 As we researched the root causes of food waste, we discovered that some 1.2 billion tonnes of fruit and vegetables are discarded annually at farms before they ever reach the market. But why? In the U.S., over 50% of produce is thrown away because it’s considered "too ugly" to sell well — that’s about 60 million tons of perfectly edible food gone to waste. One of our team members has seen firsthand how healthy and edible produce gets discarded just because it doesn’t look perfect. This issue is REAL and needs to be addressed immediately.

### What it does

To solve this problem, we built Lemon. 🍋🌱 Lemon is an app that connects farmers, businesses and individual customers to reduce food waste and fight climate change. By signing up as a customer, you can access discounted, surplus produce from local farmers that would otherwise go to waste. Lemon offers a fully transparent shopping experience; each product is listed with details about its source, and the user has full control over when and what products they buy, like traditional online grocery stores. Producers (farmers) can create listings for their surplus or "wonky" produce, allowing them to sell items that are perfectly good but not deemed aesthetically pleasing enough for traditional markets. Businesses can also shop for discounted produce like customers, but Lemon offers business accounts additional support by enabling them to request in bulk, advertise to nearby users and and form long-term partnerships with local farmers. Lemon’s goal is to raise awareness about the impact of food waste, making it easier for everyone to make sustainable shopping choices and contribute to a greener, more connected world. Painpoints ❓Many consumers want to make sustainable choices but don’t know how. Lemon makes it easy by offering access to eco-friendly food at discounted prices. 🍏 Farmers with surplus & 'imperfect' produce get to sell their produce, creating a new source of income and increasing their positive impact on the environment. 👉 Businesses get to access locally-produced crops at much lower prices, search for and partner with producers and benefit from advertising perks, like sustainability spotlights on the app's main page that are shown to customers in their area. Broader context Lemon’s focus on reducing food waste aligns with environmental regulations. The U.S. government has set a goal to cut food waste in half by 2030 through various initiatives and consumer education. Some states are even passing legislation to restrict the amount of food waste going to landfills. Lemon has strong word-of-mouth potential, driven by eco-conscious consumers as well as farmers who are profiting out of Lemon. We also incorporated share buttons in the app so that users can share information about this initiative with their friends. Market & Impact With 60 million tons of wasted produce every year in the U.S., the opportunity for a sustainable solution is enormous. The demand for eco-friendly food options is growing rapidly. Stakeholder Incentives Farmers: sell produce that would otherwise go to waste; a new source of income. Customers: get fresh, discounted produce; contribute to sustainability. Businesses: get fresh, discounted produce in bulk; get recognition for sustainability efforts.

### How we built it

We implemented our vision for Lemon using Flutterflow. After drawing a lo-fi prototype, taking user experiences into account, we started familiarizing ourselves with Flutterflow and got to building. We used Supabase/PostgreSQL as our database and also added customized functions to our Flutter app. Using Flutterflow's sponsored special access plan, we were able to collaborate real-time on the app and distribute tasks between team members.

### Challenges we ran into

Familiarizing ourselves with a completely new environment, Flutterflow, was challenging at first. This is the first hackathon experience of all team members, making the process extremely exciting but challenging at the same time. Some things on which we spent more time than we probably needed to were 🙃 Setting up the database and user authentication Product listings Shopping cart

### Accomplishments we're proud of

We are super proud of all the progress we made! Starting with only an interest in contributing to sustainability to landing on an idea to building it out with Flutterflow, we accomplished so much that we are proud to showcase.

### What we learned

We are amazed to see how fast we were able to pick up how Flutterflow works and our ability to familiarize ourselves with a new tool showed us the importance of transferable skills, like logic. It also demonstrated that 'hackers' should be quick to adapt and fast learners.

### What's next

We are looking forward to getting feedback on our app, its design, and functionality. We hope to make iterations based on the feedback. We will have access to Flutterflow for two more months and who knows---maybe we'll even get to publish our app! [NOTE: Only MOBILE view]

## README (from the GitHub repository)

# Lemon
TreeHacks 2025 submission. 
[Note: only the mobile stuff works as of now 😔]

## Inspiration
Reducing food waste is one of the most effective ways to combat climate change. In fact, food waste has an environmental footprint 248x bigger than plastic!  🌍
As we researched the root causes of food waste, we discovered that some 1.2 billion tonnes of fruit and vegetables are discarded annually at farms before they ever reach the market. But why?
In the U.S., over 50% of produce is thrown away because it’s considered **"too ugly"** to sell well — that’s about 60 million tons of _perfectly_ edible food gone to waste. One of our team members has seen firsthand how healthy and edible produce gets discarded just because it doesn’t look perfect. This issue is REAL and needs to be addressed immediately.

## What it does
To solve this problem, we built Lemon. 🍋🌱
Lemon is an app that connects farmers, businesses and individual customers to reduce food waste and fight climate change. By signing up as a customer, you can access discounted, surplus produce from local farmers that would otherwise go to waste. Lemon offers a fully transparent shopping experience; each product is listed with details about its source, and the user has full control over when and what products they buy, like traditional online grocery stores. Producers (farmers) can create listings for their surplus or "wonky" produce, allowing them to sell items that are perfectly good but not deemed aesthetically pleasing enough for traditional markets. Businesses can also shop for discounted produce like customers, but Lemon offers business accounts additional support by enabling them to request in bulk, advertise to nearby users and and form long-term partnerships with local farmers. Lemon’s goal is to raise awareness about the impact of food waste, making it easier for everyone to make sustainable shopping choices and contribute to a greener, more connected world.

**Painpoints**
❓Many consumers want to make sustainable choices but don’t know how. Lemon makes it easy by offering access to eco-friendly food at discounted prices. 
🍏 Farmers with surplus & 'imperfect' produce get to sell their produce, creating a new source of income and increasing their positive impact on the environment.
👉 Businesses get to access locally-produced crops at much lower prices, search for and partner with producers and benefit from advertising perks, like sustainability spotlights on the app's main page that are shown to customers in their area.

**Broader context**
Lemon’s focus on reducing food waste aligns with environmental regulations. The U.S. government has set a goal to cut food waste in half by 2030 through various initiatives and consumer education. Some states are even passing legislation to restrict the amount of food waste going to landfills.
Lemon has strong word-of-mouth potential, driven by eco-conscious consumers as well as farmers who are profiting out of Lemon. We also incorporated share buttons in the app so that users can share information about this initiative with their friends.

**Market & Impact**
With 60 million tons of wasted produce every year in the U.S., the opportunity for a sustainable solution is enormous. The demand for eco-friendly food options is growing rapidly.

**Stakeholder Incentives**
Farmers: sell produce that would otherwise go to waste; a new source of income.
Customers: get fresh, discounted produce; contribute to sustainability.
Businesses: get fresh, discounted produce in bulk; get recognition for sustainability efforts.

## How we built it
We implemented our vision for Lemon using Flutterflow. After drawing a lo-fi prototype, taking user experiences into account, we started familiarizing ourselves with Flutterflow and got to building. We used Supabase/PostgreSQL as our database and also added customized functions to our Flutter app. Using Flutterflow's sponsored special access plan, we were able to collaborate real-time on the app and distribute tasks between team members. 

## Challenges we ran into
Familiarizing ourselves with a completely new environment, Flutterflow, was challenging at first. This is the first hackathon experience of all team members, making the process extremely exciting but challenging at the same time. Some things on which we spent more time than we probably needed to were 🙃
- Setting up the database and user authentication
- Product listings 
- Shopping cart 

## Accomplishments that we're proud of
We are super proud of all the progress we made! Starting with only an interest in contributing to sustainability to landing on an idea to building it out with Flutterflow, we accomplished so much that we are proud to showcase.

## What we learned
We are amazed to see how fast we were able to pick up how Flutterflow works and our ability to familiarize ourselves with a new tool showed us the importance of transferable skills, like logic. It also demonstrated that 'hackers' should be quick to adapt and fast learners.

## What's next for Lemon
We are looking forward to getting feedback on our app, its design, and functionality. We hope to make iterations based on the feedback. We will have access to Flutterflow for two more months and who knows---maybe we'll even get to publish our app!


## Detected evidence (automated analysis)

Indexed codebase: 130 recognized source files, 696 KB.
- C (language) — detected in the code
- Dart (language) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code
- Kotlin (language) — detected in the code
- Swift (language) — detected in the code
- Supabase (technology) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (120 of 169)

```
analysis_options.yaml
android/.gitignore
android/app/build.gradle
android/app/google-services.json
android/app/proguard-rules.pro
android/app/src/debug/AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
android/app/src/main/kotlin/com/example/my_project/MainActivity.kt
android/app/src/main/res/drawable/launch_background.xml
android/app/src/main/res/values-night-v31/styles.xml
android/app/src/main/res/values-night/styles.xml
android/app/src/main/res/values-v31/styles.xml
android/app/src/main/res/values/strings.xml
android/app/src/main/res/values/styles.xml
android/app/src/profile/AndroidManifest.xml
android/build.gradle
android/gradle.properties
android/gradle/wrapper/gradle-wrapper.properties
android/settings.gradle
assets/fonts/SF-Pro-Text-Bold.otf
assets/fonts/SF-Pro-Text-Light.otf
assets/fonts/SF-Pro-Text-Medium.otf
assets/fonts/SF-Pro-Text-Regular.otf
assets/fonts/SF-Pro-Text-Semibold.otf
firebase/firebase.json
firebase/functions/api_manager.js
firebase/functions/index.js
firebase/functions/package.json
firebase/storage.rules
ios/.gitignore
ios/Flutter/AppFrameworkInfo.plist
ios/Flutter/Debug.xcconfig
ios/Flutter/Release.xcconfig
ios/ImageNotification/Info.plist
ios/ImageNotification/NotificationService.swift
ios/Podfile
ios/Runner.xcodeproj/project.pbxproj
ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
ios/Runner.xcworkspace/contents.xcworkspacedata
ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
ios/Runner/AppDelegate.swift
ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
ios/Runner/Base.lproj/LaunchScreen.storyboard
ios/Runner/Base.lproj/Main.storyboard
ios/Runner/GoogleService-Info.plist
ios/Runner/Info.plist
ios/Runner/PrivacyInfo.xcprivacy
ios/Runner/Runner-Bridging-Header.h
ios/Runner/Runner.entitlements
lib/app_state.dart
lib/auth/auth_manager.dart
lib/auth/base_auth_user_provider.dart
lib/auth/supabase_auth/auth_util.dart
lib/auth/supabase_auth/email_auth.dart
lib/auth/supabase_auth/supabase_auth_manager.dart
lib/auth/supabase_auth/supabase_user_provider.dart
lib/backend/firebase_analytics/analytics.dart
lib/backend/firebase/firebase_config.dart
lib/backend/supabase/database/database.dart
lib/backend/supabase/database/row.dart
lib/backend/supabase/database/table.dart
lib/backend/supabase/database/tables/carts.dart
lib/backend/supabase/database/tables/category_list.dart
lib/backend/supabase/database/tables/facts.dart
lib/backend/supabase/database/tables/orders.dart
lib/backend/supabase/database/tables/products.dart
lib/backend/supabase/database/tables/users.dart
lib/backend/supabase/storage/storage.dart
lib/backend/supabase/supabase.dart
lib/components/addeto_cart_model.dart
lib/components/addeto_cart_widget.dart
lib/components/cart_item_model.dart
lib/components/cart_item_widget.dart
lib/components/category_model.dart
lib/components/category_widget.dart
lib/components/custom_appbar_model.dart
lib/components/custom_appbar_widget.dart
lib/components/navbar_model.dart
lib/components/navbar_widget.dart
lib/components/popup_farmercontact_model.dart
lib/components/popup_farmercontact_widget.dart
lib/components/product_model.dart
lib/components/product_widget.dart
lib/components/search_filter_popup_model.dart
lib/components/search_filter_popup_widget.dart
lib/components/thank_you_model.dart
lib/components/thank_you_widget.dart
lib/componentsdefault/accordion_section/accordion_section_model.dart
lib/componentsdefault/accordion_section/accordion_section_widget.dart
lib/componentsdefault/loader_item/loader_item_model.dart
lib/componentsdefault/loader_item/loader_item_widget.dart
lib/componentsdefault/meal_bottom_sheet/meal_bottom_sheet_model.dart
lib/componentsdefault/meal_bottom_sheet/meal_bottom_sheet_widget.dart
lib/componentsdefault/meal_card_loading/meal_card_loading_model.dart
lib/componentsdefault/meal_card_loading/meal_card_loading_widget.dart
lib/componentsdefault/title_with_subtitle/title_with_subtitle_model.dart
lib/componentsdefault/title_with_subtitle/title_with_subtitle_widget.dart
lib/custom_code/widgets/index.dart
lib/custom_code/widgets/new_custom_widget.dart
lib/flutter_flow/custom_functions.dart
lib/flutter_flow/flutter_flow_animations.dart
lib/flutter_flow/flutter_flow_choice_chips.dart
lib/flutter_flow/flutter_flow_count_controller.dart
lib/flutter_flow/flutter_flow_drop_down.dart
lib/flutter_flow/flutter_flow_icon_button.dart
lib/flutter_flow/flutter_flow_model.dart
lib/flutter_flow/flutter_flow_place_picker.dart
lib/flutter_flow/flutter_flow_theme.dart
lib/flutter_flow/flutter_flow_util.dart
lib/flutter_flow/flutter_flow_widgets.dart
lib/flutter_flow/form_field_controller.dart
lib/flutter_flow/internationalization.dart
lib/flutter_flow/lat_lng.dart
lib/flutter_flow/nav/nav.dart
[49 more files omitted for size]
```

### Dependencies

- firebase/functions/package.json: @mux/mux-node@^7.3.3, @onesignal/node-onesignal@^2.0.1-beta2, axios@1.7.4, braintree@^3.6.0, eslint@^6.8.0, eslint-plugin-promise@^4.2.1, firebase-admin@^11.11.0, firebase-functions@^4.4.1, qs@^6.7.0, razorpay@^2.8.4, stripe@^8.0.1

### Recent commits (newest first)

- don't read me tbh
- it\'s over (we\'re so back
- tre
- Update README.md
- idk bro i pasted this out of the devpost
- 3 consecutive bobas later
- lock in 2/15  oohhhhh the misery
- Valentine\'s night update the grind is real

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

### firebase/functions/package.json

```
{
  "name": "cloud-functions",
  "description": "Firebase Cloud Functions",
  "dependencies": {
    "firebase-admin": "^11.11.0",
    "firebase-functions": "^4.4.1",
    "braintree": "^3.6.0",
    "@mux/mux-node": "^7.3.3",
    "stripe": "^8.0.1",
    "axios": "1.7.4",
    "razorpay": "^2.8.4",
    "qs": "^6.7.0",
    "@onesignal/node-onesignal": "^2.0.1-beta2"
  },
  "devDependencies": {
    "eslint": "^6.8.0",
    "eslint-plugin-promise": "^4.2.1"
  },
  "scripts": {
    "lint": "./node_modules/.bin/eslint --max-warnings=0 .",
    "serve": "firebase -P meal-planner-3841f emulators:start --only functions",
    "shell": "firebase -P meal-planner-3841f functions:shell",
    "start": "npm run shell",
    "logs": "firebase -P meal-planner-3841f functions:log",
    "compile": "cp ../../tsconfig.template.json ./tsconfig-compile.json && tsc --project tsconfig-compile.json"
  },
  "engines": {
    "node": "18"
  },
  "private": true
}

```

### firebase/functions/index.js

```javascript
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

```

### 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
    unnecessary_string_escapes: false

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

### pubspec.yaml

```yaml
name: lemon
description: A new Flutter project.

# The following line prevents the package from being accidentally published to
# pub.dev using `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 used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1

environment:
  sdk: ">=3.0.0 <4.0.0"

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  flutter_web_plugins:
    sdk: flutter
  app_links: 6.3.2
  app_links_platform_interface: 2.0.2
  auto_size_text: 3.0.0
  cached_network_image: 3.4.1
  cached_network_image_platform_interface: 4.1.1
  cached_network_image_web: 1.3.1
  collection: 1.19.0
  csslib: 0.17.3
  csv: 6.0.0
  dropdown_button2: 2.3.9
  file_picker: 8.1.2
  firebase_analytics: 11.3.5
  firebase_analytics_platform_interface: 4.2.7
  firebase_analytics_web: 0.5.10+4
  firebase_core: 3.8.0
  firebase_core_platform_interface: 5.3.0
  firebase_core_web: 2.18.1
  flutter_animate: 4.5.0
  flutter_cache_manager: 3.4.1
  flutter_google_places: 
    git:
      url: https://github.com/ShehanYjoz/flutter_google_places.git
  flutter_plugin_android_lifecycle: 2.0.20
  flutter_secure_storage: 9.2.2
  flutter_secure_storage_linux: 1.2.1
  flutter_secure_storage_macos: 3.1.2
  flutter_secure_storage_platform_interface: 1.1.2
  flutter_secure_storage_web: 1.2.1
  flutter_secure_storage_windows: 3.1.2
  font_awesome_flutter: 10.7.0
  from_css_color: 2.0.0
  functions_client: 2.3.2
  go_router: 12.1.3
  google_fonts: 6.1.0
  gotrue: 2.8.4
  hive: 2.2.3
  html: 0.15.4
  image_picker: 1.1.2
  image_picker_android: 0.8.12+13
  image_picker_for_web: 3.0.5
  image_picker_ios: 0.8.12
  image_picker_linux: 0.2.1+1
  image_picker_macos: 0.2.1+1
  image_picker_platform_interface: 2.10.0
  image_picker_windows: 0.2.1+1
  intl: 0.19.0
  json_path: 0.7.2
  mime_type: 1.0.0
  package_info_plus: 8.0.2
  package_info_plus_platform_interface: 3.0.1
  page_transition: 2.1.0
  path_provider: 2.1.4
  path_provider_android: 2.2.10
  path_provider_foundation: 2.4.0
  path_provider_linux: 2.2.1
  path_provider_platform_interface: 2.1.2
  path_provider_windows: 2.3.0
  platform_detect: 2.1.0
  plugin_platform_interface: 2.1.8
  postgrest: 2.1.4
  provider: 6.1.2
  realtime_client: 2.2.1
  rxdart: 0.27.7
  share_plus: 10.0.2
  share_plus_platform_interface: 5.0.0
  shared_preferences: 2.3.2
  shared_preferences_android: 2.3.2
  shared_preferences_foundation: 2.5.2
  shared_preferences_linux: 2.4.1
  shared_preferences_platform_interface: 2.4.1
  shared_preferences_web: 2.4.2
  shared_preferences_windows: 2.4.1
  sign_in_with_apple: 6.1.2
  sign_in_with_apple_platform_interface: 1.1.0
  sign_in_with_apple_web: 2.1.0
  sqflite: 2.3.3+1
  sqflite_common: 2.5.4+3
  storage_client: 2.0.3
  supabase: 2.3.0
  supabase_flutter: 2.6.0
  synchronized: 3.2.0
  timeago: 3.6.1
  url_launcher: 6.3.0
  url_launcher_android: 6.3.10
  url_launcher_ios: 6.3.1
  url_launcher_linux: 3.2.0
  url_launcher_macos: 3.2.1
  url_launcher_platform_interface: 2.3.2
  url_launcher_web: 2.3.3
  url_launcher_windows: 3.1.2
  video_player: 2.9.2
  video_player_android: 2.7.13
  video_player_avfoundation: 2.6.2
  video_player_platform_interface: 6.2.3
  video_player_web: 2.3.2
  webview_flutter: 4.9.0
  webview_flutter_android: 3.16.7
  webview_flutter_platform_interface: 2.10.0
  webview_flutter_wkwebview: 3.15.0

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.0

dependency_overrides:
  http: 1.2.2
  package_info_plus: 8.0.2
  package_info_plus_platform_interface: 3.0.1
  rxdart: 0.27.7
  uuid: ^4.0.0
  win32: 5.5.1

dev_dependencies:
  flutter_launcher_icons: 0.13.1
  flutter_lints: 4.0.0
  image: 4.2.0
  lints: 4.0.0
  flutter_test:
    sdk: flutter


flutter_launcher_icons:
  android: true
  ios: true
  remove_alpha_ios: true
  web:
    generate: true
  image_path: 'assets/images/app_launcher_icon.png'


# 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.
flutter:

  # 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:
    - assets/fonts/
    - assets/images/
    - assets/videos/
    - assets/audios/
    - assets/rive_animations/
    - assets/pdfs/
    - assets/jsons/

  fonts:
    - family: 'SF Pro'
      fonts:
        - asset: assets/fonts/SF-Pro-Text-Light.otf
          weight: 300
        - asset: assets/fonts/SF-Pro-Text-Regular.otf
        - asset: assets/fonts/SF-Pro-Text-Medium.otf
          weight: 500
        - asset: assets/fonts/SF-Pro-Text-Semibold.otf
          weight: 600
        - asset: assets/fonts/SF-Pro-Text-Bold.otf
          weight: 700


  # 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

[truncated — 780 more characters]
```

### web/flutter_bootstrap.js

```javascript
{{flutter_js}}
{{flutter_build_config}}

_flutter.loader.load(
    {
        onEntrypointLoaded: async function(engineInitializer) {
            // Initialize the Flutter engine
            let appRunner = await engineInitializer.initializeEngine({});
            // Run the app
            await appRunner.runApp();
          }
    }
);

```

### 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 that Flutter provides. 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_test/flutter_test.dart';

import 'package:lemon/main.dart';

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

```

### lib/index.dart

```dart
// Export pages
export '/pages/sign_up/sign_up_widget.dart' show SignUpWidget;
export '/pages/farmer/update_profile_farmer/update_profile_farmer_widget.dart'
    show UpdateProfileFarmerWidget;
export '/pages/customer/public/public_widget.dart' show PublicWidget;
export '/pages/product_details/product_details_widget.dart'
    show ProductDetailsWidget;
export '/pages/customer/update_profile_customer/update_profile_customer_widget.dart'
    show UpdateProfileCustomerWidget;
export '/pages/about_us/about_us_widget.dart' show AboutUsWidget;
export '/pages/farmer/farmer_mainpage/farmer_mainpage_widget.dart'
    show FarmerMainpageWidget;
export '/pages/farmer/createitem/createitem_widget.dart' show CreateitemWidget;
export '/pages/business/business_mainpage/business_mainpage_widget.dart'
    show BusinessMainpageWidget;
export '/pages/business/update_profile_business/update_profile_business_widget.dart'
    show UpdateProfileBusinessWidget;
export '/pages/business/request/request_widget.dart' show RequestWidget;
export '/pages/load/load_widget.dart' show LoadWidget;
export '/pages/search_results/search_results_widget.dart'
    show SearchResultsWidget;
export '/pages/customer/cart/cart_widget.dart' show CartWidget;
export '/pages/log_in/log_in_widget.dart' show LogInWidget;
export '/payment/payment_widget.dart' show PaymentWidget;

```

### 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.

    Alternatively, build your application passing the --base-href parameter
    specifying the new root path of your web app.

    Fore more details:
    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
  -->
  <base href="$FLUTTER_BASE_HREF">

  <meta charset="UTF-8">
  <meta content="IE=Edge" http-equiv="X-UA-Compatible">

  <!-- 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="Lemon">

  

  <meta name="robots" content="noindex" />

  <!-- Favicon -->
  <link rel="icon" href="Juce--Streamline-Simple-Icons.svg.png" sizes="any"/>
  

  <!-- Open Graph & SEO tags -->
  <meta property="og:title" content="Lemon" />
  <meta property="og:description" content="Built with FlutterFlow." />
  <meta property="og:image" content="/assets/assets/images/Juce--Streamline-Simple-Icons.svg.png" /> 
  <meta name="twitter:title" content="Lemon" />
  <meta name="twitter:description" content="Built with FlutterFlow." />
  <meta name="twitter:image" content="/assets/assets/images/Juce--Streamline-Simple-Icons.svg.png" />
  <meta name="twitter:card" content="summary_large_image" />

  <title> Lemon </title>
  <meta name="description" content="Built with FlutterFlow." />
    

  <!-- Status Bar color in Safari browser (iOS) and PWA -->
  <meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
  <meta name="theme-color" media="(prefers-color-scheme: dark)"  content="#1a1f24">

  <link rel="manifest" href="manifest.json">
  
</head>
<body>
  
  
  
  
  
  <script>
    {{flutter_bootstrap_js}}
  </script>
</body>
</html>

```

### lib/main.dart

```dart
import 'package:provider/provider.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_web_plugins/url_strategy.dart';

import 'auth/supabase_auth/supabase_user_provider.dart';
import 'auth/supabase_auth/auth_util.dart';

import '/backend/supabase/supabase.dart';
import 'backend/firebase/firebase_config.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import 'flutter_flow/flutter_flow_util.dart';
import 'flutter_flow/internationalization.dart';
import 'flutter_flow/nav/nav.dart';
import 'index.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  GoRouter.optionURLReflectsImperativeAPIs = true;
  usePathUrlStrategy();

  await initFirebase();

  await SupaFlow.initialize();

  await FlutterFlowTheme.initialize();

  final appState = FFAppState(); // Initialize FFAppState
  await appState.initializePersistedState();

  runApp(ChangeNotifierProvider(
    create: (context) => appState,
    child: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  // This widget is the root of your application.
  @override
  State<MyApp> createState() => _MyAppState();

  static _MyAppState of(BuildContext context) =>
      context.findAncestorStateOfType<_MyAppState>()!;
}

class _MyAppState extends State<MyApp> {
  Locale? _locale;

  ThemeMode _themeMode = FlutterFlowTheme.themeMode;

  late AppStateNotifier _appStateNotifier;
  late GoRouter _router;
  String getRoute([RouteMatch? routeMatch]) {
    final RouteMatch lastMatch =
        routeMatch ?? _router.routerDelegate.currentConfiguration.last;
    final RouteMatchList matchList = lastMatch is ImperativeRouteMatch
        ? lastMatch.matches
        : _router.routerDelegate.currentConfiguration;
    return matchList.uri.toString();
  }

  late Stream<BaseAuthUser> userStream;

  @override
  void initState() {
    super.initState();

    _appStateNotifier = AppStateNotifier.instance;
    _router = createRouter(_appStateNotifier);
    userStream = lemonSupabaseUserStream()
      ..listen((user) {
        _appStateNotifier.update(user);
      });
    jwtTokenStream.listen((_) {});
    Future.delayed(
      Duration(milliseconds: 1000),
      () => _appStateNotifier.stopShowingSplashImage(),
    );
  }

  void setLocale(String language) {
    safeSetState(() => _locale = createLocale(language));
  }

  void setThemeMode(ThemeMode mode) => safeSetState(() {
        _themeMode = mode;
        FlutterFlowTheme.saveThemeMode(mode);
      });

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      title: 'Lemon',
      localizationsDelegates: [
        FFLocalizationsDelegate(),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        FallbackMaterialLocalizationDelegate(),
        FallbackCupertinoLocalizationDelegate(),
      ],
      locale: _locale,
      supportedLocales: const [
        Locale('en'),
      ],
      theme: ThemeData(
        brightness: Brightness.light,
        useMaterial3: false,
      ),
      darkTheme: ThemeData(
        brightness: Brightness.dark,
        useMaterial3: false,
      ),
      themeMode: _themeMode,
      routerConfig: _router,
    );
  }
}

```

### lib/app_state.dart

```dart
import 'package:flutter/material.dart';
import 'backend/supabase/supabase.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:csv/csv.dart';
import 'package:synchronized/synchronized.dart';
import 'flutter_flow/flutter_flow_util.dart';

class FFAppState extends ChangeNotifier {
  static FFAppState _instance = FFAppState._internal();

  factory FFAppState() {
    return _instance;
  }

  FFAppState._internal();

  static void reset() {
    _instance = FFAppState._internal();
  }

  Future initializePersistedState() async {
    secureStorage = FlutterSecureStorage();
    await _safeInitAsync(() async {
      _accountType =
          await secureStorage.getString('ff_accountType') ?? _accountType;
    });
  }

  void update(VoidCallback callback) {
    callback();
    notifyListeners();
  }

  late FlutterSecureStorage secureStorage;

  String _accountType = '';
  String get accountType => _accountType;
  set accountType(String value) {
    _accountType = value;
    secureStorage.setString('ff_accountType', value);
  }

  void deleteAccountType() {
    secureStorage.delete(key: 'ff_accountType');
  }

  double _carbonEmissions = 0.0;
  double get carbonEmissions => _carbonEmissions;
  set carbonEmissions(double value) {
    _carbonEmissions = value;
  }

  String _userLoc = '';
  String get userLoc => _userLoc;
  set userLoc(String value) {
    _userLoc = value;
  }

  String _higlightText = '';
  String get higlightText => _higlightText;
  set higlightText(String value) {
    _higlightText = value;
  }

  String _highlightBusiness = '';
  String get highlightBusiness => _highlightBusiness;
  set highlightBusiness(String value) {
    _highlightBusiness = value;
  }
}

void _safeInit(Function() initializeField) {
  try {
    initializeField();
  } catch (_) {}
}

Future _safeInitAsync(Function() initializeField) async {
  try {
    await initializeField();
  } catch (_) {}
}

extension FlutterSecureStorageExtensions on FlutterSecureStorage {
  static final _lock = Lock();

  Future<void> writeSync({required String key, String? value}) async =>
      await _lock.synchronized(() async {
        await write(key: key, value: value);
      });

  void remove(String key) => delete(key: key);

  Future<String?> getString(String key) async => await read(key: key);
  Future<void> setString(String key, String value) async =>
      await writeSync(key: key, value: value);

  Future<bool?> getBool(String key) async => (await read(key: key)) == 'true';
  Future<void> setBool(String key, bool value) async =>
      await writeSync(key: key, value: value.toString());

  Future<int?> getInt(String key) async =>
      int.tryParse(await read(key: key) ?? '');
  Future<void> setInt(String key, int value) async =>
      await writeSync(key: key, value: value.toString());

  Future<double?> getDouble(String key) async =>
      double.tryParse(await read(key: key) ?? '');
  Future<void> setDouble(String key, double value) async =>
      await writeSync(key: key, value: value.toString());

  Future<List<String>?> getStringList(String key) async =>
      await read(key: key).then((result) {
        if (result == null || result.isEmpty) {
          return null;
        }
        return CsvToListConverter()
            .convert(result)
            .first
            .map((e) => e.toString())
            .toList();
      });
  Future<void> setStringList(String key, List<String> value) async =>
      await writeSync(key: key, value: ListToCsvConverter().convert([value]));
}

```

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