Git Product home page Git Product logo

flutter_auth_app's Introduction


Flutter App Auth ๐Ÿ“ฑ

This is App with Auth Function like Login and Register. All API using reqres.in.
This app also implementing Flutter Clean Architecture with TDD.

demo.mp4

Pre-requisites ๐Ÿ“

Technology Recommended Version Installation Guide
Flutter v3.0.4 Flutter Official Docs
Dart v2.17.5 Installed automatically with Flutter

Get Started ๐Ÿš€

  • Clone this project
  • Run flutter pub get
  • Run flutter gen-l10n to generate localization files
  • Run flutter pub run build_runner build --delete-conflicting-outputs to generate freezes files
  • Run flutter run --flavor stg -t lib/main_stg.dart for staging or
  • Run flutter run --flavor prd -t lib/main_prd.dart for production
  • Run Test flutter test
  • To generate launcher icon based on Flavor flutter pub run flutter_launcher_icons:main -f flutter_launcher_icons*
  • To generate mock class flutter pub run build_runner build

Feature โœ…

  • BLoC State Management
  • Clean Architecture with TDD
    • Unit Test
    • Widget Test
    • BLoC test
  • Theme Configuration : System, Light, Dark
  • Multi Language : English, Bahasa
  • Login, Register Example
  • Pagination Example
  • Autofill Username and Password

TODO ๐Ÿ“

  • Integration Test
  • Implement multi flavor
  • Implement Go Router

Architecture Proposal by Resocoder


architecture-proposal

Project Structure


lib/
โ”œโ”€โ”€ config.dart
โ”œโ”€โ”€ core
โ”‚ย ย  โ”œโ”€โ”€ app_route.dart
โ”‚ย ย  โ”œโ”€โ”€ core.dart
โ”‚ย ย  โ”œโ”€โ”€ core_mapper.dart
โ”‚ย ย  โ”œโ”€โ”€ error
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ error.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ exceptions.dart
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ failure.dart
โ”‚ย ย  โ”œโ”€โ”€ localization
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ generated
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ strings.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ strings_en.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ strings_id.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ intl_en.arb
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ intl_id.arb
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ l10n.dart
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ localization.dart
โ”‚ย ย  โ”œโ”€โ”€ network
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dio_client.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dio_interceptor.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ list_api.dart
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ network.dart
โ”‚ย ย  โ”œโ”€โ”€ resources
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dimens.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ images.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ palette.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ resources.dart
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ styles.dart
โ”‚ย ย  โ”œโ”€โ”€ usecase
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ usecase.dart
โ”‚ย ย  โ””โ”€โ”€ widgets
โ”‚ย ย      โ”œโ”€โ”€ button.dart
โ”‚ย ย      โ”œโ”€โ”€ button_notification.dart
โ”‚ย ย      โ”œโ”€โ”€ button_text.dart
โ”‚ย ย      โ”œโ”€โ”€ circle_image.dart
โ”‚ย ย      โ”œโ”€โ”€ color_loaders.dart
โ”‚ย ย      โ”œโ”€โ”€ drop_down.dart
โ”‚ย ย      โ”œโ”€โ”€ empty.dart
โ”‚ย ย      โ”œโ”€โ”€ loading.dart
โ”‚ย ย      โ”œโ”€โ”€ my_appbar.dart
โ”‚ย ย      โ”œโ”€โ”€ parent.dart
โ”‚ย ย      โ”œโ”€โ”€ spacer_h.dart
โ”‚ย ย      โ”œโ”€โ”€ spacer_v.dart
โ”‚ย ย      โ”œโ”€โ”€ text_f.dart
โ”‚ย ย      โ”œโ”€โ”€ toast.dart
โ”‚ย ย      โ””โ”€โ”€ widgets.dart
โ”œโ”€โ”€ dependencies_injection.dart
โ”œโ”€โ”€ features
โ”‚ย ย  โ”œโ”€โ”€ auth
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auth.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ data
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ data.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ datasources
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auth_remote_datasources.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ datasources.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ models
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ login_response.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ models.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ register_response.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ repositories
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ auth_repository_impl.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ repositories.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ entities
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ entities.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ login.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ register.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ repositories
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auth_repository.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ repositories.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ usecases
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ post_login.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ post_register.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ usecases.dart
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ presentation
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ login
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ cubit
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auth_cubit.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auth_state.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ cubit.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ login.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ login_page.dart
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ presentation.dart
โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ register
โ”‚ย ย  โ”‚ย ย          โ”œโ”€โ”€ cubit
โ”‚ย ย  โ”‚ย ย          โ”‚ย ย  โ”œโ”€โ”€ cubit.dart
โ”‚ย ย  โ”‚ย ย          โ”‚ย ย  โ”œโ”€โ”€ register_cubit.dart
โ”‚ย ย  โ”‚ย ย          โ”‚ย ย  โ””โ”€โ”€ register_state.dart
โ”‚ย ย  โ”‚ย ย          โ”œโ”€โ”€ register.dart
โ”‚ย ย  โ”‚ย ย          โ””โ”€โ”€ register_page.dart
โ”‚ย ย  โ”œโ”€โ”€ features.dart
โ”‚ย ย  โ”œโ”€โ”€ general
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ general.dart
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ presentation
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ main
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ main.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ main_page.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ menu_drawer.dart
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ presentation.dart
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ settings
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ cubit
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ cubit.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ settings_cubit.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ settings.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ settings_page.dart
โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ splashscreen
โ”‚ย ย  โ”‚ย ย          โ”œโ”€โ”€ splash_screen_page.dart
โ”‚ย ย  โ”‚ย ย          โ””โ”€โ”€ splashscreen.dart
โ”‚ย ย  โ””โ”€โ”€ users
โ”‚ย ย      โ”œโ”€โ”€ data
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ data.dart
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ datasources
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ datasources.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ user_remote_datasources.dart
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ models
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ models.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ users_response.dart
โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ repositories
โ”‚ย ย      โ”‚ย ย      โ”œโ”€โ”€ repositories.dart
โ”‚ย ย      โ”‚ย ย      โ””โ”€โ”€ users_repository_impl.dart
โ”‚ย ย      โ”œโ”€โ”€ domain
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ domain.dart
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ entities
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ entities.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ users.dart
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ repositories
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ repositories.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ users_repository.dart
โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ usecases
โ”‚ย ย      โ”‚ย ย      โ”œโ”€โ”€ get_users.dart
โ”‚ย ย      โ”‚ย ย      โ””โ”€โ”€ usecases.dart
โ”‚ย ย      โ”œโ”€โ”€ presentation
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ dashboard
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ cubit
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ cubit.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ users_cubit.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ users_state.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dashboard.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dashboard_page.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ dashboard_success.dart
โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ presentation.dart
โ”‚ย ย      โ””โ”€โ”€ users.dart
โ”œโ”€โ”€ main_prd.dart
โ”œโ”€โ”€ main_stg.dart
โ”œโ”€โ”€ my_app.dart
โ””โ”€โ”€ utils
    โ”œโ”€โ”€ ext
    โ”‚ย ย  โ”œโ”€โ”€ context.dart
    โ”‚ย ย  โ”œโ”€โ”€ ext.dart
    โ”‚ย ย  โ””โ”€โ”€ string.dart
    โ”œโ”€โ”€ helper
    โ”‚ย ย  โ”œโ”€โ”€ common.dart
    โ”‚ย ย  โ”œโ”€โ”€ constant.dart
    โ”‚ย ย  โ”œโ”€โ”€ data_helper.dart
    โ”‚ย ย  โ”œโ”€โ”€ go_router_refresh_stream.dart
    โ”‚ย ย  โ”œโ”€โ”€ helper.dart
    โ”‚ย ย  โ””โ”€โ”€ pref_manager.dart
    โ”œโ”€โ”€ services
    โ”‚ย ย  โ”œโ”€โ”€ firebase_services.dart
    โ”‚ย ย  โ””โ”€โ”€ services.dart
    โ””โ”€โ”€ utils.dart

Test Project Structure


test/
โ”œโ”€โ”€ features
โ”‚ย ย  โ”œโ”€โ”€ auth
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ data
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ datasources
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ models
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ login_response_test.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ register_response_test.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ repositories
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ auth_remote_datasources_test.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ repositories
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ auth_repository_impl_test.dart
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ usecases
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ post_login_test.dart
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ post_register_test.dart
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ presentation
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ login
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ cubit
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auth_cubit_test.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auth_cubit_test.mocks.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ auth_state_test.dart
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ login_page_test.dart
โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ register
โ”‚ย ย  โ”‚ย ย          โ”œโ”€โ”€ cubit
โ”‚ย ย  โ”‚ย ย          โ”‚ย ย  โ”œโ”€โ”€ register_cubit_test.dart
โ”‚ย ย  โ”‚ย ย          โ”‚ย ย  โ”œโ”€โ”€ register_cubit_test.mocks.dart
โ”‚ย ย  โ”‚ย ย          โ”‚ย ย  โ””โ”€โ”€ register_state_test.dart
โ”‚ย ย  โ”‚ย ย          โ””โ”€โ”€ register_page_test.dart
โ”‚ย ย  โ”œโ”€โ”€ general
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ presentation
โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ settings
โ”‚ย ย  โ”‚ย ย          โ”œโ”€โ”€ cubit
โ”‚ย ย  โ”‚ย ย          โ”‚ย ย  โ””โ”€โ”€ settings_cubit_test.dart
โ”‚ย ย  โ”‚ย ย          โ””โ”€โ”€ settings_page_test.dart
โ”‚ย ย  โ””โ”€โ”€ users
โ”‚ย ย      โ”œโ”€โ”€ data
โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ datasources
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ models
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ users_response_test.dart
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ repositories
โ”‚ย ย      โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ users_remote_datasources_test.dart
โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ repositories
โ”‚ย ย      โ”‚ย ย      โ””โ”€โ”€ users_repository_impl_test.dart
โ”‚ย ย      โ”œโ”€โ”€ domain
โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ usecases
โ”‚ย ย      โ”‚ย ย      โ””โ”€โ”€ get_users_test.dart
โ”‚ย ย      โ””โ”€โ”€ presentation
โ”‚ย ย          โ””โ”€โ”€ dashboard
โ”‚ย ย              โ”œโ”€โ”€ cubit
โ”‚ย ย              โ”‚ย ย  โ”œโ”€โ”€ users_cubit_test.dart
โ”‚ย ย              โ”‚ย ย  โ”œโ”€โ”€ users_cubit_test.mocks.dart
โ”‚ย ย              โ”‚ย ย  โ””โ”€โ”€ users_state_test.dart
โ”‚ย ย              โ””โ”€โ”€ dashboard_page_test.dart
โ””โ”€โ”€ helpers
    โ”œโ”€โ”€ data_dummy
    โ”‚ย ย  โ”œโ”€โ”€ list_user_empty_response.json
    โ”‚ย ย  โ”œโ”€โ”€ list_user_response.json
    โ”‚ย ย  โ”œโ”€โ”€ login_success_response.json
    โ”‚ย ย  โ”œโ”€โ”€ login_unsuccessful_response.json
    โ”‚ย ย  โ”œโ”€โ”€ register_success_response.json
    โ”‚ย ย  โ””โ”€โ”€ register_unsuccessful_response.json
    โ”œโ”€โ”€ json_reader.dart
    โ”œโ”€โ”€ paths.dart
    โ”œโ”€โ”€ test_mock.dart
    โ””โ”€โ”€ test_mock.mocks.dart



Buy me coffee if you love my works โ˜•๏ธ

buymeacoffe ย ย ย ย  ko-fi ย ย ย ย  paypal



flutter_auth_app's People

Contributors

lzyct avatar

Stargazers

Ali Al-Isawi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.