HACKER Q&A
📣 joshspankit

What's the stack for your "home-cooked meal" apps?


Inspired by the insightful conversations at https://news.ycombinator.com/item?id=38877423 , I noticed that people don’t usually share the code for their “home-cooked meal” apps (for lots of good reasons) but I think we can just as much value by sharing the stack so that others can “cook their own meals”.

I’ll go first:

I have a personal photo/video app that uses B2 for storage and Vultr to host a VM (free egresss). It’s main goal is to keep archival copies that can be viewed, verified, and shared and so the server code is very lightweight: user permissions, API endpoints for thumbnails (eg /pictures/utgGhj/400x400/image.jpg), add/edit/delete endpoints, and a notification system.

The app is distributed by manually installing it (future plans to distribute via TestFlight and whatever the Android equivalent is).

The app itself is very simple: Flutter, login screen, list views that can be sorted (default to newest), and a screen for viewing an item. Share links and comments are stored in Firebase (mostly for the offline sync convenience).

Someone could probably make it in a couple weeks if they have a little backend+mobile experience.

What apps do you “cook at home”?


  👤 nicbou Accepted Answer ✓
I love that philosophy. I read Robin's article a while ago and it really stuck.

My stack gets smaller every year. I love Django + Postgres, but a Python script + SQLite is often better. I just have less time for maintenance and I like things that just work with minimal dependencies.

In the front-end I love VueJS. I'm still at Vue 2 mostly because I have lots of projects to upgrade and don't see any reason to do so.

Everything is dockerised because I love reproducible builds.

Recently, I've started using Caddy instead of Nginx. I don't have to fuss with SSL anymore and I love it. The config syntax is saner, but I still struggle to configure it. At least with Nginx I have a lot of recipes from old projects.

My home-cooked apps are...

- My movie server, dubbed "Nickflix" by friends. I've dramatically simplified the code last week.

- My GPS logging server for the Owntracks app, also getting simplified today.

- My timeline thing, which shows my photos, GPS tracks, diary and other things on a timeline.

- My online recipes, which are just markdown compiled by the static site generator I created for my business.

https://nicolasbouliane.com/projects


👤 akkartik
Lua and LÖVE.

Talk about some of my apps in isolation: https://akkartik.name/freewheeling

Demo showing me combining my apps in workflows: https://archive.org/details/akkartik-freewheeling-2023-07-06

Now I've also been getting into mobile development: https://akkartik.itch.io/carousel


👤 JohnFen
About 1/3 of the applications I use regularly are ones I've written myself, from the trivial to one that are very large and complex.

My favorite one, though, was a simple alarm clock app I wrote (back when I used alarm clocks). It had the one thing I wanted from alarm clocks that nobody provided: every time you hit the snooze button, it snoozes for half the time you got the last time you hit the snooze. When the snooze period drops below 1 minute, the snooze button stopped working entirely.


👤 tejaskumar_
I love this question. Like @kassner said (https://news.ycombinator.com/item?id=38880809), I also don't have a stack but typically stick to what excites me.

Right now, I'm really into:

- Frontend: Astro/SolidJS

- Database + API + Monitoring + Auth: Keel (https://keel.so)

- Desktop/Mobile wrapping: Tauri (https://tauri.app)

I know building native apps with web technologies is a bit lame since it's a glorified web view on native devices and thus is somewhat limited, but as a web developer this allows me to play in those worlds a bit more.

I've tried to learn Swift/Kotlin but haven't been able to get as far as I have with JavaScript yet.


👤 paeselhz
Recently I've felt overwhelmed by the amount of ads in a simple solitaire game (from many distributors). So I've spent some time learning Unity and built my own Solitaire Game to play during my commute, with no required internet connection, and no loading screen, just like the old days of Solitaire in Windows 98. I'm still pending on adding some features to make the game more complete, but it has been a joyride to learn a new stack while building something completely personal.

Other than that I've built some tools just for the sake of exploring some hypothesis that I had, but all of those always felt like work. The game development was something that truly felt like "cooking at home".


👤 nickisnoble
Rails, render, sqlite3.

Hotwire really is incredible (coming from someone who's primarily a JS dev in the past) and makes common things way easier.

The more I write ruby, it really feels like home cooking, whereas even the best JS frameworks (sveltekit + bun IMO) felt more like ...home maintenance? Plumbing?


👤 philip1209
I have an internal app for my company (https://workshop.contraption.co). It's a Rails app, with basic Devise login. I can add people to the system, and scope which of the systems they have access to.

I put everything that's not business critical in it. Some examples:

* A "Scoreboard" growth chart of my MRR. It syncs with Stripe's API periodically. I add some friends and peers to it so they can see my progress. When I hit pre-programmed MRR milestones, it triggers a celebration announcement.

* An RSS->Sendy tool. My company blog is hosted in Jekyll and has an RSS feed. I send email newsletters for the blog through a Sendy installation. Sendy doesn't have good email templates, so this little system applies a template to RSS feed items and creates a draft in Sendy so I can send it.

* A mini internal CRM / search engine, which an intern was helping me manage for a bit.

* Some cron jobs that send email reminders to me, such as sending electricity bills to my accountant for a home office reimbursement.

I highly recommend companies have a full-featured "toy" app separate from customer data. Customer apps have a lot of red tape to protect data and uptime. But, we underestimate how long it takes to set up an environment or pick a stack when we have ideas - even for things like "cron job that sends emails" - so a small app stack helps encourage creativity and useful little scripts with minimal effort.


👤 fullstick
HTML, JavaScript, CSS web app hosted on cloudflare.

I built a simple compass web app so I can know which direction I'm driving. I want to access some other sensor APIs to make it more like a compass (you have to be moving for it to work).

https://compass.nad27.net https://github.com/radioxeth/compass


👤 kassner
I literally made one to scratch my itch with home cooked meals: https://www.kassner.com.br/en/2023/09/21/what-to-cook-launch...

Honestly, I don’t have “a stack”, if I’m trying to learn a new thing I’ll use that to build a new project, or if I don’t I’ll default to the most suitable option.

i.e.: What to Cook? was built in Java because I needed a refresher, otherwise I’d likely use PHP/Symfony because I could finish it quickly. If the project is non-web/fullstack, I’d default to Go. If im building something that will use React, I’d default to NodeJS+Express.

If you’re curious, i have a few write ups in the projects section of my blog


👤 Raed667
I have a few I made for my convenience and the people around me. My stack is usually: Supabase + Next.js + Vercel free tier.

Years ago, it used to be PHP + MySQL on my own VPS but that got annoying with security updates and syncing the repositories with the application server.


👤 ksbrooksjr
I wrote a whole blog post about this (unfortunately HN immediately marks my submissions as dead), but I've been developing a minimal little template that uses:

- hono for routing on the server

- preact for building the ui

- goober for styling

- wouter-preact for client-side routing

The whole thing has 6 prod dependencies, 3 dev dependencies, and 17 dependencies total if you include transitive dev and prod dependencies. It can be deployed to any JS runtime (including edge runtimes like Deno Depoy and Cloudflare Workers).


👤 codingdave
HTML, CSS, Vanilla JS.

I figure if I get more complex than that, I'm either over-engineering something simple, or the idea is too big to do just for "home".


👤 karmakaze
I've settled on much the same as you, Flutter/Dart and Vultr. Haven't needed much in the way of cloud storage so just use the filesystem and MySQL. For anything webby, Vue/TypeScript on Netlify + CloudFlare. The backend language/framework can vary if I'm interested in something at the time (e.g. F#/Giraffe).

👤 dfinninger
Django+Postgres.

So far I haven’t needed anything fancy like Htmx, but interested in looking into it in the future.

I’ve tried playing with things like Elixir or Go, but I know Python and am instantly productive in it. If I want to do something to play with a new stack, I will. But I want something done, then Python is the fastest way for me to get something useable.


👤 oliwary
I tend to make web apps, since deployment is so easy and seamless, and its super easy to pass links around.

The stack is usually: Vue.js for frontend hosted on cloudflare pages, flask on backend hosted on hetzner via docker. Simple to set up and manage and been very reliable.


👤 fellowniusmonk
It's a realtime project, it organizes my whole life.

html, js, indexeddb, uwebsocket, redis, byob for private backup (uses s3 by default, I use r2 personally, also support google drive)

js dependencies are dexie, uwebsocket.js, luxon, morphdom.

Using indexeddb means all updates are persisted before rendering and transmission. Rendering is deterministic based on local db values, there is effectively no indeterminate state. Dropped socket connections are nbd as all updates are either timestamped or timestamped & crdt so data is always in sync and can be upserted with dexie. Delivering messages multiple times is rare but inconsequential.

Morphdom keeps ui updates fast and lets me use escaped template literals and a more laissez faire approach to query & rendering for ui components.

DOM node names/ids are distinct & semantic. They aren't obfuscated by a rendering pipeline so it's very easy to trace ui to db and code without relying on an IDE.

Components and dom node names are namespaced using js Sets and Proxies so that the apps namespaces are kept conflict free and it alerts you in console if you create a name conflict.

Only data the user hasn't synced is kept in memory on server, load is distributed by all servers having a persistent socket connection with each other and I use N character subdomain dns resolution to match first two characters+ of users uuids (aa.site.com, ab.site.com) to handle message passing against a redis pool.

This effectively means I have presharded the socket load by user but means I don't have to spin up new servers until the load warrants it for each subdomain. It runs on 1 server as simply as 20 and everything is fully evented.

This all means that the server is a single js file I can overwrite to hot reload.

Same with the client file except it's an html and js file.

The longer I've been doing this the more I believe that everything comes down to a proper data/database implementation. If you are disciplined with your schema, always use ids, and ensure data comes first... everything else becomes disposable and easily refactored.

Also, DOM ID obfuscation is insane for front end rendering engines, keep it semantic and matching your names/ids in code/db.


👤 zilti
I mainly use Chicken Scheme for these projects. It is small, lean, yet has everything I need. On the GUI front things are a bit dire though, but I'm hoping to soon finish some bindings to QML.

👤 Glench
Lately I've been enjoying https://val.town for little things that only make sense for me, especially notifications and RSS feeds for things that don't typically have RSS feeds.

👤 javicrespo1
Cookpad, very easy to use and save receipts

👤 the__alchemist
Rust + Probe-rs + my own HAL + KiCad + JLCPCB.