The Testimonial Blog

The Testimonial Blog

All the tools we're using to build our SaaS

All the tools we're using to build our SaaS

Written by Wilson Wilson

Cofounder of Senja

It's almost been two years since I originally launched Senja on Twitter after hacking it together in public for 30 days.

Picking our tooling at the time was easy. We knew we could swap our stack and our services as we grew, so we spent very little time choosing tools.

When I first wrote this article in November last year, we had about 1,000 users and were at $500 MRR.

Today we have 11,000 users, and are at $17,000 monthly recurring revenue.

As we've grown, added more features and gotten way more customers, we've gradually refined our stack, cut down on unnecessary tooling and found the services that work best for us.

In this post, I'll show you the tools we're using to build a SaaS that serves this many people, and why we chose these tools.

What Senja is Made Of - Our Tech Stack

Shipping quickly is extremely important to us. It's the biggest advantage we have over the current kingpins of the testimonial collection and sharing industry.

We ship dozens of updates per month. That's only possible because I've picked a tech stack that doesn't slow me down, but empowers me to move quickly.

Senja is made up of multiple apps that speak with each other.

  • The app

  • The backend

  • The curator / testimonial fetching & sync service

  • Public pages

  • Widgets

  • Our Public API

  • Our image generator and preview service

  • etc.

Because of the nature of our app and our requirements, our stack isn't uniform across these services. Here's a breakdown of the tech we're using and how they power Senja.

  • Sveltekit: Fun fact! I originally wrote the Senja app in Vue, but quickly swapped to Svelte because I move much faster with it.
    Building in Svelte has not only helped me move faster, but because Svelte is a compiler and doesn't require a virtual DOM, I'm able to build and distribute Svelte-powered components with it easily.

  • Tailwind: We're using Tailwind for styling pretty much everything. Not only does it power our app, but it also powers our widgets and chrome extension.

  • Vercel - We're using Vercel to host all our user-facing apps (the app, the forms and Walls of love)

  • Node + Express - we're running multiple express servers for different parts of our app:

    • Functions & Webhooks

    • Data Scraping & Testimonial Sync

    • Image Generation

    • Our Public API

  • Firebase: Powers authentication.

  • Amazon S3: Image Storage

  • Postgres: Our data is highly relational, so I'm really, really happy I chose to use SQL over NoSql for Senja's database.

  • Hasura: Hasura helps me work quickly with Postgres. It provides an out of the box GraphQL API around my database as well as authentication and webhooks. 10/10 would recommend.

  • Mux: Our video streaming provider. Completely painless to set up and worth every penny.

  • Remotion: Using this for video and image generation. It works seamlessly!

  • Cloudflare: CDN + Workers + Custom Domains

  • BunnyCDN: Image optimization and on-the-fly transformation

  • ScrapingBee + Private Data Scraping tools: We're using these to fetch reviews on sites that have no API.

  • Postmark: Transactional emails made easy!

As for our backend, and database, we use Railway, and it's been a joy to use. We also have an on-demand image generation server hosted there.

Marketing & Customer Success Tools

  • Senja! Our own testimonial collection software, to help us collect social proof and share it on our website.

  • Logsnag: Event tracking and notifications built by my good friend Shayan. It sends us notifications for every event performed inside the app.

  • Pirsch: Open-source and privacy-friendly web analytics. They have the most beautiful analytics in the market IMO.

  • Posthog: Analytics and reporting

  • Segment: One stop for data ingestion. We send data from here to Posthog, Google Ads, Google Analytics and more.

  • Helpkit: We write our support articles in Notion. Helpkit creates a beautiful support site from our Notion docs.

  • Fernand: Email support software

  • FirstPromoter: Affiliate programs

  • Encharge: Marketing automation on steroids.

  • Breakcold: Influencer and partnership tracking

  • Featurebase: Feedback board, roadmap and changelog

  • Swipewell: For curating testimonial examples

  • Supademo: The interactive demo on our landing page

  • Typefully + FeedHive: For scheduling tweets

It's almost been two years since I originally launched Senja on Twitter after hacking it together in public for 30 days.

Picking our tooling at the time was easy. We knew we could swap our stack and our services as we grew, so we spent very little time choosing tools.

When I first wrote this article in November last year, we had about 1,000 users and were at $500 MRR.

Today we have 11,000 users, and are at $17,000 monthly recurring revenue.

As we've grown, added more features and gotten way more customers, we've gradually refined our stack, cut down on unnecessary tooling and found the services that work best for us.

In this post, I'll show you the tools we're using to build a SaaS that serves this many people, and why we chose these tools.

What Senja is Made Of - Our Tech Stack

Shipping quickly is extremely important to us. It's the biggest advantage we have over the current kingpins of the testimonial collection and sharing industry.

We ship dozens of updates per month. That's only possible because I've picked a tech stack that doesn't slow me down, but empowers me to move quickly.

Senja is made up of multiple apps that speak with each other.

  • The app

  • The backend

  • The curator / testimonial fetching & sync service

  • Public pages

  • Widgets

  • Our Public API

  • Our image generator and preview service

  • etc.

Because of the nature of our app and our requirements, our stack isn't uniform across these services. Here's a breakdown of the tech we're using and how they power Senja.

  • Sveltekit: Fun fact! I originally wrote the Senja app in Vue, but quickly swapped to Svelte because I move much faster with it.
    Building in Svelte has not only helped me move faster, but because Svelte is a compiler and doesn't require a virtual DOM, I'm able to build and distribute Svelte-powered components with it easily.

  • Tailwind: We're using Tailwind for styling pretty much everything. Not only does it power our app, but it also powers our widgets and chrome extension.

  • Vercel - We're using Vercel to host all our user-facing apps (the app, the forms and Walls of love)

  • Node + Express - we're running multiple express servers for different parts of our app:

    • Functions & Webhooks

    • Data Scraping & Testimonial Sync

    • Image Generation

    • Our Public API

  • Firebase: Powers authentication.

  • Amazon S3: Image Storage

  • Postgres: Our data is highly relational, so I'm really, really happy I chose to use SQL over NoSql for Senja's database.

  • Hasura: Hasura helps me work quickly with Postgres. It provides an out of the box GraphQL API around my database as well as authentication and webhooks. 10/10 would recommend.

  • Mux: Our video streaming provider. Completely painless to set up and worth every penny.

  • Remotion: Using this for video and image generation. It works seamlessly!

  • Cloudflare: CDN + Workers + Custom Domains

  • BunnyCDN: Image optimization and on-the-fly transformation

  • ScrapingBee + Private Data Scraping tools: We're using these to fetch reviews on sites that have no API.

  • Postmark: Transactional emails made easy!

As for our backend, and database, we use Railway, and it's been a joy to use. We also have an on-demand image generation server hosted there.

Marketing & Customer Success Tools

  • Senja! Our own testimonial collection software, to help us collect social proof and share it on our website.

  • Logsnag: Event tracking and notifications built by my good friend Shayan. It sends us notifications for every event performed inside the app.

  • Pirsch: Open-source and privacy-friendly web analytics. They have the most beautiful analytics in the market IMO.

  • Posthog: Analytics and reporting

  • Segment: One stop for data ingestion. We send data from here to Posthog, Google Ads, Google Analytics and more.

  • Helpkit: We write our support articles in Notion. Helpkit creates a beautiful support site from our Notion docs.

  • Fernand: Email support software

  • FirstPromoter: Affiliate programs

  • Encharge: Marketing automation on steroids.

  • Breakcold: Influencer and partnership tracking

  • Featurebase: Feedback board, roadmap and changelog

  • Swipewell: For curating testimonial examples

  • Supademo: The interactive demo on our landing page

  • Typefully + FeedHive: For scheduling tweets

It's almost been two years since I originally launched Senja on Twitter after hacking it together in public for 30 days.

Picking our tooling at the time was easy. We knew we could swap our stack and our services as we grew, so we spent very little time choosing tools.

When I first wrote this article in November last year, we had about 1,000 users and were at $500 MRR.

Today we have 11,000 users, and are at $17,000 monthly recurring revenue.

As we've grown, added more features and gotten way more customers, we've gradually refined our stack, cut down on unnecessary tooling and found the services that work best for us.

In this post, I'll show you the tools we're using to build a SaaS that serves this many people, and why we chose these tools.

What Senja is Made Of - Our Tech Stack

Shipping quickly is extremely important to us. It's the biggest advantage we have over the current kingpins of the testimonial collection and sharing industry.

We ship dozens of updates per month. That's only possible because I've picked a tech stack that doesn't slow me down, but empowers me to move quickly.

Senja is made up of multiple apps that speak with each other.

  • The app

  • The backend

  • The curator / testimonial fetching & sync service

  • Public pages

  • Widgets

  • Our Public API

  • Our image generator and preview service

  • etc.

Because of the nature of our app and our requirements, our stack isn't uniform across these services. Here's a breakdown of the tech we're using and how they power Senja.

  • Sveltekit: Fun fact! I originally wrote the Senja app in Vue, but quickly swapped to Svelte because I move much faster with it.
    Building in Svelte has not only helped me move faster, but because Svelte is a compiler and doesn't require a virtual DOM, I'm able to build and distribute Svelte-powered components with it easily.

  • Tailwind: We're using Tailwind for styling pretty much everything. Not only does it power our app, but it also powers our widgets and chrome extension.

  • Vercel - We're using Vercel to host all our user-facing apps (the app, the forms and Walls of love)

  • Node + Express - we're running multiple express servers for different parts of our app:

    • Functions & Webhooks

    • Data Scraping & Testimonial Sync

    • Image Generation

    • Our Public API

  • Firebase: Powers authentication.

  • Amazon S3: Image Storage

  • Postgres: Our data is highly relational, so I'm really, really happy I chose to use SQL over NoSql for Senja's database.

  • Hasura: Hasura helps me work quickly with Postgres. It provides an out of the box GraphQL API around my database as well as authentication and webhooks. 10/10 would recommend.

  • Mux: Our video streaming provider. Completely painless to set up and worth every penny.

  • Remotion: Using this for video and image generation. It works seamlessly!

  • Cloudflare: CDN + Workers + Custom Domains

  • BunnyCDN: Image optimization and on-the-fly transformation

  • ScrapingBee + Private Data Scraping tools: We're using these to fetch reviews on sites that have no API.

  • Postmark: Transactional emails made easy!

As for our backend, and database, we use Railway, and it's been a joy to use. We also have an on-demand image generation server hosted there.

Marketing & Customer Success Tools

  • Senja! Our own testimonial collection software, to help us collect social proof and share it on our website.

  • Logsnag: Event tracking and notifications built by my good friend Shayan. It sends us notifications for every event performed inside the app.

  • Pirsch: Open-source and privacy-friendly web analytics. They have the most beautiful analytics in the market IMO.

  • Posthog: Analytics and reporting

  • Segment: One stop for data ingestion. We send data from here to Posthog, Google Ads, Google Analytics and more.

  • Helpkit: We write our support articles in Notion. Helpkit creates a beautiful support site from our Notion docs.

  • Fernand: Email support software

  • FirstPromoter: Affiliate programs

  • Encharge: Marketing automation on steroids.

  • Breakcold: Influencer and partnership tracking

  • Featurebase: Feedback board, roadmap and changelog

  • Swipewell: For curating testimonial examples

  • Supademo: The interactive demo on our landing page

  • Typefully + FeedHive: For scheduling tweets

Collecting testimonials doesn't get much easier

Collect text and video testimonials — Share them everywhere!

Sign up for free

Testimonials Made Easy

The faster, easier way to collect testimonials

Jump in today and see how easy it is to collect testimonials with Senja.

Testimonials Made Easy

The faster, easier way to collect testimonials

Jump in today and see how easy it is to collect testimonials with Senja.

Testimonials Made Easy

The faster, easier way to collect testimonials

Jump in today and see how easy it is to collect testimonials with Senja.