Coder Social home page Coder Social logo

joreilly / confetti Goto Github PK

View Code? Open in Web Editor NEW
667.0 10.0 82.0 50.32 MB

KMP GraphQL based conference project with Jetpack Compose Android, Compose for Wear and SwiftUI iOS clients along with GraphQL backend.

License: Apache License 2.0

Kotlin 91.63% Swift 3.63% Ruby 0.39% HTML 2.43% CSS 0.92% HCL 0.99%
android graphql kotlin swift apollo-client jetpack graphql-client jetpack-compose kmm kotlin-multiplatform

confetti's Introduction

Hi there ๐Ÿ‘‹

I'm a software engineer based in Galway, Ireland ๐Ÿ‡ฎ๐Ÿ‡ช and working for Neat ๐Ÿ‡ณ๐Ÿ‡ด. Google Developer Expert for Kotlin.

Some more background

  • Extensive experience working as a hands-on software engineer on mobile, desktop, server and embedded applicaitons.
  • Developing for Android since 2010 (using Kotlin for last 7 years).
  • Keenly interested in Kotlin Multiplatform and, in particular, when combined with use of Declarative UI frameworks like Compose and SwiftUI! Have given a number of talks and written various articles on the topic over the last 5 years (johnoreilly.dev). Have also created a number of related samples/templates. Two of these, PeopleInSpace and Confetti, are included in the official Kotlin KMP docs and, along with a number of the others, in the Google Dev Library. Several of the samples are also referenced in the docs of the libraries that they showcase.
  • Gets things done!

John's github stats

confetti's People

Contributors

arkivanov avatar bod avatar brunohensel avatar carotkut94 avatar cmota avatar dfavaro avatar github-actions[bot] avatar goooler avatar heckfyxe avatar iamanbansal avatar joreilly avatar kadirkid avatar kpeved avatar luizgrp avatar marcellogalhardo avatar martinbonnin avatar mdupierreux avatar oas004 avatar percy-g2 avatar renovate[bot] avatar robincaroff avatar romainbsl avatar russhwolf avatar simonmarquis avatar sophicapri avatar stylianosgakis avatar thatfiredev avatar vnicius avatar xxfast avatar yschimke 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  avatar  avatar  avatar  avatar  avatar

confetti's Issues

Log Data errors better

Some data errors in wear app.

Wear app shouldn't assert no errors, but reporting this anyway.

10:52:31.920  E  FATAL EXCEPTION: main
                 Process: dev.johnoreilly.confetti, PID: 11511
                 com.apollographql.apollo3.exception.ApolloException: The response has errors: [Error(message = Exception while fetching data (/sessions) : name must not be empty or null, locations = [Location(line = 1, column = 73)], path=[sessions], extensions = null, nonStandardFields = null), Error(message = Exception while fetching data (/speakers) : name must not be empty or null, locations = [Location(line = 1, column = 181)], path=[speakers], extensions = null, nonStandardFields = null), Error(message = Exception while fetching data (/rooms) : name must not be empty or null, locations = [Location(line = 1, column = 223)], path=[rooms], extensions = null, nonStandardFields = null), Error(message = Exception while fetching data (/config) : name must not be empty or null, locations = [Location(line = 1, column = 259)], path=[config], extensions = null, nonStandardFields = null)]
                 	at com.apollographql.apollo3.api.ApolloResponse.dataAssertNoErrors(ApolloResponse.kt:77)
                 	at dev.johnoreilly.confetti.wear.home.HomeViewModel$conferenceDataFlow$1$invokeSuspend$$inlined$map$1$2.emit(Emitters.kt:224)
                 	at kotlinx.coroutines.flow.internal.SafeCollectorKt$emitFun$1.invoke(SafeCollector.kt:15)
                 	at kotlinx.coroutines.flow.internal.SafeCollectorKt$emitFun$1.invoke(SafeCollector.kt:15)
                 	at kotlinx.coroutines.flow.internal.SafeCollector.emit(SafeCollector.kt:87)
                 	at kotlinx.coroutines.flow.internal.SafeCollector.emit(SafeCollector.kt:66)
                 	at com.apollographql.apollo3.cache.normalized.FetchPolicyInterceptors$CacheFirstInterceptor$1$intercept$1$invokeSuspend$$inlined$map$1$2.emit(Emitters.kt:223)
                 	at kotlinx.coroutines.flow.FlowKt__ErrorsKt$catchImpl$2.emit(Errors.kt:158)
                 	at kotlinx.coroutines.flow.FlowKt__ChannelsKt.emitAllImpl$FlowKt__ChannelsKt(Channels.kt:62)
                 	at kotlinx.coroutines.flow.FlowKt__ChannelsKt.access$emitAllImpl$FlowKt__ChannelsKt(Channels.kt:1)
                 	at kotlinx.coroutines.flow.FlowKt__ChannelsKt$emitAllImpl$1.invokeSuspend(Unknown Source:14)
                 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
                 	at android.os.Handler.handleCallback(Handler.java:938)
                 	at android.os.Handler.dispatchMessage(Handler.java:99)
                 	at android.os.Looper.loop(Looper.java:223)
                 	at android.app.ActivityThread.main(ActivityThread.java:7651)
                 	at java.lang.reflect.Method.invoke(Native Method)
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
                 	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@1ed6a03, Dispatchers.Main.immediate]

Add developer mode

For testing/debug info, etc...

Ideas:

  • Show firebase uid
  • Show current auth token
  • Show/hide test conference
  • Force WorkManager data refresh

Obviously, it'll require to tap 7 times on some unrelated UI element ๐Ÿ˜„

Filter bookmarks

Allow to filter and see only the bookmarks talks. Once I bookmark the talks I have interested, they are the ones I will be looking for. That could be a new tab that group them all or an option on the talks tab.

Search option

It would be nice to search talks (title and description) and/or speakers (name and description).

Debug build doesn't work straight after checkout

Launch errors

2022-12-20 14:27:33.504  3619-3619  studio.deploy           installer                            E  Could not get package user id: run-as: unknown package: dev.johnoreilly.confetti
2022-12-20 14:27:33.508  3619-3619  studio.deploy           installer                            E  Could not find apks for this package: dev.johnoreilly.confetti

Manual install errors

adb install wearApp/build/intermediates/apk/debug/wearApp-debug.apk
Performing Streamed Install
adb: failed to install wearApp/build/intermediates/apk/debug/wearApp-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]

Can't fetch DevFest Nantes sessions

Can't fetch DevFest Nantes sessions anymore. I get the following error message: I get the following error message : "Exception while fetching data (/sessions) : No such property name".

Here is the curl:

curl 'https://graphql-dot-confetti-349319.uw.r.appspot.com/graphql' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: https://graphql-dot-confetti-349319.uw.r.appspot.com' --data-binary '{"query":"# Write your query or mutation here\nquery GeSpeakers {\n     sessions(first: 100) {\n        nodes {\n            title\n        }\n    }\n}"}' --compressed

Watch/Phone interactions including notifications

Notifications will be useful for this app, and can also demonstrate Watch specific functionality before the app is installed.

Also prompt to install the watch app, from inside the mobile app.

Show speaker details in Wear app

@yschimke I was going to take a look at this......but just to check first in case it was something you had already been working on?

Would show info along lines of following.

Screenshot_20230317_084148

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Repository problems

These problems occurred while renovating this repository. View logs.

  • WARN: Package lookup failures

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • Update dependency com.google.devtools.ksp:symbol-processing-gradle-plugin to v2.0.0-RC2-1.0.20
  • Update dependency com.sksamuel.scrimage:scrimage-filters to v4.1.3
  • Update dependency com.google.cloud:google-cloud-run to v0.42.0
  • Update dependency com.google.cloud:libraries-bom to v26.38.0
  • ๐Ÿ” Create all rate-limited PRs at once ๐Ÿ”

Warning

Renovate failed to look up the following dependencies: Failed to look up maven package androidx.activity:activity-compose, Failed to look up maven package androidx.benchmark:benchmark-macro-junit4, Failed to look up maven package androidx.wear.watchface:watchface-complications-rendering, Failed to look up maven package androidx.wear.compose:compose-ui-tooling, Failed to look up maven package androidx.credentials:credentials-play-services-auth, Failed to look up maven package androidx.datastore:datastore, Failed to look up maven package androidx.datastore:datastore-preferences, Failed to look up maven package androidx.lifecycle:lifecycle-livedata-ktx, Failed to look up maven package androidx.lifecycle:lifecycle-viewmodel-ktx, Failed to look up maven package androidx.wear.protolayout:protolayout-expression, Failed to look up maven package androidx.wear.protolayout:protolayout-expression-pipeline, Failed to look up maven package androidx.wear.protolayout:protolayout-material, Failed to look up maven package androidx.wear.protolayout:protolayout-proto, Failed to look up maven package androidx.wear.tiles:tiles-tooling-preview, Failed to look up maven package androidx.work:work-runtime-ktx, Failed to look up maven package androidx.work:work-testing, Failed to look up maven package androidx.car.app:app, Failed to look up maven package androidx.car.app:app-automotive, Failed to look up maven package androidx.compose.compiler:compiler, Failed to look up maven package androidx.compose.material:material, Failed to look up maven package androidx.compose.material:material-icons-extended, Failed to look up maven package androidx.navigation:navigation-compose, Failed to look up maven package androidx.compose.ui:ui, Failed to look up maven package androidx.compose.ui:ui-test-manifest, Failed to look up maven package androidx.compose.ui:ui-test-junit4, Failed to look up maven package androidx.compose.ui:ui-tooling, Failed to look up maven package androidx.compose.ui:ui-tooling-preview, Failed to look up maven package com.android.tools:desugar_jdk_libs, Failed to look up maven package com.google.firebase:firebase-bom, Failed to look up maven package com.google.android.libraries.identity.googleid:googleid, Failed to look up maven package androidx.lifecycle:lifecycle-runtime-compose, Failed to look up maven package androidx.compose.material3:material3, Failed to look up maven package androidx.compose.material3:material3-window-size-class, Failed to look up maven package com.google.android.gms:play-services-auth, Failed to look up maven package com.google.firebase:firebase-crashlytics-gradle, Failed to look up maven package androidx.room:room-runtime, Failed to look up maven package androidx.core:core-splashscreen, Failed to look up maven package androidx.test.espresso:espresso-core, Failed to look up maven package androidx.test.uiautomator:uiautomator, Failed to look up maven package androidx.wear.watchface:watchface-complications-data-source-ktx, Failed to look up maven package androidx.wear.compose:compose-material, Failed to look up maven package LocalDateTime:kotlinx.datetime.LocalDateTime, Failed to look up maven package LocalDate:kotlinx.datetime.LocalDate.

Files affected: gradle/libs.versions.toml, shared/build.gradle.kts


Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/android_wear_jvm.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/gradle-build-action v3.3.1
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/gradle-build-action v3.3.1
  • ubuntu 22.04
  • ubuntu 22.04
.github/workflows/backend-deploy.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/gradle-build-action v3.3.1
  • hashicorp/setup-terraform v3
  • ubuntu 22.04
.github/workflows/backend-test.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/gradle-build-action v3.3.1
  • hashicorp/setup-terraform v3
  • ubuntu 22.04
.github/workflows/fixes.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/gradle-build-action v3.3.1
  • stefanzweifel/git-auto-commit-action v5
  • ubuntu 22.04
.github/workflows/ios.yml
  • actions/checkout v4
  • actions/setup-java v4
  • macos 14
.github/workflows/publish-android.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/gradle-build-action v3.3.1
  • actions/upload-artifact v4
  • ubuntu 22.04
.github/workflows/publish-kmmbridge.yml
  • touchlab/KMMBridgeGithubWorkflow v1.1
.github/workflows/update-schema.yml
  • actions/checkout v4
  • apollographql/update-graphql-schema 268c76047cb4693d9814d0fbf746f1f84e4ac0b5
  • ubuntu 22.04
.github/workflows/verify.yml
  • actions/checkout v4
  • gradle/wrapper-validation-action v3
  • rinchsan/renovate-config-validator v0.2.0
  • ubuntu 22.04
gradle
buildSrc/src/main/kotlin/BuildImageTask.kt
buildSrc/src/main/kotlin/BumpCloudRunRevision.kt
buildSrc/src/main/kotlin/Dependencies.kt
buildSrc/src/main/kotlin/PlayStoreScreenshotTask.kt
buildSrc/src/main/kotlin/ReadmeScreenshotTask.kt
buildSrc/src/main/kotlin/deploy.kt
buildSrc/src/main/kotlin/landing.kt
buildSrc/src/main/kotlin/options.kt
gradle.properties
settings.gradle.kts
build.gradle.kts
androidApp/build.gradle.kts
androidBenchmark/build.gradle.kts
automotiveApp/build.gradle.kts
backend/datastore/build.gradle.kts
backend/service-graphql/build.gradle.kts
backend/service-import/build.gradle.kts
backend/terraform/build.gradle.kts
buildSrc/settings.gradle.kts
buildSrc/build.gradle.kts
common/car/build.gradle.kts
compose-desktop/build.gradle.kts
  • com.mikepenz:multiplatform-markdown-renderer-m3 0.14.0
  • com.mikepenz:multiplatform-markdown-renderer-jvm 0.14.0
gradle/libs.versions.toml
  • com.google.accompanist:accompanist-adaptive 0.34.0
  • com.google.accompanist:accompanist-systemuicontroller 0.34.0
  • com.google.accompanist:accompanist-testharness 0.34.0
  • androidx.activity:activity-compose 1.9.0
  • androidx.benchmark:benchmark-macro-junit4 1.2.4
  • androidx.wear.watchface:watchface-complications-rendering 1.2.1
  • androidx.wear.compose:compose-ui-tooling 1.3.1
  • androidx.credentials:credentials-play-services-auth 1.2.2
  • androidx.datastore:datastore 1.1.0
  • androidx.datastore:datastore-preferences 1.1.0
  • androidx.lifecycle:lifecycle-livedata-ktx 2.7.0
  • androidx.lifecycle:lifecycle-viewmodel-ktx 2.7.0
  • androidx.wear.protolayout:protolayout-expression 1.1.0
  • androidx.wear.protolayout:protolayout-expression-pipeline 1.1.0
  • androidx.wear.protolayout:protolayout-material 1.2.0-alpha01
  • androidx.wear.protolayout:protolayout-proto 1.1.0
  • androidx.wear.tiles:tiles-tooling-preview 1.3.0
  • androidx.work:work-runtime-ktx 2.9.0
  • androidx.work:work-testing 2.9.0
  • com.apollographql.apollo3:apollo-annotations 4.0.0-beta.5
  • com.apollographql.apollo3:apollo-tooling 4.0.0-beta.5
  • org.jetbrains.kotlinx:atomicfu 0.24.0
  • net.mbonnin.bare-graphql:bare-graphql 0.0.2
  • androidx.car.app:app 1.3.0-rc01
  • androidx.car.app:app-automotive 1.2.0
  • io.coil-kt:coil-base 2.6.0
  • io.coil-kt:coil-compose 2.6.0
  • io.coil-kt:coil-svg 2.6.0
  • io.coil-kt:coil-test 2.6.0
  • io.coil-kt.coil3:coil-compose 3.0.0-alpha06
  • io.coil-kt.coil3:coil-network-ktor 3.0.0-alpha06
  • com.materialkolor:material-kolor 1.4.4
  • androidx.compose.compiler:compiler 1.5.11-dev-k2.0.0-Beta4-21f5e479a96
  • androidx.compose.material:material 1.6.6
  • androidx.compose.material:material-icons-extended 1.6.6
  • androidx.navigation:navigation-compose 2.7.7
  • androidx.compose.ui:ui 1.6.6
  • androidx.compose.ui:ui-test-manifest 1.6.6
  • androidx.compose.ui:ui-test-junit4 1.6.6
  • androidx.compose.ui:ui-tooling 1.6.6
  • androidx.compose.ui:ui-tooling-preview 1.6.6
  • com.arkivanov.decompose:decompose 3.0.0
  • com.arkivanov.decompose:extensions-compose 3.0.0
  • com.arkivanov.essenty:lifecycle 2.0.0
  • com.android.tools:desugar_jdk_libs 2.0.4
  • com.apollographql.federation:federation-graphql-java-support 4.4.1
  • com.google.firebase:firebase-admin 9.2.0
  • com.google.firebase:firebase-bom 32.8.1
  • dev.gitlive:firebase-auth 1.12.0
  • com.google.cloud:libraries-bom 26.37.0
  • com.google.cloud:google-cloud-datastore 2.19.0
  • com.google.android.libraries.identity.googleid:googleid 1.1.0
  • com.expediagroup:graphql-kotlin-spring-server 7.1.1
  • com.google.android.horologist:horologist-auth-composables 0.6.9
  • com.google.android.horologist:horologist-auth-ui 0.6.9
  • com.google.android.horologist:horologist-auth-data 0.6.9
  • com.google.android.horologist:horologist-composables 0.6.9
  • com.google.android.horologist:horologist-compose-layout 0.6.9
  • com.google.android.horologist:horologist-compose-material 0.6.9
  • com.google.android.horologist:horologist-compose-tools 0.6.9
  • com.google.android.horologist:horologist-datalayer 0.6.9
  • com.google.android.horologist:horologist-datalayer-phone 0.6.9
  • com.google.android.horologist:horologist-datalayer-watch 0.6.9
  • com.google.android.horologist:horologist-images-coil 0.6.9
  • com.google.android.horologist:horologist-network-awareness 0.6.9
  • com.google.android.horologist:horologist-network-awareness-db 0.6.9
  • com.google.android.horologist:horologist-network-awareness-okhttp 0.6.9
  • com.google.android.horologist:horologist-network-awareness-ui 0.6.9
  • com.google.android.horologist:horologist-tiles 0.6.9
  • com.google.android.horologist:horologist-roboscreenshots 0.6.9
  • com.eygraber:jsonpathkt-kotlinx 3.0.1
  • org.jsoup:jsoup 1.17.2
  • junit:junit 4.13.2
  • com.charleskorn.kaml:kaml 0.58.0
  • io.insert-koin:koin-android 3.5.6
  • io.insert-koin:koin-androidx-workmanager 3.5.6
  • io.insert-koin:koin-androidx-compose 3.5.6
  • io.insert-koin:koin-compose 1.1.5
  • io.insert-koin:koin-core 3.5.6
  • io.insert-koin:koin-test 3.5.6
  • io.insert-koin:koin-test-junit4 3.5.6
  • com.rickclephas.kmm:kmm-viewmodel-core 1.0.0-ALPHA-20
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.8.0
  • org.jetbrains.kotlinx:kotlinx-coroutines-play-services 1.8.0
  • org.jetbrains.kotlinx:kotlinx-coroutines-swing 1.8.0
  • org.jetbrains.kotlinx:kotlinx-datetime 0.6.0-RC.2
  • org.jetbrains.kotlinx:kotlinx-serialization-json 1.6.3
  • io.ktor:ktor-server-cio 2.3.10
  • io.ktor:ktor-server-status-pages 2.3.10
  • androidx.lifecycle:lifecycle-runtime-compose 2.7.0
  • androidx.compose.material3:material3 1.2.1
  • androidx.compose.material3:material3-window-size-class 1.2.1
  • com.russhwolf:multiplatform-settings 1.1.1
  • com.russhwolf:multiplatform-settings-coroutines 1.1.1
  • com.russhwolf:multiplatform-settings-datastore 1.1.1
  • com.squareup.okhttp3:okhttp 5.0.0-alpha.14
  • com.squareup.okhttp3:okhttp-coroutines 5.0.0-alpha.14
  • com.squareup.okhttp3:logging-interceptor 5.0.0-alpha.14
  • com.google.android.gms:play-services-auth 21.1.0
  • org.jetbrains.kotlin:kotlin-gradle-plugin 2.0.0-Beta4
  • com.android.tools.build:gradle 8.2.2
  • com.apollographql.apollo3:apollo-gradle-plugin 4.0.0-beta.5
  • com.google.firebase:firebase-crashlytics-gradle 2.9.9
  • com.google.gms:google-services 4.4.1
  • com.rickclephas.kmp:kmp-nativecoroutines-gradle-plugin 1.0.0-ALPHA-28
  • org.jetbrains.kotlin:kotlin-serialization 2.0.0-Beta4
  • org.jetbrains.kotlin:kotlin-allopen 2.0.0-Beta4
  • com.google.devtools.ksp:symbol-processing-gradle-plugin 2.0.0-RC1-1.0.20
  • org.springframework.boot:spring-boot-gradle-plugin 3.2.5
  • com.squareup.wire:wire-gradle-plugin 4.9.9
  • org.jetbrains.compose:compose-gradle-plugin 1.6.2
  • io.github.takahirom.roborazzi:roborazzi-gradle-plugin 1.13.0
  • com.sksamuel.scrimage:scrimage-core 4.1.2
  • com.sksamuel.scrimage:scrimage-filters 4.1.2
  • org.yaml:snakeyaml 2.2
  • org.springframework:spring-web 6.1.6
  • co.touchlab:stately-common 2.0.7
  • com.squareup.okio:okio 3.9.0
  • org.jetbrains.kotlin:kotlin-reflect 2.0.0-Beta4
  • org.robolectric:robolectric 4.12.1
  • androidx.room:room-runtime 2.6.1
  • androidx.core:core-splashscreen 1.0.1
  • androidx.test.espresso:espresso-core 3.5.1
  • androidx.test.uiautomator:uiautomator 2.3.0
  • androidx.wear.watchface:watchface-complications-data-source-ktx 1.2.1
  • androidx.wear.compose:compose-material 1.3.1
  • net.mbonnin.xoxo:xoxo 0.3
  • co.touchlab:kermit 2.0.3
  • com.google.cloud.tools:jib-core 0.27.0
  • com.google.cloud:google-cloud-run 0.41.0
  • dev.shreyaspatil.generativeai:generativeai-google 0.2.2-1.0.0
  • io.github.takahirom.roborazzi:roborazzi 1.13.0
  • io.github.takahirom.roborazzi:roborazzi-compose 1.13.0
  • io.github.takahirom.roborazzi:roborazzi-junit-rule 1.13.0
  • com.codingfeline.buildkonfig 0.15.1
  • co.touchlab.kmmbridge 0.5.4
landing-page/build.gradle.kts
shared/build.gradle.kts
  • com.mikepenz:multiplatform-markdown-renderer 0.14.0
  • LocalDateTime:kotlinx.datetime.LocalDateTime com.apollographql.apollo3.adapter.KotlinxLocalDateTimeAdapter
  • LocalDate:kotlinx.datetime.LocalDate com.apollographql.apollo3.adapter.KotlinxLocalDateAdapter
wearApp/build.gradle.kts
wearBenchmark/build.gradle.kts
webApp/build.gradle.kts
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
terraform
backend/terraform/main.tf

  • Check this box to trigger a request for Renovate to run again on this repository

Generate play store screenshots from RNG

Should be always up to date with latest app version.

  • Automate Wear Screenshots
  • Add a black background to Wear Play store screenshots
  • Automate Mobile Screenshots
  • Publish to play store on all releases

Add CI for running JVM

We should catch JVM issues in CI.

         btw looks like issue running JVM `main` function.
	at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:59)
	at org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46)
	at org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53)
	at org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:51)
	at org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:20)
	at org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:51)
	at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:106)
	at org.koin.core.scope.Scope.resolveValue(Scope.kt:246)
	at org.koin.core.scope.Scope.resolveInstance(Scope.kt:231)
	at org.koin.core.scope.Scope.get(Scope.kt:210)
	at MainKt.main(Main.kt:20)
	at MainKt$main$3.invoke(Main.kt)
	at MainKt$main$3.invoke(Main.kt)
	at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:205)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
	at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
	at MainKt.main(Main.kt)
Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.apollographql.apollo3.cache.normalized.FetchPolicy' q:''. Check your definitions!
	at org.koin.core.scope.Scope.throwDefinitionNotFound(Scope.kt:298)
	at org.koin.core.scope.Scope.resolveValue(Scope.kt:268)
	at org.koin.core.scope.Scope.resolveInstance(Scope.kt:231)
	at org.koin.core.scope.Scope.get(Scope.kt:210)
	at dev.johnoreilly.confetti.di.KoinKt$commonModule$1$1.invoke(Koin.kt:34)
	at dev.johnoreilly.confetti.di.KoinKt$commonModule$1$1.invoke(Koin.kt:23)
	at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:52)

Originally posted by @joreilly in #257 (comment)

API: add "views" for sessions

It'd be nice to separate the actual session storage from the session "views" so that:

  1. the data from sessions that are not scheduled yet is still reachable through the API
  2. the logic to display an agenda is factored in the backend (in a way, this is server driven UI)

Especially for 2D agendas (grid), there's usually a log of business logic (using a linear time scale is usually not very nice, lunch breaks, etc... need special handling, etc...). We could model all of that in the schema.

interface Slot2d { x y w h }

type BreakSlot2d: Slot2d
type LunchSlot2d: Slot2d
type SessionSlot2d: Slot2d
# ...

{
  agenda2d {
    headers {
      name
    }
    slots {
      x
      y
      w
      h
      ... on SessionSlot {
        title
        start
        speakers { 
          avatarUrl
        }
      }
    }
  }
}

See #267

Bookmark should be available for guests

The current implementation only supports bookmarking talks if a user is signed in, and there is no way to know that until you actually sign in.

It would be nice if the bookmarking feature could be available for guest users too.

That may create conflicts (offline and online bookmarks), for those I suggest to keep it simple and give preference to the online ones.

Favourite talks for each conference?

I downloaded the app and it seems really useful for browsing the KotlinConf talks.
However it would be even more useful if it was possibile to set favourites talks, adding an extra menu "favourites" item in the bottom bar, which would be populated by the talks who hava a favourite icon clicked.

Speakers social items do not contain baseUrl and are inconsistent

Speaker social items contain name (e.g.: twitter, github, etc.) and link.

I suggest adding the baseUrl to the link based on the social item's name.
I also noticed that some twitter links starts with @. We could remove it or else it is considered to be the responsibility of the data provider.

Here is the solution I made on the front end side when building me social item :

val socialItem = with(social) {
  val type = when (name.lowercase()) {
            "twitter" -> SocialType.TWITTER
            "github" -> SocialType.GITHUB
            "linkedin" -> SocialType.LINKEDIN
            "facebook" -> SocialType.FACEBOOK
            "website" -> SocialType.WEBSITE
            else -> SocialType.WEBSITE
        }

  SocialItem.Builder()
            .setType(type)
            .setLink(link)
            .build()
}

data class SocialItem private constructor(
    val type: SocialType? = null,
    val link: String? = null
) {

    class Builder {
        private var _link: String? = null
        private var _type: SocialType? = null

        fun setLink(link: String): Builder = apply { _link = link }
        fun setType(type: SocialType): Builder = apply { _type = type }
        fun build(): SocialItem {
            return _link?.run { formatLink(this, _type) }
                .run { SocialItem(_type, this) }
        }

        private fun formatLink(link: String, type: SocialType?): String {
            return if (type != null) {
                if (type == SocialType.TWITTER) {
                    formatTwitterHandle(link)
                } else {
                    link
                }.run {
                    if (startsWith(type.baseUrl)) {
                        this
                    } else {
                        "${type.baseUrl}/$this"
                    }
                }
            } else {
                link
            }
        }

        private fun formatTwitterHandle(link: String): String {
            return if (link.startsWith("@")) {
                link.substring(1)
            } else {
                link
            }
        }
    }
}

enum class SocialType {
    GITHUB,
    LINKEDIN,
    TWITTER,
    FACEBOOK,
    WEBSITE;

    val baseUrl: String
        get() = when (this) {
            GITHUB -> "https://github.com/"
            LINKEDIN -> "https://www.linkedin.com/"
            TWITTER -> "https://twitter.com/"
            FACEBOOK -> "https://www.facebook.com/"
            WEBSITE -> ""
        }
}

Share option

Talks could support a share button, so I can easily communicate with friends and send them the talks I'm interested to.

A power function could be to share N number of talks (by hold click, select multiple ones and share) or share all my bookmarks - but that can be done separately if we think it is worth to build it. These power function ideas are nice to have, but not a must.

DevFestNantes - Sessions `endInstant` values are incorrect for codelabs

Sessions endInstant values are incorrect for DevFest Nantes' codelabs. Codelabs should last 2 hours but appear as 1 hour long.

e.g.: Session "De la Terre ร  la Lune (et au-delร ) avec NestJSโ€ or โ€œ:scream: Panique ร  bord du Nautilus :shell:! Nemo vous initie ร  la programmation IoT :pager:โ€. Those sessions should end at 10am (UTC) but endInstant is 9:10am.

It seems that those endInstant are the same as the talk which started at the same time (8am - UTC).

Check out the DevFest Nantes Schedule for reference.

Allow to chose timeZone

Would be nice to be able to see the sessions in either the conf timeZone or the user timeZone. Would be also a good opportunity to cleanup the time stuff

Crashlytics reporting

For me, part of the interest in the app is a real app, with legitimate real users.

Filter talks per speaker

The speaker tab would be more useful if by clicking on a speaker, besides the description: it would list all of their talks.

That would let me to find my favourite speakers, and see what they will be talking about. Would be nice if one could also check the talk details from there and/or bookmark the talk.

Date Format Improvements

Per @yschimke suggestion, we can move away from dev.johnoreilly.confetti.utils.DateService in a favor of simple methods to handle date.

The idea is:

  1. Introduce common functions inside shared to format date.
  2. Provide an implementation per platform.
  3. Replace DateService in favor of direct calls.

DevFest Nantes - Missing data

Some models are missing attributs for the DevFest Nantes event.

Here are the ones I noticed :

  • Session :
    • talkType (Conference, Quickie, Codelab)
    • language
    • complexity
    • openfeedbackId
  • Speaker :
    • companyLogo
    • city (e.g.: "Massy, France")

DevFest Nantes' Data source

DevFest Nantes - Some partners logoUrl return a 404

Some DevFest Nantes partners logoUrl return a 404; e.g.: OVH and ISILOG.

This is due to the fact that OVH's logo is a .webp and isilog is a .jpg image. Is there anything we can do about it ?

An easy fix is to request DevFest Nantes to only use .png but it would be great to have a more resilient system.

Bookmarks failing to save

After bookmarking multiple talks, I noticed that many did not get save. I did not identify a pattern on why it is happening: it may be related with the quantity of bookmarks and/or a connection issue (with bad syncing, maybe?).

If the later, it would be great to receive a message if connection fails.

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.