Simple, Secure, Robust, Scalable, Cost Effective
These are the values that have driven the choices made as we defined our preferred tech stack. We have abundant experience with it, and has served us incredibly well over the years. We have used this stack to build all projects, from in-house workflow applications to a high availability, highly secure online gaming service, reviewed and certified by Gaming Labs International.
Here is an overview of the various components and why we chose the tools that we did.
Ionic/Angular Front-end (app and dashboard)
We’ve been using Ionic since it was still in beta. We use it for both end-customer-facing mobile apps and administrative dashboards. The beauty of a cross-platform framework like this is a single code base can be deployed to the web, iOS, and Android, massively reducing development and maintenance costs. And unless your app has some extreme performance requirements, the performance of a compiled ionic app is indistinguishable from native.
The benefit of also using Ionic for the administrative dashboard is twofold: A consistent tech stack, making it easier to build and maintain, and app-like performance of the interface. Having worked with ionic/angular dashboards for many years now, it’s jarring to use a well-known, widely used service where the dashboard still needs to load an entire page on every click. It seems archaic, to be honest…
.NET Core Backend in Docker Swarm on Ubuntu VPS in Digital Ocean
Again, we were very early adopters of .NET Core, starting with release candidates. The fact that it was also cross-platform, and thus deployable to Linux servers made this an easy decision. For a tiny startup, slashing our costs from several hundred dollars a month on Azure to $40 for a Linux droplet on Digital Ocean mattered. That may not seem significant, but it was easy to see costs growing rapidly on Azure as we needed to scale.
On Digital Ocean, we like using Docker Swarms on virtual private servers (VPS), as it lets us host multiple apps and services on just a few droplets with lower costs for more power and all the benefits of load balancing and redundancy. Docker Swarms are slick as they automatically deploy application instances to servers according to resource availability, essentially squeezing maximum performance out of our servers.
Continuous deployments are set up as build pipelines in Azure DevOps, making publishing updates and different environments (dev, qa, prod) a piece of cake.
Managed MySQL, MongoDB and Redis
We run both self-hosted databases for non-production environments and managed databases for automatic failover and replication (high availability), scalability, security and ease of management. This is a simple, cost-effective and worry free set up for handling most data persistence needs.
We are very thoughtful about when to start using distributed caching, as doing so can add significantly to code complexity. But when needed, we can use advanced strategies like distributed caches mirrored to local server for extremely fast data retrieval.
Azure DevOps for Repository, Pipelines, Project Management
For project management, DevOps can support just about any workflow imaginable. We prefer to use the agile process using sprints and user stories. DevOps makes it easy to add stakeholders and give them access to review and approve stories.
Azure DevOps pipelines, git repositories and projects are configured to automatically deploy new builds to respective environments as pull requests are migrated from environment to environment, reducing the risk of oversights and errors.
External Services – Stripe, SendGrid, OpenAi
We have experience integrating with Square and PayPal, but Stripe is hands down the winner for ease of integration and customer experience. We have experience with letting admins connect their own Stripe account, using Stripe Express to connect their banking info (which honestly is almost as much as a full Stripe account now anyhow), and also being able to collect a platform fee from every purchase. We also have experience with promo codes and memberships.
SendGrid has been our choice for email integration: sending notifications, reminders, onboarding links, etc. and integrated with Mailchimp for handling newsletter signups.
For AI, we’ve worked with OpenAI’s suite of APIs, including one-shot API requests, fine-tuned models returning structured data, and image generation using DALL-E. Additionally, we’ve utilized the Whisper API for audio transcription and the Embeddings API for text similarity and clustering analysis.
Onboarding
Not included in the diagram are various supported login methods, including email, Facebook, Google, and LinkedIn. Additionally, we support passwordless authentication., since nobody wants to remember another darn password!
Conclusion
None of our choices are written in stone, but with the libraries of code we’ve developed, these are the choices that let us build and deploy most rapidly. We’ve been working with many of these technologies for over 8 years, and not needing to think about the architecture lets us focus on adding value where it matters!
If you have any questions or would like to discuss how our tech stack would fit and benefit your project, feel free to contact us or book a consultation!