[{"data":1,"prerenderedAt":347},["ShallowReactive",2],{"project-25995838":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":27,"sentiment":28,"stance_mix":29,"scored_comments":18,"aspects":33,"strip":38,"post_text":41,"what":42,"said":74,"maker_in_thread":182,"shape":188,"grid":192,"attempts":309,"same_week":310,"maker_shows":40,"maker_hidden":339,"reader_version":340,"card":341},"25995838","klog","Time tracking with plain text files","title","Show HN: Time tracking with plain text files","https:\u002F\u002Fgithub.com\u002Fjotaen\u002Fklog","github.com","jotaen",1612223965,2021,94,51,558,2533,23,"notable","productivity","time tracking","cli",[21,24,25,26],"plain text","timesheet","command line","loved",0.351,{"positive":30,"neutral":31,"mixed":32,"critical":32},10,11,1,{"idea":34,"design":37},{"positive":35,"critical":36},7,0,{"positive":36,"critical":32},[36,39,39,39,36,40,36,36,40,40,39,40,36,40,32,40,36,40,39,40,36,36,36,36,36,40,39,36,36,36,40,40,36,39,36,40,39,39,36,39],5,3,null,{"problem":43,"audience":50,"pricing":41,"motivation":58,"time_to_build":41,"stack":62,"openness":71,"stage":72,"team_size":73},{"value":44,"source":45,"evidence":46},"Tracking time in a simple, human-readable plain text format and evaluating totals","maker",[47],{"id":48,"by":11,"text":49},"25995844","Hello HN! As a daily user (and enthusiast) of plain-text file formats such as markdown, ledger or todo.txt, I thought that there should also exist an equally simple way for…",{"value":51,"source":52,"evidence":53},"Plain-text enthusiasts and people who track working hours","inferred",[54,55],{"id":48,"by":11,"text":49},{"id":56,"by":11,"text":57},"25996822","Yes, I use it regularly to log my working hours since ~2 months. However, initially I started with a different format which was basically just a YAML schema. That worked well for…",{"value":59,"source":45,"evidence":60},"Wanted a simple plain-text way to track time, like markdown and ledger for notes",[61],{"id":48,"by":11,"text":49},[63],{"value":64,"source":65,"evidence":66},"Go","commenter",[67],{"id":68,"by":69,"text":70},"26000176","jhunter1016","Also just realized you wrote it in Go. I’ve been slowly trying to pick up Go myself and digging through your source could help.","open_source","launched","unknown",{"praise":75,"objections":96,"requests":107,"questions":133,"alternatives":148},[76,90],{"value":77,"source":65,"evidence":78},"Simple, readable plain text format",[79,83,86],{"id":80,"by":81,"text":82},"25996725","asciident","This looks great, plain-text is underrated. Do you use this yourself, and for how long? Your format looks like a slightly more strict version of this one here:…",{"id":84,"by":69,"text":85},"26000161","Really love this. I try to keep my contracting work time tracking as simple as possible, but I really hate using the spreadsheet I use now. Going to give this a shot!",{"id":87,"by":88,"text":89},"25997695","keyle","This is a fantastic idea! I'm going to write a similar one for myself. It never occurred to me that I could use a markdown file as a data files to record time against. I keep a…",{"value":91,"source":45,"evidence":92},"Good fit for billing and invoices from monthly files",[93],{"id":94,"by":11,"text":95},"25996859","Same for me – I have one file per client per month. At the end of the month I do `klog eval 2020-12.klg` and copy&paste the result to the invoice. Do you have that Perl script…",[97],{"value":98,"source":65,"evidence":99},"Whitespace indentation syntax is fragile when copying blocks",[100,104],{"id":101,"by":102,"text":103},"26004494","forgotmypw17","Cool project! Thank you for sharing, and for using .txt as data format. I think it's by far the most resilient and compatible, and the least user-surprising data format we have…",{"id":105,"by":102,"text":106},"26006621","That's what I'm talking about. Now, imagine you take that block and copy it from one text file and into another. The meaning is now completely lost. I think that using lines as…",[108,118],{"value":109,"source":65,"evidence":110},"Warning for entries over 24 hours",[111,114],{"id":112,"by":11,"text":113},"25997969","E.g. say you want to take over 50h worth of time from somewhere else into a new `.klg` file, then you would be able to note that down under a single record. My thought was that…",{"id":115,"by":116,"text":117},"26013171","bombcar","The warning sounds good but that use case makes sense - often it's better to allow \"slightly unclean\" data to make the format work better than to demand that someone work out how…",{"value":119,"source":65,"evidence":120},"Integration with ticket trackers and sync apps",[121,125,129],{"id":122,"by":123,"text":124},"26000746","jamil7","Awesome, I wanted to build exactly this and found this project. Would like to build a glossy client for it.",{"id":126,"by":127,"text":128},"25996760","ghartog","I see #tagging capabilities. When work requires time tracking, an entry usually corresponds to a reference ticket number and\u002For git hash. In a unix|pipe spirit, then posting this…",{"id":130,"by":131,"text":132},"25999352","berkes","Thanks for building this! I'm especially excited about the \"file format\" part! Hope others can implement extra clients around this. I could imagine an android app with…",[134,141],{"value":135,"source":65,"evidence":136},"Why plain text instead of sqlite",[137],{"id":138,"by":139,"text":140},"26056972","bu-da","Looks interesting! Out of curiosity, why didn't you choose sqlite instead of a plaintext format? With sqlite the users could write their own queries to get the information they…",{"value":142,"source":65,"evidence":143},"What the difference is from timewarrior",[144],{"id":145,"by":146,"text":147},"25997037","dpcx","I'm a big fan of time tracking for personal reasons. Does this give something that timewarrior[0] doesn't? [0]: https:\u002F\u002Ftimewarrior.net",[149,160,168,175],{"value":150,"source":65,"evidence":151},"org-mode clock-in",[152,156],{"id":153,"by":154,"text":155},"25996173","hprotagonist","So far i’ve been happy with ``` org-clock-in ``` https:\u002F\u002Forgmode.org\u002Fmanual\u002FClocking-commands.html#Clocking-commands but i know some taskwarrior folks too. what is new and cool…",{"id":157,"by":158,"text":159},"25997053","robertkrahn01","I use emacs org mode with the built-in time tracking features (org-clock-in). A while ago I built an analyzer for org files that allows to spice and dice how you spent your time:…",{"value":161,"source":65,"evidence":162},"Timewarrior",[163,164],{"id":145,"by":146,"text":147},{"id":165,"by":166,"text":167},"25997789","gregopet","At least take a look at how Timewarrior stores things, maybe you will get some ideas: https:\u002F\u002Ftimewarrior.net\u002Fdocs\u002Ffiles.html",{"value":169,"source":65,"evidence":170},"ledger timetracking",[171],{"id":172,"by":173,"text":174},"25996863","7kay","This reminded me of ledger, the plain text accounting tool. FWIW, ledger has time tracking and billing capabilities, too. For example:…",{"value":176,"source":65,"evidence":177},"gtimelog",[178],{"id":179,"by":180,"text":181},"25997627","ximm","I have been using the format used by gtimelog[1] for years. It has the benefit of adding one entry per line, so processing is extremely simple. [1]:…",{"comments":183,"answered":35,"key":184},15,[185,186,187],{"id":48,"text":49},{"id":56,"text":57},{"id":94,"text":95},{"commenters":189,"max_depth":190,"maker_replies":183,"first_comment_mins":32,"lifespan_hours":191},31,6,163,[193,195,199,201,203,206,207,211,214,215,218,222,224,226,227,229,232,234,236,238,239,241,242,244,246,249,253,256,258,262,263,266,267,269,270,272,274,276,278,280,282,284,287,290,294,296,298,300,301,304,307],[48,36,36,194,11,32],"project\u002Fneutral\u002Fidea",[196,36,39,197,198,36],"25996134","project\u002Fpositive\u002Fnone","AmpsterMan",[80,36,39,200,81,36],"project\u002Fpositive\u002Fidea",[56,36,36,202,11,32],"maker\u002Fneutral\u002Fnone",[204,36,39,200,205,36],"25996768","masswerk",[94,36,36,202,11,32],[208,36,40,209,210,36],"25998598","project\u002Fneutral\u002Fnone","bmn__",[212,36,36,213,205,36],"26047152","other\u002Fneutral\u002Fnone",[157,36,36,213,158,36],[216,36,36,213,217,36],"25997417","podiki",[219,36,40,220,221,36],"25997709","project\u002Fneutral\u002Fdesign","timpark",[223,36,40,194,116,36],"25997794",[112,36,36,225,11,32],"maker\u002Fneutral\u002Fidea",[115,36,39,200,116,36],[101,36,40,228,102,36],"project\u002Fmixed\u002Fdesign",[230,36,36,231,11,32],"26004871","maker\u002Fneutral\u002Fdesign",[233,36,40,220,102,36],"26004921",[235,36,36,220,11,32],"26004993",[105,36,32,237,102,36],"project\u002Fcritical\u002Fdesign",[153,32,40,202,154,36],[240,32,36,225,11,32],"25996315",[165,32,40,209,166,36],[130,243,39,200,131,36],2,[245,243,36,225,11,32],"25999601",[247,40,40,194,248,36],"25997483","bachmeier",[250,40,36,251,252,36],"25997746","commenter\u002Fneutral\u002Fnone","onion2k",[254,40,36,251,255,36],"25997837","alpaca128",[257,40,36,202,11,32],"26000434",[259,260,36,213,261,36],"25998044",4,"rlv-dan",[172,39,36,213,173,36],[264,39,36,213,265,36],"26001572","anarcat",[126,190,40,194,127,36],[268,190,36,225,11,32],"25996875",[87,35,39,200,88,36],[271,35,36,231,11,32],"25997998",[273,35,36,251,11,32],"26000534",[275,35,36,213,88,36],"26012555",[277,35,36,251,11,32],"26013025",[179,279,40,220,180,36],8,[138,281,40,220,139,36],9,[283,281,36,231,11,32],"26068732",[285,30,36,213,286,36],"25998457","scooble",[288,31,39,200,289,36],"25998031","raleighm",[291,292,36,213,293,36],"26068780",12,"maxerickson",[145,295,40,194,146,36],13,[297,295,36,225,11,32],"25997230",[84,299,39,197,69,36],14,[68,299,39,197,69,36],[302,299,36,213,303,36],"26000744","2OEH8eoCRo0",[305,183,36,213,306,36],"25996521","wakatime",[122,308,39,200,123,36],16,[],[311,316,320,325,330,335],{"id":312,"name":313,"points":314,"category":315},"26013715","Haven",547,"web_saas",{"id":317,"name":318,"points":319,"category":20},"25948797","Loudreader",297,{"id":321,"name":322,"points":323,"category":324},"25939042","kindle-dash",284,"hardware",{"id":326,"name":327,"points":328,"category":329},"25967641","labml.ai",251,"learning_science",{"id":331,"name":332,"points":333,"category":334},"25936042","stonks.news",234,"finance_crypto",{"id":336,"name":337,"points":338,"category":329},"26018098","YTT Tech",206,false,"v2",{"id":342,"name":5,"line":6,"ai":339,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":343,"top":18,"kw":344,"maker":11,"domain":10,"tier":19,"attempts":36,"strip":345,"url":9,"mix":346,"praise":77,"objection":98,"sub":21},25995838,0.35,[21,24,25,26],"0555030033530313035300000350003305035505",[30,31,32,32],1794036602384]