[{"data":1,"prerenderedAt":497},["ShallowReactive",2],{"project-42828833":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":46,"post_text":47,"what":48,"said":75,"maker_in_thread":208,"shape":220,"grid":224,"attempts":459,"same_week":460,"maker_shows":43,"maker_hidden":489,"reader_version":490,"card":491},"42828833","Bagels","TUI expense tracker","title","Show HN: Bagels – TUI expense tracker","https:\u002F\u002Fgithub.com\u002FEnhancedJax\u002FBagels","github.com","EnhancedJax",1737881871,2025,283,87,197,3837,6,"legend","productivity","expense tracker","cli",[21,24,25,26,27],"budget tracker","terminal app","sqlite","textual python","mixed",0.279,{"positive":31,"neutral":32,"mixed":33,"critical":34},14,17,3,4,38,{"design":37,"execution":40,"idea":42,"docs":44,"pricing":45},{"positive":38,"critical":39},5,0,{"positive":39,"critical":41},2,{"positive":33,"critical":43},1,{"positive":39,"critical":43},{"positive":39,"critical":39},[39,33,33,33,39,38,33,39,39,39,39,39,33,39,38,39,38,33,33,43,43,33,43,39,33,39,38,39,33,38,38,33,33,38,38,43,33,38,38,38],"Hi! I'm Jax and I've been building this cool little terminal app for myself to track my expenses and budgets!\n\nOther than challenging myself to learn Python, I built this mainly around the habit of budget tracking at the end of the day. (I tried tracking on-the-go, but the balance was always out of sync.) All data is stored in a single sqlite file, so you can export and process them all you want!\n\nThe app is built using the textual API for Python! Awesome framework which feels like I'm doing webdev haha.\n\nYou can check out some screenshots on gh: https:\u002F\u002Fgithub.com\u002FEnhancedJax\u002FBagels\n\nThanks!",{"problem":49,"audience":55,"pricing":55,"motivation":56,"time_to_build":55,"stack":60,"openness":73,"stage":73,"team_size":74},{"value":50,"source":51,"evidence":52},"Tracking expenses and budgets at the end of the day","maker",[53],{"id":54},"post",null,{"value":57,"source":51,"evidence":58},"Built for own expense tracking and to learn Python",[59],{"id":54},[61,65,69],{"value":62,"source":51,"evidence":63},"Python",[64],{"id":54},{"value":66,"source":51,"evidence":67},"Textual framework",[68],{"id":54},{"value":70,"source":51,"evidence":71},"SQLite",[72],{"id":54},"unknown","solo",{"praise":76,"objections":108,"requests":154,"questions":175,"alternatives":187},[77,97],{"value":78,"source":79,"evidence":80},"Beautiful, polished TUI design","commenter",[81,85,89,93],{"id":82,"by":83,"text":84},"42837787","teruakohatu","That is a very slick UI. I was expecting something a lot simpler.",{"id":86,"by":87,"text":88},"42838686","stanac","This TUI is really beautiful. Looking at those rounded corners I am wondering if it is using some specific font created just for TUI.",{"id":90,"by":91,"text":92},"42837693","joeevans1000","WTF! This is absolutely so cool. Thank you!!",{"id":94,"by":95,"text":96},"42839738","danielvaughn","Dude this is so pretty. I’m definitely going to be using this, as I’ve been trying to find a good expense tracker but the web platforms all suck in various ways.",{"value":98,"source":79,"evidence":99},"Showcases the Textual framework well",[100,104],{"id":101,"by":102,"text":103},"42838710","terminaltrove","Thanks for making Bagels Jax, this is a very advanced TUI which is nicely shown in the screenshots, and also showcases the power of Textual which is a very powerful framework.…",{"id":105,"by":106,"text":107},"42842785","mrusme","You have built a beautiful TUI, hats off. Having that said, however, if feels like a missed opportunity for this project to use an SQLAlchemy-based database backend over the more…",[109,120,132,147],{"value":110,"source":79,"evidence":111},"Requires uv installer, which some find an unwelcome extra tool",[112,116],{"id":113,"by":114,"text":115},"42839333","oneeyedpigeon","It looks great, but I don't feel enthusiastic about installing yet another package manager. Are there really enough benefits from uv to justify it as the only option?",{"id":117,"by":118,"text":119},"42839422","lpedrosa","> Are there really enough benefits from uv to justify it as the only option? The author probably really likes uv, thus the biased instructions. I also think uv is great, but I…",{"value":121,"source":79,"evidence":122},"Not plain-text ledger or beancount format; no double-entry support",[123,124,128],{"id":105,"by":106,"text":107},{"id":125,"by":126,"text":127},"42839100","skwee357","This is amazing! But I wish it would use the ledger\u002Fbeancount file format, as I don't have plans to migrate years of transactions.",{"id":129,"by":130,"text":131},"42837884","djvu97","How different is this from ledger in terms of storing transactions???",{"value":133,"source":79,"evidence":134},"No bank sync or automatic import",[135,139,143],{"id":136,"by":137,"text":138},"42843915","insane_dreamer","Very nice design! Kudos. Looks like something I would use. For me personally, bank\u002FCC sync is a dealbreaker for any personal budgeting\u002Fexpense app as there is no way I have the…",{"id":140,"by":141,"text":142},"42838595","ramon156","Im going to try this for myself. One questions though, does it support imports from stuff like gocardless[0]? Actual Budget supports this so I can import from EU banks. [0]…",{"id":144,"by":145,"text":146},"42838151","Temporary_31337","Superb application and I agree the terminal simplicity plus some minima amount of visualisation is what appeals to me. But my online banking provides all of this plus automatic…",{"value":148,"source":79,"evidence":149},"Not usable on mobile",[150],{"id":151,"by":152,"text":153},"42838322","dewey","But not on mobile, which is a big draw back especially for something you might want to do on the go (Op said that’s not the goal, but for me it would be)",[155,163,168],{"value":156,"source":79,"evidence":157},"Import from bank CSV or bank feeds",[158,162],{"id":159,"by":160,"text":161},"42838597","dammaj","Great use of TUI ! I wonder if this app implements a method to import spending from bank account exported to a .csv for example, this would be very useful !",{"id":140,"by":141,"text":142},{"value":164,"source":79,"evidence":165},"Support ledger or beancount file format",[166,167],{"id":125,"by":126,"text":127},{"id":105,"by":106,"text":107},{"value":169,"source":79,"evidence":170},"Envelope budgeting system",[171],{"id":172,"by":173,"text":174},"42842465","JTyQZSnP3cQGa8B","Is there an envelope system? I would definitely help write one if that’s not the case. Anyway it’s great, that’s exactly what I needed.",[176,180],{"value":177,"source":79,"evidence":178},"How does it differ from ledger for storing transactions?",[179],{"id":129,"by":130,"text":131},{"value":181,"source":79,"evidence":182},"Does it use double-entry accounting?",[183],{"id":184,"by":185,"text":186},"42839466","jimmcslim","Looks great. I've scanned the front page of the GH repo and I don't see a mention of double-entry accounting, so curious if it is doing that under the hood?",[188,193,204],{"value":189,"source":79,"evidence":190},"Ledger and beancount plain-text accounting",[191,192],{"id":105,"by":106,"text":107},{"id":129,"by":130,"text":131},{"value":194,"source":79,"evidence":195},"GnuCash",[196,200],{"id":197,"by":198,"text":199},"42840783","nickjj","Have you given consideration on using CSV files for the back-end? I ask because funny enough over the weekend I spent 4 hours writing a terminal based expense tracker with a sole…",{"id":201,"by":202,"text":203},"42842280","NoboruWataya","As a GnuCash user, my pipe dream in this area is all of these tools--ledger, beancount, GnuCash, this--operating on the same data format. There are some things I like about each…",{"value":205,"source":79,"evidence":206},"Actual Budget",[207],{"id":140,"by":141,"text":142},{"comments":209,"answered":18,"key":210},15,[211,214,217],{"id":212,"text":213},"42838999","Baked into the Textual framework!",{"id":215,"text":216},"42841910","Textual automatically has a rounded border style for containers!",{"id":218,"text":219},"42838995","Sorry, I don't seem to understand your question... I think you're talking about categories and subcategories? You can have household as the parent category and all the expenses…",{"commenters":221,"max_depth":18,"maker_replies":209,"first_comment_mins":222,"lifespan_hours":223},53,1221,153,[225,229,232,234,237,240,243,246,249,252,255,257,260,262,264,267,270,273,276,277,280,283,286,288,290,292,295,297,301,304,307,311,313,316,318,320,323,326,327,330,331,332,336,337,339,341,343,346,349,353,355,357,361,363,365,369,371,373,377,379,383,385,387,390,391,393,397,400,402,404,408,412,414,419,421,426,428,431,433,435,437,439,441,446,450,454,456],[226,39,39,227,228,39],"42837684","other\u002Fneutral\u002Fnone","pmarreck",[230,39,39,227,231,39],"42837796","matt3210",[151,39,33,233,152,39],"project\u002Fneutral\u002Fdesign",[235,39,33,233,236,39],"42838513","nejsjsjsbsb",[238,39,39,239,152,39],"42838546","commenter\u002Fneutral\u002Fnone",[241,39,33,242,236,39],"42838605","project\u002Fneutral\u002Fnone",[244,39,33,233,245,39],"42840716","jeffhuys",[247,39,39,227,248,39],"42839734","sorenjan",[250,39,39,227,251,39],"42838326","liamwire",[253,39,39,254,95,39],"42839741","other\u002Fpositive\u002Fnone",[256,39,39,254,236,39],"42838496",[258,39,39,254,259,39],"42838612","marcyb5st",[86,39,38,261,87,39],"project\u002Fpositive\u002Fdesign",[212,39,39,263,11,43],"maker\u002Fneutral\u002Fdesign",[265,39,33,233,266,39],"42839227","joshka",[268,39,39,269,87,39],"42839300","commenter\u002Fneutral\u002Fdesign",[271,39,39,269,272,39],"42840569","8organicbits",[274,39,39,269,275,39],"42841456","Thorrez",[215,39,39,233,11,43],[278,39,39,227,279,39],"42842318","Gshaheen",[281,39,39,227,282,39],"42843027","withinboredom",[284,39,39,227,285,39],"42843888","alchemist1e9",[287,39,39,227,282,39],"42844191",[289,39,39,227,279,39],"42852548",[291,39,39,227,228,39],"42900668",[293,39,39,227,294,39],"42845225","tartoran",[105,43,33,296,106,39],"project\u002Fmixed\u002Fexecution",[298,43,33,299,300,39],"42843585","project\u002Fneutral\u002Fexecution","globular-toast",[302,43,39,303,282,39],"42844153","commenter\u002Fpositive\u002Fidea",[305,43,39,306,300,39],"42845501","commenter\u002Fneutral\u002Fidea",[308,41,38,309,310,39],"42837855","project\u002Fpositive\u002Fidea","gorgoiler",[218,41,39,312,11,43],"maker\u002Fneutral\u002Fidea",[314,41,39,306,315,39],"42839639","netsharc",[317,41,39,306,310,39],"42844810",[101,33,38,319,102,39],"maker\u002Fpositive\u002Fnone",[321,33,39,322,11,43],"42838947","maker\u002Fneutral\u002Fnone",[324,33,39,254,325,39],"42839244","alwyn",[197,34,33,299,198,39],[328,34,39,329,11,43],"42841939","maker\u002Fneutral\u002Fexecution",[125,38,33,296,126,39],[129,18,33,299,130,39],[333,18,43,334,335,39],"42838445","project\u002Fcritical\u002Fexecution","dnel",[201,18,33,299,202,39],[338,18,39,239,335,39],"42844049",[113,340,43,334,114,39],7,[342,340,39,329,11,43],"42839405",[344,340,33,345,248,39],"42840069","project\u002Fneutral\u002Fdocs",[347,340,39,348,11,43],"42841963","maker\u002Fneutral\u002Fdocs",[350,340,39,351,352,39],"42839411","commenter\u002Fneutral\u002Fdocs","wdroz",[117,340,43,354,118,39],"project\u002Fcritical\u002Fdocs",[356,340,39,227,248,39],"42839874",[358,359,39,227,360,39],"42839088",8,"nanna",[140,362,33,299,141,39],9,[364,362,39,329,11,43],"42839042",[366,367,39,227,368,39],"42838239",10,"wiseowise",[370,367,39,227,259,39],"42838673",[372,367,39,322,11,43],"42839036",[374,375,38,309,376,39],"42841649",11,"bvrmn",[378,375,39,322,11,43],"42841952",[380,381,39,227,382,39],"42842179",12,"garyrob",[384,381,39,239,173,39],"42842441",[386,381,39,239,382,39],"42842537",[136,388,33,389,137,39],13,"project\u002Fmixed\u002Fidea",[82,31,38,261,83,39],[184,209,33,392,185,39],"project\u002Fneutral\u002Fidea",[394,395,39,227,396,39],"42842667",16,"thih9",[398,32,38,319,399,39],"42845699","4m1rk",[159,401,33,392,160,39],18,[403,401,39,345,11,43],"42839010",[405,406,33,299,407,39],"42838094",19,"nighthawk454",[409,410,33,392,411,39],"42840232",20,"anonymous344",[172,413,38,309,173,39],21,[415,416,33,417,418,39],"42838618",22,"project\u002Fneutral\u002Fpricing","zznnzzzzzz",[420,416,39,322,11,43],"42839046",[422,423,38,424,425,39],"42841019",23,"project\u002Fpositive\u002Fnone","TheTaytay",[427,423,39,227,11,43],"42841970",[144,429,43,430,145,39],24,"project\u002Fcritical\u002Fidea",[432,429,39,392,11,43],"42838965",[434,429,39,227,145,39],"42844346",[436,429,33,392,282,39],"42844335",[90,438,38,261,91,39],25,[440,438,39,319,11,43],"42837851",[442,443,38,444,445,39],"42840114",26,"maker\u002Fpositive\u002Fdesign","roydivision",[447,448,38,319,449,39],"42837958",27,"skydiver7373",[451,452,38,319,453,39],"42839657",28,"jaxlover69",[94,455,38,261,95,39],29,[457,458,38,319,453,39],"42839659",30,[],[461,466,471,476,480,485],{"id":462,"name":463,"points":464,"category":465},"42814110","Cs16.css",819,"dev_tools",{"id":467,"name":468,"points":469,"category":470},"42800893","t4t",484,"consumer_social",{"id":472,"name":473,"points":474,"category":475},"42834648","DeepSeek My User Agent",360,"ai",{"id":477,"name":478,"points":479,"category":465},"42817439","Lightpanda",319,{"id":481,"name":482,"points":483,"category":484},"42806616","video-starter-kit",268,"creative",{"id":486,"name":487,"points":488,"category":470},"42838875","Podcatcher",226,false,"v2",{"id":492,"name":5,"line":6,"ai":489,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":493,"top":18,"kw":494,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":495,"url":9,"mix":496,"praise":78,"objection":110,"sub":21},42828833,0.28,[21,24,25,26,27],"0333053000003050533113103050355335513555",[31,32,33,34],1794036668678]