Skip to content

Starting a new code project? Look here first to select the right technologies.

Notifications You must be signed in to change notification settings

digitalartlab/get-started

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 

Repository files navigation

Get Started

Starting a new code project? Look here first to select the right technologies.

This is a collection of guides for starting new projects. It's a living document that will be updated as we learn more about what works and what doesn't.

Introduction

The goal of this document is to help you select the right technologies for your project. By standardizing on a set of technologies, we can maintain a consistent codebase and make it easier to onboard new developers.

Since we jump between projects frequently, it's important that we can quickly get up to speed on a new codebase. That's why we've selected some standard technologies you should use, or have a good reason not to use.

Guidelines

  • We use TypeScript for all projects on web, server and IoT. It's a superset of JavaScript that adds static typing and other features. It's a great way to write code that's easier to maintain and less error-prone. It can be used on web, server, mobile and IoT
  • All code should be stored in GitHub, with documentation bundled in the same repository
  • We use automation to build, test and deploy our code. This ensures that we can deploy code quickly and reliably

Repository

  • The primary branch is called main
    • Protect the main branch and require pull requests for merging
    • This branch must always be deployable. Only merge code that's ready to be released
  • Use Conventional Commits for commit messages. This makes it easier to generate changelogs and automate releases
    • You can use Husky to enforce this. It'll block commits that don't follow the format
  • Stick to Semantic Versioning for version numbers if your project uses versioning. This makes it easier to understand the impact of a new release
    • Install the Release Please GitHub Action to automate releases. This generates the changelog, releases the new version and bumps the version number for you

Technologies

Web

We use React, preferably Next.js, for all new web projects

  • Next.js is a framework for building web applications with React
  • Vercel is a platform for hosting Next.js applications. It also supports serverless functions to link to a database or other services

Mobile Apps

We use React Native for mobile apps. It lets us quickly prototype apps, but also release to both iOS and Android.

  • Expo is a framework for building React Native apps
  • Expo Application Services is a cloud service for building and deploying React Native apps. It also supports push notifications and hotfixes

We have an Apple Developer and Google Play Console account to submit apps to the App Store and Google Play.

IoT

We manage IoT devices (mostly Raspberry Pis) with Balena. It's a great way to manage a fleet of devices and deploy code to them. We can push code to all devices without having to physically connect to each one.

  • BalenaCloud is a platform for managing IoT devices. It supports Raspberry Pi, Intel NUC, and other devices
  • BalenaOS is a lightweight operating system for IoT devices. It lets us run Docker containers on our devices

Backend

We use the CKC & partners server infrastructure for backend and full stack services. This supports Node.js, Python and PHP applications, and static websites. You get to pick from MySQL and MariaDB databases.

  • Nest.js is a framework for building Node.js applications

NoSQL Database

Depending on your needs, you can pick between a NoSQL and SQL database. NoSQL is great for prototyping, but some more complicated queries are easier to write in SQL.

CI/CD

We use GitHub Actions for CI/CD. Services like Vercel have built-in support for GitHub Actions.

Authentication

We want to make it easy to sign in to our applications with existing credentials, so please don't roll your own authentication system. We use the following services for authentication:

  • CKC Account is the Auth0 based single sign-on service that we use for customer facing authentication
    • Auth0 has SDKs and quickstarts for most platforms, so it's easy to integrate with
    • CKC Account also supports employee authentication for mixed use applications
  • Azure Active Directory is the single sign-on service for employee authentication

Resources

About

Starting a new code project? Look here first to select the right technologies.

Topics

Resources

Code of conduct

Stars

Watchers

Forks