Avatar of Max Musing

Max Musing

Founder & CEO at BaseDash
Founder & CEO at BaseDash
Recommends
Socket.IO
at

Socket.IO is great for building real-time systems like chat. It's effectively a nice wrapper around WebSockets, with the ability to fallback to other methods for browsers that don't support it. We just used it to implement real-time collaboration at BaseDash, including a chat system like you're looking to build.

Node.js is probably the correct choice, especially if you're already familiar with it You'll probably still need to build an API to send requests to your server, and then use Socket.IO to push messages to your clients. This will let you authenticate users and store messages on your database so you can retrieve them later. PostgreSQL and MongoDB are good options for your database, you should be fine either way. Don't worry about speed, they'll both be sufficient.

React on the front end makes it really simple to handle real-time updating data. Again, even better since you're already familiar.

READ MORE
12 upvotes34.4K views
Founder & CEO at BaseDash
Recommends
Node.js
at

From my experience of the early startup world, a majority of companies these days use Node.js. Python and Go are the next biggest languages, but significantly smaller than Node.

However, if you're having trouble with the front end aspect of Django, using Node probably won't make that easier for you. You'll have a lot more options between front end frameworks (React, Vue.js, Angular 2) , but they'll definitely take more time to learn than Django's templating system.

Think about whether you want to focus on front end or back end for now, and make a decision from there.

READ MORE
10 upvotes182K views
Founder & CEO at BaseDash
Recommends
Node.js
at

It's probably worth investing some time for your team to learn Node.js. There's very little overhead, especially with a framework like ExpressJS, so if your team is familiar with JavaScript it should be a quick process.

It handles I/O really well out of the box, and has a strong community with great open source libraries. Since you're using React on the front end, there's also some benefit to being able to use JavaScript throughout your stack.

READ MORE
10 upvotes78.3K views
Founder & CEO at BaseDash
Recommends
Amplitude
at

Functionally, Amplitude and Mixpanel are incredibly similar. They both offer almost all the same functionality around tracking and visualizing user actions for analytics. You can track A/B test results in both. We ended up going with Amplitude at BaseDash because it has a more generous free tier for our uses (10 million actions per month, versus Mixpanel's 1000 monthly tracked users).

Segment isn't meant to compete with these tools, but instead acts as an API to send actions to them, and other analytics tools. If you're just sending event data to one of these tools, you probably don't need Segment. If you're using other analytics tools like Google Analytics and FullStory, Segment makes it easy to send events to all your tools at once.

READ MORE
6 upvotes2 comments82.6K views
Wyatt Tucker
Wyatt Tucker
November 19th 2020 at 10:59PM

FYI we recently updated the Mixpanel free plan to allow 100k monthly tracked users and up to 100M events: https://mixpanel.com/pricing/

Reply
Ben Miller
Ben Miller
September 1st 2020 at 1:59AM

Thanks Max!

Reply
Founder & CEO at BaseDash
Recommends
Node.js
at

Go with Node.js. There's something really satisfying about being able to use a single language across your entire tech stack. Especially once you integrate GraphQL, which is effectively JSON.

Your second best option is Go, but the ecosystem around Node.js is quite a bit stronger. This will play a big factor when you start building functionality like file management, messaging (especially in real-time), and authentication. The libraries and documentation are just stronger for Node.

READ MORE
6 upvotes2 comments25.3K views
Fabian Gonzalez
Fabian Gonzalez
May 6th 2020 at 7:41PM

Awesome! Thank you for this recommendation!

Reply
Max Musing
Max Musing
May 6th 2020 at 7:57PM

You're welcome, good luck!

Reply
Founder & CEO at BaseDash
Recommends
Django
at

Django is great if you're new to web development. It'll handle all the annoying things like user authentication and data migrations that you really won't want to manage yourself.

Since you're quite new to web development, you might not want to jump into React right away. Django provides a good templating language that'll let you customize the front end of your app without having to worry about state too much. Once your needs get more complex, you can add React into your project one component at a time.

As for databases, PostgreSQL is a great choice. I wouldn't go with AWS for hosting though; DigitalOcean has all the functionality you need at the same price, but with a much more user-friendly interface for beginners. You'll probably be using Droplets for server hosting, DigitalOcean Spaces for file storage, and DigitalOcean Managed Databases to host your database.

You also mentioned generating charts. Chart.js is quite popular and easy to use, and should have all the functionality you need for an accounting app.

READ MORE
6 upvotes10.3K views
Founder & CEO at BaseDash
Recommends
BaseDash

You're right that there isn't a great way to join tables with Airtable's API. The closest you can get is to use a linked record field, which acts as a pointer to another record. You still end up with the problem you mentioned of having to run another query on the second table separately.

Your best bet is to stick with an actual SQL database. Using an ORM should make your life significantly easier so you don't actually have to write raw SQL. If you still want a graphical interface to your data, BaseDash lets you view and edit SQL databases just like Airtable. A full API with join support is coming soon, so that could be your perfect solution to this problem.

READ MORE
5 upvotes20.9K views
Founder & CEO at BaseDash
Recommends
PostgreSQL
at

Node.js is a great option for real-time applications, especially in conjunction with Socket.IO.

In terms of databases, I'd go with PostgreSQL. MongoDB has its benefits (schema-less, sharding, map-reduce), but for most CRUD-based apps, it makes sense to store the bulk of your data in a relational database (of which PostgreSQL is the best IMO). You can throw in MongoDB if you have a specific need for it. There's certainly no need to use both MySQL and PostgreSQL.

As for GraphQL, it can be nice to work with since you don't need to predefine specific data endpoints on your backend, instead shifting the power to your frontend in requesting the data it needs. It's also useful for public APIs, when you don't know what data users want (see Github's API). It can be useful at the early stage when you're prototyping and want to be able to fetch data quickly, but certainly isn't necessary.

At BaseDash we use Node.js, ExpressJS, Socket.IO, PostgreSQL, and Sequelize to fit our use case of database management and real-time operations.

READ MORE
5 upvotes1 comment19.8K views
George Krachtopoulos
George Krachtopoulos
April 6th 2020 at 4:23PM

Thank you, Max. I appreciate your help and advice. They are really useful.

Reply
Founder & CEO at BaseDash
Recommends
PostgreSQL
at

How are you managing your PostgreSQL schema? It doesn't have to be hard to add or remove fields. We're working on a SQL database client at BaseDash that lets you add/remove columns in a couple clicks.

If you decide to migrate some of your data to MongoDB, you can definitely manage the two databases in parallel. For any records that need to be linked, you can treat it just like a foreign key by creating a column that points to an ID in the other database. For example, you might store user settings in MongoDB, and include a UserId field that points to your User record in your Postgres database.

READ MORE
4 upvotes1 comment24.4K views
BrockHerion
BrockHerion
May 7th 2020 at 3:47AM

Thank you, this helps me quite a bit. I am using DataGrip from JetBrains to manage the Postgres schema. It isn't terribly difficult to change or add columns too, just more of an inconvenience on my end. My goal is to let the my client to easily be able to add and remove questions along with managing the type of question being proposed. I feel that in Mongo, it's easier to manage changes to a schema and will give them a greater degree of flexibility in changes they want to make in the future.

Reply
Founder & CEO at BaseDash
Recommends
Node.js
at

Node.js is the most popular of the three among modern tech stacks, and for good reason: it's simple, lightweight, and fast. Plus, being popular has its advantages: better documentation, libraries, and support when you get stuck (which you undoubtedly will as a beginner).

Pair it with ExpressJS for the best experience.

READ MORE
4 upvotes5.1K views