Git Product home page Git Product logo

conference-app-in-a-box's Introduction

Conference App in a Box

This is the React Native CLI version. To view the Expo version, click here.

This repo goes along with my Dev.to post titled "Introducing Conference App in a Box"

For a full walkthrough of this project and how to deploy and theme it, check out this video.

Deploy a full stack & cross-platform mobile app for your next event in minutes.

๐Ÿ›  Built with React Native, GraphQL, AWS Amplify, & AWS AppSync

Follow me on Twitter at @dabit3 to keep up with my future projects as well as updates and new features added to this one! If you need any help launching this app, please reach out to me I'd be happy to help.

Features

โšก๏ธ Real-time chat
๐Ÿ‘พ Themeable & customizable
๐Ÿ‘ฎโ€โ™‚๏ธ Authentication & Profile view
๐Ÿ”ฅ Serverless back end
๐Ÿš€ GraphQL
๐Ÿ’ป Deploy back end in minutes

Deploy the back end and run the app

  1. Clone the repo & install the dependencies
~ git clone https://github.com/dabit3/conference-app-in-a-box.git

~ cd conference-app-in-a-box

~ npm install
  1. Initialize and deploy the Amplify project
~ amplify init

? Enter a name for the environment: dev (or whatever you would like to call this env)
? Choose your default editor: <YOUR_EDITOR_OF_CHOICE>
? Do you want to use an AWS profile? Y

~ amplify push

? Are you sure you want to continue? Y
? Do you want to generate code for your newly created GraphQL API? N

> We already have the GraphQL code generated for this project, so generating it here is not necessary.
  1. Start the app
~ react-native run-ios

# or

~ react-native run-android

To populate the database with your conference speakers

  1. Sign up in the app after following the previous steps

  2. Open the AppSync console:

~ amplify console api
  1. Click on Queries to open the GraphiQL Editor. When prompted to "Login with User Pools", you can login with your new username and use the aws_user_pools_web_client_id located in aws-exports.js for the ClientId.

  2. Create a new talk with the following GraphQL mutation:

mutation createTalk {
  createTalk(input: {
    name: "Performance In React Native",
    summary: "In this talk, we will look at the various tips and tricks for taking full advantage of React Native and using the performance attributes of the new architecture.",
    speakerName: "Ram Narasimhan",
    speakerBio: "Software Engineer at Facebook",
    time: "9:00 AM - 9:30 AM",
    timeStamp: "1573491600",
    date: "November 10",
    location: "Armory",
    speakerAvatar: "https://pbs.twimg.com/profile_images/875450414161772544/UjefWmmL_400x400.jpg"
  }) {
    id name speakerBio speakerName speakerAvatar location date time timeStamp
  }
}
  1. Query for all talks with the following GraphQL query:
query listTalks {
  listTalks {
    items {
      name
      summary
      speakerName
      speakerBio
      time
      timeStamp
      date
      location
      speakerAvatar
    }
  }
}
  1. Update a talk with the following GraphQL mutation:
mutation updateTalk {
  updateTalk(input: {
    id: "<TALK_ID>"
    name: "Performance in React Native & GraphQL"
  }) {
    id name
  }
}
  1. Delete a talk with the following GraphQL mutation:
mutation deleteTalk {
  deleteTalk(input: {
    id: "<TALK_ID>"
  }) {
    id
  }
}

To customize with your theme and logo

  1. Open src/theme.js and replace the highlight & primary colors.

  2. Replace src/assets/logo.jpg with your logo.

To customize the GraphQL schema

This schema can be edited. If your event needs additional fields, you can update the backend by doing the following:

  1. Update the schema (located at amplify/backend/api/rnconfinabox/schema.graphql).

  2. Redeploy the back end:

~ amplify push

conference-app-in-a-box's People

Contributors

dabit3 avatar joeyfenny avatar willdent 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

conference-app-in-a-box's Issues

Task :react-native-gesture-handler:compileDebugJavaWithJavac FAILED

 khine@dhegdheer ๎‚ฐ ๏ผ ~/go/src/github.com/dabit3/conference-app-in-a-box ๎‚ฐ ๏„“  ๏„ฆ master ๏™ ๎‚ฐ react-native run-android                                    ๎‚ฒ โœ” ๎‚ฒ 11625 ๎‚ฒ 21:10:59 
info Starting JS server...
info Building and installing the app on the device (cd android && ./gradlew app:installDebug)...

> Task :react-native-device-info:compileDebugJavaWithJavac
Note: /home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceModule.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :react-native-gesture-handler:compileDebugJavaWithJavac FAILED
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java:3: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java:14: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java:10: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java:10: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java:3: error: package androidx.core.util does not exist
import androidx.core.util.Pools;
                         ^
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java:11: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java:19: error: package Pools does not exist
  private static final Pools.SynchronizedPool<RNGestureHandlerEvent> EVENTS_POOL =
                            ^
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java:10: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java:11: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java:3: error: package androidx.core.util does not exist
import androidx.core.util.Pools;
                         ^
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java:11: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java:19: error: package Pools does not exist
  private static final Pools.SynchronizedPool<RNGestureHandlerStateChangeEvent> EVENTS_POOL =
                            ^
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java:16: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java:36: error: cannot find symbol
import androidx.annotation.Nullable;
                          ^
  symbol:   class Nullable
  location: package androidx.annotation
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java:6: error: cannot find symbol
  @Nullable RNGestureHandlerRootHelper getRootHelper();
   ^
  symbol:   class Nullable
  location: interface RNGestureHandlerRootInterface
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java:321: error: cannot find symbol
  private boolean isViewAttachedUnderWrapper(@Nullable View view) {
                                              ^
  symbol:   class Nullable
  location: class GestureHandlerOrchestrator
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java:42: error: cannot find symbol
  public @Nullable Map getExportedCustomDirectEventTypeConstants() {
          ^
  symbol:   class Nullable
  location: class RNGestureHandlerRootViewManager
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java:14: error: cannot find symbol
  private @Nullable RNGestureHandlerRootHelper mRootHelper;
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerRootView
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java:24: error: cannot find symbol
          @Nullable RNGestureHandlerEventDataExtractor dataExtractor) {
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerEvent
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java:40: error: cannot find symbol
          @Nullable RNGestureHandlerEventDataExtractor dataExtractor) {
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerEvent
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java:14: error: cannot find symbol
  private @Nullable ReactInstanceManager mReactInstanceManager;
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerEnabledRootView
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java:15: error: cannot find symbol
  private @Nullable RNGestureHandlerRootHelper mGestureRootHelper;
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerEnabledRootView
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java:63: error: cannot find symbol
          @Nullable Bundle initialProperties) {
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerEnabledRootView
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java:23: error: cannot find symbol
  public synchronized @Nullable GestureHandler getHandler(int handlerTag) {
                       ^
  symbol:   class Nullable
  location: class RNGestureHandlerRegistry
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java:26: error: cannot find symbol
          @Nullable RNGestureHandlerEventDataExtractor dataExtractor) {
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerStateChangeEvent
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java:44: error: cannot find symbol
          @Nullable RNGestureHandlerEventDataExtractor dataExtractor) {
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerStateChangeEvent
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java:529: error: cannot find symbol
  public @Nullable Map getConstants() {
          ^
  symbol:   class Nullable
  location: class RNGestureHandlerModule
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java:632: error: cannot find symbol
  private @Nullable RNGestureHandlerRootHelper findRootHelperForViewAncestor(int viewTag) {
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerModule
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java:649: error: cannot find symbol
  private @Nullable HandlerFactory findFactoryForHandler(GestureHandler handler) {
           ^
  symbol:   class Nullable
  location: class RNGestureHandlerModule
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java:328: error: cannot find symbol
    @Nullable ViewParent parent = view.getParent();
     ^
  symbol:   class Nullable
  location: class GestureHandlerOrchestrator
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java:20: error: package Pools does not exist
          new Pools.SynchronizedPool<>(TOUCH_EVENTS_POOL_SIZE);
                   ^
/home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java:20: error: package Pools does not exist
          new Pools.SynchronizedPool<>(TOUCH_EVENTS_POOL_SIZE);
                   ^
Note: /home/khine/go/src/github.com/dabit3/conference-app-in-a-box/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
32 errors

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':react-native-gesture-handler:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 3s
47 actionable tasks: 47 executed
error Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/getting-started.html
error Command failed: ./gradlew app:installDebug. Run CLI with --verbose flag for more details.

aws-exports issue?

Greeting, @dabit3. Thanks for doing this work!

I just ran the project per the instructions and it runs but is throwing an error: No credentials, applicationId or region

aws-exports.js is generated but doesn't have those fields in it.

screenshot:

Simulator Screen Shot - iPhone X - 2019-07-21 at 10 03 23

So the app doesnt know where to look for the updates, i guess.

console mutation returns:

{
  "data": {
    "createTalk": {
      "id": "77cbe3c5-563d-43f5-ab7b-2aa7e70b451d",
      "name": "Performance In React Native",
      "speakerBio": "Software Engineer at Facebook",
      "speakerName": "Ram Narasimhan",
      "speakerAvatar": "https://pbs.twimg.com/profile_images/875450414161772544/UjefWmmL_400x400.jpg",
      "location": "Armory",
      "date": "November 11",
      "time": "9:00 AM - 9:30 AM",
      "timeStamp": "1573491600"
    }
  }
}

Simulator Screen Shot - iPhone X - 2019-07-21 at 10 18 10

I am still working through this...if you already see whats going on, feel free to chime in, sir! Thank you.

Select the backend providers list empty

After amplify init and the default editor question I'm asked:
Select the backend providers. (Press <space> to select, <a> to toggle all, <i> to invert selection), but there are no selections.

I press Enter to bypass and receive an error that the argument needs a string.
TypeError [ERR_INVALID_ARG_TYPE]: The 'request' argument must be string. Received type undefined.

The backend folder is here, and I haven't made any changes to it. I've already run npm i and the whole nine. Is there some backend config I'm missing?

nodejs8.10 is no longer supported for creating or updating AWS Lambda functions

Resource Name: UserPoolClientLambda (AWS::Lambda::Function)
Event Type: create
Reason: The runtime parameter of nodejs8.10 is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejs12.x) while creating or updating functions. (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 81393026-7ab6-448c-a20d-0391e5d8b24f)

No licence

Hi this looks interesting but I see you don't have any licence

Error thrown: crit: Expecting a Boolean, got 'string_input_userpoolClientGenerateSecret'

hello,
i had these errors:

2019-08-24T20:06:15.865Z - debug: Error thrown: crit: Expecting a Boolean, got 'string_input_userpoolClientGenerateSecret' (Resources > UserPoolClient > Properties > GenerateSecret)
2019-08-24T20:06:15.867Z - debug: Error thrown: crit: Expecting a Boolean, got 'string_input_allowUnauthenticatedIdentities' (Resources > IdentityPool > Properties > AllowUnauthenticatedIdentities)

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.