[{"data":1,"prerenderedAt":526},["ShallowReactive",2],{"project-23353970":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":9,"maker":10,"posted_at":11,"year":12,"points":13,"comments":14,"rank_in_year":15,"shown_in_year":16,"top":17,"tier":18,"category":19,"subcategory":20,"format":21,"keywords":22,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":47,"post_text":48,"what":49,"said":97,"maker_in_thread":231,"shape":244,"grid":248,"attempts":487,"same_week":488,"maker_shows":38,"maker_hidden":517,"reader_version":518,"card":519},"23353970","Decimals","An API to store balances and transactions","title","Show HN: An API to store balances and transactions",null,"andriosr",1590778137,2020,151,102,398,3028,14,"notable","data","ledger api","api",[23,24,25,26,27],"ledger","double entry accounting","balances api","transactions api","money movements","curious",-0.081,{"positive":31,"neutral":32,"mixed":33,"critical":34},8,23,3,12,46,{"idea":37,"privacy":40,"design":42,"docs":44,"execution":45},{"positive":38,"critical":39},2,5,{"positive":41,"critical":38},0,{"positive":43,"critical":43},1,{"positive":43,"critical":41},{"positive":41,"critical":46},4,[33,33,43,41,43,43,33,33,41,33,43,41,43,33,39,43,33,39,41,43,43,33,43,33,33,33,43,33,41,33,33,33,43,39,46,33,39,39,39,39],"Hey everyone!\n\nI'm Rob and I want to share what I've built - a solid ledger behind simple API: https:\u002F\u002Fdecimals.app\n\nThe ledger is a key piece of any financial system and is easy to get the design wrong, resulting in troubles for making sure money movements are adding up.\n\nI took a lot of inspiration from good designs from Square, Uber, and others for the scalability and security aspects. And on the usability side, I applied many concepts from the Ledger CLI, making it very easy to use.\n\nI'm really happy I get to show this to you all, thank you for reading about it! Please let me know your tho",{"problem":50,"audience":56,"pricing":64,"motivation":70,"time_to_build":9,"stack":80,"openness":95,"stage":96,"team_size":95},{"value":51,"source":52,"evidence":53},"Getting ledger design wrong causes trouble making sure money movements add up","maker",[54],{"id":55},"post",{"value":57,"source":58,"evidence":59},"Companies building financial systems that need a consistent ledger","inferred",[60,61],{"id":55},{"id":62,"by":10,"text":63},"23355608","Thanks for the question! My view is that when you are creating a product and there is something that can get you faster at delivering your core value to your customers, it makes…",{"value":65,"source":52,"evidence":66},"Priced per number of accounts in chunks of 10k; no charge for transactions",[67],{"id":68,"by":10,"text":69},"23355829","Pricing is similar to the Segment.io model, you pay for the number of accounts, in chunks of 10k. You get the most value when you do more transactions, so that's why we don't…",{"value":71,"source":52,"evidence":72},"Make it easier to build systems that store transactions and balances",[73,77],{"id":74,"by":75,"text":76},"23358086","ianhawes","I thought this sounded familiar. I got an email out of the blue 10 days ago about this app from the creator: > Hi! I run a startup trying to make it easier to create systems that…",{"id":78,"by":10,"text":79},"23360052","Hello Ian, yes! That was me. I reached out to a couple people using money libraries to better understand how are people dealing with the problem right now. The goal was to help…",[81,87,91],{"value":82,"source":52,"evidence":83},"Go",[84],{"id":85,"by":10,"text":86},"23356104","Great questions, thanks! The API is currency agnostic, so one account can have many balances from multiple currencies attached to it. However, you can't do transactions cross…",{"value":88,"source":52,"evidence":89},"DynamoDB",[90],{"id":85,"by":10,"text":86},{"value":92,"source":52,"evidence":93},"AWS",[94],{"id":85,"by":10,"text":86},"unknown","beta",{"praise":98,"objections":118,"requests":162,"questions":180,"alternatives":199},[99,111],{"value":100,"source":101,"evidence":102},"Good idea that addresses a real problem in ledger design","commenter",[103,107],{"id":104,"by":105,"text":106},"23356708","arthurcolle","This is a great idea, and I think you should pursue it. Immutability of transactions is obviously a fundamental necessity and coupling this with GraphQL seems like a great fit.",{"id":108,"by":109,"text":110},"23354245","seancoleman","I can’t count how many times I’ve individually solved this problem for various companies, and fixed broken ledger systems. I’m currently dealing with the terrible legacy…",{"value":112,"source":101,"evidence":113},"Clean landing page design",[114],{"id":115,"by":116,"text":117},"23365965","bluewalt","How did you build the landing page? (any tool?) I like the sleek style, it reminds me Stripe pages.",[119,130,141,152],{"value":120,"source":101,"evidence":121},"Ledger should be a library, not a hosted service",[122,126],{"id":123,"by":124,"text":125},"23355547","tathougies","Why is something that should be a library over an ORM or other data store now a service product?",{"id":127,"by":128,"text":129},"23354327","rgbrgb","This is pretty cool, I'd wonder how it compares to an open source accounting library like double_entry. I guess I'd be hesitant to integrate with an external service if I could…",{"value":131,"source":101,"evidence":132},"Trust in outsourcing balance tracking is a hard sell",[133,137],{"id":134,"by":135,"text":136},"23354973","canterburry","We pretty much use a private blockchain for the very same purpose. Its internal, only our systems have access, each user\u002Fcustomer is auto created an account on signup, we hold…",{"id":138,"by":139,"text":140},"23360631","bhargav","Money and keeping track of it is a big problem. Depending on your problem though, its not fully always in your control. For example, we integrate with a discount calculation…",{"value":142,"source":101,"evidence":143},"Sample code example does not run",[144,148],{"id":145,"by":146,"text":147},"23355167","bbrinx","When I run the example code I get \"Error: Cannot find module 'decimals'\". I'm on latest Chrome macOS",{"id":149,"by":150,"text":151},"23355190","forthwall","Looks pretty cool and useful. Only note is that the runkit environment doesn't seem to be working. \"Error: Cannot find module 'decimals'\"",{"value":153,"source":101,"evidence":154},"SQL tables can do this without a dedicated service",[155,159],{"id":156,"by":157,"text":158},"23355562","justsomeuser","How would this be better than designing a simple SQL schema, and then generating the ledger as a report?",{"id":160,"by":157,"text":161},"23356216","I think that the people you are targeting (developers) do not care or know about the issues you are solving, and they also have the skill to make their own thing - its too close…",[163,168,176],{"value":164,"source":101,"evidence":165},"Fix the broken sample code",[166,167],{"id":145,"by":146,"text":147},{"id":149,"by":150,"text":151},{"value":169,"source":101,"evidence":170},"Explain common issues and compare with simple SQL approach",[171,172],{"id":160,"by":157,"text":161},{"id":173,"by":174,"text":175},"23355594","jFriedensreich","Not to be \"that guy\", but if your pitch is that you can keep money transactions consistent, also make the use of semicolons on the landing page example consistent. ;) Apart from…",{"value":177,"source":101,"evidence":178},"Address compliance and auditing concerns",[179],{"id":138,"by":139,"text":140},[181,188,195],{"value":182,"source":101,"evidence":183},"How are multi-currency accounts handled",[184],{"id":185,"by":186,"text":187},"23356014","scrollaway","Cool. Couple questions: 1. How do you handle \u002F plan to handle multi-currency accounts? (normalize to single currency vs. Selinger's approach…",{"value":189,"source":101,"evidence":190},"How will it be charged for",[191],{"id":192,"by":193,"text":194},"23354385","zomglings","Having gone through the pain of writing code like this in the past, this looks amazing. How are you planning to charge for decimals? In your code sample, you use from: 'Alice'…",{"value":196,"source":101,"evidence":197},"How it differs from double_entry library",[198],{"id":127,"by":128,"text":129},[200,204,211,217,224],{"value":201,"source":101,"evidence":202},"double_entry library",[203],{"id":127,"by":128,"text":129},{"value":205,"source":101,"evidence":206},"Xero",[207],{"id":208,"by":209,"text":210},"23354587","Ap0c","Why would you not use an accounting package like Xero to manage this?",{"value":212,"source":101,"evidence":213},"Frappe \u002F ERPNext",[214],{"id":215,"by":10,"text":216},"23355474","Interesting, thanks!! I know Frappe, it's from the creators of ERPNext. They are more like a full-suite accounting tool, like Mint, as you mentioned. Decimals.app is a…",{"value":218,"source":101,"evidence":219},"SubLedger",[220],{"id":221,"by":222,"text":223},"23357348","RileyJames","SubLedger was another startup in this space a few years ago, which I thought had the right idea. But they didnt really follow through. They seemed to focus on uber and their ilk…",{"value":225,"source":101,"evidence":226},"dotledger",[227],{"id":228,"by":229,"text":230},"23359261","nnn1234","didnt ledger cli try this with dot ledger that was used by hackclub?",{"comments":232,"answered":233,"key":234},36,16,[235,238,241],{"id":236,"text":237},"23354675","Interesting! I would love to talk to you about the experience, can we have have a quick chat?",{"id":239,"text":240},"23355379","Thanks so much! Didn't know them, I will reach out. Do you know if they completely shut it down?",{"id":242,"text":243},"23355196","Completely understand. This is a normal concern for new technology, not every company is an early adopter. The same way Lyft would not even consider using Stripe in its first two…",{"commenters":245,"max_depth":31,"maker_replies":232,"first_comment_mins":246,"lifespan_hours":247},44,21,111,[249,253,255,258,261,263,265,266,269,271,275,278,282,285,288,291,294,297,300,302,303,306,307,309,312,313,316,318,322,325,328,331,333,335,337,339,342,344,347,349,351,353,355,357,360,362,364,366,368,371,373,374,375,377,379,381,382,384,387,390,392,395,397,398,399,401,403,404,406,408,410,413,415,417,420,422,425,427,429,432,434,436,438,440,442,446,448,450,454,458,460,462,464,467,470,472,474,476,479,481,483,485],[250,41,33,251,252,41],"23354641","project\u002Fneutral\u002Fidea","joshuakelly",[236,41,41,254,10,43],"maker\u002Fneutral\u002Fnone",[256,41,41,257,252,41],"23354686","commenter\u002Fneutral\u002Fnone",[259,41,33,251,260,41],"23354692","vangale",[239,41,41,262,10,43],"other\u002Fneutral\u002Fnone",[134,43,43,264,135,41],"project\u002Fcritical\u002Fprivacy",[242,43,41,257,10,43],[267,43,41,262,268,41],"23355284","Nextgrid",[270,43,41,262,10,43],"23355362",[272,43,41,273,274,41],"23356283","other\u002Fneutral\u002Fpricing","sky_rw",[276,43,41,273,277,41],"23356321","traek",[279,43,43,280,281,41],"23357091","project\u002Fcritical\u002Fidea","omarish",[283,43,43,280,284,41],"23357280","IMTDb",[286,43,33,251,287,41],"23357418","jonahbenton",[289,43,41,290,10,43],"23357430","project\u002Fneutral\u002Fdesign",[292,43,41,262,293,41],"23358628","ethn",[295,43,33,290,296,41],"23357451","putsjoe",[298,43,33,290,299,41],"23358322","AtHeartEngineer",[301,43,41,257,229,41],"23359245",[127,38,33,251,128,41],[304,38,41,262,305,41],"23354647","theturtletalks",[215,38,41,257,10,43],[308,38,41,257,10,43],"23355438",[310,38,33,251,311,41],"23356027","chrischen",[108,33,33,290,109,41],[314,33,33,315,193,41],"23354362","project\u002Fneutral\u002Fdocs",[317,33,41,290,10,43],"23354519",[319,33,43,320,321,41],"23356548","project\u002Fcritical\u002Fdesign","pbreit",[323,33,41,257,324,41],"23358158","WrtCdEvrydy",[326,33,41,257,327,41],"23358381","ajnin",[329,33,41,262,330,41],"23374339","mortin",[145,46,43,332,146,41],"project\u002Fcritical\u002Fexecution",[334,46,41,254,10,43],"23355482",[173,39,33,336,174,41],"project\u002Fmixed\u002Fdocs",[338,39,41,254,10,43],"23355678",[340,39,33,315,341,41],"23356226","ncallaway",[343,39,41,251,10,43],"23356558",[192,345,39,346,193,41],6,"project\u002Fpositive\u002Fdocs",[348,345,43,332,193,41],"23354424",[350,345,41,254,10,43],"23354454",[352,345,41,290,10,43],"23354441",[354,345,33,315,193,41],"23354529",[68,345,41,356,10,43],"project\u002Fneutral\u002Fpricing",[358,345,39,359,193,41],"23356052","project\u002Fpositive\u002Fnone",[361,345,41,257,10,43],"23356319",[363,345,41,257,193,41],"23356664",[365,345,41,254,10,43],"23356951",[367,345,41,257,193,41],"23358337",[149,369,33,370,150,41],7,"project\u002Fmixed\u002Fexecution",[372,369,41,254,10,43],"23355200",[123,31,43,280,124,41],[62,31,41,251,10,43],[376,31,43,280,124,41],"23356024",[378,31,41,251,10,43],"23356295",[185,380,33,290,186,41],9,[85,380,41,290,10,43],[138,383,43,264,139,41],10,[385,383,41,386,10,43],"23361328","project\u002Fneutral\u002Fprivacy",[221,388,33,389,222,41],11,"project\u002Fmixed\u002Fidea",[391,388,41,251,10,43],"23357395",[393,388,41,257,394,41],"23358289","andy_ppp",[396,388,41,262,10,43],"23360066",[74,34,33,254,75,41],[78,34,41,254,10,43],[156,400,33,251,157,41],13,[402,400,41,254,10,43],"23355733",[160,400,43,280,157,41],[405,400,41,257,10,43],"23356622",[407,400,41,257,157,41],"23360225",[409,400,33,251,287,41],"23355954",[411,400,41,257,412,41],"23356093","zo1",[414,400,41,257,287,41],"23356374",[416,400,41,257,412,41],"23362686",[418,400,33,251,419,41],"23356097","emadda",[421,400,41,257,287,41],"23356333",[423,400,33,251,424,41],"23356114","VWWHFSfQ",[426,400,33,251,287,41],"23356276",[428,400,41,257,424,41],"23357560",[430,400,41,431,10,43],"23356448","project\u002Fneutral\u002Fexecution",[433,400,33,251,287,41],"23356593",[435,400,41,431,10,43],"23356644",[437,400,43,332,293,41],"23358693",[439,400,41,431,10,43],"23360096",[441,400,43,332,293,41],"23363545",[443,17,39,444,445,41],"23360414","project\u002Fpositive\u002Fidea","Gepsens",[447,17,41,444,10,43],"23360533",[449,17,33,251,445,41],"23362411",[451,452,39,359,453,41],"23401768",15,"collinglass",[455,233,33,456,457,41],"23356710","project\u002Fneutral\u002Fnone","venantius",[459,233,41,257,10,43],"23356854",[208,461,33,251,209,41],17,[463,461,41,251,10,43],"23354645",[465,461,39,466,209,41],"23354694","maker\u002Fpositive\u002Fnone",[468,461,41,262,469,41],"23356628","howmayiannoyyou",[471,461,41,251,10,43],"23356754",[104,473,39,444,105,41],18,[475,473,41,257,10,43],"23356875",[115,477,39,478,116,41],19,"project\u002Fpositive\u002Fdesign",[480,477,41,290,10,43],"23366150",[482,477,39,466,116,41],"23374220",[228,484,33,251,229,41],20,[486,484,41,251,10,43],"23360119",[],[489,494,498,503,508,513],{"id":490,"name":491,"points":492,"category":493},"23339244","RoughNotation",696,"dev_tools",{"id":495,"name":496,"points":497,"category":493},"23366532","Simpdf",327,{"id":499,"name":500,"points":501,"category":502},"23370646","WiFi Card",305,"productivity",{"id":504,"name":505,"points":506,"category":507},"23392049","HN Blogs",289,"learning_science",{"id":509,"name":510,"points":511,"category":512},"23408144","Virus Cafe",278,"consumer_social",{"id":514,"name":515,"points":516,"category":493},"23363767","git-fuzzy",251,false,"v2",{"id":520,"name":5,"line":6,"ai":517,"cat":19,"year":12,"points":13,"comments":14,"rec":28,"s":521,"top":17,"kw":522,"maker":10,"domain":523,"tier":18,"attempts":41,"strip":524,"url":-1,"mix":525,"praise":100,"objection":120,"sub":20},23353970,-0.08,[23,24,25,26,27],"","3310113303101351350113133313033315435555",[31,32,33,34],1793991010475]