I've created LetsMeetThen.com - Let me know your thoughts.

I love finding other people with a common interest and discussing a topic at many different levels. You can learn a lot from those with more experience and you can learn even more by explaining something and answering questions you never even thought of asking yourself.

That has led me to run several different meetups in the various places I've lived. I always found it rewarding to meet folks in my community in person. But as much as I enjoyed that, those meetups had a few drawbacks such as:

  • finding a venue - It can be a challenge to find quiet, accessible meeting space without a large logistical overhead. This was a bigger issue for me since I work as a consultant and don't have my own company office/conference space I can use after hours.

  • reaching interested people - As the topic gets a little more esoteric there may not be enough people in your immediate community that are interested and/or it may be hard to find them. There can be plenty of interested people world wide though if you can cast a wider net.

  • schedule and travel logistics - Even if a group of people want to meet, finding a good time and allowing for travel can make it infeasible. This is a bigger issue in places with bad rush hour congestion problems since many times the meetings are scheduled for right after work: exactly when it is most difficult to get across town.

So, for a while now, I've been mulling over the best way to have/schedule online/virtual meetups/events and, in a total yak shave, I've created LetsMeetThen.com - an easy way to create an event announcement landing page and take and manage RSVPs.

I created it to meet my own needs (and to work with some new technologies) and made it public to see if there is any other interest out there. At this point it is still just a POC so the experience is not quite as smooth as I would like but there's no charge and can only help to get the word out about your meeting/event. Try it out and let me know what you think.

How does it work?

The system manages events. Events are created by organizers and attendees can RSVP to an event. You need to register to create an event but anyone can RSVP with a valid email. When you create an event you specify the date and time, title, etc. along with logistics information (ie. the URL to join the meeting) to be sent to those that RSVP. The system then creates a landing page for the event.

Someone interested in your event would read the landing page, decide they want to attend, create an RSVP by entering their email and then be sent the meeting event logistic information.

Once you set up the event you can share the link to the information landing page any way you want. Then other people can review the information and see for themselves what you have planned and can share the link further to get more people to sign up.

Also, you can use any video/meeting platform you want. The app only provides the landing page and sign up mechanism not the meeting platform. There are several free meeting platforms that you can use such as google meet, talky.io, etc.

How did you build it?

I'm more than happy to talk about implementation details but first a little context might be useful. LetsMeetThen.com is a simple app that is just complicated enough to be interesting. And yes, I'm sure you could build it using your favorite framework in just a few hours. I fully support everyone building side projects to sharpen their skills. And I'd love to hear about. So, perhaps you could host an online meeting to tell us about what you built.

Also, keep in mind that I am a consultant and I wanted to take this opportunity to explore and learn new tools, technologies and products so that justifies influences my bias towards the new and shiny. In particular, over the last few years I've looked at, explored, used, and worked with various backend and frontend technologies including Python, Rust, Clojure/ClojureScript, Elm, ReasonML, TypeScript, React, Elixir, Node, Go, Swift among others. I'm definitely not an expert in all of those but I have built small (and some large) apps in each of them.

For this project, I knew I wanted to use React and GraphQL but didn't know which specific tools so ended up writing and re-writing the app several times to really get a feel for the strengths and challenges of each tool, framework or library.

GraphQL

I really like GraphQL for relational data. Some data, like a lot of machine learning, is not relational so a straight forward REST api is all that's needed. In my experience though, most business related data is relational or hierarchical. For example even a machine learning system might want to track datasets, feature sets, experimental purpose, settings and results, users, teams, resources available and used, billing centers, codes, etc.. In my experience GraphQL makes it easier to query for exactly the data you need to build robust frontend application and dashboards.

I built versions with both Hasura and AWS Amplify/Appsync which make it easy to create GraphQL CRUD style apps. Hasura works on top of PostgreSQL and Amplify on DynamoDB and they're both awesome in their own way. As I see it, the choice between them depends on whether you want/need some particular features of either PostgreSQL or DynamoDB. If you want/need to use another database another approach perhaps a handwritten server, in what ever language you like, will be necessary.

For this project, I started with Hasura which was a pleasure to work with. I wanted to try out Amplify and, after a slow start, eventually figured out how to get Amplify to do what I wanted. I deployed the amplify version mainly because I did not want to manage and pay for (I'm cheap and this is a POC) a provisioned PostgreSQL database. That may not be a concern for you so adjust accordingly. BTW, Heroku offers a small database for free which may work for you if you want to use Hasura and PostgreSQL.

React and TypeScript

As I mentioned, I've used ClojureScript and looked at Elm and ReasonML and for my personal preferences I felt that React and TypeScript provided the best balance of usability, eco-system and type safety. Yes, I'd love to have a strong(er) type system but the usability and JS interop of TypeScript can be a real advantage in some situations and I feel that I'm usually in one of those situations.

Oh, and I used Tailwind CSS for the styling. I'm not a designer though, so don't blame Tailwind! Utility style CSS seems odd at first but I now feel it is the best way to style components in the projects I work on.

Create React App and Next.js

At first, I was not planning on considering anything besides create-react-app (CRA) but somehow Next.js got on my radar and I was intrigued by the benefits of server side rendering (SSR). The benefits of SSR in SEO and speed are more relevant for the public facing (event) pages and not as relevant (in my opinion) for the private dashboard/admin pages.

Next.js (and CRA) was a joy to use. SSR is deceptively simple at first but does add some complexity, especially when you consider authentication. With CRA everything runs client side in a single "page". But with SSR some code run client side, some server side, each page is (can be) its own "app" and authentication state is a bigger challenge. In particular you need to be able to move auth info (the JWT or API token) from page to page (since each page is/can be a different component) and to the server if you want to do authenticated SSR api calls. It's all doable with some interesting techniques (or hacks) but it something to consider.

Authentication

I also wanted to use JWT for authentication and authorization so considered Firebase Auth, Cognito, and Auth0. They all seemed pretty capable and similar in many ways. Once I decided to go with Amplify, because of DynamoDB, I ended up with Cognito because of its tight integration with Amplify.

Hosting

My original plan was to use CRA and maybe Gatsby for documentation and serve the static assets from an S3 bucket. However Next.js/SSR requires a server (obviously). When I chose to use Next.js I also looked at various hosting options and looked at Zeit.co (now Vercel) with a suspicious eye. It couldn't be that good, could it? Well, Yes it is. It is super easy to host with Zeit/Vercel and that too is strongly recommended.

Conclusions

React and Next.js are awesome. I strongly recommend you check them out.

Hasura and Amplify are powerful and will help you quickly build backends once you get used to them. The main deciding factor is probably the database but you should explore them both and see for yourself.

Zeit/Vercel rocks and is highly recommended.

Tailwind CSS and utility CSS deserve some attention also.

Let me know if you have any questions or comments and if you want to discuss this further I'm hosting an online meeting on The LetsMeetThen Architecture

Want to get notified of new articles and projects?

Get an occasional email with AI/ML and project info.

© 2020 E-String Technologies, Inc. | Privacy