Coder Social home page Coder Social logo

rozpierog / cofi Goto Github PK

View Code? Open in Web Editor NEW
307.0 5.0 29.0 35.74 MB

Free and open-source coffee brew timer. Customizable time settings and an easy-to-use interface. Perfect cup every time.

Home Page: https://rozpierog.github.io/Cofi/

License: GNU General Public License v3.0

Kotlin 98.00% Ruby 1.32% Shell 0.69%
android coffee kotlin android-development hacktoberfest jetpack-compose open-source opensource android-app android-application

cofi's People

Contributors

alsd4git avatar azotegwei avatar comradekingu avatar dave31610 avatar deltainium avatar dependabot[bot] avatar detherminal avatar fnogcps avatar fobo66 avatar g5olivieri avatar gnuey56 avatar kefir2105 avatar l1i1s7a avatar larouxn avatar lneugebauer avatar m1ga avatar marcsenn avatar minibugdev avatar mistercosta96 avatar mustafadakhel avatar ojankowiak avatar pixeltux avatar rozpierog avatar santossi avatar seriousbug avatar sv1sjp avatar titanicbobo avatar vil02 avatar vistaus avatar weblate avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

cofi's Issues

Prevent closing edit view with unsaved changes

Is your feature request related to a problem? Please describe.

I did forget to save my edited recipe multiple times already. Would be nice to be informed if there are unsaved changes.

Describe the solution you'd like

Show an alert dialog with warning that there are unsaved changes. Alert dialog should show cancel button to contiue editing, save button to save and close edit screeb and discard button to ignore changes and return to detail screen.

Describe alternatives you've considered

Color the save button in error color to raise attention of user.

Typo at the step without time.

During the execution of a recipe, there is a typo at a step with no time specified. Instead of the word "continue" there is "conitinue".

Screenshot_20220517-194312.png

Recipe icon bottom sheet do not show

Steps to reproduce:

  • open Recipe edit view
  • tap on icon change button (Left of the name)

What happens:

  • Nothing

What should happen:

  • Icons bottom sheet shows up

Additional info:

  • it will show up if you open software keyboard by tapping on Name field

Creating a new recipe and editing an existing one - Saving empty steps

Describe the bug

When creating/editing a recipe you can add steps without names and values.
This is done with the options "Add coffe", "Add water" and "Other".
The function works correctly (does not allow you to save the step) with the "Wait" option.

To Reproduce

  1. Edit recipe or Add a new one
  2. Chose "Add coffee", "Add water" or "Other".
  3. Click on the Name of the step, and clear it with the keyboard.
  4. Click next on keyboard.
  5. In "Duration" without writing anything, click next on the keyboard.
  6. In "Wight" without writing anything, click done.
  7. The step will be blank.

Expected behavior

The recipe should not save empty steps.

Screenshots

Screenshot_20220208-121241
Screenshot_20220208-121145~2
Screenshot_20220208-121150~2

Screenshot_20220208-121156~2

Smartphone:

  • Device: Pixel 4
  • Android: 12
  • App Version: 1.8

Additional context

Guidelines & Features

Guidelines:

  • ✅ Jetpack compose everything
  • ✅ No internet connection required
  • ✅ No user permissions
  • ✅ No tracking of any kind
  • ✅ As small as possible
  • ✅ Open to automation (deep links to start timers via NFC)
  • ✅ Full screen (draw under bars)
  • Customizable, but in reasonable way
    • Accent color
    • When timer starts

Features:

  • Dark Mode
  • PiP
  • Timers can start at minus time scrapped - you can add "Other" step as "prepare kettle" step
  • Working in background (notification) - not needed for now as PiP is working flawlessly
  • Smooth keyboard animations - Add Recipe is a mess even without that :(

GPS Reported crash

java.lang.NullPointerException: 
  at java.util.Objects.requireNonNull (Objects.java:245)
  at com.kieronquinn.monetcompat.core.MonetCompat$wallpaperManager$2.invoke (MonetCompat.kt:172)
  at com.kieronquinn.monetcompat.core.MonetCompat$wallpaperManager$2.invoke (MonetCompat.kt:171)
  at kotlin.SynchronizedLazyImpl.getValue (LazyJVM.kt:74)
  at com.kieronquinn.monetcompat.core.MonetCompat.getWallpaperManager (MonetCompat.java:171)
  at com.kieronquinn.monetcompat.core.MonetCompat.access$getWallpaperManager (MonetCompat.java:32)
  at com.kieronquinn.monetcompat.core.MonetCompat$getAvailableWallpaperColors$2.invokeSuspend (MonetCompat.kt:517)
  at com.kieronquinn.monetcompat.core.MonetCompat$getAvailableWallpaperColors$2.invoke (MonetCompat.kt)
  at com.kieronquinn.monetcompat.core.MonetCompat$getAvailableWallpaperColors$2.invoke (MonetCompat.kt)
  at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn (Undispatched.kt:89)
  at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext (BuildersKt__Builders_common.kt:165)
  at kotlinx.coroutines.BuildersKt.withContext (Builders.kt:1)
  at com.kieronquinn.monetcompat.core.MonetCompat.getAvailableWallpaperColors (MonetCompat.kt:513)
  at com.kieronquinn.monetcompat.core.MonetCompat.getWallpaperPrimaryColorCompat (MonetCompat.kt:499)
  at com.kieronquinn.monetcompat.core.MonetCompat.access$getWallpaperPrimaryColorCompat (MonetCompat.kt:32)
  at com.kieronquinn.monetcompat.core.MonetCompat$updateMonetColorsInternal$1.invokeSuspend (MonetCompat.kt:266)
  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
  at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:106)
  at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.kt:571)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.kt:750)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker (CoroutineScheduler.kt:678)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run (CoroutineScheduler.kt:665)

Smartphone:

  • Device: Wiko Y62
  • Android: 11
  • App Version: 49.aab

German PlayStore translation

Is your feature request related to a problem? Please describe.

I did see that the PlayStore description is still displayed in english. I think it would be nicer to have a German description for people that don't understand english.

Describe the solution you'd like

Add my translated german description.

Warum Cofi?

Ich habe Cofi entwickelt, nachdem ich frustriert war über den Mangel an kleinen und schnellen Timern, die die Privatsphäre respektieren. Keiner der anderen Timer konnte auf die Art und Weise benutzt werden, wie ich sie benutzen wollte. Hier ist er also! Cofi ist ein Quelloffener, schneller Timer, der nur das tut, was er muss und nicht mehr.

Funktionen:

- Keine künstlichen Grenzen – Erstelle jedes Rezept, egal wie ausgefallen es ist.
- Deeplinks zu Rezepten – Füge es zur Automatisierungssoftware oder zum NFC-Tag hinzu, um dein Lieblingsrezept mit einem Fingertipp zu öffnen.
- Bild-im-Bild – Musst du während des Brühens auf eine Nachricht reagieren? Der Timer wird in einem kleinen, beweglichen Fenster angezeigt, das dich während des gesamten Brühvorgangs begleitet.
- Absolut kein Tracking – Nicht einmal eine Absturzmeldung wird zu mir gesendet. Alles, was du in der App machst, bleibt bei dir.
- Kleinstmöglicher Speicherplatzbedarf – Ich werde überrascht sein, wenn die App jemals 7 MB auf deinem Gerät überschreitet.
- Instant App – Die gesamte App ist sofort verfügbar. Du musst nichts installieren, wenn du nicht willst.

Describe alternatives you've considered

PlayStore offers translations provided by Google Translator. It isn't strictly neccesary to translate the description.

Add ability to edit recipe step order

Is your feature request related to a problem? Please describe.

Sometimes I want to enhance my recipe by adding a step in the middle. Currently I have to delete or edit all the step below the step I want to add.

Describe the solution you'd like

I'd like to drag my steps around.

Describe alternatives you've considered

The same functionality could probably be achived by adding some "move up" and "move down" buttons to each step. May even be easier to implement. Drag and drop feature would be prefered imo.

Empty description is rendered

Describe the bug

To Reproduce

  1. Set an empty description
  2. Open recipe details
  3. It's rendered

Expected behavior

Box Shouldn't be visible

Screenshots

Screenshot_20220526-101222.png
Smartphone:

  • Device: [e.g. Pixel 4]
  • Android: [e.g. 12]
  • App Version: [e.g. 1.3.4]

Additional context

Minus time in the recipe - Crash of the app

Describe the bug

When you add a minus value in duration, the app shuts down, at the start of this step.

Smartphone:

  • Device: Pixel 4
  • Android: 12
  • App Version: 1.8

Additional context

New Recipe - James Hoffman's Aeropress recipe

James finally released his "ultimate/recommended" Aeropress technique.

Here's the link to the video: https://www.youtube.com/watch?v=j6VlT_jUVPc&t=241s

Here's the written description, in his words, from the video:

11g coffee (ground at the finer end of medium, assuming this is light roasted coffee. The darker you go the more you may prefer to increase the dose and coarsen the grind.)
200g water (brought to a boil and used immediately)
- Put the filter into the cap. Don't rinse or preheat the brewer (it doesn't make any difference)
- Put coffee into the brewer
- Place on scales and then add water, aiming to wet all the coffee during pouring
- Start a timer, and immediately place the piston piece into the top of the brewer, about 1cm in
- Wait 2 minutes
- Holding the brewer and the piston, gently swirl the brewer
- Wait 30 seconds
- Press gently all the way
- Drink and enjoy!

This recipe should be included because the Aeropress is inexpensive, popular, there are no other default Aeropress recipes, and it's James Hoffman.

I haven't sought permission yet, how was this done in the past? A twitter DM?

No sound

Hi,

It seems that in version 1.7.3 There is no sound anymore when changing steps.

Thank you

Play Store - Pre Launch Report Issues

FATAL EXCEPTION: main
Process: com.omelan.cofi, PID: 19245
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.omelan.cofi/com.omelan.cofi.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2951)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loop(Looper.java:193)
	at android.app.ActivityThread.main(ActivityThread.java:6718)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
	at g.h.J(SourceFile:108)
	at g.h.w(SourceFile:1)
	at g.e.setContentView(SourceFile:6)
	at b.a.a(SourceFile:17)
	at com.omelan.cofi.MainActivity.onCreate(SourceFile:11)
	at android.app.Activity.performCreate(Activity.java:7144)
	at android.app.Activity.performCreate(Activity.java:7135)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)
	... 11 more
name value
Model name Pixel 3
Manufacturer google
Android version Android 9 (SDK 28)
Locale pl_PL
Screen size 1080 x 2160
Screen density (DPI) 440
RAM (total memory) 4,096 MB
OpenGL ES version 3.2
ABI ABI_ARM64_V8
CPU Qualcomm SDM845

CI action that checks if there are changes in the Changelog.md in PR

Describe the solution you'd like

Simple action that would check if whoever submitted a PR actually added a new thing to the changelog. It should only be ran if checkbox near I've added new item into [Changelog](https://github.com/rozPierog/Cofi/pull/docs/Changelog.md) under [Unreleased] has been ticked

Waiting step can have weight

Steps of reproduction:

  • Create Add Coffe/Add Water/Other step and add some value to weight
  • Change it's type to Wait
  • Save

What happens:

  • During recipe timer this step shows weight

What should happen:

  • Weight gets removed from this step on save

Crashing app, while using Picture in Picture

Describe the bug

How to crash the app, while using "picture in picture"
To Reproduce

  1. Go to the recipe -> click play and use picture in picture.
  2. In system app settings, turn off "allow picture-in-picture".
  3. Open again app - you will see your last recipe -> click play.
  4. Use picture in picture -> the picture will immediately disappear.
  5. Open again app -> you will see still running recipe.
  6. Use picture in picture -> the picture will immediately disappear.
  7. Open again app -> the app will crash.

Expected behavior

If you turn off allowance in system app settings, the app should automatically turn off the toggle "picture in picture".

Screenshots

Screenshot_20220129-144749 Screenshot_20220129-144800

Smartphone:

  • Device: Pixel 4
  • Android: 12
  • App Version: 1.3.4

Additional context

Better store screenshots

Is your feature request related to a problem? Please describe.

Currently Cofi store listing is pretty drab. It would be good to create some more inviting screenshots and hook it up to currently existing screenshot generation scripts.

Describe the solution you'd like

  • use ./bin/createScreenshots to create app screenshots on AVD for tablets and phones and copy it to host PC
  • use https://github.com/IdeasOnCanvas/ScreenshotFramer CLI to run a script that would compose those screenshots into some frames, and colors
  • save it to fastlane folder

Describe alternatives you've considered

  • manually editing screenshots - that goes against the spirit of automating release process

About App - Number of acutal App version and what is new in it

Is your feature request related to a problem? Please describe.

I think, that the app lacks information about the current version number.
I know that it is enough to enter the system settings and check it, but such information in the app would be very useful.

In addition, if the app would be updated, it would also be worth adding information about what has changed in it.

Describe the solution you'd like

  1. Open app.
  2. Go to Settngs.
  3. Go to "About App".
  4. At the top of the page you will see the current app version number.
  5. Click on the version number of the app, which will send you to Cofi GitHub, where you can see what's new.

Prompt users to install full app after finishing a recipe in the Instant app

Is your feature request related to a problem? Please describe.

While using instant app version of Cofi there is no way of installing "full app" from within the app

Describe the solution you'd like

After user finishes a recipe for a first time we should show an install prompt https://developer.android.com/topic/google-play-instant/getting-started/instant-enabled-app-bundle#install-prompt

Describe alternatives you've considered

Button at the top of the RecipeList page - seems way more in your face

Additional context

Edit recipe - saving steps

Cofi Version - 1.3.4
Device - pixel 4
OS - Android 12

When creating a new recipe or editing a current one, if you leave all the fields blank without filling them and save, the app adds a step without any data (empty step).

I don't know if this should be the case, or if it should inform the user to fill in some data.

Screenshot_20220123-171335.png

Back button during step edit closes the edit view

Steps to reproduce:

  • Create new or edit existing recipe
  • Start adding new step or edit existing one
  • close software keyboard
  • Tap/Gesture back (system back)

What happens:

  • App goes to previous view

What should happen:

  • step edit view should close

Related to #27

Update Italian translation

Strings that are missing Italian translation

<string name="settings_step_vibrate_item">Step change vibration</string>
<string name="settings_backup_item">Backup/Restore</string><string name="settings_timer_item">Timer settings</string>
<string name="prepopulate_aero_description">Recipe created by: James Hoffmann Source: https://youtu.be/j6VlT_jUVPc Grind size: For light roast – finer end of medium. The darker you go the more you may prefer to increase the dose and coarsen the grind Temperature: For light roast – brought to a boil and used immediately. For dark roasts – 85–90℃</string>
<string name="prepopulate_aero_step_press">Press the piston gently</string>
<string name="prepopulate_aero_step_piston">Place the piston 1cm into the brewer</string>
<string name="prepopulate_aero_step_piston">Place the piston 1cm into the brewer</string>
<string name="prepopulate_aero_name">AeroPress</string>
<string name="settings_addDefault">Add default recipes</string>
<string name="settings_restore">Restore</string>
<string name="settings_backup">Backup</string>
<string name="step_add_duration_explainer">Step duration determines how long an action will take (in seconds). If you want to create a step that will hold whole recipe till you are read, just leave it empty.</string>
<string name="recipe_details_noTime">Press start to continue</string>
<string name="button_show">Show</string>
<string name="recipe_edit_description_button">Add description</string>
<string name="app_version">App version</string>
<string name="button_continue_editing">Continue editing</string>
<string name="recipe_clone_suffix">%1$s - Copy</string>
<string name="recipe_clone_text">This will create a duplicate of this recipe</string>
<string name="recipe_clone_title">Clone this recipe?</string>
<string name="button_discard">Discard</string>
<string name="recipe_unsaved_text">Do you want to discard them?</string>
<string name="recipe_unsaved_title">You have unsaved changes</string>

After you translated them, add them to app/src/main/res/values-it/strings.xml and send a PR

Please do not use online translation services for this!

Picture in picture - toggle does not work

Cofi Version - 1.3.4
Device - pixel 4
OS - Android 12

If you turn off "picture in picture", the app doesn't do anything when you minimize window (the app still think that this option is turn on).

The toggle does work on my tablet:
Cofi Version - 1.3.4
Device - SM-T720
OS - Android 11

Tablet/Foldable UI

  • Two column design on list
  • RecipeDetails split in two, timer on left, steps on the right
  • FAB to start on Right

PiP mode back to fullscreen crashes Cofi

Cofi Version: 1.3.3
Android Version: 10
OS: Lineage OS
App Store: F-Droid

Steps to reproduce

  • While a recipe is running, press the "Home" (?) button to force Cofi to enter Picture in Picture mode.
  • Try to full screen the app
  • PiP window disappears and app quits/crashes silently

Skip steps / steps with no duration

Is your feature request related to a problem? Please describe.
Sometimes I'll complete a step too fast or there are steps that don't need timing.

Describe the solution you'd like
It would be great if the remaining time of a step could be skipped or there was a type of step that waited for user input before advancing.

For example, steps like "add coffee" or "add water" in some recipes don't need to take a certain amount of time but if I add water too quickly then the next brewing step is getting extra time.

Timer doens't work "in background"

Describe the bug
If my phone screen locks during brewing the timer is cancelled.

To Reproduce

  1. Start a recipe timer
  2. Lock the screen
  3. Unlock the screen
  4. Timer is stopped

Expected behavior
During long brews like the Hoffman french press brew my phone screen will lock itself during the 7 minute wait period. The timer should continue and make sound between steps when the screen has locked.

Smartphone:

  • Sony Xperia XZ1
  • Lineage OS Android 10
  • Cofi 1.3.4

Pause button on no time steps

Describe the bug

To Reproduce

  1. Go to a recipe where you have a step without time
  2. Click on start
  3. Wait for the step to happen
  4. See error

Expected behavior

Button should change to ▶️

Screenshots

Screenshot_20220523-105852.png

Smartphone:

  • Device: Pixel 6
  • Android: 12.1
  • App Version: 1.7.0

Additional context

Update German translation

Strings that are missing German translation

<string name="settings_step_vibrate_item">Step change vibration</string>
<string name="settings_backup_item">Backup/Restore</string><string name="settings_timer_item">Timer settings</string>
<string name="prepopulate_aero_description">Recipe created by: James Hoffmann Source: https://youtu.be/j6VlT_jUVPc Grind size: For light roast – finer end of medium. The darker you go the more you may prefer to increase the dose and coarsen the grind Temperature: For light roast – brought to a boil and used immediately. For dark roasts – 85–90℃</string>
<string name="prepopulate_aero_step_press">Press the piston gently</string>
<string name="prepopulate_aero_step_piston">Place the piston 1cm into the brewer</string>
<string name="prepopulate_aero_step_piston">Place the piston 1cm into the brewer</string>
<string name="prepopulate_aero_name">AeroPress</string>
<string name="settings_addDefault">Add default recipes</string>
<string name="settings_restore">Restore</string>
<string name="settings_backup">Backup</string>
<string name="step_add_duration_explainer">Step duration determines how long an action will take (in seconds). If you want to create a step that will hold whole recipe till you are read, just leave it empty.</string>
<string name="recipe_details_noTime">Press start to continue</string>
<string name="button_show">Show</string>
<string name="recipe_edit_description_button">Add description</string>

After you translated them, add them to app/src/main/res/values-de/strings.xml and send a PR

Turkish Language Support

Is your feature request related to a problem? Please describe.
No, I only want Turkish language support

Describe the solution you'd like
I would like to add language support for Turkish

Describe alternatives you've considered
None

Additional context
None

Animatior Duration Scale affects timer

Describe the bug
It just rushes through the elements without waiting.

To Reproduce

  1. Open preinstalled reciept
  2. Click start
  3. Wooosh finished asap.

Expected behavior

It waits the seconds of each step.

Screenshots

N/A

Smartphone:

  • Device: Sony Xperia XZ2
  • Android: 12L
  • App Version: 1.7.3

Additional context

N/A

Add recipe duplication functionality

Is your feature request related to a problem? Please describe.

I have the same recipe for different amounts of coffee and would like to copy my base-recipe and only edit amounts of coffee and water.

Describe the solution you'd like

Add a duplicate button to the top bar of recipe detail screen with content copy icon which duplicates database entry and opens it to edit. An alert dialog should verify if you realy want to duplicate it to prevent missclicks.

Describe alternatives you've considered

The same functionallity could be achived by implementing some kind of ratio that can be changed easily.

Add ability to manually skip steps

Is your feature request related to a problem? Please describe.

It's a little annoying if you start a recipe in Cofi after you've already done the first few steps or forget to press the play button and end up out of sync.

Describe the solution you'd like

A skip button next to the start/pause button that skips to the end of the timer.

Describe alternatives you've considered

Ability to tap on any step in the recipe and jump to it while skipping all previous steps.

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.