Our Tech Stack at Space Runners

Karim VarelaKarim Varela
5 min read

As a seed stage startup, our top priority in choosing technology is the ability to move fast and iterate quickly. We must be able to test new ideas in market quickly and be willing to drop them and try something else if it’s not working. Additionally, as an AI image generation company, we must choose flexible and customizable tools that allow us to fully experiment with AI and allow our Users to fully express themselves. All the while, we need to balance this with costs.

Here’s our opinionated tech stack, starting from the frontend and going all the way back to our image generation services.

Frontend (web)

We have 2 websites we’re actively maintaining and updating:

  1. ablo.ai: Our core image generation and community design (and soon to be e-comm) product.

  2. spacerunners.com: Our informational, inspirational site for the company.

Stack

  • Analytics: Segment → Amplitude
    Segment is great for piping your user data and analytics to multiple places and Amplitude is great for capturing the important events for your User’s behavior.

  • Canvas manipulation: Fabric.js
    Fabric makes it easy to work with the HTML Canvas

  • Customer Services: Intercom
    We integrate Intercom into our sites so customers can easily chat with us.

  • Deployment: Render
    Render is free to host and deploy static sites and also gives us preview builds on pull requests, which is super handy for testing before we merge in code.

  • Error reporting: Sentry
    Sentry is great for catching issues in production and we use it full-stack as well.

  • Framework: React.js
    In our opinion, React is still the easiest framework to build fast in and has a huge community and toolset supporting it.

  • Language: Typescript
    We are full stack Typescript. This allows our FE developers to more easily work on the BE.

  • Real-time: Pubnub
    Pubnub provides a simple API to get real-time notifications, such as when credits are used on our your account.

  • Styling: Chakra UI
    Chakra is a full UI and styling library that enables us to build and style components super quickly (once you learn the basics :) )

Services Backend (API)

Our Services BE powers our public API used by Clients all over the world in their design tools and also internally for us in ablo.ai.

Stack

  • Analytics: Segment → Amplitude
    Segment is great for piping your user data and analytics to multiple places and Amplitude is great for capturing the important events for your User’s behavior.

  • API Docs: Readme
    Readme integrates nicely with our OpenAPI definitions that are generated automatically from our annotations in our Nest app.

  • Cache: Redis
    We cache responses in Redis to some of those heavy queries where the response doesn’t change often. This speeds up our system and reduces the load on our Postgres DB.

  • Deployment: Render
    Render makes it really easy to do CI/CD and includes our Postgres and Redis stores as well.

  • DNS: Cloudflare
    Cloudflare provides a nice proxy to all our endpoints and also provides out of the box DDoS protection.

  • E-comm: Shopify
    Shopify enables us to easily set up a headless store, integrates nicely with our printing and shipping partner (Printful), and handles all the payments for us.

  • Error reporting: Sentry
    We use Sentry full-stack for error reporting to catch issues in production.

  • File store: GCP Storage
    We store images mostly in GCP Storage as that’s where our image generation workflows (e.g. Image Maker, Fontmaker, and Photo Transformer) live. GCP Storage is also great because they have a feature that automatically moves files to cold storage if they haven’t been used in a while.

  • Framework: Nest.js
    Nest gives us an easy to use modular framework for cleanly separating services in our monolithic BE, defining RESTful endpoints, generating API docs, and running scheduled jobs.

  • Language: Typescript
    We are full-stack Typescript. Allows our BE devs to more easily work on the FE.

  • Printing & Shipping: Printful
    Printful has a huge catalogue and enables us to send custom designs via API to get printed and shipped.

  • Real-time: Pubnub
    We call a simple Pubnub API to notify all Users when credits have been used on their Client.

  • Email: Sendgrid
    We use Sendgrid for sending transactional emails from our System via API.

  • Subscriptions: Stripe
    Stripe enables us to easily set up monthly credit subscriptions with overage charges and handles all the billing for us.

  • Transactional data store: Postgres
    Postgres is a tried and true, scalable, relational database. As we’ve scaled, we have had some performance issues with complex queries involving a lot of joins, and have had to make optimizations here and there to our queries and call patterns, but that’s part of the game.

Machine Learning Backend (AI)

We use machine learning / AI to do a number of things, mostly related to image generation and manipulation:

  • Image Maker: Our text to image service

  • Font Maker: Our text to graphic font service

  • Photo Transformer: Our image to image service

  • Background removal

  • Upscale

We’re always experimenting with the best way to do these things and the landscape is changing rapidly under our feet, but our current stack is something like this:

  • Background removal: BiRefNet
    BiRefNet (bi-direction recurrent feature network) is a performant, open-source, background removal library that doesn’t need a GPU.

  • Deployment: Google Kubernetes Engine
    GKE enables us to build our custom AI workflows in containers and utilize GPUs from GCP.

  • Image generation engines: Stable Diffusion and Flux
    Stable Diffusion gives us the best combination of customizability and quality. Flux is a great combination of speed and quality.

  • Image storage: GCP Storage
    GCP Storage is great because they have a feature that automatically moves files to cold storage if they haven’t been used in a while.

  • Language: Python
    All the hip machine learning and AI libraries are written in Python. It also has image manipulation libraries.

  • Models: Hugging Face
    Hugging Face has an easy to use repository of models to experiment with and a great community.

  • Training: Replicate
    For custom style training, we use Replicate to train LoRAs and do inference.

  • Upscale: SupIR
    SupIR (Super-Resolution using Iterative Refinement) is a great open source library for upscaling as it enables us to upscale to 16MP for high quality printing while preserving details from the original image.

That’s a wrap! Let me know if there’s anything here you’d like to learn more about, and we’ll write a follow up post and go in depth.

0
Subscribe to my newsletter

Read articles from Karim Varela directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Karim Varela
Karim Varela