Each year for the last two years I have asked companies of one, meaning companies that consists of only one person of what tech stacks you use. Feel free to link to your site or project for show case if you want.
Here is the last two threads:
(2020) https://news.ycombinator.com/item?id=25465582
(2019) https://news.ycombinator.com/item?id=21024041
What is your tech stack?
Why did you choose it?
Do you think your choices had any impact on your success?
Thanks in advance!
The system serves 4 PB of data to 60 million visitors per month. I have served 30 PB and 700 million file views since I started tracking usage somewhere in 2018.
I'll go from front to back:
- Most of the frontend is plain HTML, CSS and JS. I have started transitioning some pages to Svelte. I like this framework for its speed and simplicity
- Cloudflare Analytics to get basic info like which pages are popular and where my users are from
- The structure of the website (page wrap, menu, footer, etc) is managed with Go's template system
- Constellix for Geo-DNS. This automatically sends users to the server closest to them by doing Geo-IP lookups on the nameservers
- The user-facing servers are dedicated 10 Gbps Leaseweb servers, stuffed to the brim with SSDs in RAID6 for caching. Each of these servers cost €1200 per month. The storage servers are from Hetzner's SX line.
- The OS is Ubuntu 20.04 server edition. I use Ubuntu over Debian because it ships with TCP BBR
- The API is written in plain Go. The only HTTP libraries I use are httprouter for routing and Gorilla Websockets
- The storage system is custom built to spread files over multiple servers. I call it pixelstore, it's not open source (yet)
- The database is ScyllaDB. I landed on this one after going through multiple other systems with severe bottlenecks. I started with MySQL which was limited to a single location, so other locations had high latency. Then I tried CockroachDB, but it kept hanging under the load no matter how much hardware I threw at it. ScyllaDB is very fast and relatively reliable.
- UptimeRobot for monitoring
- Mailgun for account e-mail verifications
Feel free to ask me more questions :-)
Episodes are a mix of solo developers and organizations but based on having personally recorded and edited every episode my gut says about 30% of the episodes are solo devs and it's usually pointed out in the first few minutes of the show.
With that said, if you want to be on the show to chat about your tech stack let me know. There's a "become a guest" button in the nav bar to get the ball rolling.
I have a long term itch that I want to scratch soon, whether it's possible to dispose of PostgreSQL and just store my data in an S3 compatible object store and yet still have a SQL interface to it. https://blevesearch.com/ is on my list of things to look into for this. I'd already structured the PostgreSQL schema with the possibility of putting individual tables into an object store, but as my databases grow I'm keen to avoid becoming a DBA and I don't use most PostgreSQL features so if I have the chance to reduce my tech stack to just Go I may take it.
What I've learned from having a mix of Python + Django + some NPM... bitrot and maintaining dependencies is a debt that you have to start paying way too soon. Originally only the API was in Go, but that is the one part that over years has required virtually no debt paydown due to the language, environment, dependencies. You can leave a Go application for 8 years and all you need do is compile it to the latest Go and everything works perfectly... I can't even run or upgrade Python apps from half that time ago without major work to bring it up to date. As the side projects proliferated or grew, it is less overall effort for me to rewrite in Go than maintain everything else.
Front end: plain JavaScript
Back end: Node.js
Host: $10 DigitalOcean droplet
Web server: Nginx
SSL: Let's Encrypt with certbot
Proxy: Cloudflare
Database: Postgres
Caching: Redis
Indexing: MeiliSearch
I wanted to learn JavaScript and understand the fundamentals, so I used vanilla JavaScript for the front end without any framework (React, Vue, etc).
Initially, the comparison engine was slow, so I learnt about indexing and added MeiliSearch to the stack.
I try to keep it as simple as possible and only add what I need.
I plan on migrating to Next.js eventually - not because I need to, but because I think it will be a good learning experience. However, that's not my priority right now, and is probably an excuse for marketing/content procrastination!
What is your tech stack?
- Frontend (JavaScript, NextJS)
- API (Golang)
- Observability (Honeycomb.io - for events, k8s metrics, visual data analysis)
- Infrastructure Hosting (Kubernetes - container platform to run it all, in my case Google Kubernetes Engine)
- Deployment (Terraform - all deploy components are written in HCL)
- TLS (Let's Encrypt)
Why did you choose it?
I wanted to have a minimal set of tools to manage my infrastructure, with the varied workloads of (API, game server, website, etc.) building containers and running them on the Kubernetes platform made it a one stop shop for storage, network and compute uses.
Additionally on the deployment side Terraform providers and in some cases modules were already available for me to use for bootstrapping specific infra components I am interested in.
Do you think your choices had any impact on your success?
It's allowed me to create a large amount of boilerplate, so I'm at a good point if I wanted to add more servers of different types it a relatively easy change compared to how I managed it all manually years ago.
This side project has allowed me to develop a technological skillset that definitely have helped me critically think in a software development career route.
Backend: Django + Django Rest Framework + Celery + Postgres
Frontend: Vanilla Js + prosemirror
Deployment: Manually on rented servers
Picked that because this is probably the fastest way to code for me, no bullshit. I know that if I add any new tech that will slow me down, because I'll have to learn and master it and that takes a lot of time.
I don't think that has any impact on my success at all. Customers don't care about the stack, the only thing that it impacts is development speed. And this is not a significant factor. The most important thing in Saas B2B is sales skills
Tech Stack:
- Ruby/ for webapp and user facing service: very quick to get the feature out, easiser to work with HTML, database access. Being a one man shop, I have to develop fast
- Go: mail server and anything that isn't user facing or doesn't involve rending HTML. Statically type to reduce bug, performance to cut cost, this is the core of business.
- React Native: for our (upcoming) mobile app so I can share code for both of android/ios
I think the ability to ship out feature fast is important to keep user engage. And with the performance of Go I can keep cost low. https://hanami.run currently handles about 50K domains and processes 10 email per second and the entire infrastructure is ~ $100 per month including redundancy.
Both client- and server-side code is written with vanilla JavaScript. Since I'm targeting only Electron and modern Chromium-based browsers I can use latest web technologies without any transpilers or preprocessors. I'm using mostly raw DOM APIs without any abstraction layers.
Third-party services:
- Firebase (database, storage, hosting, cloud functions)
- Paddle (payments, taxes)
- Algolia (instant search)
- ProtonMail (regular emails)
- SendGrid (transactional emails)
I have been using Firebase, Paddle and Algolia for several years now. So far I had zero problems with them and the overall experience was great (intuitive dashboards, good documentation, clean APIs).
I only wish there was a service that would allow me to easily build Electron packages for multiple operating systems and architectures - currently it is a mess that requires multiple virtual machines with a ton of dependencies.
- $5/month Digital Ocean server
- HTTP server: pm2 / Node / Express
- Database: SQLite (because it's fast and needs fewer resources and less configuration than others)
- Front/backend - custom full-stack Svelte framework.
- Analytics: GA
- Email: Mailgun
- Uptime monitoring: Nine9s (https://nine9s.cloud/ from another solo dev I believe)
The Svelte framework I made is really cool. It makes it really easy to have server-rendered pages (for search engines and fast initial page load), pre-compiled static CSS, code-splitting per page, and automatically generated JSON APIs per page that re-render the Svelte component, as well as lets me use Svelte on the front-end which makes development much easier for me. Example code here: https://github.com/Glench/full-stack-svelte-prototype/
The tech stack has basically no effect on success as far as I can tell except that it's fast for me to develop.
- Django/Python
- SQLite
- Celery and Redis for task queues
- Bootstrap4
- jQuery
- Sentry for error tracking
- Stripe for payments
- EmailOctopus for newsletter
- SendGrid for transactional emails
- NameCheap for the domain
- Linode for hosting
Running costs are USD 7/month for Linode + USD 15/year for the domain. SendGrid is currently free through the Twilio Startup Program.
Why did I choose it?
I am a lawyer and startet to learn how to code from scratch.
Python was being recommended because it is easy to learn. So I chose that.
Further, there are many Python/Django tutorials available online and I was always able to find my answers online. That definitely helped me to keep going and not give up.
Front end: Vue, vuetify, vuex, NGL, three.js/webgl, d3.js, 100% typescript, yarn, webpack Back end: node.js, express, Firebase, GCE, Blender, ffmpeg, docker, CUDA
Why? Vue for pretty UI & ease of coding, NGL for beautiful molecular graphics, Firebase because it makes getting from 0 to 1 easy, Blender because of Cycles renderer & scriptability.
Have choices impacted success? Definitely! Faster iteration leads to better UX, good architecture leads to stronger foundation, and standard tech means I can on-board a contractor when needed.
I went with Flask (python) + Bootstrap for my website.
The apps are created in Flutter, which was a great choice looking back on it. This allows me to have 1 codebase for both Android & iOS apps (most customers want both). If developing an app for just Android would be 100% effort, developing an app for Android and iOS with Flutter is around 130% effort I'd say. Those additional 30% mostly come from inconsistencies in Flutter between Android & iOS and from desired differences between the platforms, e.g. Material vs Cupertino design.
I developed native Android apps before and now I'd even use Flutter if I wanted to just create an ordinary Android app. It's just so much nicer to use in my opinion.
Summary: Flutter was a great choice, Flask is fine too, nothing to complain about there.
What is your tech stack?
Backend: Golang
Frontend: HTML, Plain JavaScript and CSS
Database: PostgreSQL and object storage
I run everything on a single dedicated server on a VM. Services are deployed as containers and managed using HashiCorp Nomad.On the backend there is a custom task queue which delegates work to worker instances. Repositories are rendered as static HTML and stored on object storage. As each repository is stored as a single object there is also a custom proxy that allows serving individual files from objects. All of this is written in Go.
The frontend currently consists of a landing page without any JavaScript and a web app which builds most elements using JavaScript. Everything is styled by hand using CSS.
Why did you choose it?
I chose to use technologies that would allow me to maintain everything years from now without having to rewrite a lot of code. I wanted to have something that would run fast, work reliably, have a small number of dependencies and that would allow me to develop at a reasonable pace.
As for the infrastructure, I wanted increased availability, more security and control and lower costs.
Do you think your choices had any impact on your success?
Yes, but for me success is being able to learn, delight customers and to satisfy my own standards on how things should be done.
* Many founders are using Digital Ocean or Linode or something similar/simple, and not complicated k8s/aws setups
* Many founders are using boring but stable tech like python/django or rails or similar for the backend, and vanilla js for the frontend
Looks like where it matters, ie, shipping something, most are using boring but stable tech instead of Fad-of-the-week
Deployment: Docker Compose. It's great to just set a DOCKER_HOST environment variable and I can deploy to any server with Docker installed.
Backend: a Go service. Could be any language really but that's what I know. Just takes requests, does some business logic and returns HTML templates.
Frontend: I'm not a frontend dev so I try to avoid it as much as possible. For UI, I use Bulma (a pretty comprehensive bunch of CSS components), with a tiny sprinkling of vanilla JS for small client-side animations (e.g. burger menu toggles). For any user action that hits the backend, I use https://htmx.org/ and just return a small HTML snippet as the API response. No point using client-side JS for that (no latency gains and makes the tech stack less homogenous).
All quite boring and stable, the way it should be :)
I have a longer writeup, along with my reasoning for the technologies I chose: https://kubami.com/articles/my-modern-saas-software-stack/
I only recently moved to Rails though. Before that I was full stack TypeScript, which was cool and I still miss the static types, but it’s worth going without them.
The tech stack is:
- Ruby on Rails
- Postgres
- Redis
- Hosted on Heroku
I choose this stack because it was the technologies I was most familiar. Also, I knew it could solve the problems the business faced.
I do not think Tech Stack is the most important component to my success. Its important to choose a Stack which can solve the business's problems first and second having familiarity with the technology can make you more agile.
Spending time on SEO, marketing and advertising is where I can attribute most of my success.
The frontend is Vue 2.0 and TailwindCSS. No other major libraries besides the Vue standards (router, store, etc).
The site is delivered by Firebase Hosting and the backend is all Firebase (Firestore, Auth, Storage and Cloud Functions)
I absolutely love this stack. It’s so simple to run and requires no maintenance. Plus the fixed cost is $0. To deploy I use manually-triggered GitHub Actions workflows.
The best part of the whole thing is the local dev experience. With the Vue CLI and the Firebase Emulators I can run my entire stack locally with hot reload across frontend and backend. When I push to production I am confident.
* Django for backend
* Django management commands + cron for recurring tasks
* Django templates for frontend
* Very few lines of vanilla JS
* uWSGI
* Caddy for reverse proxy + SSL generation
* Let’s encrypt for wildcard SSL
* Hetzner instance as server
* Deployment through SSH + git with a simple script: https://git.sr.ht/~sirodoht/mataroa/tree/master/item/deploy....
> What is your tech stack?
Ruby, Rails, Postgres, Sidekiq, Redis, Hotwire, Stimulus, TailwindCSS and Echarts for visualizations. Heroku hosting because I don't want to deal with devops and hosting costs are the least of my worries (data's expensive these days!).
> Why did you choose it?
My background is in economics, trading and business (among other things). I picked a tech stack that makes the parts I have the least experience with (web development) easy and the Rails ecosystem really can't be beat. The 'default' Rails tech stack is also nicely curated and seems to just work.
For the parts I do know very well (economics, financial analysis) Ruby is a great language. Python/R have a few more packages (and I've used R quite a bit) but I'm rolling my own business logic anyway and I prefer Ruby as a language to both.
> Do you think your choices had any impact on your success?
Progress has been surprisingly quick so hopefully!
I've tried many alternatives but every time things are just slower to dev.
This stack has a great balance between integration and flexibility. The only things that matches the django ecosystem is the rail/symfony ones, but ruby and php outside the web are limited. Js has diversity but integration is seriously lacking. Anything else is too low level which is not a good cost/benefit ratio for me.
Vite, vue and tailwind makes front dev fun again, postgres and redis can deal with everything without tuning up to millions of users and ubuntu and git are just easier to find tutorials for.
The impact is huge as I can actually focus on my value proposition for my client. They can ask me to add a cms, a weird service auth or some messed up ftp pdf generation workflow and I can leverage existing libs 80% of the way, with just enough custom to charge premium.
I end up twice faster, 3 times cheapers than my competition and yet my hour billing is very good and my stress at sea level.
Backend in Go with a simple MVC pattern, no framework. All data in Postgres. Front end is server rendered HTML using MaterializeCSS for components, migrating to TailwindUI.
Hosted on GCP using Cloud Run, deployed using the gcloud cli orchestrated in a makefile. Database is a Cloud SQL instance.
Google Cloud Tasks for the message queue. Amazon SES for transactional emails and S3 for blob storage.
I have written a LOT of single page front ends over the years. I think the decision to go back to plain HTML templating has made it dramatically faster to add features. Same for the switch from microservices back to a well constructed monolith. I can just get right down to the feature I want to build or the bug I need to fix without wrestling the plumbing.
Go has also been wonderful for keeping things simple. I was always tempted to make things “clever” in nodejs.
Here is my tools & workflow:
https://nudge.id.au/v5/img/Cardinia-Electronics-Workflow-202...
Professional CAD tools are not cheap, so I'm basically breaking even. I'm mainly doing it for the love it -- I love to create things to inspire others to also create.
Luckily I have a full time job to keep me going :)
The sofware focus on automating tasks other systems don't, document decisions and an extremelly tight link between the budget and the real and projected expenses.
Construction is a very local dependent business so good systems from other countries didn't adapt really well here. Hence the effort to make our own. I am the solo dev.
Stack is
* Backend: Quarkus.io , Lombok and Java
* Frontend: React, Ant Design and Typescript
* Persistentency: Postgres
* Automatic Backup: S3 and custom Postgres container
* Platform: Civo and K3s for PROO
* Security: Keycloak
* CI/CD: Github actions and Cloudflare pages
* Local Env: Docker for local.
* Ide:IntelliJ
Why did I Chose it: * Java and Quarkus: because I have 20 years of experience with Java, it's rock solid, performance is great and I am fast with it.
* Civo and K3s: Because I love k8s but it's too expensive to run for my operation.
* Postgres: It's just great.
* React and Ant Design: I like React approach, I have used Angular and Backbone before and react is awy better. Ant Design is just awesome, great looking components and they work 99% of the time, documentation is also very good.
* Keycloack: because makes me faster, implementing security by your self is always a bad idea unless you are a pro, which I am not. Keycloak let's me focus on the business.
* Github actions: Simple, powerful, free!
* Cloudflare pages: Simple, powerful, free!
Do you think your choices had any impact on your success?
Not there yet, let's talk in 3 years. But we are using the system at my company already and locally it's been a great sucess, improved our work by a mile, people are happy using it even with some bugs, we are already saving money and identifying places where we didn't have a good budget to improve next time. We also are not afraid of people leaving anymore, since with the system their replacements can pickup where they left and continue to work on Day 1 and buy stuff maintaining the time requirements, that was the best part.
Front-end: Typescript, Next.js, Styled Components
Back-end: Typescript, Node.js, Express, Socket.io, Express Audio/video: Mediasoup
Deployment: Github workflows, Docker
Analytics: GA, Mixpanel, Sentry
Hosting: A couple CPU-optimised droplets from Digital Ocean, Firebase
Next.js + Styled Components was a really good choice. When time is limited, reducing any silly roadblocks is really important.
Mediasoup is pretty raw when it comes to setting up basics of video conferencing but allows for a much higher level of customisability and optimising final operational cost. It was a world of pain initially (not many solid examples of how to use it) but worth it at the end.
> Do you think your choices had any impact on your success?
Maybe not on success (reality will verify that in the coming months) but on avoiding any unnecessary failure on the way. I worked and interacted with startups in the past that would get excited and jump on using newest tech (the very first version of Swift or early version of React Native for example...) just to end up battling the unknowns after a couple weeks / months. I try to keep the product fun but keeping the tech stack boring and predictable.
BACKEND:
- Python for the backend. Just a great, batteries included language that lets me do what I want fast and doesn't get in my way.
- Flask: a web framework for Python. There's Django too, but Django is no fun. Flask is small and exactly what I want.
- Pytorch: My DL framework of choice. Again, understandable, makes sense, and fastly iterable. No archaic nonsense (looking at you Tensorflow). Also of course pandas, numpy, scikit etc...
- Scrapy: pretty powerful scraping library
- PostgreSQL: classic
FRONTEND: I'm not a frontend guy, but it's a necessity, so I go with the simplest.
- Bootstrap: Lots of templates, easy to understand. I'm not entirely happy with it though; I wanted to try Tailwind.css for my next project
- Simple, custom Javascript. No complex frameworks. I barely understand JS; I don't want to use a framework until I feel comfortable with bare JS.
DEPLOYMENT & OTHERS:
- Heroku: a bit expensive but so simple. Removes all the hassle. I don't think deployment is fun, so Heroku is my friend.
- Google Analytics: I don't want a lot of analytics, and GA just works. I do want to move to a more privacy friendly choice.
- Uptimerobot for detecting problems. Simple, works, free.
With this tech stack I feel really comfortable, I can iterate on all layers, and I really do have fun developing on it. I can shoot out an MVP for most projects in a week.
Here's some stuff I've built with this:
https://www.namy.ai (still building it, especially improving the AI model right now)
https://www.hugomontenegro.com
My biggest gripe in this tech stack is bootstrap, but I think despite of that and me not being a frontend engineer I still managed to give the sites a bit of a non-generic flair.
Happy to answer any comments!
> What is your tech stack?
The choices are python, scala, julia, matlab and R. Of these python takes at least 90% of the market. I am using python and will do so for the forseable future. Don't like it but it's super practical thing to do. Fingers crossed Julia hits mainstream in the next few years.
Since I am mostly in the computer vision world my stack is torch, torchvision, pytorch-lighting, opencv, scikit-image, scipy and numpy. From time to time i call upon numba when it is impossible to avoid a loop (python loops are sloooooow, numba JIT compiles). Very rarely i coded stuff in C++ and used cython to link it to rest of python. Most of the stuff is already there. For model inference serving i use fast api.
> Why did you choose it?
I chose python because there is no real choice here. It's a monopoly. Winner with most ready to use packages takes all. I am rooting for Julia to eventually win over python as using python as the (big) data language is contradictory given how slow the interpreter is. Also it is not a GPU native language.
Torch was more of a personal choice as I really hated tensorflow 1.X versions and the compute graph. It was hard to debug and follow what is going on. Tensorflow 2.X moved to same mode of computation like torch but it was already too late for me.
> Do you think your choices had any impact on your success?
I think going with tensorflow would have worked as well. Lot more annoying but good base. Using language other than python would have been a bad idea. Practical ML is a lot like JavaScript WebDev. Get a bunch of stuff from 3rd party packages and write some glue code.
If I start something new this year I think I would opt for Rails again. Even though it’s long in the tooth nowadays, I would choose it for productivity, time to market and availability of people if the project scales.
The impact on success is marginal, but I'd say that it's cost effective due to being more stable (in the easy to upgrade sense).
Cloudflare DNS => 2 Baremetal FreeBSD => 3 jails [Nginx, Node, PG]
https://blog.uidrafter.com/freebsd-jails-network-setup
SSL Let's Encrypt
https://blog.uidrafter.com/isolated-tls-certificate-creation
Fastmail, Stripe
The PWA only uses React
https://blog.uidrafter.com/architecture-of-a-desktop-alike-s...
* Frontend: Svelte using SvelteKit (and one Sapper), TailwindCSS / TailwindUI, hosted on Vercel
* Backend: Rails API, hosted on Heroku
* Database: PostgreSQL
* Queues: Sidekiq
* Caching: Redis
* Mobile: Flutter
* AWS S3 for things like images.
Sites:
* https://www.listenaddict.com/
* https://www.programmingtil.com/
* https://www.camerapricetracker.com/
* https://www.useproducer.com/
And business site / blog:
* https://www.codenameparker.com/
* https://www.davidwparker.com/
Edit: formatting
I think that Craft's data model allowed me to create a better website than if I used WordPress. It's trivial to create content types that aren't blog posts. You can have a real data model, with custom, interlinked post types and taxonomies.
Templating is also a breeze with Twig as its backbone.
I had issues, but they're caused by my own docker setup, and my aggressive caching practices. The lack of a plugin ecosystem is also frustrating if you're not ready to make your own.
The main issue is Redactor, the default wysiwyg editor. It's quirky to a point where I wouldn't feel safe letting someone else edit the website.
Edit: allaboutberlin.com
Front: Vue.js, Tailwind
Back: Node.js, Firebase (Database, Hosting, Functions, Scheduler)
Management: Airtable, Github, a 30,000 word README file
I also have a app for tabletop rpg prep but it isn’t live yet: node, mongo (for a certain type of user editable schema), nginx, react, redux, the usual. I replaced chef with some bash scripts in my projects a while ago and it’s been great
Front end: plain JavaScript
Back end: Phoenix and Elixir, Postgres, OpenBSD
Deployment: tmux on a bare-metal server at a local colocation facility
I use
- Laravel - Vue - Postgres - Tailwind - Hosted on Vultr
This has been my go-to stack for quite some time. Very happy with it. Perfect combination for a mostly CRUD app.
Tech stack: ansible (automatization), docker (simplify deployments and maintenance), matrix (protocol) and golang (internal tools)
The idea of the service is to provide painless setup of matrix homeservers with huge customization options (not listed on website, otherwise it will be 3 desktop-screens-form in size), because if you went your matrix hs you must suffer :D and I'm trying to make it as simple as possible for newcomers to matrix world.
I chose the stack I knew best that allowed me to iterate the fastest, and that was Rails.
I wouldn't have chosen anything else because using what I knew best allowed me to have less time playing guessing games with my stack and more time talking to customers.
It wasn't the fastest for my use case, and there were times where I hit some bottlenecks in terms of IO, but that was solved with scaling hardware — cheap, in comparison to learning an entire new stack.
https://riftvalleysoftware.com
It seems most folks have "tech stacks," which, to me, means "Internet-based software applications, or SaaS." I write native apps for Apple devices (iOS/iPadOS, WatchOS, TVOS, and MacOS). Some, use Internet-derived services, but some are also standalone on the device, or use things like Bluetooth.
My "Stack" is basically Xcode.
I've found that CI/D tools aren't actually very useful, for me. I work in a very dynamic fashion that has lots of twists and turns, and these tools tend to be "Concrete Galoshes"[0]. I'll script portions of the build, like docgen.
Basically, the four apps that I use, are Xcode, BBEdit, SourceTree, and Adobe Illustrator (for creating assets. I like to use vector, if at all possible). I have dozens of others that are used on an "as-needed" basis, like Charles Proxy, or Postman. I also have a bunch of devices that are used as test subjects.
I make heavy use of Apple's TestFlight beta-test service.
And I use GitHub as my offsite repo (pro account/free account ).
My "business stack" is Zoho One, which has been fantastic for managing everything else that isn't my tech stack (crm, website, billing, books, docs, mail, file storage, etc...)
It’s a web-based PDF editor: add text fields, checkboxes, pictures (watermark) and signatures to otherwise non-interactive PDF documents.
Tech stack:
Server: DigitalOcean droplet (10€/month but only because I run all my projects on it, the 5€ one would otherwise suffice)
Database: Postgres
Frontend: NextJS
Backend: NodeJS (koa) serving a GraphQL API
Email: Mailgun
Payment processor: Stripe
I chose this tech stack because I’m proficient in it, which allows me to focus on shipping rather than figuring out how to ship.
The tech stack is Meteor.js for backend and React + Apollo Graphql for front end. I use AWS lambda for Anki Card Generation generation and Latex-based PDF Generation for personalised Books. The main website uses self-hosted Ghost blog. Using Ghost for the main website + blog, saves a lot of time with SEO and Image compression. While compiling Latex on AWS Lambda Container is pretty slick.
Deployment: Docker, AWS Beanstalk
> Why did you choose it?
It's been an absolute joy working with Meteor. You can prototype quickly. For instance, last week, I was trying to add anonymous accounts i.e. no need to sign up to view the application and can merge directly once the user is ready to sign up. It took me a half a day of work to do that in Meteor.
There is a feature of real-collaborative learning I want to add in the application i.e. you can learn with friends and see their responses, notes in real time. Meteor has real-time capabilities using pub-sub which makes it quite easy to do so.
> Do you think your choices had any impact on your success?
The product is not mainstream yet. A small number of people who use it, love it. It requires a bunch of more courses to make the value proposition clearer to the users. But Meteor.js enabled me to prototype quickly since this is the third iteration of the product which I finally thought was closer to what I had in mind.
I am not in anyway associated with Meteor. I really love Meteor, that's all.
* Flutter frontend iOS/Android
* Parse Platform backend backed by MongoDb, hosted on Hetzner dedicated server with backups in Azure
- Migrated from Firebase
* ASP.NET 5.0 backend for various other integrations and periodic back office jobs
- Migrated from Firebase Functions
* Back office tools (CRM, billing etc) in React/Redux
- Currently experimenting with Appsmith to allow for quicker iterations
* Landing page in React
- Originally just plain HTML. Re-wrote to React to be hip.
Curious if it's just because the tool isn't well known enough or if it's because it has some serious drawbacks? Or people don't like writing SQL?
Reason I'm asking is because I'm trying to write a new app from scratch but I'm getting demotivated having to implement things like users, organisations, and other things that is essentially just re-inventing the wheel.
Ionic, Stencil, Capacitor, TypeScript.
A CouchDB per user for auto sync across multiple devices.
Backend with Node, CouchDB, TypeScript, pm2 on a VPS.
Sendinblue for transactional emails (EU).
Why? Because Ionic lets me target iOS, Android and web with a single code base and almost no custom view code per platform. For non-technical users it is "good enough". Nobody ever complained about the non-nativeness.
CouchDB enables auto-sync with 0 lines of syncing code. It’s good, although there aren’t super many tutorials on the web.
CouchDB makes my app offline-first. I’d say this aspect alone is extremely great. A competitor has a similar app, but native. However, saving data requires an internet connection. This makes their native app feel slower than my non-native offline-first app.
For account management, I wouldn’t use it again, because I like SQL and that it makes it more easy to calculate some business statistics you might need only once.
- Gatsby or Next depending on how dynamic the content is
- Firebase for db, auth, and bucket storage, and sometimes hosting
- Vercel for NextJS hosting
- Recoil for state management; after years of using Redux it feels amazing, like it's a part of React
- ImmerJS for immutability
- SASS for CSS
I love my current stack. It definitely took a while to make everything work together smoothly. I don't understand the complaints about modern web dev. I've been building websites for almost 20 years and this is the most productive and fast I've ever been.
The only thing I still haven't figured out is CMS. Tried all of the fancy new headless CMSs but nothing works for me. Working on my own.
I made it during a 2017 sabbatical between my PhD and getting a "real job" and it's been passive ever since.
Tech stack: * D3.js for visualization and actually the whole UI. * Electron to make it a desktop application, which also means users' data is stored on their own computers. * Selling on Gumroad. * Website with landing page and usage info is in Jekyll on GitHub pages. Aside from that, no servers :)
I chose this because I had used D3.js a lot before, and making it a desktop application is just what works best for users and prevents outages. I would probably make all the same choices again.
Currently looking into adding Tailwind (CSS)
- HTTP API: Rust, type checks are really useful as web apps are often just messaging. Not being able to cleanly assert JSON structure in dynamic languages started to become an issue.
- DB: SQLite. Not having to manage servers, and just “click to open in GUI” on Mac OS makes development easier.
- Hosting: Google Container OS, Docker, regional disk replication. Every SQLite tx commit is replicated to two zones, the db is incrementally snapshotted hourly.
- UI: TS, React, MobX. Got tired of Reacts state APIs changing every year so just froze on MobX.
- Editor: IntelliJ. I am happy to pay monthly to not deal with plugins. Search is very fast and type aware. Works with all languages with the same shortcuts.
Front-end: ClojureScript, Rum and Javelin spreadsheet cell for state handling
CSS: Tailwindcss
Backend: Django + Django REST framework
Deployment: Ansible
Analytics: GoAccess
Statics: GoHugo
Misc: Nginx, Postgres, Redis Docker only for running client specific optimizers.
A lot of tools in the list, but everything is pretty lean, and allow me iterate really fast.
About success criteria, having more analytics would help me get a few extra clients, but because it's side project without any investors I'm happy with trade off.
And after companies are starting to use the produce, I hear a lot of positive vibe about strong privacy.
I have some background in C programming, so Go was easy to pick up. the standard libs are great for building server-side webapps with a sql backend. templates lib and some glue javascript make front-end pages a breeze.
I'm a linux guy thru-and-thru, so running fedora server on the latest kernel. latest podman from RedHat and docker-compose to orchestrate.
I'm one guy so I don't do any HA or cloud or any other funny business. My one server is racked nearby and I've had good history with the colo.
I use Postgres, FastAPI, and TypeScript React. I wouldn't recommend TypeScript for solo developers who need to iterate and prototype quickly. That's been my biggest regret thus far. I think the end result will be much cleaner but I've sacrificed a lot of time getting it there, when I could have been shipping. It's all been a good learning experience though, and that's how I'm treating it.
Picked all of them out of familiarity.
- Backend: Flask + SQLAlchemy + Celery
- Frontend: Angular + Bootstrap
- Database: MySQL + Elasticsearch + Redis
- Deployment: Kubernetes on GKE
Backend: LAMP (Linux Apache Mysql Php)
Backend Framework: Php no framework only composer
Frontend Framework: Vuejs 2.6
Deployment: rsync
Hosting: contabo (8gb/€5)
Email: SES
Error reporting: Honeybadger (it's free)
> Why did you choose it?
It's something I've known my entire life and it works great for me.
Legacy projects: Plain HTML frontend with minimal vanilla JS for small progressive enhancements, PHP (custom framework) backend, Postgres, deployed directly on rented bare metal hosts, Salt for configuration
New projects: HyperApp JS frontend, Python (aiohttp) or Rust (warp) backends, Postgres, deployed in docker containers on rented bare metal hosts, Ansible for configuration
Notes:
switched from salt-server to salt-ssh after there was a salt-server exploit which owned my whole fleet. Switched from salt-ssh to ansible-ssh after salt-ssh was broken on osx for 14 months (and counting…)
Backups done with each project having a cronjob dumping a snapshot into a folder, then SyncThing copies those onto a remote backup host, with the backup host configured to keep old versions of files
Debian stable for the hosts, language-specific images for containers. I wonder if my bare-metal OS runs basically only sshd and docker, is there a better choice than Debian? It works fine, just seems overkill...
Monitoring done with telegraf + influxdb. Previously I had grafana in front. Recently moved to influxdb 2.0 with built-in dashboards, which is ok, but grafana was better (more graph settings (influx doesn’t even do log-scale y axis??); more flexible alarming; graphing and alarming were integrated where influx has them separate) - considering putting grafana back even if it means re-creating all the dashboards and alarm rules for a second time...
For it I use htmx [1], sass [2], Django, Postgres, and Auth0 [3]. I deploy on linode using Ansible [4]. For the videos I use OBS [5] and some custom python scripts. If I need any extra 3d or animation, I use Blender[6] and Shotcut [7].
I have tried other technologies for other projects, like React or Elm (which I find great). But so far this setup (maybe changing custom css by tailwindui mostly) is my most productive.
Edit: link format
It has been built using following technologies: - Ruby on Rails - Web framework
- StimulusJS - Javascript
- TailwindCSS - CSS
- Redis - Memory store
- Postgres - Database
- Nginx - Reverse proxy
- AWS Cloudfront - CDN
- AWS lightsail - VPS
- Github - Code hosting
- Capistrano - Automated deployments
- Sidekiq - Background Jobs
- AWS SES - Email SMTP server
Edits : Formatting
Hosted on a simple Debian Linux VPS with https://tilaa.com. Running nginx with Let's Encrypt certs.
Built in Ruby on Rails with PostgreSQL for the database and Stimulus as JavaScript framework. Charts are generated with ChartJS and CSS is using Bulma framework.
Front end runs Vue 2 with Quasar, JsBarcode, custom service worker, and PouchDB for local data persistence. The stack is optimized for ease of adding features with the pre-build GUI components, and front end PouchDB facilitates offline capability as well as keeping a user's various clients in sync.
The backend uses an nginx proxy to CouchDB for data persistence and replication, a small node.js API, and product data from various free repositories. CouchDB serves as the master store as well as the hub of replicating data between clients on the same account.
The architecture and tech choices are very closely tied to client desires. Clients planning for disasters demand the software continue to function offline or in degraded network environments, so this feature drives the overall offline-first data architecture. Data needs to remain in sync across a family's devices so the replication and keeping all the clients up to date is a big value add.
- KiCad for PCD design, SolidWorks for CAD.
- Website backend Python/Django. Frontend is HTML with Django's templating, and CSS. Modern JS to manage the cart, handle orders, and validate the address and order forms.
- Heroku to host the website.
Wordpress (anchor website & free content) + Amazon Kindle (paid content & casual customers management) while using Google and Google Scholar as the main source for up to date references and a word processor to write the booklets.
Still tinkering about blog posts (more free content on the website to attract more traffic through SEO buzzwords) vs simple dedicated software demos on github (to create a portfolio while testing which ones to pursue commercially down the line).
Success? Break even in terms of sales for now, plus thousand visitors from all over the world enjoying the free content, and someone kindly commenting to help or just to say thank you.
My next backend might be on Go and just use a simple Rest service, and minimize Firebase usage (it is still good for real time chat type of apps).
> What is your tech stack? Frontend - React Backend - Django (Python) Database - Postgres All hosted through Heroku.
Also, Data Pipelines - Airflow (Python hosted on GCE) Analytics - Google Analytics Email - Mailchimp
> Why did you choose it? I am a Data Engineer by day so regularly use Python and GCP. Where I could, I chose tools I'm already working with to limit the learning curve of using them. Where I couldn't, I chose whichever option was most hands off.
> Do you think your choices had any impact on your success? We will see. After I get the current feature I am working on, I plan to transition to marketing the site rather than working on the site. Success will be whether or not I have to jump back into maintenance mode.
> What is your tech stack?
We use a managed K8S provider so we don't have to deal with server and cluster upgrades ourselves. That's a huge time sink, especially as server counts scale up. Our cluster has Nginx for ingress, Loki for logs, Prometheus for metrics, and Grafana to keep an eye on things.
We're building the app in Node.js, primarily because in our app there are a handful of spots where we can share code between front-end and back-end. We use Next.js a lot, and use Bull for our queueing at present, and use the ws module for our websockets.
We use PostgreSQL for database, without an ORM just because that's my preference, and we use Redis for queues and some caching. That'll likely change over time as we grow, but managed Redis is pretty much ubiquitous at this point so it's an easy place to jump in.
> Why did you choose it?
My stack is mostly based on past experience and the requirements of the app. Since I'm hoping to grow the company and am mainly b2b focused, having a popular infrastructure stack makes life a lot easier in security audits and contract redlines, and in finding ubiquitous tools. Like I mentioned above, I didn't want to deal with server upgrades, so I'm using a managed k8s provider. We're using node.js heavily because there were a few obvious paths where code could be shared between server and client.
> Do you think your choices had any impact on your success?
We will see. We're very early in our journey, but I'm hoping keeping things easy to change and ubiquitous will help us as we progress.
- Backend is a Django project, database is PostgreSQL.
- Frontend powered by Mithril.js and the editor by CodeMirror.
- Hosted on a $5 box on EC2.
- GoatCounter for analytics.
- CloudFlare for DNS, NameCheap for domain.
Also https://httpbun.com
- Backend is a vanilla Go project.
- Frontend is plain HTML and CSS, I don't recall it having any JS at all.
- Hosted on the same $5 box on EC2.
- No analytics (yet).
- CloudFlare for DNS, NameCheap for domain.
It is refreshing to see how much I can squeeze out of a $5 box. I don't intend to stay with EC2 for long, but when its cheap, I'd rather spend my time improving Prestige (currently working on Gist integration).
Front end: plain JavaScript (as coffeescript) Back end: Ruby on Rails Host: $7 Heroku hobby dyno SSL: provided by Heroku Proxy: Cloudflare Database: Postgres Caching: Redis and memcached Indexing: full text search in postgres
I also do iOS apps, using native SwiftUI framework. My newest app is Howdy, a journaling app: https://apps.apple.com/de/app/howdy-journaling-reflection/id...
Otherwise, https://dokku.com has been really stable to launch your own heroku on cloud services like Digital Ocean or AWS
Gives the same experience as Heroku but with more flexibility
* PHP with Laravel + Postgres on the back
* Blade + Livewire on the front
* hosted on Clever Cloud
I chose it, because it's a stack where almost all problems have already a solution because others had it before. Also, and this was really important at the time: There is just so much built in, PHP+Laravel is a powerhouse for rapidly developing MVPs.
I'm still pretty happy with it. It can take you pretty far if you keep your code base clean, use all the existing tooling like static analyzers, code formatter, and write tests. While success is still moderate, I don't think I could have done it with a different Tech Stack, at least not in the same time-frame and with the same confidence.
- AppSync, ApiGateway, DynamoDB, Lambda, Athena, S3 for the backend - Vue.js, AWS JS SDK, TypeScript, Electron for the desktop app - Vue.js, Firebase Hosting for the Web Portal - Nuxt.js for the marketing site - Forestry.io for the docs - Mailchimp for emails - Stripe for payments - SendGrid for transactional emails - Auth0 for authentication
(Note: the about page shows a few more people, but 1 is my wife, one is my cousin, and the other two don't work on the project anymore, so really me myself and I)
Back end:
- Windows Server 2012 - MS SQL Server - ASP.NET - Web API 2 - C# - Dapper "micro ORM" (I dislike heavy ORMS and would rather write my own SQL)
Front end: - Bootstrap - jQuery - DataTables (https://datatables.net/)
I use these "boring" things because I'm familiar with them from contract programming work for companies where Microsoft stuff is common.
Primcloud - Cloud hosting platform (https://primcloud.com)
- Infra: Kubernetes on AWS
- Backend: Moleculer.js Microservices, Prisma with PostgreSQL
- Frontend: React/Next.js and Tailwind CSS/UI.
NiftyCo - Collection of low-touch SaaS products I am building. (First product: https://prevalidate.com)
- Infra: Deployed on Primcloud
- Backend: Next.js API / Prisma via my package Next-SaaS (https://git.io/next-saas)
- Frontend: React/Next.js and Tailwind CSS/UI.
Cloudflare facing the Internet Marketing website and user dashboard with Next.js Both hosted with Cloudflare Pages API served with Node 14 on Azure functions User attribute store in Azure Cosmos DB User asset storage in Backblaze B2 Share implementation with Cloudflare Workers Blockchain and IPFS via Infura Uptime monitoring and alerting with UptimeRobot (Probably others I’m forgetting)
Backend: Spring Boot + PostgreSQL
Frontend: TypeScript + Angular (considering switching to DartAngular) for future components
mobile: Dart + Flutter
hosting: k3s and operations using gitlab
Why did I choose it? These are tech stacks I know best.
>Do you think your choices had any impact on your success?
I regret using less mature backend frameworks at the beginning, I spent a lot of time fighting interfaces, DB transactions and mocks in quarkus and micronaut. They improved a lot since then, but I didn't look back.
App Tier on iOS, Android, Web, from a single source built with: Ionic V1 / Javascript
in-app Live Video Chat through JITSI
Deep Linking to app by Branch
Web hosting: EC2/Route53/Cloudfront
Web Analytics: Mixpanel
Server (old school: Mysql/PHP, MYSQL on AWS RDS server, PHP on the web servers @ EC2)
Source code mgmt: Github
IDE: Vs Code/Xemacs
Node + SimplePiE for ingesting and processing RSS feeds mentioning books.
Lifecycle email services through Mailgun.
Lifecycle text messages through Twilio
Blog via AWS Lightsail/Wordpress
Social media automation: Buffer
(music app #1)
- ios + macos native apps: swift + (reactnativeweb/reactjs/redux/orbitjs in a webview)
- web: reactnativeweb/reactjs/redux/orbitjs
- backend: none, just talk to streaming service APIs.
- hosting: AWS Amplify
total cost to run: $0
(music app #2)
- web front end: nextjs
- backend (which just serves up some munged public domain data): postgres+rails running on a mac mini in my basement
- backend (user profile data): firebase (i also get free auth/login with that)
- hosting: vercel.com
total cost to run: $24.95/year (for noip.com's dynamic DNS+SSL package).
Lots of AWS credit for 2 years from YC Startup School
- ECS / Fargate / Docker
- Deployed via Terraform and Github Actions
- Next.js / Bootstrap, mostly from boilerplate Stripe made
Chose bc I'm familiar with the backend. New to Next.js but boilerplate got me to an MVP the fastest.
Wouldn't consider myself successful yet but I'm happy developing on my stack and that goes a lot way when I'm working mornings/nights on it.
- Vue / Nuxt / Plain CSS
- TypeScript / Node / Express
- Hosted in your own personal cloud thanks to Deta Space (https://deta.space/discovery/webcrate)
Nuxt made the frontend super simple and fast to build, it takes care of a lot of things for you! Deta is also awesome for devs
It's dead simple.
- A static HTML page using Go Hugo to build the pages.
- Hosted on Netlify
- zapier runs daily to rebuid the site and update everything automatically
- Code on github and images stored on netlify
- Bootstrap for CSS
- I have a small server that runs the email software to send out the custom made email.
- Actual end email sender is sendgrid.
Between the site and emails, art is being viewed more than ~25,000 a month.
Total cost? $22 a month (Though I'm going to have to start spending $35)
The tech stack of the product itself:
Frontend: TypeScript, ReactJS, Parcel and GulpJS for building and deploying
Backend: Apache, PHP, MySQL
The tech stack for distributing the project:
- A licensing server written in Node.JS, running on a VPS
- GitHub repo to host the integrity hashes of the product (for extra security)
- LAMP VPS for the landing page, Cloudflare CDN on top
- Payment provided through Paddle.com
- Server: $5/month Ubuntu server from DigitalOcean
- HTTP Server: Caddy
- SSL: Caddy
- Backend: Ruby on Rails
- Database: PostgreSQL
- Frontend: Vanilla JS + Vue.js + Inertia.js + Boostrap
- Email: Mailgun
- Storage: S3 (very low usage)
- Backup: Daily on Dropbox using rclone
I'm not actively working on this anymore but I've users from a couple of organisations using the product which generates a good passive income
Interfacing with emails is through S3, API Gw, Cloudfront, lambdas (nodejs), and step functions. One small part of the product is on an Ec2 box. Everything else is serverless.
- React and next.js for the web app.
- Node.js & express for the API.
- React-admin for the back office.
- Postgres for the DB.
The biggest benefit to me of the above stack is running it out of AWS lambda. Pay only for what actually gets used, and more importantly it will scale to any sudden surge in customers without any effort on my part.
The best bang for the time + effort that I’ve seen so far.
I use ms365 for everything on the software end. Mikrotik for any network hardware.
I used to be more flexible, but found I lost money due to "trying" to work with everything and help everyone. Mikrotik isn't the easiest...but it has forced me to learn what i now would consider basic entry level knowledge about networking for business.
Surely the correct and only answer is "the right tech stack for the job".
Trying to shoehorn everything into one chosen stack is only likely to end in dismal failure.
Switching stacks just because flavour of the month cool stack is code written in Foo with Bar library with a Foobar cloud backend is also only likely to end in dismal failure.
If a graph database is suitable for a project ... then use it. If cloud is suitable for a project... then use it. etc. etc.
Don't be a "Jack of all trades, master of none", jumping around programming languages and libraries just because its the cool thing to do.
The trouble is I see too many people over-egg the pudding on tech stacks. Perhaps especially when it comes to cloud services where they architect everything as if they were getting billions of hits per second and feel the need to justify using all cool cloud services buzz words like horizontal scaled event-driven, serverless computing platform.
Sometimes its better just to follow the KISS principle (Keep It Simple Stupid).
- Ruby on Rails
- Postgres
- Redis
- AWS S3
- Heroku
I choose Rails since it allowed me to get off the ground running and hosted it on Heroku for its ease of use and it saves me a lot of time with its default configurations.
I don’t have many clients now but I should be able to handle hundreds of users on my current setup based on my pod testing.
-NGINX
-PHP
-MariaDB
All running on 3 VPS's. Everything I want to do can still be done with this stack.
Vanillajs for the frontend,
crystal for the backend,
postgres for the db,
fly.io for the app hosting,
Cloudinary for the CDN,
trello and Github issues for management.
IMO, simple vanillajs blows any other js framework out of the water in simplicity. Crystal is an amazing and very performant language for the backend. If you love ruby, you would love Crystal.
Front end: Go
Database: Postgres
Proxy+SSL: Caddy
Extremely fast, dead-simple to troubleshoot issues, and no javascript required.
Most users are mobile, so speed and reliability are the priorities. This setup works well and it's simple to notice when there are any issues or any non-2xx responses to any server or database calls.
Fast to iterate, vast ecosystem, beautiful readable lang(Ruby)
Backend: Jester (Nim) Front-end: Karax (Nim) Db: sqlite/mariadb Host: digital ocean
I find that I can implement features much faster and with less code compared to my previous Go/Js stack.
- Comet [1] for pretty highload machine translation service
- Hetzner for cheap but powerful hosting
Next.js, Vercel + API functions, DigitalOcean postgres with Prisma.
The biggest dev bottleneck for me was styling & css(mostly because I put away learning it!), tailwind ui components have been a big saver.
Fronted mostly static with Stimulus + Hotwire for a few dynamic parts.
Images via S3 + Imgix.
Metabase (also on Heroku) for analytics.
Trying to keep it as simple as possible. Not quite successful yet, but pleased with the tech stack so far.
The app has been created using Delphi.
HTMX for JS. Go (GORM, Gofiber) + Sqlite (w. Litestream for replication). Linode for hosting. Ansible for config/deploy.
- TypeScript / Node / Express
- PostgreSQL / RabbitMQ
- HTML / Tailwind CSS / Vanilla JS
- Hosted on two DigitalOcean droplets
- Deployed as Docker
- AWS SES for sending emails
- Python/Django for the web/automation stuff
- Postmark for emails
- Linode for hosting
- SQLite for database
- Airtable for curation
I use serverless-stack with every AWS service I can possibly use to reduce my code liability.
- Digital Ocean VPS running Ubuntu
- Let's Encrypt certificate
- Simple Analytics
- Nginx + PHP
- SleekDB NoSQL
- AWS SES email
- Cloudflare CDN
https://surplusci.com - Rentable dedicated CPU runners for GitHub Actions/GitLab CI https://ragtime.cloud - Hosted storage for Joplin the note taking application
> What is your tech stack?
- Front: Vue + NuxtJS
- API: NestJS + Typescript
- DB: Postgres
- Infra: Kubernetes + Ansible + Pulumi
- Hosting: Hetzner
> Why did you choose it?
- Front: Vue is less complex than React, NuxtJS enables SSR and pre-rendering which is ideal for SEO (not that I'm chasing SEO too agressively just yet)
- API: NestJS is the best implementation of light yet structured MVC I've seen for (spend enough time with wild Express/Fastify codebases and you'll want some structure), has a lot of concerns taken care of just about the same way I've (re)written them on various projects myself. Typescript because life is too short to not have a compiler do some of the work for you.
- Infra: I've paid the initial cost of learning Kubernetes so it's actually a really easy way to deploy containers and manage my infra (TLS certs, open ports, machines, virtual machines, etc) for me. Ansible is great for initial setup, Pulumi is great for managing big IaaS provider pieces (AWS Route53, SES, etc)
At this point I've actually built a set of reusable projects to launch SaaSes, and at this point what it takes for me to launch a new SaaS is copying ~3 repos, find/replacing and running make a few times.
I want to make that SaaS-launching setup a SaaS itself -- as a completed/perfect implementation would cut this down to only value changes in a single file, which I could easily make a web form and then people could launch their own things. That's far in the future though.
> Do you think your choices had any impact on your success?
It delayed launching quite a bit, but I'm convinced that my problems might lie in the markets I'm aiming for and products I'm making more than the technical choices.
The technical choices are on the fanciful side -- I could have gotten by just fine with Rails + Caprover/Dokku, but at this point that cost is paid so it's much more about finding traction.
My iteration speed is much faster now as I've developed a reusable set of repos, so it should be much easier to take more shots.
SaaS:
- CloudFlare
- Google My Business for emails
The back-end is Node.js and PostgreSQL (no ORM). The front-end is plain HTML, plain CSS and plain JavaScript. I chose that stack because I wanted to try Node.js and Postgres, and I'm not a big fan of front-end frameworks. I don't think the stack matters but people think the site is fast.
Postgres
Redis
Express + knexjs (TS on backend)
Heroku
Create React App front end.
Simple, boring technologies.
It's clunky, it's like a tractor, not very good at any one thing but I use it everywhere.
Breakfast of champions right there.
I have a question for everybody who uses Laravel or Symfony:
Did you compare it to the other one before you made a decision? What made you decide on the one you are using now?
I also would be interested in the same question regarding Django and Flask!
Framework and languages:
- Ruby on Rails 6
- Ruby 3
- Stimulus JS/ Stimulus reflex
Public website
- Webflow
- Weglot (i18n)
Infrastructure:
- 1 Web server
- 1 Processor server
- 1 Postgres server
- 2 Redis for cache/queue processing
Hosting
- Digital Ocean
- Redis lab
Deployments
-Cloud66.com
- GitHub actions
PHP with Laminas FW
MySQL
Bootstrap
jQuery
AWS SES
Twilio
Auth0
Google Workspace
Jira
- Django
Enough said, really, it's a solid workhorse with a healthy ecosystem. The admin feature is very useful for simple backend data management. No other particular reason to pick this over Rails, Laravel etc other than my familiarity with Python and the framework.
- PostgreSQL
No issues here, works just fine. I use the full text search instead of a separate search indexer such as Elastic - it makes the deployment simpler and reduces overhead of serializing and syncing the search index and database. You can get good performance by paying attention to queries and indexing.
- Redis
Caching and queuing. I use rq [1] rather than Celery for running background tasks, it's less complex and generally easier to work with, especially if your needs are simple.
- HTMX and AlpineJS
SPAs can be a pain to build and maintain if you are a solo developer - it's almost like building two separate applications, and then you have to handle the integration of your backend API and frontend app. HTMX [2] lets me get 90% of the way there while still using plain Django views and templates, while still providing a smooth end-user experience. AlpineJS [3] is great for dealing with the more complex interactions where Javascript is really needed, but I still want some lightweight structure.
- Tailwind
I'm not a designer/CSS guru, so Tailwind is great for providing sensible defaults. Was a bit skeptical at first of maintaining long inline class names vs something like Bootstrap, but Tailwind turned out to be surprisingly productive.
- Dokku
Basically Heroku without the expense. Has a ton of features and buildpacks for managing single-node applications, from LetsEncrypt integration to database backups. As I run the whole thing on a single Digital Ocean droplet, this is perfect - not sure what the next step would be when/if I need to scale up to a multi-server setup.
- Ansible
For any server setup and routine maintenance stuff.
- Mailgun
Email sending. Still on free tier.
- Github Actions
CI/CD pipeline. Works fine, very few outages or issues, pretty easy to set up.
- [1] https://python-rq.org/
- [2] https://htmx.org
- [3] https://alpinejs.dev/
* We use cloudflare workers for our API endpoints which have given us amazing reliability and scalability (which is of course very important for our service)
* We use cloudflare KV and cloudflare cache for some caching and logged in user sessions.
* Mailgun, FaunaDB, Sentry, LogDNA, Stripe, BigQuery.
* The web app is good old server side rendered html and css with a tiny bit of JS here and there.
* The widget is open source, written in Typescript (and as it has to run in really old browsers there's Babel to transpile. The solver inside of it and the proof of work library is AssemblyScript (i.e. WASM), with a JS fallback.
* PHP for our wordpress plugin.
The way we operate is that we provide free (or very low cost) plans for hobby users and stuff like small (wordpress) blogs to hopefully make a dent into recaptcha's market share, it's a bit of a social mission. Larger companies pay for more advanced protection features, EU-only endpoints, (as well as custom agreements and other paperwork). That balance has worked well for us, and even the small customers that use the free service contribute to our protection.
The past half year or so we learned that our customers that bring in the lion share of the revenue really prefer it if we keep their processing and data in Europe (our privacy friendliness and our EU-basedbess are big selling points, even more than improved ux+accessibility). So much so that we are heavily investing into that, and we are slowly moving in favor of our own infra in Hetzner (Germany).
There our tech stack is fully Golang (Fiber framework), with Redis, Postgres and Clickhouse as data stores. The way that our system works is that we look at patterns of access, and we can tweak the difficulty of the proof of work challenge on a request by request basis. One nice property is that it's not all or nothing: if we suspect a puzzle request is from a spammer they will get a rather difficult puzzle which will take a while to solve, but at least it won't lock out any false positives. Clickhouse is fantastic for this purpose (putting in millions of events is not even close to its capacity, it's lightning fast). Of course the widget itself also has the most basic of anti headless browser checks, but that will only deter the most naive spammers.
Of course no captcha system is perfect and will protect against a spammer who is willing to spend real resources (e.g. pay compute, or human labelers) to spam, but so far we're happy with its effectiveness, and it warms our hearts when we receive messages from blind or even deaf-blind users that encountered our captcha and web out of their way to say thank you :). I hope that at some point captcha labeling tasks can be a thing of the past.