A community-driven app for sharing tech problems and their fixing steps.
Built with Flutter & Firebase
FixIt Community is a mobile application that lets people come together to solve everyday technology problems. Users post the issues they run into β from a flickering laptop screen to a printer that won't connect β along with the step-by-step fixes that worked for them. Others can browse a searchable, category-filtered feed, open a problem for the full write-up, and build their own profile in the community.
Whether you are a hobbyist, a student, or an IT enthusiast, FixIt Community is your shared knowledge base for troubleshooting electronics, computers, mobile devices, networking gear, and more.
π‘ Demo mode β The app ships with an offline demo mode (
lib/config/app_config.dart) that seeds realistic data so the whole experience is runnable and testable without a network connection or a Firebase project. Flip the switch to go live against Cloud Firestore.
- π Animated splash screen β Branded intro with a fade/scale animation that remembers returning users and routes them straight to the feed.
- π€ Username sign-up / login β Lightweight, password-less onboarding. Pick a unique
@usernameand you're in; the session persists locally viashared_preferences. - π Community feed β A reverse-chronological list of problems posted by the community, each showing title, category, author, and timestamp.
- ποΈ Category filtering β Quick category chips (Electronics, Computer, Mobile, Home Repair, Laptop, Networking, Printer, Software, Gaming Console, Other) to narrow the feed.
- π Full-text search β Instant, case-insensitive search across title, description, category, author, and fixing steps (multi-word queries use AND semantics).
- β Post a problem β Compose a problem with a title, category, detailed description, and any number of ordered fixing steps.
- π Problem detail view β Dedicated screen with the full description and a numbered list of fixing steps.
- βοΈ Profile management β Edit your display name, upload a profile picture from the gallery (stored as base64), and delete your account (which also removes the problems you authored).
- π§ Floating glassmorphic navbar β A modern, blurred bottom navigation bar with Home / Post / Profile destinations.
- π Material 3 design β Polished, consistent UI built on a custom light theme with the Poppins font and a warm amber/black palette.
| Layer | Technology |
|---|---|
| Framework | Flutter 3.x (Dart SDK ^3.12.2) |
| Language | Dart 3 |
| Backend / DB | Firebase Core + Cloud Firestore |
| Local storage | shared_preferences (session persistence) |
| Media | image_picker (profile photos) |
| Typography | google_fonts β Poppins |
| Design system | Material 3 (useMaterial3: true) |
| Platform | Android (with release signing config) |
The app follows a clean, layered structure that keeps the UI completely decoupled from the data backend.
βββββββββββββββββββββββββββββββββββββββββββββββ
β Screens (UI) β
β Splash Β· Username Β· Home Β· Add Β· Profile β
βββββββββββββββββββββ¬ββββββββββββββββββββββββββ
β (never talks to Firebase directly)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββ
β DataService (single entry β
β point for all persistence) β
βββββββββββββ¬ββββββββββββββββββββββββ¬ββββββββββ
β β
βΌ βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β Cloud Firestore β β In-memory demo store β
β (production) β β (offline demo mode) β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
Key architectural decisions
DataServiceas the only data gateway. Every screen callsDataServiceinstead ofFirebaseFirestoredirectly. All methods return plainMap<String, dynamic>/Listdata β never Firestore document types β so the UI stays backend-agnostic and unit-testable.- Demo mode toggle.
lib/config/app_config.dartexposesdemoModeEnabled. Whentrue,DataServiceserves seeded in-memory data; whenfalse(or via--dart-define=DEMO=false), it performs real Cloud Firestore operations. The UI behaves identically in both modes. - Session persistence. The signed-in
@usernameis stored inshared_preferences; the splash screen reads it to decide whether to route to the feed or the username screen. - Feature-first folder layout. Code is organized by responsibility (
config,core/theme,data,services,utils,widgets,screens) rather than by file type only.
fixit_community/
βββ android/ # Native Android project & signing config
βββ assets/
β βββ images/
β βββ app_icon.png # App logo / launcher icon
βββ lib/
β βββ config/
β β βββ app_config.dart # Global demo-mode switch
β βββ core/
β β βββ theme/
β β βββ app_colors.dart # Central color palette
β β βββ app_theme.dart # Material 3 light theme (Poppins)
β βββ data/
β β βββ demo_data.dart # Offline seed data (categories, problems, user)
β βββ services/
β β βββ data_service.dart # Single persistence entry point
β βββ utils/
β β βββ problem_filter.dart # Pure, testable search-match logic
β βββ widgets/ # Reusable UI (navbar, cards, chips, headerβ¦)
β βββ screens/
β β βββ authentication/ # Splash & Username screens
β β βββ home/ # Feed & Problem detail
β β βββ post/ # Add Problem
β β βββ account/ # Profile
β βββ firebase_options.dart # Generated Firebase config
β βββ main.dart # App entry point
βββ screenshots/ # App screenshots
βββ test/ # Widget & unit tests
βββ pubspec.yaml
βββ README.md
- Flutter SDK 3.x
- Dart SDK
^3.12.2 - An Android device / emulator (or iOS toolchain for iPhone builds)
- A Firebase project (only required for live/production mode)
-
Clone the repository
git clone <your-repository-url> cd fixit_community
-
Install dependencies
flutter pub get
-
(Optional) Configure Firebase
The app is pre-wired to the Firebase project
fixit-community-6ec36vialib/firebase_options.dart. To use your own backend:- Create a Firebase project and add an Android app with package
com.devthanseem.fixitcommunity. - Download
google-services.jsonintoandroid/app/. - Regenerate config with the FlutterFire CLI or replace
lib/firebase_options.dart.
- Create a Firebase project and add an Android app with package
-
(Optional) Disable demo mode
Open
lib/config/app_config.dartand set:bool demoModeEnabled = false;
Or at build time:
flutter run --dart-define=DEMO=false. -
Run the app
flutter run
π In demo mode (
demoModeEnabled = true, the default) the app runs fully offline with seeded data β no Firebase setup required.
The build/ directory is git-ignored, so no prebuilt binary is committed to the repository. Generate a release APK locally:
flutter build apk --releaseThe signed release artifact will be created at:
build/app/outputs/apk/release/app-release.apk
Release builds use an upload key configured in a local, git-ignored android/key.properties (already present). If that file is absent, the build gracefully falls back to debug keys. To set up your own signing:
- Generate an upload keystore and place
key.properties+ the.jksunderandroid/. - Re-run
flutter build apk --release.
You can also produce an Android App Bundle for Play Store distribution:
flutter build appbundle --release
# β build/app/outputs/bundle/release/app-release.aab- π Account authentication β Replace password-less usernames with email/password or OAuth (Google, Apple) sign-in.
- π¬ Comments & reactions β Let the community discuss fixes and upvote helpful solutions.
- π Push notifications β Alert users when someone replies to or solves their problem.
- π Social features β Follow other members and curate a personalized feed.
- πΌοΈ Rich media in problems β Attach photos/screenshots to problems and steps (currently profile images only).
- π Real-time updates β Switch the feed to Firestore listeners for live refresh instead of one-shot loads.
- π Dark mode β Add a dark theme alongside the current light theme.
- π Localization β Internationalize strings for a wider audience.
- π§ͺ Expanded test coverage β Grow the widget/unit tests (search, data service, profile flows).
- π± iOS & web support β Broaden platform targets beyond Android.
This project is licensed under the MIT License.
MIT License
Copyright (c) 2026 FixIt Community
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
FixIt Community is designed and developed by devthanseemx.
- π¦ Package ID:
com.devthanseem.fixitcommunity - π₯ Firebase project:
fixit-community-6ec36 - π‘ Feedback, bug reports, and contributions are welcome!
Made with β€οΈ and Flutter Β· π§ FixIt Community




