Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What's the stack for your "home-cooked meal" apps?
45 points by joshspankit 11 months ago | hide | past | favorite | 34 comments
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”?




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


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


Do you use zerobrane or carousel to write your apps? Why?


I tend to prefer editors to IDEs. Lua is a simple enough language and my codebases have been small enough that my usual Vim sufficed at the start for apps like http://akkartik.name/lines.html back in May 2022. Over time I figured out how to do live editing, and lately I build my apps 95% in https://git.sr.ht/~akkartik/driver.love. I find it to be quite a nice experience, particularly with 2 monitors. I open the app I'm working on in one monitor while running driver.love full screen in the other to make changes to it.

Carousel is for a whole new use case: building simple scripts right on my phone or tablet. Nothing else can do that as simply, I think. It's cross-platform but that's an experimental property I'm hoping to carry forward to other apps. The use case here is purely for mobile devices.


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.


What does it do when it quits working?

Some snoozers I know would just consider that a victory and get back to sleep


The snooze key/process quits working, and it just keeps beeping until you complete the turning the app off process.. probably. (Not OP)


Yes, that's right. And you had to enter a code to turn the alarm off. You couldn't just close the app or hit a button.


There was a great Android alarm app years ago that you'd run in some kind of super admin mode, and you couldn't exit out of it no matter what. Restarting the phone just made it autoload instantly again and stop you from taking focus away from it.

It had modes where you could either shake the phone xx amount of times, or solve math problems, or even take a picture of a barcode (I set mine to my shampoo bottle).

It all worked great until once a 4am alarm got set as 4pm, and I lost access to my phone at 4pm (since I didn't have access to the shampoo bottle). I was offroading on a motorcycle in the middle of the forest, and my phone with offline maps was my navigation. Almost turned into a crazy Darwin awards story in a way.


That's hilarious! My original pass at the alarm app did much the same, but it was too intrusive and not really necessary for my needs. This wasn't Android, though. It was originally an app for the Newton, then I later reimplemented it on the Palm Pilot.


I would assume it keeps ringing. You could potentially have it increase in volume or require gps movement to turn off.


Is it on the play store?


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.


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".


It’s really cool that you’re doing this for yourself… but reading this also makes me kinda sad that solitaire gets flooded with ads.


I find F-Droid is a good source for ad-free apps:

Solitaire: https://search.f-droid.org/?q=Solitaire&lang=en


Hahaha, exactly! A simple game that has been around for centuries, and now even Microsoft riddled it with ads and (no idea how or why) paid features. Looks like they took a page from EAs book...


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?


Any good resources on using hotwire ?


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.


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


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


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.


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).


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".


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).


> so just use the filesystem

Honestly imo with SSDs being as fast as they are, the filesystem is wildly underrated. I have a scraper grabbing items from a mobile app and I just store each item as the JSON file then check it in to git. Push triggers some processing and everything new gets messaged directly to me.

It’s never crashed and never missed a beat. I could also throw up a simple web UI that just parses everything in the items directory and get <200ms response times on the lowest-cost vps.


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.


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.


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.


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.


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.


Cookpad, very easy to use and save receipts


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




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: