[{"data":1,"prerenderedAt":216},["ShallowReactive",2],{"project-49276673":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":5,"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":27,"sentiment":28,"stance_mix":29,"scored_comments":33,"aspects":34,"strip":39,"post_text":40,"what":41,"said":60,"maker_in_thread":133,"shape":144,"grid":149,"attempts":178,"same_week":179,"maker_shows":31,"maker_hidden":209,"reader_version":210,"card":211},"49276673","timer.jotaen.net","Programmable timer web app (for gym workouts or stretching sessions)","title","Show HN: Programmable timer web app (for gym workouts or stretching sessions)","https:\u002F\u002Ftimer.jotaen.net","jotaen",1786559272,2026,30,13,1629,4366,38,"shown","dev_tools","timer web app","web_app",[23,24,25,26],"programmable timer","workout timer","interval timer","stretching timer","loved",0.45,{"positive":30,"neutral":31,"mixed":32,"critical":32},5,3,0,8,{"idea":35,"docs":37,"performance":38},{"positive":36,"critical":32},2,{"positive":32,"critical":32},{"positive":32,"critical":32},[30,30,32,31,31,30,32,31,32,32,32,30,30],"Over the last couple of months, I’ve been building a timer web app for myself that I use for workout and stretching sessions. My main use-case is gym routines that consist of repeatable sequences, e.g. where you are holding certain positions for a set time (rinse and repeat). The app counts down the program, beeps, and reads the activities out loud.\n\nTwo things (I suppose) are special about it:\n\n- The timers are “programmable”, so you can freely express your own routines and procedures in a declarative notation.\n\n- The app is all static (no backend): the entire program is encoded in the URL an",{"problem":42,"audience":48,"pricing":52,"motivation":53,"time_to_build":52,"stack":57,"openness":58,"stage":59,"team_size":58},{"value":43,"source":44,"evidence":45},"Timing repeatable gym routines and stretching sequences with holds","maker",[46],{"id":47},"post",{"value":49,"source":44,"evidence":50},"People doing gym workouts or stretching sessions",[51],{"id":47},null,{"value":54,"source":44,"evidence":55},"Maker built it for their own workout and stretching sessions",[56],{"id":47},[],"unknown","launched",{"praise":61,"objections":85,"requests":100,"questions":113,"alternatives":125},[62,74],{"value":63,"source":64,"evidence":65},"Demo makes the idea feel compelling and useful","commenter",[66,70],{"id":67,"by":68,"text":69},"49279636","r3trohack3r","My first reaction to this before clicking the link: why would anyone want a programmable timer? After clicking the link and seeing the demo: man, I’ve always wanted a…",{"id":71,"by":72,"text":73},"49280440","benn0","I read this comment, which convinced me to click the link, and had the exact same reaction. Such a compelling idea - feels completely obvious after seeing the demo that this is…",{"value":75,"source":64,"evidence":76},"Nice work",[77,81],{"id":78,"by":79,"text":80},"49284301","librasteve","nice work … would love to have this on my apul watch",{"id":82,"by":83,"text":84},"49280929","vibrio","Nice work! Love it.",[86,93],{"value":87,"source":64,"evidence":88},"Name and framing as a timer web app is unclear",[89],{"id":90,"by":91,"text":92},"49281612","altmanaltman","I think people hear timer web app and they immediately have the reaction like why the f will anyone use this, but your idea is pretty cool in reality. Ideally should not call it…",{"value":94,"source":64,"evidence":95},"Web app must reload each time and lacks offline use compared to native",[96],{"id":97,"by":98,"text":99},"49282532","aitchnyu","Tested, browsed to another tab, switched to another app, turned off screen. Are there any limitations compared to a native app? It needs an example of nested loop and skipping…",[101,105,109],{"value":102,"source":64,"evidence":103},"Better name or tagline that explains it is programmable",[104],{"id":90,"by":91,"text":92},{"value":106,"source":64,"evidence":107},"Example of nested loop and skipping last item",[108],{"id":97,"by":98,"text":99},{"value":110,"source":64,"evidence":111},"Support for Apple Watch",[112],{"id":78,"by":79,"text":80},[114,118],{"value":115,"source":64,"evidence":116},"Are there limitations compared to a native app",[117],{"id":97,"by":98,"text":99},{"value":119,"source":64,"evidence":120},"Whether the project is still maintained beyond x[it]",[121],{"id":122,"by":123,"text":124},"49279879","aquariusDue","Oh that's pretty cool! I also like how you can bookmark timers to save them and then keep a list of them for various activities\u002Fpurposes. Also when I saw the HN post I knew…",[126],{"value":127,"source":64,"evidence":128},"Pith-based simple non-programmable timer by another commenter",[129],{"id":130,"by":131,"text":132},"49302596","gabrielsroka","Years ago, I wrote something similar but simpler and non-programmable using Pith (JS with Python-like syntax). https:\u002F\u002Fgabrielsroka.github.io\u002Fwebpages\u002Fpith.html ``` cancel =…",{"comments":31,"answered":31,"key":134},[135,138,141],{"id":136,"text":137},"49281037","I’m wondering whether anything could be done in terms of name\u002F“tagline” to clarify this? (Or maybe this is just a peculiar niche?)",{"id":139,"text":140},"49279943","I’m still using [x]it! every day for tracking daily todos or various check lists (e.g. tracking payments or packing lists) – same for klog, by the way, which I use for time…",{"id":142,"text":143},"49283254","> Are there any limitations compared to a native app? Probably only minor ones; three come to mind: - The web app has to be loaded every time (~700K total right now), whereas the…",{"commenters":145,"max_depth":146,"maker_replies":31,"first_comment_mins":147,"lifespan_hours":148},11,4,260,48,[150,152,153,156,158,160,162,164,166,168,172,175,177],[67,32,30,151,68,32],"project\u002Fpositive\u002Fidea",[71,32,30,151,72,32],[136,32,32,154,10,155],"maker\u002Fneutral\u002Fdocs",1,[90,32,31,157,91,32],"project\u002Fneutral\u002Fdocs",[130,155,31,159,131,32],"project\u002Fneutral\u002Fnone",[122,36,30,161,123,32],"maker\u002Fpositive\u002Fnone",[139,36,32,163,10,155],"other\u002Fneutral\u002Fnone",[97,31,31,165,98,32],"project\u002Fneutral\u002Fperformance",[142,31,32,167,10,155],"maker\u002Fneutral\u002Fexecution",[169,31,32,170,171,32],"49285177","commenter\u002Fneutral\u002Fexecution","perilunar",[173,31,32,170,174,32],"49286302","unfinished_thum",[78,146,30,176,79,32],"project\u002Fpositive\u002Fnone",[82,30,30,176,83,32],[],[180,185,190,195,200,205],{"id":181,"name":182,"points":183,"category":184},"49246804","Needle2",537,"ai",{"id":186,"name":187,"points":188,"category":189},"49226623","Photosynthesis",329,"creative",{"id":191,"name":192,"points":193,"category":194},"49270040","Woxi",314,"languages",{"id":196,"name":197,"points":198,"category":199},"49197137","Altar II",306,"hardware",{"id":201,"name":202,"points":203,"category":204},"49251179","everycube.alen.is",295,"games",{"id":206,"name":207,"points":208,"category":189},"49246366","Eigendrum",243,false,"v2",{"id":212,"name":5,"line":6,"ai":209,"cat":19,"year":12,"points":13,"comments":14,"rec":27,"s":28,"top":17,"kw":213,"maker":10,"domain":5,"tier":18,"attempts":32,"strip":214,"url":9,"mix":215,"praise":63,"objection":87,"sub":20},49276673,[23,24,25,26],"5503350300055",[30,31,32,32],1794036707695]