I built it because I was tired of losing track of everything in notes apps, and "I'll remember that"s. When do I need to clean the dishwasher filter? What's the best quote for a complete overhaul of the backyard. Oops, found some mold behind the trim, need to address that ASAP. That sort of stuff.
Another reason I made micasa was to build a (hopefully useful) low-stakes personal project where the code was written entirely by AI. I still review the code and click the merge button, but 99% of the programming was done with an agent.
Here are some things I think make it worth checking out:
- Vim-style modal UI. Nav mode to browse, edit mode to change. Multicolumn sort, fuzzy-jump to columns, pin-and-filter rows, hide columns you don't need, drill into related records (like quotes for a project). Much of the spirit of the design and some of the actual design choices is and are inspired by VisiData. You should check that out too. - Local LLM chat. Definitely a gimmick, but I am trying preempt "Yeah, but does it AI?"-style conversations. This is an optional feature and you can simply pretend it doesn't exist. All features work without it. - Single-file SQLite-based architecture. Document attachments (manuals, receipts, photos) are stored as BLOBs in the same SQLite database. One file is the whole app state. If you think this won't scale, you're right. It's pretty damn easy to work with though. - Pure Go, zero CGO. Built on Charmbracelet for the TUI and GORM + go-sqlite for the database. Charm makes pretty nice TUIs, and this was my first time using it.
Try it with sample data: go install github.com/cpcloud/micasa/cmd/micasa@latest && micasa --demo
If you're insane you can also run micasa --demo --years 1000 to generate 1000 years worth of demo data. Not sure what house would last that long, but hey, you do you.
Most SaaS companies are just that: 1) Curated domain model (stored in their cloud db) 2) Some way for users do to almost raw CRUD on the tables 3) Curated high-level domain specific workflows that do n CRUD calls underneath
So many of these SaaS apps could have been a simple Excel / domain model template like Micasa.
But it seems like we haven't "cracked" the perfect UI on top of relational DBs.
Excel: Good: raw CRUD. Bad: too many degrees of freedom + the possibility to edit the domain model itself. That's too much for most users.
TUI: Good: raw CRUD with some guardrails, limited possibility to adjust the domain model / not by accident. Keyboard shortcuts, for professionals. Bad: inaccessible for non-tech end users + hard to build good UX for high-level domain specific workflows.
Full Web UI: Good: accessible for all. Great for high-level domain-specific workflows. Bad: looks and works different every time. Raw CRUD possible, but always a compromise with editable data grid libraries.
I've never liked them, never learned to work with them, and instead spent 20 years learning to program and make my own db-backed crud interfaces.
Your points are spot on. But I'd like to defend a sliver of my stubbornness about it all; a product built for a specific use or domain exports the _education_ and information architecture of that domain. Sure it's all rows and columns in a db, and a spreadsheet is just that exposed to the user, but a "product" and its creator/company gets to design and prescribe a learning experience. And I think that's the magic and the value. That's what I'm holding onto!
Microsoft Access was strictly file based. You could drop the .mdb/.accdb file on a SMB share and it would support basic concurrency via lock files. However, you could also swap out the internal database engine (Jet) with anything else via ODBC, so your Access database could connect to a remote Microsoft SQL Server instance - or even MySQL/Postgres.
Back in high school, I even wired up an Access database to give a graphical frontend to an accounting app running on an IBM AS/400 mainframe. ODBC made it easy, and Access itself didn't really care where the data lived.
Users don't care whether a product is "just crud" or not. The value comes from what the spreadsheet-like model looks like, and how it and its associated crud operators map onto the real world, helping a real human being to get things done. It's never about "the technology".
Many developers dislike this fact about the world because they are more interested in technology than solving people's problems.
Developing that well-working model and ux takes time and effort. Without an associated business model you cannot spend thousands of man hours to do that. Hence software tend to be for-profit saas, and not open source TUI apps.
Many developers dislike this fact about the world because they wish they could work on technology and not have to care about economic reality.
I'm not a Notion booster, and I know there are many other solutions with similar tools/features.
But I'd argue that Notion databases are a very good balance of all of these things. It can be raw CRUD if you want it to be, but it's easy to create custom views that accomplish often exactly what you need.
Not exactly sure what you mean by "looks and works different every time" w.r.t. web apps.
In my experience this is a good example of where the UX details matter significantly. Yes, Airtable exists. But a Notion database row being its own first-class "Page" is a *massive* deal for me. (Again: I'm aware Notion is not the only thing)
Not the parent but I take it to mean _across_ web-apps from various services the UI looks and works differently, vs every spreadsheet is a spreadsheet and works like a spreadsheet.
So the answer is native app - I think what the world need is a super fast native spreadsheet that is NOT Excel. Kinda like a combination of Excel, TUI, and MS Access in one. Fast like Numbers.app, not sluggish like Excel is.
I'd use that. But it needs to have a keyboard centric operation, and be faster and a very solid, near industrial design, no "the latest flavor of someone's Figma design". I'm having a tough time explaining this.
What do you guys think?
I’m using Google Sheets for house and cars. Columns that should be easily grouped are using data validation and yes - few times deep into the experiment (because I’m sometimes lazy and miss some data - so experiment is good name) I’ve changed domain a little by adding columns. It meant empty values for existing rows - that I couldn’t fill in most cases, because a lot of time passed.
Reading many comments here I think we will create multiple frameworks/standards like always and some tools will be missing things others have :(
Funny thing is sheets works good and with scripts I can (still for free in terms of money) send notifications to selected channels or do some automated actions (like check disks status or order something automatically)
Edit: sheets have sync across devices too. Single SQLite for this specific case, having less nerdy people at home is an disadvantage.
There's no reason you can't jam a TUI into a browser. Perhaps to the surprise of both kinds of user, but it's possible.
> I think what the world need is a super fast native spreadsheet that is NOT Excel.
> I'd use that. But it needs to have a keyboard centric operation
You should boot up an emulator and check out the OG: Lotus 1-2-3. Keyboard driven, extremely fast, all written in 16-bit assembler for the original IBM PC running at, what, 4MHz?
It's because of Lotus 1-2-3's use of F2 for "edit cell" that F2 is still "edit" or "rename" in most applications.
(you can then continue the tour with WordPerfect and Borland Turbo Pascal, if you like light blue)
I have always thought that it was a missed opportunity that we'd never reused it nor turned it into any sort of SaaS. It seems to me like such an obvious and easy way to let your clients define their own business logic without having to maintain it yourself.
Amusingly most of this data then end up back into Excel or PowerBi but the unbundling and contextualizing itself is worth the price.
Semantic mapping was the answer all along. It just failed on the open web. The idea never died in the industrial world.
On a cost basis, it no longer makes sense--practically--not to use visual/text/audio intelligence to manage such a large asset. We just don't have the user-friendly mass-market interfaces for it just yet.
It's possible to scan every manual, every insurance policy, ingest every local bylaw. It's possible to take a video of your home and transform it into a semantically segmented Gsplat of [nearly] everything you own. It's possible to do sensor fusion of all the outward facing cameras from your home. And obviously agents like OpenClaw can decide what to do with all of this (inventory, security, optimization, etc).
There's also the inherit struggle of being everything for everyone with an app like this, and focusing on features 80% of your users want and leaving the other 20% niche features on the backlog upsets people, mostly the power users.
On top of it all, the most important thing to consider is intent -> An emergency plumbing visit is often very different than a proactive upgrade.
edit: spelling
I had a really complex negotiation for car repairs (goodwill warranty, balancing a long list of repairs/recalls etc) which was pretty time sensitive. If I had already had my service record in a structured format along with the manufacturer's policies I feel like I could have responded with better preparation. Same for any other big maintenance items on the house, mortgage, insurance, etc.
And then there's the flip side--what do my policies and healthcare/loyalty plans cover that I'm not taking advantage of? What can be combined towards my goals etc.
It’s my sole area of focus, with more document retrieval and analysis (and UI polish) on the way.
So many landing pages just explain things with text then jump straight to a signup or pricing page, but what I want to know at a glance is what does your app do. Again, might be a personal preference and I don't know how well this fits with the "call to action" rules people normally have for landing pages, but I typically ignore any site that can't show me what it does before it asks me to give information.
Is that legal though? I'm guessing it the US it might be, given the amount of cameras of public places you can see in various communities, but wonder how common that is. Where I live (Spain) it's not legal to just stick a camera on your house and record public places, you need to put the camera in a way so you're only filming your private property or similar.
That's legal.
If someone gets recorded that's because they left the public land and entered mine.
Not a legal expert just what I’ve heard.
Bricks are there (Home assistant, Frigate, Pihole,...)
"I’ve been using the demo data for three weeks. I don’t own a house. — Aspiring Homeowner"
[1]: https://github.com/home-assistant-ecosystem/home-assistant-c...
Also I'm really chaotic in terms of schedule. My mood and behaviour changes by the day.
I use it more as a monitoring and control tool.
Not saying your way is bad, it's more as HA is intended. But I'm just saying it won't work for me.
HA's automations are getting rather good these days but Nodered is handy for when things get complicated. HA has a very neat Nodered integration maintained by Frenck, who is a HA dev.
My general directive is that any automation that is important should be able to work via manual means. Sadly my (Reolink) doorbell does not currently have a hard wired chime. The previous one (Doorbird) did.
At work, my office has 40 odd windows and I have slapped a zwave sensor on all of them and all doors. Its quite handy to have a blank list of open doors/windows on a panel (HA) next to the alarm panel as you set the alarm. The auto entities card is very useful.
Dishwashers have filters??!?
More than you ever wanted to know about dishwashers: https://www.youtube.com/watch?v=_rBO8neWw04
The pairing of Claude and TUI doesn't seem like a coincidence to me, perhaps there are fewer moving parts that are easy to coordinate?
For example I am thinking, what if I wanted to hook up my micasa instance to some other arbitrary self-hosted service? If it's an App that means bespoke code, with a spreadsheet stack it is trivial.
It sucks, because it sounds like what I really need is for someone to track it for me so that i can just review it if needed.
files are stored as BLOBs inside the SQLite database, so cp micasa.db backup.db backs up everything – no sidecar files
SQLite is just so cool. Anyway, this whole project looks amazing. I can't wait to kick tires (and then track when I last changed my tires... wait, can it do that?!)So, yeah. This would obviously be called micarro.
EDIT: alternatively, exposing the data/functionality via MCP or similar would allow me to connect this to an agent using Home Assistant Voice, so anybody in the house could ask for changes or add new information.
I do things in my house too infrequently that I don't want to have to re-learn the UI of a tool again and again.
But maybe I'm not the target audience.
For the features. Text file has none of them.
Optimizing with insights to cut lifecycle costs? Where do I sign up??
E.g. you own an old school Japanese car with no fancy computers. You only have a paper manual.
With something like Maximo, you can turn your maintenance into a DAG and routine stuff is tied to cron. Each Todo is called a "Work order". E.g. tire rotation every 10 000 miles, oil change every 15 000 air filter swap every 2 years.
Each day after you finish driving you enter into the Maximo GUI (or have an Arduino IoT sensor do it) your current mileage.
The timing chain also needs to be swapped every 5 yeard, but due to a quirk of engineering, it can only be done so after the oil had been changed.
Maximo automatically tracks everything, and after you are done, you have to upload a photo as proof that you have done the work.
It's a very simple system at its core, basically a glorified Todo list but entire industries run on it.
If I am the only one who can use it and only from one computer, it would be entirely useless for my needs. I have several computers and also family members who would need access to that data. A Google Docs spreadsheet would be a better tool for my specific needs I think.
Only small piece of feedback is that I would use `$VISUAL` when opening the editor. When I tried to use `Ctrl+e` it opened nano which I haven't used in ages.
Edit: Oh looks like you use `$EDITOR` - I just didn't have that set. Awesome!
These are the projects which make me love Show HN!
Did you hit this in the Docs open flow?
micasa will call xdg-open (linux)/open (mac)/cmd (windows) when opening a document, but there's nothing that's explicitly opening a text editor.
Looks like it doesn't register `$VISUAL` but does use `$EDITOR` not sure if that is a `xdg-open` behavior though.
In general, I love the juxtaposition of the most advanced computer technology ever (AI) causing an explosion in one of the OLDEST computer technology we've ever had (terminals).
I spend most of my day in a terminal now. It's just funny.
Not entirely sure what you mean here, but the next big feature for micasa is an autopopulation pipeline. Upload a quote PDF and populate the project, quote, and vendor tables. It might not be viable ultimately, but I would love to see how far I can get.
Overkill? Definitely.
So I've been building a full piece of software to manage my small business. And it looks like traditional software (forms, tables, etc). But every single thing also has an MCP tool.
So then I find myself just talking to the agent especially as an input mechanism way more than clicking around and editing a form.
I'm just saying, as an input method, I think forms, TUIs, etc will be good as a backup. Over time, as you've outlined, we'd just say "here's a PDF, figure it out" and the agent just inputs the right values into the right fields.
That's how I've approached my run-my-business app. I have models/tables for clients, purchase orders, invoices, support tasks, everything. But my interaction is more like "Add me to all the active projects, set my cost rate to __" and it'll run 15 MCP calls and put the data where it belongs.
Or I'll ask "what invoices are way overdue?" and it'll run the MCP calls to get it, even though I have pretty dashboards.
Glad to see you're already thinking of it.
Almost certainly. I personally don't use clicky things to the extent that I am able to avoid them, so I can't describe the specific mechanism or name any of the nouns/tools involved, but I'm pretty sure this exists.
A progressive web app could be a nice alternative: just add the website icon to your phone, and you can open it in seconds.
The app could be self-hosted on a home server, and solutions like Tailscale would let you easily access it outside the house as well. A big plus is that you can open it on all your devices and have a unified database across them.
With a web app, you could even keep the TUI aesthetic - just style it like a CLI interface.
Here's a screen recording from my phone: https://imgur.com/a/snw8qbc
Here it an important th… |
Why?
cp is not a method to backup a SQLite file unless you can guarantee there are zero transactions in progress. See https://sqlite.org/howtocorrupt.html#_backup_or_restore_whil... for safe methods and consider switching your examples to use one of those.
I also personally wouldn’t trust the database of all my important home info to a vibe-coded program.
It practice it alternates between annoying thing I dismiss the notifications from or use obsessively. Doesn't seem to be much in between
Or, perhaps just as good, have a way for it to dump out data as json, and could be consumed by some other send-the-email tool. There is the "-json" sqlite option, of course, but I'm not sure if your schema is meant to be stable.
I have a perl script for reminders like this that has been super handy over the 10+ years I've been using it. Never bit the bullet to put it in a nice UI or have a backing DB like this project, though.
Now I kind of want custom themes...
We use Apple Reminders for grocery lists and Paprika for recipes, but something a little more organized than just a shared note for these sorts of things would be great.
I will probably check it out for myself though.
mise use -g github:cpcloud/micasa
and just start typing. I wish it had metric units and was translated, though!
Need to revisit it and update it based on a lot of feedback I've received.
When you edit an ID column, it opens a form editor to edit the entire row at once.
The thinking was to make all columns editable _in some way_, but ID columns are autogenerated and thus not designed to be directly manipulated.
I thought: since the ID represents a unique entity, in this case document, then it made some sense to make editing that editing the whole row.
That said, this is a bug even with the explanation I just gave: editing on the ID column of Docs doesn't show all the row's data in the form. Will fix that shortly.
Great work.
I do like it. I just hope I don't have that many things that I have to fix in my house that I need a DB to track them.
My only pushback is using sqlite. I am a big fan of just using simple (structured) text files that can be edited by hand when needed. Your computer is more than capable of doing all the joining/querying/aggregating/whatever with the text file itself rather than relying on a database. I personally find these sort of file structures comforting as it means they can be easily modified in unsupported ways.
My only concern about something like this is the WAF. My wife uses Trello. She would likely not use terminal. Also she only uses a phone so lack of mobile app or website is another blocker.
But it’s a cool app
Being able to launch it with:
nix run github:cpcloud/micasa
Is super convenient.Actually we could go further and serve `micasa` via ssh:
users.users.micasa = {
isNormalUser = true;
shell = pkgs.bashInteractive;
openssh.authorizedKeys.keys = ...
};
services.openssh.extraConfig = ''
Match User micasa
ForceCommand ${micasaPkg}/bin/micasa
AllowTcpForwarding no
X11Forwarding no
'';
Then we could put this in a nixosModule in your flake.nix. Would you be interested in a PR which does this? services.micasa-ssh = {
enable = true;
authorizedKeys = [ "ssh-ed25519 AAAA..." ];
port = 2222;
};I personally love the TUI but I also know that for most homeowners this is too “advanced”. This is why we built our solution as a simple web app [1]
Great project! Best of luck.
[1] www.wellrun.house
One thing that would make this extra trustworthy for day-to-day use is a strict dry-run/preview mode: show exactly what fields/rows would change before writing state or triggering integrations.
Also +1 for stable entity IDs and an append-only history table (timestamp + source + diff summary). That makes rollback and auditing much easier when automations or scripts misbehave.
In my wildest dreams, your project would turn into a jira that devs love.
Suggestion: > Worth a PR to swap out SQLite for Jira/Linear? Or have a job that moves the work there?
I can then maybe save $50 on that window replacement by allowing local business to search/ bid on my home maintenance Jira queue (versus spam mail in the physical inbox)
ducks
Not necessarily houses, but there are some old buildings around almost everywhere: https://en.wikipedia.org/wiki/List_of_oldest_extant_building...
My first computer was a 486, I was running MS-DOS (iirc) and there was an app that did just that with a very similar (Text)UI, anyone else used it/remembers the name?
If you can reliably extract line items, scope, and vendor info from those and link them to a project, that's where you'd actually save real time.
The TUI is nice but that pipeline is what I'd use this for.
go run github.com/cpcloud/micasa/cmd/micasa@latest
I just use org-mode + lots of recurring tasks.
Like car.org has monthly tasks for check fluids, clean inside, clean outside. In April and October theres a task to remind me to change tires and as I'm German a task to remind me yearly to check the first aid kit (you get a fine if its expired and they spot it when they stop you).
So, almost every appliance has its org-file with routines. Same for me and my family, check vaccinations, see the dentist ...
So, if you are already using org, theres no need for an additional tool. Plus, its all text, just throw it in your git. Also, there's tools like beorg to have your org on your iPhone.